first commit

This commit is contained in:
2024-07-31 13:12:38 +07:00
commit b4e8cbe182
10213 changed files with 3125839 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
<?php
namespace Elementor\Modules\Library\Documents;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Elementor container library document.
*
* Elementor container library document handler class is responsible for
* handling a document of a container type.
*
* @since 2.0.0
*/
class Container extends Library_Document {
public static function get_properties() {
$properties = parent::get_properties();
$properties['support_kit'] = true;
return $properties;
}
/**
* Get document name.
*
* Retrieve the document name.
*
* @since 2.0.0
* @access public
*
* @return string Document name.
*/
public function get_name() {
return 'container';
}
/**
* Get document title.
*
* Retrieve the document title.
*
* @since 2.0.0
* @access public
* @static
*
* @return string Document title.
*/
public static function get_title() {
return esc_html__( 'Container', 'elementor' );
}
/**
* Get Type
*
* Return the container document type.
*
* @return string
*/
public static function get_type() {
return 'container';
}
}

View File

@@ -0,0 +1,78 @@
<?php
namespace Elementor\Modules\Library\Documents;
use Elementor\Core\Base\Document;
use Elementor\Modules\Library\Traits\Library;
use Elementor\TemplateLibrary\Source_Local;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Elementor library document.
*
* Elementor library document handler class is responsible for handling
* a document of the library type.
*
* @since 2.0.0
*/
abstract class Library_Document extends Document {
// Library Document Trait
use Library;
/**
* The taxonomy type slug for the library document.
*/
const TAXONOMY_TYPE_SLUG = 'elementor_library_type';
/**
* Get document properties.
*
* Retrieve the document properties.
*
* @since 2.0.0
* @access public
* @static
*
* @return array Document properties.
*/
public static function get_properties() {
$properties = parent::get_properties();
$properties['admin_tab_group'] = 'library';
$properties['show_in_library'] = true;
$properties['register_type'] = true;
$properties['cpt'] = [ Source_Local::CPT ];
return $properties;
}
/**
* Get initial config.
*
* Retrieve the current element initial configuration.
*
* Adds more configuration on top of the controls list and the tabs assigned
* to the control. This method also adds element name, type, icon and more.
*
* @since 2.9.0
* @access protected
*
* @return array The initial config.
*/
public function get_initial_config() {
$config = parent::get_initial_config();
$config['library'] = [
'save_as_same_type' => true,
];
return $config;
}
public function get_content( $with_css = false ) {
return do_shortcode( parent::get_content( $with_css ) );
}
}

View File

@@ -0,0 +1,73 @@
<?php
namespace Elementor\Modules\Library\Documents;
use Elementor\TemplateLibrary\Source_Local;
use Elementor\Utils;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Elementor section library document.
*
* Elementor section library document handler class is responsible for
* handling a document of a section type.
*
*/
class Not_Supported extends Library_Document {
/**
* Get document properties.
*
* Retrieve the document properties.
*
* @access public
* @static
*
* @return array Document properties.
*/
public static function get_properties() {
$properties = parent::get_properties();
$properties['admin_tab_group'] = '';
$properties['register_type'] = false;
$properties['is_editable'] = false;
$properties['show_in_library'] = false;
$properties['show_in_finder'] = false;
return $properties;
}
public static function get_type() {
return 'not-supported';
}
/**
* Get document title.
*
* Retrieve the document title.
*
* @access public
* @static
*
* @return string Document title.
*/
public static function get_title() {
return esc_html__( 'Not Supported', 'elementor' );
}
public function save_template_type() {
// Do nothing.
}
public function print_admin_column_type() {
Utils::print_unescaped_internal_string( self::get_title() );
}
public function filter_admin_row_actions( $actions ) {
unset( $actions['view'] );
return $actions;
}
}

View File

@@ -0,0 +1,96 @@
<?php
namespace Elementor\Modules\Library\Documents;
use Elementor\Core\DocumentTypes\Post;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Elementor page library document.
*
* Elementor page library document handler class is responsible for
* handling a document of a page type.
*
* @since 2.0.0
*/
class Page extends Library_Document {
/**
* Get document properties.
*
* Retrieve the document properties.
*
* @since 2.0.0
* @access public
* @static
*
* @return array Document properties.
*/
public static function get_properties() {
$properties = parent::get_properties();
$properties['support_wp_page_templates'] = true;
$properties['support_kit'] = true;
$properties['show_in_finder'] = true;
return $properties;
}
public static function get_type() {
return 'page';
}
/**
* Get document title.
*
* Retrieve the document title.
*
* @since 2.0.0
* @access public
* @static
*
* @return string Document title.
*/
public static function get_title() {
return esc_html__( 'Page', 'elementor' );
}
public static function get_plural_title() {
return esc_html__( 'Pages', 'elementor' );
}
public static function get_add_new_title() {
return esc_html__( 'Add New Page Template', 'elementor' );
}
/**
* @since 2.1.3
* @access public
*/
public function get_css_wrapper_selector() {
return 'body.elementor-page-' . $this->get_main_id();
}
/**
* @since 3.1.0
* @access protected
*/
protected function register_controls() {
parent::register_controls();
Post::register_hide_title_control( $this );
Post::register_style_controls( $this );
}
protected function get_remote_library_config() {
$config = parent::get_remote_library_config();
$config['type'] = 'page';
$config['default_route'] = 'templates/pages';
return $config;
}
}

View File

