Current File : /home/bdmcricketindia.in/public_html/wp-includes/class-wp-block-patterns-registry.php
<?php
/**
 * Blocks API: WP_Block_Patterns_Registry class
 *
 * @package WordPress
 * @subpackage Blocks
 * @since 5.5.0
 */

/**
 * Class used for interacting with block patterns.
 *
 * @since 5.5.0
 */
#[AllowDynamicProperties]
final class WP_Block_Patterns_Registry {
	/**
	 * Registered block patterns array.
	 *
	 * @since 5.5.0
	 * @var array[]
	 */
	private $registered_patterns = array();

	/**
	 * Patterns registered outside the `init` action.
	 *
	 * @since 6.0.0
	 * @var array[]
	 */
	private $registered_patterns_outside_init = array();

	/**
	 * Container for the main instance of the class.
	 *
	 * @since 5.5.0
	 * @var WP_Block_Patterns_Registry|null
	 */
	private static $instance = null;

	/**
	 * Registers a block pattern.
	 *
	 * @since 5.5.0
	 * @since 5.8.0 Added support for the `blockTypes` property.
	 * @since 6.1.0 Added support for the `postTypes` property.
	 * @since 6.2.0 Added support for the `templateTypes` property.
	 * @since 6.5.0 Added support for the `filePath` property.
	 *
	 * @param string $pattern_name       Block pattern name including namespace.
	 * @param array  $pattern_properties {
	 *     List of properties for the block pattern.
	 *
	 *     @type string   $title         Required. A human-readable title for the pattern.
	 *     @type string   $content       Optional. Block HTML markup for the pattern.
	 *                                   If not provided, the content will be retrieved from the `filePath` if set.
	 *                                   If both `content` and `filePath` are not set, the pattern will not be registered.
	 *     @type string   $description   Optional. Visually hidden text used to describe the pattern
	 *                                   in the inserter. A description is optional, but is strongly
	 *                                   encouraged when the title does not fully describe what the
	 *                                   pattern does. The description will help users discover the
	 *                                   pattern while searching.
	 *     @type int      $viewportWidth Optional. The intended width of the pattern to allow for a scaled
	 *                                   preview within the pattern inserter.
	 *     @type bool     $inserter      Optional. Determines whether the pattern is visible in inserter.
	 *                                   To hide a pattern so that it can only be inserted programmatically,
	 *                                   set this to false. Default true.
	 *     @type string[] $categories    Optional. A list of registered pattern categories used to group
	 *                                   block patterns. Block patterns can be shown on multiple categories.
	 *                                   A category must be registered separately in order to be used here.
	 *     @type string[] $keywords      Optional. A list of aliases or keywords that help users discover
	 *                                   the pattern while searching.
	 *     @type string[] $blockTypes    Optional. A list of block names including namespace that could use
	 *                                   the block pattern in certain contexts (placeholder, transforms).
	 *                                   The block pattern is available in the block editor inserter
	 *                                   regardless of this list of block names.
	 *                                   Certain blocks support further specificity besides the block name
	 *                                   (e.g. for `core/template-part` you can specify areas
	 *                                   like `core/template-part/header` or `core/template-part/footer`).
	 *     @type string[] $postTypes     Optional. An array of post types that the pattern is restricted
	 *                                   to be used with. The pattern will only be available when editing one
	 *                                   of the post types passed on the array. For all the other post types
	 *                                   not part of the array the pattern is not available at all.
	 *     @type string[] $templateTypes Optional. An array of template types where the pattern fits.
	 *     @type string   $filePath      Optional. The full path to the file containing the block pattern content.
	 * }
	 * @return bool True if the pattern was registered with success and false otherwise.
	 */
	public function register( $pattern_name, $pattern_properties ) {
		if ( ! isset( $pattern_name ) || ! is_string( $pattern_name ) ) {
			_doing_it_wrong(
				__METHOD__,
				__( 'Pattern name must be a string.' ),
				'5.5.0'
			);
			return false;
		}

		if ( ! isset( $pattern_properties['title'] ) || ! is_string( $pattern_properties['title'] ) ) {
			_doing_it_wrong(
				__METHOD__,
				__( 'Pattern title must be a string.' ),
				'5.5.0'
			);
			return false;
		}

		if ( ! isset( $pattern_properties['filePath'] ) ) {
			if ( ! isset( $pattern_properties['content'] ) || ! is_string( $pattern_properties['content'] ) ) {
				_doing_it_wrong(
					__METHOD__,
					__( 'Pattern content must be a string.' ),
					'5.5.0'
				);
				return false;
			}
		}

		$pattern = array_merge(
			$pattern_properties,
			array( 'name' => $pattern_name )
		);

		$this->registered_patterns[ $pattern_name ] = $pattern;

		// If the pattern is registered inside an action other than `init`, store it
		// also to a dedicated array. Used to detect deprecated registrations inside
		// `admin_init` or `current_screen`.
		if ( current_action() && 'init' !== current_action() ) {
			$this->registered_patterns_outside_init[ $pattern_name ] = $pattern;
		}

		return true;
	}

