PHP 8.0.30
Preview: CustomerAccount.php Size: 8.58 KB
/home/certprox/zang.certproxywizard.com/wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CustomerAccount.php

<?php

namespace Automattic\WooCommerce\Blocks\BlockTypes;

use Automattic\WooCommerce\Blocks\Utils\StyleAttributesUtils;
use Automattic\WooCommerce\Blocks\Utils\BlockHooksTrait;

/**
 * CustomerAccount class.
 */
class CustomerAccount extends AbstractBlock {
	use BlockHooksTrait;

	const TEXT_ONLY    = 'text_only';
	const ICON_ONLY    = 'icon_only';
	const DISPLAY_ALT  = 'alt';
	const DISPLAY_LINE = 'line';

	/**
	 * Block name.
	 *
	 * @var string
	 */
	protected $block_name = 'customer-account';

	/**
	 * Block Hook API placements.
	 *
	 * @var array
	 */
	protected $hooked_block_placements = array(
		array(
			'position' => 'after',
			'anchor'   => 'core/navigation',
			'area'     => 'header',
			'callback' => 'should_unhook_block',
			'version'  => '8.4.0',
		),
	);

	/**
	 * Initialize this block type.
	 */
	protected function initialize() {
		parent::initialize();
		/**
		 * The hooked_block_{$hooked_block_type} filter was added in WordPress 6.5.
		 * We are the only code adding the filter 'hooked_block_woocommerce/customer-account'.
		 * Using has_filter() for a compatibility check won't work because add_filter() is used in the same file.
		 */
		if ( version_compare( get_bloginfo( 'version' ), '6.5', '>=' ) ) {
			add_filter( 'hooked_block_woocommerce/customer-account', array( $this, 'modify_hooked_block_attributes' ), 10, 5 );
			add_filter( 'hooked_block_types', array( $this, 'register_hooked_block' ), 9, 4 );
		}
	}

	/**
	 * Callback for the Block Hooks API to modify the attributes of the hooked block.
	 *
	 * @param array|null                      $parsed_hooked_block The parsed block array for the given hooked block type, or null to suppress the block.
	 * @param string                          $hooked_block_type   The hooked block type name.
	 * @param string                          $relative_position   The relative position of the hooked block.
	 * @param array                           $parsed_anchor_block The anchor block, in parsed block array format.
	 * @param WP_Block_Template|WP_Post|array $context             The block template, template part, `wp_navigation` post type,
	 *                                                             or pattern that the anchor block belongs to.
	 * @return array|null
	 */
	public function modify_hooked_block_attributes( $parsed_hooked_block, $hooked_block_type, $relative_position, $parsed_anchor_block, $context ) {
		$parsed_hooked_block['attrs']['displayStyle'] = 'icon_only';
		$parsed_hooked_block['attrs']['iconStyle']    = 'line';
		$parsed_hooked_block['attrs']['iconClass']    = 'wc-block-customer-account__account-icon';

		$customer_account_block_font_size = wp_get_global_styles( array( 'blocks', 'woocommerce/customer-account', 'typography', 'fontSize' ) );

		if ( ! is_string( $customer_account_block_font_size ) ) {
			$navigation_block_font_size = wp_get_global_styles( array( 'blocks', 'core/navigation', 'typography', 'fontSize' ) );

			if ( is_string( $navigation_block_font_size ) ) {
				$parsed_hooked_block['attrs']['style']['typography']['fontSize'] = $navigation_block_font_size;
			}
		}

		return $parsed_hooked_block;
	}

	/**
	 * Callback for the Block Hooks API to determine if the block should be auto-inserted.
	 *
	 * @param array                             $hooked_blocks An array of block slugs hooked into a given context.
	 * @param string                            $position      Position of the block insertion point.
	 * @param string                            $anchor_block  The block acting as the anchor for the inserted block.
	 * @param array|\WP_Post|\WP_Block_Template $context       Where the block is embedded.
	 *
	 * @return array
	 */
	protected function should_unhook_block( $hooked_blocks, $position, $anchor_block, $context ) {
		$block_name      = $this->namespace . '/' . $this->block_name;
		$block_is_hooked = in_array( $block_name, $hooked_blocks, true );

		if ( $block_is_hooked ) {
			$active_theme   = wp_get_theme()->get( 'Name' );
			$exclude_themes = array( 'Twenty Twenty-Two', 'Twenty Twenty-Three' );

			if ( in_array( $active_theme, $exclude_themes, true ) ) {
				$key = array_search( $block_name, $hooked_blocks, true );
				unset( $hooked_blocks[ $key ] );
			}
		}

		return $hooked_blocks;
	}