@@ -0,0 +1,49 @@
<?php
namespace Elementor\Modules\Library\Documents;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Elementor section library document.
*
* Elementor section library document handler class is responsible for
* handling a document of a section type.
*
* @since 2.0.0
*/
class Section extends Library_Document {
public static function get_properties() {
$properties = parent::get_properties();
$properties['support_kit'] = true;
$properties['show_in_finder'] = true;
return $properties;
}
public static function get_type() {
return 'section';
}
/**
* Get document title.
*
* Retrieve the document title.
*
* @since 2.0.0
* @access public
* @static
*
* @return string Document title.
*/
public static function get_title() {
return esc_html__( 'Section', 'elementor' );
}
public static function get_plural_title() {
return esc_html__( 'Sections', 'elementor' );
}
}

View File

@@ -0,0 +1,58 @@
<?php
namespace Elementor\Modules\Library;
use Elementor\Core\Base\Module as BaseModule;
use Elementor\Modules\Library\Documents;
use Elementor\Plugin;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Elementor library module.
*
* Elementor library module handler class is responsible for registering and
* managing Elementor library modules.
*
* @since 2.0.0
*/
class Module extends BaseModule {
/**
* Get module name.
*
* Retrieve the library module name.
*
* @since 2.0.0
* @access public
*
* @return string Module name.
*/
public function get_name() {
return 'library';
}
/**
* Library module constructor.
*
* Initializing Elementor library module.
*
* @since 2.0.0
* @access public
*/
public function __construct() {
Plugin::$instance->documents
->register_document_type( 'not-supported', Documents\Not_Supported::get_class_full_name() )
->register_document_type( 'page', Documents\Page::get_class_full_name() )
->register_document_type( 'section', Documents\Section::get_class_full_name() );
$experiments_manager = Plugin::$instance->experiments;
// Register `Container` document type only if the experiment is active.
if ( $experiments_manager->is_feature_active( 'container' ) ) {
Plugin::$instance->documents
->register_document_type( 'container', Documents\Container::get_class_full_name() );
}
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace Elementor\Modules\Library\Traits;
use Elementor\TemplateLibrary\Source_Local;
/**
* Elementor Library Trait
*
* This trait is used by all Library Documents and Landing Pages.
*
* @since 3.1.0
*/
trait Library {
/**
* Print Admin Column Type
*
* Runs on WordPress' 'manage_{custom post type}_posts_custom_column' hook to modify each row's content.
*
* @since 3.1.0
* @access public
*/
public function print_admin_column_type() {
$admin_filter_url = admin_url( Source_Local::ADMIN_MENU_SLUG . '&elementor_library_type=' . $this->get_name() );
//PHPCS - Not a user input
printf( '<a href="%s">%s</a>', $admin_filter_url, $this->get_title() ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
* Save document type.
*
* Set new/updated document type.
*
* @since 3.1.0
* @access public
*/
public function save_template_type() {
parent::save_template_type();
wp_set_object_terms( $this->post->ID, $this->get_name(), Source_Local::TAXONOMY_TYPE_SLUG );
}
}

View File

@@ -0,0 +1,145 @@
<?php
namespace Elementor\Modules\Library;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
class User_Favorites {
const USER_META_KEY = 'elementor_library_favorites';
/**
* @var int
*/
private $user_id;
/**
* @var array|null
*/
private $cache;
/**
* User_Favorites constructor.
*
* @param $user_id
*/
public function __construct( $user_id ) {
$this->user_id = $user_id;
}
/**
* @param null $vendor
* @param null $resource
* @param false $ignore_cache
*
* @return array
*/
public function get( $vendor = null, $resource = null, $ignore_cache = false ) {
if ( $ignore_cache || empty( $this->cache ) ) {
$this->cache = get_user_meta( $this->user_id, self::USER_META_KEY, true );
}
if ( ! $this->cache || ! is_array( $this->cache ) ) {
return [];
}
if ( $vendor && $resource ) {
$key = $this->get_key( $vendor, $resource );
return isset( $this->cache[ $key ] ) ? $this->cache[ $key ] : [];
}
return $this->cache;
}
/**
* @param $vendor
* @param $resource
* @param $id
*
* @return bool
*/
public function exists( $vendor, $resource, $id ) {
return in_array( $id, $this->get( $vendor, $resource ), true );
}
/**
* @param $vendor
* @param $resource
* @param array $value
*
* @return $this
* @throws \Exception
*/
public function save( $vendor, $resource, $value = [] ) {
$all_favorites = $this->get();
$all_favorites[ $this->get_key( $vendor, $resource ) ] = $value;
$result = update_user_meta( $this->user_id, self::USER_META_KEY, $all_favorites );
if ( false === $result ) {
throw new \Exception( 'Failed to save user favorites.' );
}
$this->cache = $all_favorites;
return $this;
}
/**
* @param $vendor
* @param $resource
* @param $id
*
* @return $this
* @throws \Exception
*/
public function add( $vendor, $resource, $id ) {
$favorites = $this->get( $vendor, $resource );
if ( in_array( $id, $favorites, true ) ) {
return $this;
}
$favorites[] = $id;
$this->save( $vendor, $resource, $favorites );
return $this;
}
/**
* @param $vendor
* @param $resource
* @param $id
*
* @return $this
* @throws \Exception
*/
public function remove( $vendor, $resource, $id ) {
$favorites = $this->get( $vendor, $resource );
if ( ! in_array( $id, $favorites, true ) ) {
return $this;
}
$favorites = array_filter( $favorites, function ( $item ) use ( $id ) {
return $item !== $id;
} );
$this->save( $vendor, $resource, $favorites );
return $this;
}
/**
* @param $vendor
* @param $resource
*
* @return string
*/
private function get_key( $vendor, $resource ) {
return "{$vendor}/{$resource}";
}
}