210 lines
5 KiB
PHP
210 lines
5 KiB
PHP
<?php
|
|
namespace Elementor\Core\Settings;
|
|
|
|
use Elementor\Core\Settings\Base\CSS_Model;
|
|
use Elementor\Plugin;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
/**
|
|
* Elementor settings manager.
|
|
*
|
|
* Elementor settings manager handler class is responsible for registering and
|
|
* managing Elementor settings managers.
|
|
*
|
|
* @since 1.6.0
|
|
*/
|
|
class Manager {
|
|
|
|
/**
|
|
* Settings managers.
|
|
*
|
|
* Holds all the registered settings managers.
|
|
*
|
|
* @since 1.6.0
|
|
* @access private
|
|
*
|
|
* @var Base\Manager[]
|
|
*/
|
|
private static $settings_managers = [];
|
|
|
|
/**
|
|
* Builtin settings managers names.
|
|
*
|
|
* Holds the names for builtin Elementor settings managers.
|
|
*
|
|
* @since 1.6.0
|
|
* @access private
|
|
*
|
|
* @var array
|
|
*/
|
|
private static $builtin_settings_managers_names = [ 'page', 'editorPreferences' ];
|
|
|
|
/**
|
|
* Add settings manager.
|
|
*
|
|
* Register a single settings manager to the registered settings managers.
|
|
*
|
|
* @since 1.6.0
|
|
* @access public
|
|
* @static
|
|
*
|
|
* @param Base\Manager $manager Settings manager.
|
|
*/
|
|
public static function add_settings_manager( Base\Manager $manager ) {
|
|
self::$settings_managers[ $manager->get_name() ] = $manager;
|
|
}
|
|
|
|
/**
|
|
* Get settings managers.
|
|
*
|
|
* Retrieve registered settings manager(s).
|
|
*
|
|
* If no parameter passed, it will retrieve all the settings managers. For
|
|
* any given parameter it will retrieve a single settings manager if one
|
|
* exist, or `null` otherwise.
|
|
*
|
|
* @since 1.6.0
|
|
* @access public
|
|
* @static
|
|
*
|
|
* @param string $manager_name Optional. Settings manager name. Default is
|
|
* null.
|
|
*
|
|
* @return Base\Manager|Base\Manager[] Single settings manager, if it exists,
|
|
* null if it doesn't exists, or the all
|
|
* the settings managers if no parameter
|
|
* defined.
|
|
*/
|
|
public static function get_settings_managers( $manager_name = null ) {
|
|
if ( $manager_name ) {
|
|
// Backwards compatibility for `general` manager, since 3.0.0.
|
|
// Register the class only if needed.
|
|
if ( 'general' === $manager_name ) {
|
|
// TODO: _deprecated_argument( $manager_name, '3.0.0', 'Plugin::$instance->kits_manager->get_active_kit_for_frontend();' );
|
|
$manager_class = self::get_manager_class( $manager_name );
|
|
|
|
self::add_settings_manager( new $manager_class() );
|
|
}
|
|
|
|
if ( isset( self::$settings_managers[ $manager_name ] ) ) {
|
|
return self::$settings_managers[ $manager_name ];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
return self::$settings_managers;
|
|
}
|
|
|
|
/**
|
|
* Register default settings managers.
|
|
*
|
|
* Register builtin Elementor settings managers.
|
|
*
|
|
* @since 1.6.0
|
|
* @access private
|
|
* @static
|
|
*/
|
|
private static function register_default_settings_managers() {
|
|
foreach ( self::$builtin_settings_managers_names as $manager_name ) {
|
|
$manager_class = self::get_manager_class( $manager_name );
|
|
|
|
self::add_settings_manager( new $manager_class() );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get class path for default settings managers.
|
|
*
|
|
* @param $manager_name
|
|
*
|
|
* @return string
|
|
* @since 3.0.0
|
|
* @access private
|
|
* @static
|
|
*/
|
|
private static function get_manager_class( $manager_name ) {
|
|
return __NAMESPACE__ . '\\' . ucfirst( $manager_name ) . '\Manager';
|
|
}
|
|
|
|
/**
|
|
* Get settings managers config.
|
|
*
|
|
* Retrieve the settings managers configuration.
|
|
*
|
|
* @since 1.6.0
|
|
* @access public
|
|
* @static
|
|
*
|
|
* @return array The settings managers configuration.
|
|
*/
|
|
public static function get_settings_managers_config() {
|
|
$config = [];
|
|
|
|
$user_can = Plugin::instance()->role_manager->user_can( 'design' );
|
|
|
|
foreach ( self::$settings_managers as $name => $manager ) {
|
|
$settings_model = $manager->get_model_for_config();
|
|
$tabs = $settings_model->get_tabs_controls();
|
|
|
|
if ( ! $user_can ) {
|
|
unset( $tabs['style'] );
|
|
}
|
|
|
|
$config[ $name ] = [
|
|
'name' => $manager->get_name(),
|
|
'panelPage' => $settings_model->get_panel_page_settings(),
|
|
'controls' => $settings_model->get_controls(),
|
|
'tabs' => $tabs,
|
|
'settings' => $settings_model->get_settings(),
|
|
];
|
|
|
|
if ( $settings_model instanceof CSS_Model ) {
|
|
$config[ $name ]['cssWrapperSelector'] = $settings_model->get_css_wrapper_selector();
|
|
}
|
|
}
|
|
|
|
return $config;
|
|
}
|
|
|
|
/**
|
|
* Get settings frontend config.
|
|
*
|
|
* Retrieve the settings managers frontend configuration.
|
|
*
|
|
* @since 1.6.0
|
|
* @access public
|
|
* @static
|
|
*
|
|
* @return array The settings managers frontend configuration.
|
|
*/
|
|
public static function get_settings_frontend_config() {
|
|
$config = [];
|
|
|
|
foreach ( self::$settings_managers as $name => $manager ) {
|
|
$settings_model = $manager->get_model_for_config();
|
|
|
|
if ( $settings_model ) {
|
|
$config[ $name ] = $settings_model->get_frontend_settings();
|
|
}
|
|
}
|
|
|
|
return $config;
|
|
}
|
|
|
|
/**
|
|
* Run settings managers.
|
|
*
|
|
* Register builtin Elementor settings managers.
|
|
*
|
|
* @since 1.6.0
|
|
* @access public
|
|
* @static
|
|
*/
|
|
public static function run() {
|
|
self::register_default_settings_managers();
|
|
}
|
|
}
|