	/**
	 * Unregisters a block pattern.
	 *
	 * @since 5.5.0
	 *
	 * @param string $pattern_name Block pattern name including namespace.
	 * @return bool True if the pattern was unregistered with success and false otherwise.
	 */
	public function unregister( $pattern_name ) {
		if ( ! $this->is_registered( $pattern_name ) ) {
			_doing_it_wrong(
				__METHOD__,
				/* translators: %s: Pattern name. */
				sprintf( __( 'Pattern "%s" not found.' ), $pattern_name ),
				'5.5.0'
			);
			return false;
		}

		unset( $this->registered_patterns[ $pattern_name ] );
		unset( $this->registered_patterns_outside_init[ $pattern_name ] );

		return true;
	}

	/**
	 * Retrieves the content of a registered block pattern.
	 *
	 * @since 6.5.0
	 *
	 * @param string $pattern_name      Block pattern name including namespace.
	 * @param bool   $outside_init_only Optional. Return only patterns registered outside the `init` action. Default false.
	 * @return string The content of the block pattern.
	 */
	private function get_content( $pattern_name, $outside_init_only = false ) {
		if ( $outside_init_only ) {
			$patterns = &$this->registered_patterns_outside_init;
		} else {
			$patterns = &$this->registered_patterns;
		}
		if ( ! isset( $patterns[ $pattern_name ]['content'] ) && isset( $patterns[ $pattern_name ]['filePath'] ) ) {
			ob_start();
			include $patterns[ $pattern_name ]['filePath'];
			$patterns[ $pattern_name ]['content'] = ob_get_clean();
			unset( $patterns[ $pattern_name ]['filePath'] );
		}
		return $patterns[ $pattern_name ]['content'];
	}

	/**
	 * Retrieves an array containing the properties of a registered block pattern.
	 *
	 * @since 5.5.0
	 *
	 * @param string $pattern_name Block pattern name including namespace.
	 * @return array Registered pattern properties.
	 */
	public function get_registered( $pattern_name ) {
		if ( ! $this->is_registered( $pattern_name ) ) {
			return null;
		}

		$pattern            = $this->registered_patterns[ $pattern_name ];
		$content            = $this->get_content( $pattern_name );
		$pattern['content'] = apply_block_hooks_to_content(
			$content,
			$pattern,
			'insert_hooked_blocks_and_set_ignored_hooked_blocks_metadata'
		);

		return $pattern;
	}

	/**
	 * Retrieves all registered block patterns.
	 *
	 * @since 5.5.0
	 *
	 * @param bool $outside_init_only Return only patterns registered outside the `init` action.
	 * @return array[] Array of arrays containing the registered block patterns properties,
	 *                 and per style.
	 */
	public function get_all_registered( $outside_init_only = false ) {
		$patterns      = $outside_init_only
				? $this->registered_patterns_outside_init
				: $this->registered_patterns;
		$hooked_blocks = get_hooked_blocks();

		foreach ( $patterns as $index => $pattern ) {
			$content                       = $this->get_content( $pattern['name'], $outside_init_only );
			$patterns[ $index ]['content'] = apply_block_hooks_to_content(
				$content,
				$pattern,
				'insert_hooked_blocks_and_set_ignored_hooked_blocks_metadata'
			);
		}

		return array_values( $patterns );
	}

	/**
	 * Checks if a block pattern is registered.
	 *
	 * @since 5.5.0
	 *
	 * @param string $pattern_name Block pattern name including namespace.
	 * @return bool True if the pattern is registered, false otherwise.
	 */
	public function is_registered( $pattern_name ) {
		return isset( $this->registered_patterns[ $pattern_name ] );
	}

	public function __wakeup() {
		if ( ! $this->registered_patterns ) {
			return;
		}
		if ( ! is_array( $this->registered_patterns ) ) {
			throw new UnexpectedValueException();
		}
		foreach ( $this->registered_patterns as $value ) {
			if ( ! is_array( $value ) ) {
				throw new UnexpectedValueException();
			}
		}
		$this->registered_patterns_outside_init = array();
	}

	/**
	 * Utility method to retrieve the main instance of the class.
	 *
	 * The instance will be created if it does not exist yet.
	 *
	 * @since 5.5.0
	 *
	 * @return WP_Block_Patterns_Registry The main instance.
	 */
	public static function get_instance() {
		if ( null === self::$instance ) {
			self::$instance = new self();
		}

		return self::$instance;
	}
}

/**
 * Registers a new block pattern.
 *
 * @since 5.5.0
 *
 * @param string $pattern_name       Block pattern name including namespace.
 * @param array  $pattern_properties List of properties for the block pattern.
 *                                   See WP_Block_Patterns_Registry::register() for accepted arguments.
 * @return bool True if the pattern was registered with success and false otherwise.
 */
function register_block_pattern( $pattern_name, $pattern_properties ) {
	return WP_Block_Patterns_Registry::get_instance()->register( $pattern_name, $pattern_properties );
}

/**
 * Unregisters a block pattern.
 *
 * @since 5.5.0
 *
 * @param string $pattern_name Block pattern name including namespace.
 * @return bool True if the pattern was unregistered with success and false otherwise.
 */