	/**
	 * Render the block.
	 *
	 * @param array    $attributes Block attributes.
	 * @param string   $content Block content.
	 * @param WP_Block $block Block instance.
	 *
	 * @return string Rendered block output.
	 */
	protected function render( $attributes, $content, $block ) {
		$classes_and_styles = StyleAttributesUtils::get_classes_and_styles_by_attributes( $attributes );

		$account_link = get_option( 'woocommerce_myaccount_page_id' ) ? wc_get_account_endpoint_url( 'dashboard' ) : wp_login_url();

		$allowed_svg = array(
			'svg'    => array(
				'class'   => true,
				'xmlns'   => true,
				'width'   => true,
				'height'  => true,
				'viewbox' => true,
			),
			'path'   => array(
				'd'         => true,
				'fill'      => true,
				'fill-rule' => true,
				'clip-rule' => true,
			),
			'circle' => array(
				'cx'           => true,
				'cy'           => true,
				'r'            => true,
				'stroke'       => true,
				'stroke-width' => true,
				'fill'         => true,
			),
		);

		// Only provide aria-label if the display style is icon only.
		$aria_label = self::ICON_ONLY === $attributes['displayStyle'] ? 'aria-label="' . esc_attr( $this->render_label() ) . '"' : '';

		$label_markup = self::ICON_ONLY === $attributes['displayStyle'] ? '' : '<span class="label">' . wp_kses( $this->render_label(), array() ) . '</span>';

		return "<div class='wp-block-woocommerce-customer-account " . esc_attr( $classes_and_styles['classes'] ) . "' style='" . esc_attr( $classes_and_styles['styles'] ) . "'>
			<a " . $aria_label . " href='" . esc_attr( $account_link ) . "'>
				" . wp_kses( $this->render_icon( $attributes ), $allowed_svg ) . $label_markup . '
			</a>
		</div>';
	}

	/**
	 * Gets the icon to render depending on the iconStyle and displayStyle.
	 *
	 * @param array $attributes Block attributes.
	 *
	 * @return string Label to render on the block
	 */
	private function render_icon( $attributes ) {
		if ( self::TEXT_ONLY === $attributes['displayStyle'] ) {
			return '';
		}

		if ( self::DISPLAY_LINE === $attributes['iconStyle'] ) {
			return '<svg class="' . $attributes['iconClass'] . '" viewBox="1 1 29 29" fill="none" xmlns="http://www.w3.org/2000/svg">
				<circle
					cx="16"
					cy="10.5"
					r="3.5"
					stroke="currentColor"
					stroke-width="2"
					fill="none"
				/>
				<path
					fill-rule="evenodd"
					clip-rule="evenodd"
					d="M11.5 18.5H20.5C21.8807 18.5 23 19.6193 23 21V25.5H25V21C25 18.5147 22.9853 16.5 20.5 16.5H11.5C9.01472 16.5 7 18.5147 7 21V25.5H9V21C9 19.6193 10.1193 18.5 11.5 18.5Z"
					fill="currentColor"
				/>
			</svg>';
		}

		if ( self::DISPLAY_ALT === $attributes['iconStyle'] ) {
			return '<svg class="' . $attributes['iconClass'] . '" xmlns="http://www.w3.org/2000/svg" viewBox="-4 -4 25 25">
				<path
					d="M9 0C4.03579 0 0 4.03579 0 9C0 13.9642 4.03579 18 9 18C13.9642 18 18 13.9642 18 9C18 4.03579 13.9642 0 9 0ZM9 4.32C10.5347 4.32 11.7664 5.57056 11.7664 7.08638C11.7664 8.62109 10.5158 9.85277 9 9.85277C7.4653 9.85277 6.23362 8.60221 6.23362 7.08638C6.23362 5.57056 7.46526 4.32 9 4.32ZM9 10.7242C11.1221 10.7242 12.96 12.2021 13.7937 14.4189C12.5242 15.5559 10.8379 16.238 9 16.238C7.16207 16.238 5.49474 15.5369 4.20632 14.4189C5.05891 12.2021 6.87793 10.7242 9 10.7242Z"
					fill="currentColor"
				/>
			</svg>';
		}

		return '<svg class="' . $attributes['iconClass'] . '" xmlns="http://www.w3.org/2000/svg" viewBox="-5 -5 25 25">
			<path
				fill-rule="evenodd"
				clip-rule="evenodd"
				d="M8.00009 8.34785C10.3096 8.34785 12.1819 6.47909 12.1819 4.17393C12.1819 1.86876 10.3096 0 8.00009 0C5.69055 0 3.81824 1.86876 3.81824 4.17393C3.81824 6.47909 5.69055 8.34785 8.00009 8.34785ZM0.333496 15.6522C0.333496 15.8444 0.489412 16 0.681933 16H15.3184C15.5109 16 15.6668 15.8444 15.6668 15.6522V14.9565C15.6668 12.1428 13.7821 9.73911 10.0912 9.73911H5.90931C2.21828 9.73911 0.333645 12.1428 0.333645 14.9565L0.333496 15.6522Z"
				fill="currentColor"
			/>
		</svg>';
	}

