Files
2024-11-20 09:09:44 +01:00

377 lines
8.8 KiB
PHP

<?php
/**
* Creative Elements - live Theme & Page Builder
*
* @author WebshopWorks, Elementor
* @copyright 2019-2023 WebshopWorks.com & Elementor.com
* @license https://www.gnu.org/licenses/gpl-3.0.html
*/
namespace CE;
defined('_PS_VERSION_') or exit;
use CE\CoreXCommonXModulesXAjaxXModule as Ajax;
use CE\CoreXSchemesXBaseUI as BaseUI;
use CE\TemplateLibraryXSourceLocal as SourceLocal;
/**
* Elementor scheme manager.
*
* Elementor scheme manager handler class is responsible for registering and
* initializing all the supported schemes.
*
* @since 1.0.0
*/
class CoreXSchemesXManager
{
/**
* Registered schemes.
*
* Holds the list of all the registered schemes.
*
* @var Base[]
*/
protected $_registered_schemes = [];
/**
* Enabled schemes.
*
* Holds the list of all the enabled schemes.
*
* @static
*
* @var array
*/
private static $_enabled_schemes;
/**
* Schemes types.
*
* Holds the list of the schemes types. Default types are `color`,
* `typography` and `color-picker`.
*
* @static
*
* @var array
*/
private static $_schemes_types = [
'color',
'typography',
'color-picker',
];
/**
* Register new scheme.
*
* Add a new scheme to the schemes list. The method creates a new scheme
* instance for any given scheme class and adds the scheme to the registered
* schemes list.
*
* @since 1.0.0
*
* @param string $scheme_class Scheme class name
*/
public function registerScheme($scheme_class)
{
/* @var Base $scheme_instance */
$scheme_instance = new $scheme_class();
$this->_registered_schemes[$scheme_instance::getType()] = $scheme_instance;
}
/**
* Unregister scheme.
*
* Removes a scheme from the list of registered schemes.
*
* @since 1.0.0
*
* @param string $id Scheme ID
*
* @return bool True if the scheme was removed, False otherwise
*/
public function unregisterScheme($id)
{
if (!isset($this->_registered_schemes[$id])) {
return false;
}
unset($this->_registered_schemes[$id]);
return true;
}
/**
* Get registered schemes.
*
* Retrieve the registered schemes list from the current instance.
*
* @since 1.0.0
*
* @return Base[] Registered schemes
*/
public function getRegisteredSchemes()
{
return $this->_registered_schemes;
}
/**
* Get schemes data.
*
* Retrieve all the registered schemes with data for each scheme.
*
* @since 1.0.0
*
* @return array Registered schemes with each scheme data
*/
public function getRegisteredSchemesData()
{
$data = [];
foreach ($this->getRegisteredSchemes() as $scheme) {
$type = $scheme::getType();
$data[$type] = [
'items' => $scheme->getScheme(),
];
if ($scheme instanceof BaseUI) {
$data[$type]['title'] = $scheme->getTitle();
$data[$type]['disabled_title'] = $scheme->getDisabledTitle();
}
}
return $data;
}
/**
* Get default schemes.
*
* Retrieve all the registered schemes with default scheme for each scheme.
*
* @since 1.0.0
*
* @return array Registered schemes with with default scheme for each scheme
*/
public function getSchemesDefaults()
{
$data = [];
foreach ($this->getRegisteredSchemes() as $scheme) {
$type = $scheme::getType();
$data[$type] = [
'items' => $scheme->getDefaultScheme(),
];
if ($scheme instanceof BaseUI) {
$data[$type]['title'] = $scheme->getTitle();
}
}
return $data;
}
/**
* Get system schemes.
*
* Retrieve all the registered ui schemes with system schemes for each scheme.
*
* @since 1.0.0
*
* @return array Registered ui schemes with with system scheme for each scheme
*/
public function getSystemSchemes()
{
$data = [];
foreach ($this->getRegisteredSchemes() as $scheme) {
if ($scheme instanceof BaseUI) {
$data[$scheme::getType()] = $scheme->getSystemSchemes();
}
}
return $data;
}
/**
* Get scheme.
*
* Retrieve a single scheme from the list of all the registered schemes in
* the current instance.
*
* @since 1.0.0
*
* @param string $id Scheme ID
*
* @return false|Base Scheme instance if scheme exist, False otherwise
*/
public function getScheme($id)
{
$schemes = $this->getRegisteredSchemes();
if (!isset($schemes[$id])) {
return false;
}
return $schemes[$id];
}
/**
* Get scheme value.
*
* Retrieve the scheme value from the list of all the registered schemes in
* the current instance.
*
* @since 1.0.0
*
* @param string $scheme_type Scheme type
* @param string $scheme_value Scheme value
*
* @return false|string Scheme value if scheme exist, False otherwise
*/
public function getSchemeValue($scheme_type, $scheme_value)
{
$scheme = $this->getScheme($scheme_type);
if (!$scheme) {
return false;
}
return $scheme->getSchemeValue()[$scheme_value];
}
/**
* Ajax apply scheme.
*
* Ajax handler for Elementor apply_scheme.
*
* Fired by `wp_ajax_elementor_apply_scheme` action.
*
* @since 1.0.0
*
* @param array $data
*
* @return bool
*/
public function ajaxApplyScheme(array $data)
{
if (!User::isCurrentUserCanEditPostType(SourceLocal::CPT)) {
return false;
}
if (!isset($data['scheme_name'])) {
return false;
}
$scheme_obj = $this->getScheme($data['scheme_name']);
if (!$scheme_obj) {
return false;
}
$posted = json_decode($data['data'], true);
$scheme_obj->saveScheme($posted);
return true;
}
/**
* Print ui schemes templates.
*
* Used to generate the scheme templates on the editor using Underscore JS
* template, for all the registered ui schemes.
*
* @since 1.0.0
*/
public function printSchemesTemplates()
{
foreach ($this->getRegisteredSchemes() as $scheme) {
if ($scheme instanceof BaseUI) {
$scheme->printTemplate();
}
}
}
/**
* @param Ajax $ajax
*
* @since 2.3.0
*/
public function registerAjaxActions(Ajax $ajax)
{
$ajax->registerAjaxAction('apply_scheme', [$this, 'ajaxApplyScheme']);
}
/**
* Get enabled schemes.
*
* Retrieve all enabled schemes from the list of the registered schemes in
* the current instance.
*
* @since 1.0.0
* @static
*
* @return array Enabled schemes
*/
public static function getEnabledSchemes()
{
if (null === self::$_enabled_schemes) {
$enabled_schemes = [];
foreach (self::$_schemes_types as $schemes_type) {
if (get_option('elementor_disable_' . $schemes_type . '_schemes')) {
continue;
}
$enabled_schemes[] = $schemes_type;
}
/*
* Enabled schemes.
*
* Filters the list of enabled schemes.
*
* @since 1.0.0
*
* @param array $enabled_schemes The list of enabled schemes
*/
$enabled_schemes = apply_filters('elementor/schemes/enabled_schemes', $enabled_schemes);
self::$_enabled_schemes = $enabled_schemes;
}
return self::$_enabled_schemes;
}
/**
* Register default schemes.
*
* Add a default schemes to the register schemes list.
*
* This method is used to set initial schemes when initializing the class.
*
* @since 1.7.12
*/
private function registerDefaultSchemes()
{
foreach (self::$_schemes_types as $scheme_type) {
$this->registerScheme(__NAMESPACE__ . '\CoreXSchemesX' . str_replace('-', '', ucwords($scheme_type, '-')));
}
}
/**
* Schemes manager constructor.
*
* Initializing Elementor schemes manager and register default schemes.
*
* @since 1.0.0
*/
public function __construct()
{
$this->registerDefaultSchemes();
add_action('elementor/ajax/register_actions', [$this, 'registerAjaxActions']);
}
}