function unregister_block_pattern( $pattern_name ) {
	return WP_Block_Patterns_Registry::get_instance()->unregister( $pattern_name );
}
онлайн в казино.3928

онлайн в казино.3928

Авиатор игра онлайн в казино

▶️ ИГРАТЬ

Содержимое

В мире онлайн-казино постоянно появляются новые игры, которые привлекают игроков своей уникальной концепцией и динамикой. Авиатор игра онлайн – это новый проект, который уже привлек внимание многих игроков. В этой статье мы рассмотрим, что это за игра, почему она так популярна и как можно играть в неё онлайн.

Авиатор игра – это игра, которая сочетает в себе элементы стратегии, тактики и удачи. Игроки должны управлять своим самолетом, выполнять задания и собирать награды. Игра имеет несколько уровней сложности, что позволяет игрокам выбрать уровень, соответствующий их навыкам и опыту.

Авиатор игра онлайн – это возможность играть в игру, не покидая свой дом. Игроки могут играть на любом устройстве, которое имеет доступ к интернету, что делает игру доступной для многих людей. Кроме того, игра имеет несколько режимов, что позволяет игрокам выбрать, какой режим они хотят играть.

Авиатор игра онлайн – это также возможность играть с другими игроками. Игроки могут создавать свои команды и соревноваться с другими командами. Это добавляет еще больше динамики и интереса к игре.

Если вы хотите играть в авиатор игру онлайн, вам нужно зарегистрироваться на официальном сайте игры. Там вы сможете выбрать режим игры, создать свою команду и начать играть. Вам также нужно будет выбрать уровень сложности и начать играть.

Авиатор игра онлайн – это новая реальность для игроков, которая предлагает новые возможности и возможности для игроков. Если вы хотите испытать что-то новое и интересное, то авиатор игра онлайн – это то, что вам нужно.

Важно! Авиатор игра онлайн – это игра, которая имеет свои правила и условия. Игроки должны соблюдать эти правила, чтобы играть безопасно и успешно.

Преимущества и правила игры в Aviator

Преимущества игры Aviator:

• Уникальная механика игры, которая авиатор казино позволяет игрокам управлять самолетом и управлять его полетом.

• Возможность выбора различных типов самолетов, каждый из которых имеет свои преимущества и недостатки.

• Возможность играть в несколько режимов, включая турнирный режим, где вы можете соревноваться с другими игроками.

• Возможность получать бонусы и премии за успешные полеты.

• Возможность улучшать свои навыки и стратегии, чтобы стать лучшим пилотом.

Примечание: игра Aviator предназначена для лиц, достигших 18-летнего возраста.

Правила игры Aviator:

• Игроки должны зарегистрироваться на официальном сайте игры, чтобы начать играть.

• Игроки должны выбрать тип самолета, который они хотят использовать для игры.

• Игроки должны следовать инструкциям, которые будут предоставлены им в ходе игры.

• Игроки не должны использовать любые программы или инструменты, которые могут помочь им выиграть в игре.

• Игроки не должны нарушать правила игры, чтобы обеспечить честность и справедливость игры.

Как начать играть и выиграть в авиатор игре

Для начала играть в авиатор игре в казино, вам нужно зарегистрироваться на официальном сайте или в приложении казино. Вам потребуется создать уникальный логин и пароль, а также указать некоторые личные данные.

После регистрации вы сможете войти в игру и начать играть. В авиатор игре вам нужно будет выбрать тип ставки и количество денег, которое вы хотите поставить. Затем вам нужно будет выбрать тип авиатора, который будет играть за вас.

В авиатор игре есть несколько типов авиаторов, каждый из которых имеет свои уникальные навыки и способности. Вы можете выбрать авиатора, который лучше всего подходит для вашего стиля игры.

Когда вы выберете авиатора, вы сможете начать играть. Вам будет предложено несколько вариантов ставок, и вам нужно будет выбрать, какой тип ставки вы хотите сделать. Вы можете выбрать между ставками на победу, ставками на ничью, или ставками на поражение.

Когда вы сделаете ставку, авиатор начнет играть, и вы сможете наблюдать за игрой. Если ваш авиатор выиграет, вы получите награду в виде денег или других призов.

Важно помнить, что авиатор игра – это игра с элементами случайности, и вы не можете гарантировать победу. Однако, с помощью правильной стратегии и выбора авиатора, вы можете увеличить свои шансы на победу.

Также, вам нужно помнить, что авиатор игра – это игра для развлечения, и вам не нужно играть, если вы не готовы потерять деньги. Вам нужно играть responsibly и не превышать свои финансовые возможности.

В целом, авиатор игра – это интересная и развлекательная игра, которая может быть для вас источником дохода, если вы играете правильно и responsibly. Начните играть сегодня и вы увидите, насколько вы можете выиграть!

Check Also

Mostbet Casino Online e Casa de Apostas em Portugal.2242

Mostbet – Casino Online e Casa de Apostas em Portugal ▶️ JOGAR Содержимое Mostbet – …