	/**
	 * Gets the label to render depending on the displayStyle.
	 *
	 * @return string Label to render on the block.
	 */
	private function render_label() {
		return get_current_user_id()
			? __( 'My Account', 'woocommerce' )
			: __( 'Login', 'woocommerce' );
	}

	/**
	 * Get the frontend script handle for this block type.
	 *
	 * @param string $key Data to get, or default to everything.
	 *
	 * @return null This block has no frontend script.
	 */
	protected function get_block_type_script( $key = null ) {
		return null;
	}
}

Directory Contents

Dirs: 5 × Files: 139

Name Size Perms Modified Actions
Accordion DIR
- drwxr-xr-x 2026-03-30 10:22:44
Edit Download
- drwxr-xr-x 2026-03-30 10:22:44
Edit Download
- drwxr-xr-x 2026-03-30 10:22:45
Edit Download
- drwxr-xr-x 2026-03-30 10:22:45
Edit Download
Reviews DIR
- drwxr-xr-x 2026-03-30 10:22:45
Edit Download
15.60 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
1.85 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
1.74 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
22.10 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
226 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
9.28 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
1.99 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
1.29 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
910 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
1.50 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
2.70 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
11.93 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
288 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
251 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
276 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
507 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
235 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
248 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
1.55 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
2.67 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
289 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
282 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
267 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
279 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
282 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
282 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
273 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
276 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
238 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
1.48 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
1.70 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
2.36 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
26.11 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1003 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
296 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
275 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
287 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
4.13 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
250 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
260 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
2.74 KB lrw-r--r-- 2026-03-30 10:22:44
Edit Download
298 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
301 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
294 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
279 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
294 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
294 B lrw-r--r-- 2026-03-30 10:22:44
Edit Download
285 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
288 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
253 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
272 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
278 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
275 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
278 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
247 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
250 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
3.03 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
12.62 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
3.58 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
7.97 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
8.58 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
3.23 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
235 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.79 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
775 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
2.72 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
13.88 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
3.33 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
238 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
3.45 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
376 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.89 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
34.92 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
2.24 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.97 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
6.51 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
5.63 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.51 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
12.61 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
2.02 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.50 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
2.28 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.55 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
3.36 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
705 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
6.17 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.25 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
783 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
2.08 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
444 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
12.41 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
12.75 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
733 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
2.48 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
16.03 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
2.51 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
12.74 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
5.65 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
4.69 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.45 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
6.97 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
5.36 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
7.10 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
3.79 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
9.93 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
6.62 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
18.47 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
6.49 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
7.95 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
4.18 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
8.76 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
3.55 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1009 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
448 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
761 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
4.72 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
27.80 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
6.09 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
5.46 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
3.76 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.77 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
2.69 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
2.05 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
3.49 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
3.31 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
5.68 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
5.96 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
7.34 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
2.23 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
5.79 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
619 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
424 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
704 B lrw-r--r-- 2026-03-30 10:22:45
Edit Download
5.24 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.31 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.30 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
6.60 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.34 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download
1.70 KB lrw-r--r-- 2026-03-30 10:22:45
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).