160 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Divi Theme Builder Item Library.
 | 
						|
 *
 | 
						|
 * @since 4.18.0
 | 
						|
 *
 | 
						|
 * @package Builder
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Core class used to implement TB Item library.
 | 
						|
 *
 | 
						|
 * Register TB Item post type and its taxonomies.
 | 
						|
 */
 | 
						|
class ET_Builder_TBItem_Library {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Instance of `ET_Builder_TBItem_Library`.
 | 
						|
	 *
 | 
						|
	 * @var ET_Builder_TBItem_Library
 | 
						|
	 */
 | 
						|
	private static $_instance;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Instance of  `ET_Core_Data_Utils`.
 | 
						|
	 *
 | 
						|
	 * @var ET_Core_Data_Utils
 | 
						|
	 */
 | 
						|
	protected static $_;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * List of i18n strings.
 | 
						|
	 *
 | 
						|
	 * @var mixed[]
 | 
						|
	 */
 | 
						|
	protected static $_i18n;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * ET_Builder_Post_Taxonomy_TBItemCategory instance.
 | 
						|
	 *
 | 
						|
	 * Shall be used for querying `et_tb_item` taxonomy.
 | 
						|
	 *
 | 
						|
	 * @var ET_Builder_Post_Taxonomy_TBItemCategory
 | 
						|
	 */
 | 
						|
	public $item_categories;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * ET_Builder_Post_Taxonomy_TBItemTag instance.
 | 
						|
	 *
 | 
						|
	 * Shall be used for querying `et_tb_item` taxonomy .
 | 
						|
	 *
 | 
						|
	 * @var ET_Builder_Post_Taxonomy_TBItemTag
 | 
						|
	 */
 | 
						|
	public $item_tags;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * ET_Builder_Post_Taxonomy_TBItemType instance.
 | 
						|
	 *
 | 
						|
	 * Shall be used for querying `et_tb_item` taxonomy .
 | 
						|
	 *
 | 
						|
	 * @var ET_Builder_Post_Taxonomy_TBItemType
 | 
						|
	 */
 | 
						|
	public $item_types;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * ET_Builder_Post_Type_TBItem instance.
 | 
						|
	 *
 | 
						|
	 * Shall be used for querying `et_tb_item` posts .
 | 
						|
	 *
 | 
						|
	 * @var ET_Builder_Post_Type_TBItem
 | 
						|
	 */
 | 
						|
	public $items;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Class constructor.
 | 
						|
	 */
 | 
						|
	public function __construct() {
 | 
						|
		$this->_instance_check();
 | 
						|
		$this->_register_cpt_and_taxonomies();
 | 
						|
 | 
						|
		self::$_ = ET_Core_Data_Utils::instance();
 | 
						|
 | 
						|
		$root_directory = defined( 'ET_BUILDER_PLUGIN_ACTIVE' ) ? ET_BUILDER_PLUGIN_DIR : get_template_directory();
 | 
						|
 | 
						|
		self::$_i18n = require $root_directory . '/cloud/i18n/library.php';
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Gets a translated string from {@see self::$_i18n}.
 | 
						|
	 *
 | 
						|
	 * @param string $string The untranslated string.
 | 
						|
	 * @param string $path   Optional path for nested strings.
 | 
						|
	 *
 | 
						|
	 * @return string The translated string if found, the original string otherwise.
 | 
						|
	 */
 | 
						|
	public static function __( $string, $path = '' ) {
 | 
						|
		$path .= $path ? ".{$string}" : $string;
 | 
						|
 | 
						|
		return self::$_->array_get( self::$_i18n, $path, $string );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Dies if an instance already exists.
 | 
						|
	 */
 | 
						|
	protected function _instance_check() {
 | 
						|
		if ( self::$_instance ) {
 | 
						|
			et_error( 'Multiple instances are not allowed!' );
 | 
						|
			wp_die();
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Registers the Theme Builder Library's custom post type and its taxonomies.
 | 
						|
	 */
 | 
						|
	protected function _register_cpt_and_taxonomies() {
 | 
						|
		$files = [
 | 
						|
			ET_THEME_BUILDER_DIR . 'post/type/TBItem.php',
 | 
						|
			ET_THEME_BUILDER_DIR . 'post/taxonomy/TBItemType.php',
 | 
						|
			ET_THEME_BUILDER_DIR . 'post/query/TBItems.php',
 | 
						|
			ET_BUILDER_DIR . 'post/type/Layout.php',
 | 
						|
			ET_BUILDER_DIR . 'post/taxonomy/LayoutCategory.php',
 | 
						|
			ET_BUILDER_DIR . 'post/taxonomy/LayoutTag.php',
 | 
						|
			ET_BUILDER_DIR . 'post/query/Layouts.php',
 | 
						|
		];
 | 
						|
 | 
						|
		if ( ! $files ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		foreach ( $files as $file ) {
 | 
						|
			require_once $file;
 | 
						|
		}
 | 
						|
 | 
						|
		$this->items           = ET_Builder_Post_Type_TBItem::instance();
 | 
						|
		$this->item_categories = ET_Builder_Post_Taxonomy_LayoutCategory::instance();
 | 
						|
		$this->item_tags       = ET_Builder_Post_Taxonomy_LayoutTag::instance();
 | 
						|
		$this->item_types      = ET_Builder_Post_Taxonomy_TBItemType::instance();
 | 
						|
 | 
						|
		// We manually call register_all() now to ensure the CPT and taxonomies are registered
 | 
						|
		// at exactly the same point during the request that they were in prior releases.
 | 
						|
		ET_Builder_Post_Type_TBItem::register_all( 'builder' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Returns the ET_Builder_TBItem_Library instance.
 | 
						|
	 *
 | 
						|
	 * @return ET_Builder_TBItem_Library
 | 
						|
	 */
 | 
						|
	public static function instance() {
 | 
						|
		if ( ! self::$_instance ) {
 | 
						|
			self::$_instance = new self();
 | 
						|
		}
 | 
						|
 | 
						|
		return self::$_instance;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
ET_Builder_TBItem_Library::instance();
 |