HEX
Server: Apache
System: Linux webd001.cluster127.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: mciraet (192513)
PHP: 8.2.31
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/mciraet/www/wp-content/plugins/polylang-wc/src/data-store.php
<?php
/**
 * @package Polylang-WC
 */

/**
 * Data store factory.
 *
 * As our language data stores don't implement the WC_Object_Data_Store_Interface
 * interface, it appears risky to use WC_Data_Store directly, so it has been thought
 * to be better to create our own class which can be used in a similar way.
 *
 * @since 1.0
 */
class PLLWC_Data_Store {

	/**
	 * Array of data stores.
	 *
	 * @var array<string, class-string>
	 */
	private static $stores = array(
		'order_language'   => 'PLLWC_Order_Language_CPT',
		'product_language' => 'PLLWC_Product_Language_CPT',
	);

	/**
	 * Loads a data store.
	 *
	 * @since 1.0
	 *
	 * @throws Exception If the data store doesn't exist.
	 *
	 * @param 'order_language'|'product_language' $object_type Identifier for the data store.
	 * @return PLLWC_Order_Language_CPT|PLLWC_Product_Language_CPT
	 *         PLLWC_Order_Language_CPT if $object_type is 'order_language',
	 *         PLLWC_Product_Language_CPT if $object_type is 'product_language'.
	 * @phpstan-return ($object_type is 'order_language' ? PLLWC_Order_Language_CPT : PLLWC_Product_Language_CPT)
	 */
	public static function load( $object_type ) {
		/**
		 * Filters the list of available data stores.
		 *
		 * @since 1.0
		 *
		 * @param array<string, class-string> $stores Available data stores.
		 */
		self::$stores = apply_filters( 'pllwc_data_stores', self::$stores );

		/** @var class-string */
		$store = self::$stores[ $object_type ];

		if ( class_exists( $store ) ) {
			/** @var PLLWC_Order_Language_CPT|PLLWC_Product_Language_CPT */
			return new $store();
		}

		throw new Exception( 'Invalid data store.' );
	}
}