????
| Current Path : /proc/self/root/home/carpe/public_html/space/lbrm3v/ |
| Current File : //proc/self/root/home/carpe/public_html/space/lbrm3v/settings.tar |
page/model.php 0000644 00000007576 15122304710 0007303 0 ustar 00 <?php
namespace Elementor\Core\Settings\Page;
use Elementor\Core\Settings\Base\CSS_Model;
use Elementor\Plugin;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Elementor page settings model.
*
* Elementor page settings model handler class is responsible for registering
* and managing Elementor page settings models.
*
* @since 1.6.0
*/
class Model extends CSS_Model {
/**
* WordPress post object.
*
* Holds an instance of `WP_Post` containing the post object.
*
* @since 1.6.0
* @access public
*
* @var \WP_Post
*/
private $post;
/**
* @var \WP_Post
*/
private $post_parent;
/**
* Model constructor.
*
* Initializing Elementor page settings model.
*
* @since 1.6.0
* @access public
*
* @param array $data Optional. Model data. Default is an empty array.
*/
public function __construct( array $data = [] ) {
$this->post = get_post( $data['id'] );
if ( ! $this->post ) {
$this->post = new \WP_Post( (object) [] );
}
if ( wp_is_post_revision( $this->post->ID ) ) {
$this->post_parent = get_post( $this->post->post_parent );
} else {
$this->post_parent = $this->post;
}
parent::__construct( $data );
}
/**
* Get model name.
*
* Retrieve page settings model name.
*
* @since 1.6.0
* @access public
*
* @return string Model name.
*/
public function get_name() {
return 'page-settings';
}
/**
* Get model unique name.
*
* Retrieve page settings model unique name.
*
* @since 1.6.0
* @access public
*
* @return string Model unique name.
*/
public function get_unique_name() {
return $this->get_name() . '-' . $this->post->ID;
}
/**
* Get CSS wrapper selector.
*
* Retrieve the wrapper selector for the page settings model.
*
* @since 1.6.0
* @access public
*
* @return string CSS wrapper selector.
*/
public function get_css_wrapper_selector() {
$document = Plugin::$instance->documents->get( $this->post_parent->ID );
return $document->get_css_wrapper_selector();
}
/**
* Get panel page settings.
*
* Retrieve the panel setting for the page settings model.
*
* @since 1.6.0
* @access public
*
* @return array {
* Panel settings.
*
* @type string $title The panel title.
* }
*/
public function get_panel_page_settings() {
$document = Plugin::$instance->documents->get( $this->post->ID );
return [
'title' => sprintf(
/* translators: %s: Document title. */
esc_html__( '%s Settings', 'elementor' ),
$document::get_title()
),
];
}
/**
* On export post meta.
*
* When exporting data, check if the post is not using page template and
* exclude it from the exported Elementor data.
*
* @since 1.6.0
* @access public
*
* @param array $element_data Element data.
*
* @return array Element data to be exported.
*/
public function on_export( $element_data ) {
if ( ! empty( $element_data['settings']['template'] ) ) {
/**
* @var \Elementor\Modules\PageTemplates\Module $page_templates_module
*/
$page_templates_module = Plugin::$instance->modules_manager->get_modules( 'page-templates' );
$is_elementor_template = ! ! $page_templates_module->get_template_path( $element_data['settings']['template'] );
if ( ! $is_elementor_template ) {
unset( $element_data['settings']['template'] );
}
}
return $element_data;
}
/**
* Register model controls.
*
* Used to add new controls to the page settings model.
*
* @since 3.1.0
* @access protected
*/
protected function register_controls() {
// Check if it's a real model, or abstract (for example - on import )
if ( $this->post->ID ) {
$document = Plugin::$instance->documents->get_doc_or_auto_save( $this->post->ID );
if ( $document ) {
$controls = $document->get_controls();
foreach ( $controls as $control_id => $args ) {
$this->add_control( $control_id, $args );
}
}
}
}
}
page/manager.php 0000644 00000020557 15122304710 0007607 0 ustar 00 <?php
namespace Elementor\Core\Settings\Page;
use Elementor\Core\Base\Document;
use Elementor\Core\Files\CSS\Base;
use Elementor\Core\Files\CSS\Post;
use Elementor\Core\Files\CSS\Post_Preview;
use Elementor\Core\Settings\Base\CSS_Manager;
use Elementor\Core\Utils\Exceptions;
use Elementor\Core\Settings\Base\Model as BaseModel;
use Elementor\Plugin;
use Elementor\Utils;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Elementor page settings manager.
*
* Elementor page settings manager handler class is responsible for registering
* and managing Elementor page settings managers.
*
* @since 1.6.0
*/
class Manager extends CSS_Manager {
/**
* Meta key for the page settings.
*/
const META_KEY = '_elementor_page_settings';
/**
* Get manager name.
*
* Retrieve page settings manager name.
*
* @since 1.6.0
* @access public
*
* @return string Manager name.
*/
public function get_name() {
return 'page';
}
/**
* Get model for config.
*
* Retrieve the model for settings configuration.
*
* @since 1.6.0
* @access public
*
* @return BaseModel The model object.
*/
public function get_model_for_config() {
if ( ! is_singular() && ! Plugin::$instance->editor->is_edit_mode() ) {
return null;
}
if ( Plugin::$instance->editor->is_edit_mode() ) {
$post_id = Plugin::$instance->editor->get_post_id();
$document = Plugin::$instance->documents->get_doc_or_auto_save( $post_id );
} else {
$post_id = get_the_ID();
$document = Plugin::$instance->documents->get_doc_for_frontend( $post_id );
}
if ( ! $document ) {
return null;
}
$model = $this->get_model( $document->get_post()->ID );
if ( $document->is_autosave() ) {
$model->set_settings( 'post_status', $document->get_main_post()->post_status );
}
return $model;
}
/**
* Ajax before saving settings.
*
* Validate the data before saving it and updating the data in the database.
*
* @since 1.6.0
* @access public
*
* @param array $data Post data.
* @param int $id Post ID.
*
* @throws \Exception If invalid post returned using the `$id`.
* @throws \Exception If current user don't have permissions to edit the post.
*/
public function ajax_before_save_settings( array $data, $id ) {
$post = get_post( $id );
if ( empty( $post ) ) {
throw new \Exception( 'Invalid post.', Exceptions::NOT_FOUND );
}
if ( ! Utils::is_wp_cli() && ! current_user_can( 'edit_post', $id ) ) {
throw new \Exception( 'Access denied.', Exceptions::FORBIDDEN );
}
// Avoid save empty post title.
if ( ! empty( $data['post_title'] ) ) {
$post->post_title = $data['post_title'];
}
if ( isset( $data['post_excerpt'] ) && post_type_supports( $post->post_type, 'excerpt' ) ) {
$post->post_excerpt = $data['post_excerpt'];
}
if ( isset( $data['menu_order'] ) && is_post_type_hierarchical( $post->post_type ) ) {
$post->menu_order = $data['menu_order'];
}
if ( isset( $data['post_status'] ) ) {
$this->save_post_status( $id, $data['post_status'] );
unset( $post->post_status );
}
if ( isset( $data['comment_status'] ) && post_type_supports( $post->post_type, 'comments' ) ) {
$post->comment_status = $data['comment_status'];
}
wp_update_post( $post );
// Check updated status
if ( Document::STATUS_PUBLISH === get_post_status( $id ) ) {
$autosave = wp_get_post_autosave( $post->ID );
if ( $autosave ) {
wp_delete_post_revision( $autosave->ID );
}
}
if ( isset( $data['post_featured_image'] ) && post_type_supports( $post->post_type, 'thumbnail' ) ) {
if ( empty( $data['post_featured_image']['id'] ) ) {
delete_post_thumbnail( $post->ID );
} else {
set_post_thumbnail( $post->ID, $data['post_featured_image']['id'] );
}
}
if ( Utils::is_cpt_custom_templates_supported() ) {
$template = get_metadata( 'post', $post->ID, '_wp_page_template', true );
if ( isset( $data['template'] ) ) {
$template = $data['template'];
}
if ( empty( $template ) ) {
$template = 'default';
}
// Use `update_metadata` in order to save also for revisions.
update_metadata( 'post', $post->ID, '_wp_page_template', $template );
}
}
/**
* @inheritDoc
*
* Override parent because the page setting moved to document.settings.
*/
protected function print_editor_template_content( $name ) {
?>
<#
const tabs = elementor.config.document.settings.tabs;
if ( Object.values( tabs ).length > 1 ) { #>
<div class="elementor-panel-navigation">
<# _.each( tabs, function( tabTitle, tabSlug ) {
$e.bc.ensureTab( 'panel/page-settings', tabSlug ); #>
<button class="elementor-component-tab elementor-panel-navigation-tab elementor-tab-control-{{ tabSlug }}" data-tab="{{ tabSlug }}">
<span>{{{ tabTitle }}}</span>
</button>
<# } ); #>
</div>
<# } #>
<div id="elementor-panel-<?php echo esc_attr( $name ); ?>-settings-controls"></div>
<?php
}
/**
* Save settings to DB.
*
* Save page settings to the database, as post meta data.
*
* @since 1.6.0
* @access protected
*
* @param array $settings Settings.
* @param int $id Post ID.
*/
protected function save_settings_to_db( array $settings, $id ) {
// Use update/delete_metadata in order to handle also revisions.
if ( ! empty( $settings ) ) {
// Use `wp_slash` in order to avoid the unslashing during the `update_post_meta`.
update_metadata( 'post', $id, self::META_KEY, wp_slash( $settings ) );
} else {
delete_metadata( 'post', $id, self::META_KEY );
}
}
/**
* Get CSS file for update.
*
* Retrieve the CSS file before updating it.
*
* This method overrides the parent method to disallow updating CSS files for pages.
*
* @since 1.6.0
* @access protected
*
* @param int $id Post ID.
*
* @return false Disallow The updating CSS files for pages.
*/
protected function get_css_file_for_update( $id ) {
return false;
}
/**
* Get saved settings.
*
* Retrieve the saved settings from the post meta.
*
* @since 1.6.0
* @access protected
*
* @param int $id Post ID.
*
* @return array Saved settings.
*/
protected function get_saved_settings( $id ) {
$settings = get_post_meta( $id, self::META_KEY, true );
if ( ! $settings ) {
$settings = [];
}
if ( Utils::is_cpt_custom_templates_supported() ) {
$saved_template = get_post_meta( $id, '_wp_page_template', true );
if ( $saved_template ) {
$settings['template'] = $saved_template;
}
}
return $settings;
}
/**
* Get CSS file name.
*
* Retrieve CSS file name for the page settings manager.
*
* @since 1.6.0
* @access protected
*
* @return string CSS file name.
*/
protected function get_css_file_name() {
return 'post';
}
/**
* Get model for CSS file.
*
* Retrieve the model for the CSS file.
*
* @since 1.6.0
* @access protected
*
* @param Base $css_file The requested CSS file.
*
* @return BaseModel The model object.
*/
protected function get_model_for_css_file( Base $css_file ) {
if ( ! $css_file instanceof Post ) {
return null;
}
$post_id = $css_file->get_post_id();
if ( $css_file instanceof Post_Preview ) {
$autosave = Utils::get_post_autosave( $post_id );
if ( $autosave ) {
$post_id = $autosave->ID;
}
}
return $this->get_model( $post_id );
}
/**
* Get special settings names.
*
* Retrieve the names of the special settings that are not saved as regular
* settings. Those settings have a separate saving process.
*
* @since 1.6.0
* @access protected
*
* @return array Special settings names.
*/
protected function get_special_settings_names() {
return [
'id',
'post_title',
'post_status',
'template',
'post_excerpt',
'post_featured_image',
'menu_order',
'comment_status',
];
}
/**
* @since 2.0.0
* @access public
*
* @param $post_id
* @param $status
*/
public function save_post_status( $post_id, $status ) {
$parent_id = wp_is_post_revision( $post_id );
if ( $parent_id ) {
// Don't update revisions post-status
return;
}
$parent_id = $post_id;
$post = get_post( $parent_id );
$allowed_post_statuses = get_post_statuses();
if ( isset( $allowed_post_statuses[ $status ] ) ) {
$post_type_object = get_post_type_object( $post->post_type );
if ( 'publish' !== $status || current_user_can( $post_type_object->cap->publish_posts ) ) {
$post->post_status = $status;
}
}
wp_update_post( $post );
}
}
general/model.php 0000644 00000002312 15122304710 0007763 0 ustar 00 <?php
namespace Elementor\Core\Settings\General;
use Elementor\Plugin;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* This file is deprecated, use Plugin::$instance->kits_manager->get_active_kit_for_frontend() instead.
* it changed to support call like this: Manager::get_settings_managers( 'general' )->get_model()->get_settings( 'elementor_default_generic_fonts' )
*
* @deprecated 3.0.0 Use `Plugin::$instance->kits_manager->get_active_kit_for_frontend()` instead.
*/
class Model {
/**
* @deprecated 3.0.0
*/
public function get_name() {
return 'general-deprecated';
}
/**
* @deprecated 3.0.0
*/
public function get_panel_page_settings() {
return [];
}
/**
* @deprecated 3.0.0
*/
public function get_tabs_controls() {
return [];
}
/**
* @deprecated 3.0.0
*/
public function get_frontend_settings() {
return [];
}
/**
* @deprecated 3.0.0
*/
public function get_controls() {
return [];
}
/**
* @deprecated 3.0.0
*/
public function get_settings( $setting = null ) {
if ( $setting ) {
$setting = str_replace( 'elementor_', '', $setting );
}
return Plugin::$instance->kits_manager->get_current_settings( $setting );
}
}
general/manager.php 0000644 00000005050 15122304710 0010277 0 ustar 00 <?php
namespace Elementor\Core\Settings\General;
use Elementor\Core\Files\CSS\Base;
use Elementor\Core\Settings\Base\CSS_Manager;
use Elementor\Core\Settings\Base\Model as BaseModel;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* This class is deprecated, use Plugin::$instance->kits_manager->get_active_kit_for_frontend() instead.
* it changed to support call like this: Manager::get_settings_managers( 'general' )->get_model()->get_settings( 'elementor_default_generic_fonts' )
*
* @deprecated 3.0.0 Use `Plugin::$instance->kits_manager->get_active_kit_for_frontend()` instead.
*/
class Manager extends CSS_Manager {
/**
* Meta key for the general settings.
*
* @deprecated 3.0.0
*/
const META_KEY = '_elementor_general_settings';
/**
* General settings manager constructor.
*
* Initializing Elementor general settings manager.
*
* @since 1.6.0
* @deprecated 3.0.0
* @access public
*/
public function __construct() {
parent::__construct();
_deprecated_file( __FILE__, '3.0.0', 'Plugin::$instance->kits_manager->get_active_kit_for_frontend()' );
$name = $this->get_css_file_name();
remove_action( "elementor/css-file/{$name}/parse", [ $this, 'add_settings_css_rules' ] );
}
/**
* Get manager name.
*
* Retrieve general settings manager name.
*
* @since 1.6.0
* @deprecated 3.0.0
* @access public
*
* @return string Manager name.
*/
public function get_name() {
return 'general';
}
/**
* Get model for config.
*
* Retrieve the model for settings configuration.
*
* @since 1.6.0
* @deprecated 3.0.0
* @access public
*
* @return BaseModel The model object.
*/
public function get_model_for_config() {
return $this->get_model();
}
/**
* @deprecated 3.0.0
*/
protected function get_saved_settings( $id ) {
return [];
}
/**
* Get CSS file name.
*
* Retrieve CSS file name for the general settings manager.
*
* @since 1.6.0
* @deprecated 3.0.0
* @access protected
* @return string
*
* @return string CSS file name.
*/
protected function get_css_file_name() {
return 'global';
}
/**
* @deprecated 3.0.0
*/
protected function save_settings_to_db( array $settings, $id ) {
throw new \Exception( __CLASS__ . ' is deprecated. Use Plugin::$instance->kits_manager->get_active_kit_for_frontend() instead.' );
}
/**
* @deprecated 3.0.0
*/
protected function get_model_for_css_file( Base $css_file ) {
return false;
}
/**
* @deprecated 3.0.0
*/
protected function get_css_file_for_update( $id ) {
return false;
}
}
base/css-manager.php 0000644 00000004561 15122304710 0010370 0 ustar 00 <?php
namespace Elementor\Core\Settings\Base;
use Elementor\Core\Files\CSS\Base as CSS_File;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
abstract class CSS_Manager extends Manager {
/**
* Get CSS file name.
*
* Retrieve CSS file name for the settings base css manager.
*
* @since 2.8.0
* @access protected
* @abstract
*
* @return string CSS file name
*/
abstract protected function get_css_file_name();
/**
* Get model for CSS file.
*
* Retrieve the model for the CSS file.
*
* @since 2.8.0
* @access protected
* @abstract
*
* @param CSS_File $css_file The requested CSS file.
*
* @return CSS_Model
*
*/
abstract protected function get_model_for_css_file( CSS_File $css_file );
/**
* Get CSS file for update.
*
* Retrieve the CSS file before updating it.
*
* @since 2.8.0
* @access protected
* @abstract
*
* @param int $id Post ID.
*
* @return CSS_File
*
*/
abstract protected function get_css_file_for_update( $id );
/**
* Settings base manager constructor.
*
* Initializing Elementor settings base css manager.
*
* @since 2.8.0
* @access public
*/
public function __construct() {
parent::__construct();
$name = $this->get_css_file_name();
add_action( "elementor/css-file/{$name}/parse", [ $this, 'add_settings_css_rules' ] );
}
/**
* Save settings.
*
* Save settings to the database and update the CSS file.
*
* @since 2.8.0
* @access public
*
* @param array $settings Settings.
* @param int $id Optional. Post ID. Default is `0`.
*/
public function save_settings( array $settings, $id = 0 ) {
parent::save_settings( $settings, $id );
$css_file = $this->get_css_file_for_update( $id );
if ( $css_file ) {
$css_file->update();
}
}
/**
* Add settings CSS rules.
*
* Add new CSS rules to the settings manager.
*
* Fired by `elementor/css-file/{$name}/parse` action.
*
* @since 2.8.0
* @access public
*
* @param CSS_File $css_file The requested CSS file.
*
*/
public function add_settings_css_rules( CSS_File $css_file ) {
$model = $this->get_model_for_css_file( $css_file );
$css_file->add_controls_stack_style_rules(
$model,
$css_file->get_style_controls( $model, null, $model->get_settings() ),
$model->get_settings(),
[ '{{WRAPPER}}' ],
[ $model->get_css_wrapper_selector() ]
);
}
}
base/model.php 0000644 00000001135 15122304710 0007262 0 ustar 00 <?php
namespace Elementor\Core\Settings\Base;
use Elementor\Controls_Stack;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Elementor settings base model.
*
* Elementor settings base model handler class is responsible for registering
* and managing Elementor settings base models.
*
* @since 1.6.0
* @abstract
*/
abstract class Model extends Controls_Stack {
/**
* Get panel page settings.
*
* Retrieve the page setting for the current panel.
*
* @since 1.6.0
* @access public
* @abstract
*/
abstract public function get_panel_page_settings();
}
base/css-model.php 0000644 00000000564 15122304710 0010055 0 ustar 00 <?php
namespace Elementor\Core\Settings\Base;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
abstract class CSS_Model extends Model {
/**
* Get CSS wrapper selector.
*
* Retrieve the wrapper selector for the current panel.
*
* @since 1.6.0
* @access public
* @abstract
*/
abstract public function get_css_wrapper_selector();
}
base/manager.php 0000644 00000017156 15122304710 0007606 0 ustar 00 <?php
namespace Elementor\Core\Settings\Base;
use Elementor\Core\Common\Modules\Ajax\Module as Ajax;
use Elementor\Plugin;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Elementor settings base manager.
*
* Elementor settings base manager handler class is responsible for registering
* and managing Elementor settings base managers.
*
* @since 1.6.0
* @abstract
*/
abstract class Manager {
/**
* Models cache.
*
* Holds all the models.
*
* @since 1.6.0
* @access private
*
* @var Model[]
*/
private $models_cache = [];
/**
* Settings base manager constructor.
*
* Initializing Elementor settings base manager.
*
* @since 1.6.0
* @access public
*/
public function __construct() {
add_action( 'elementor/editor/init', [ $this, 'on_elementor_editor_init' ] );
add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] );
}
/**
* Register ajax actions.
*
* Add new actions to handle data after an ajax requests returned.
*
* Fired by `elementor/ajax/register_actions` action.
*
* @since 2.0.0
* @access public
*
* @param Ajax $ajax_manager
*/
public function register_ajax_actions( $ajax_manager ) {
$name = $this->get_name();
$ajax_manager->register_ajax_action( "save_{$name}_settings", [ $this, 'ajax_save_settings' ] );
}
/**
* Get model for config.
*
* Retrieve the model for settings configuration.
*
* @since 1.6.0
* @access public
* @abstract
*
* @return Model The model object.
*/
abstract public function get_model_for_config();
/**
* Get manager name.
*
* Retrieve settings manager name.
*
* @since 1.6.0
* @access public
* @abstract
*/
abstract public function get_name();
/**
* Get model.
*
* Retrieve the model for any given model ID.
*
* @since 1.6.0
* @access public
*
* @param int $id Optional. Model ID. Default is `0`.
*
* @return Model The model.
*/
final public function get_model( $id = 0 ) {
if ( ! isset( $this->models_cache[ $id ] ) ) {
$this->create_model( $id );
}
return $this->models_cache[ $id ];
}
/**
* Ajax request to save settings.
*
* Save settings using an ajax request.
*
* @since 1.6.0
* @access public
*
* @param array $request Ajax request.
*
* @return array Ajax response data.
*/
final public function ajax_save_settings( $request ) {
$data = $request['data'];
$id = 0;
if ( ! empty( $request['id'] ) ) {
$id = $request['id'];
}
$this->ajax_before_save_settings( $data, $id );
$this->save_settings( $data, $id );
$settings_name = $this->get_name();
$success_response_data = [];
/**
* Settings success response data.
*
* Filters the success response data when saving settings using ajax.
*
* The dynamic portion of the hook name, `$settings_name`, refers to the settings name.
*
* @since 2.0.0
*
* @param array $success_response_data Success response data.
* @param int $id Settings ID.
* @param array $data Settings data.
*/
$success_response_data = apply_filters( "elementor/settings/{$settings_name}/success_response_data", $success_response_data, $id, $data );
return $success_response_data;
}
/**
* Save settings.
*
* Save settings to the database.
*
* @since 1.6.0
* @access public
*
* @param array $settings Settings.
* @param int $id Optional. Post ID. Default is `0`.
*/
public function save_settings( array $settings, $id = 0 ) {
$special_settings = $this->get_special_settings_names();
$settings_to_save = $settings;
foreach ( $special_settings as $special_setting ) {
if ( isset( $settings_to_save[ $special_setting ] ) ) {
unset( $settings_to_save[ $special_setting ] );
}
}
$this->save_settings_to_db( $settings_to_save, $id );
// Clear cache after save.
if ( isset( $this->models_cache[ $id ] ) ) {
unset( $this->models_cache[ $id ] );
}
}
/**
* On Elementor init.
*
* Add editor template for the settings
*
* Fired by `elementor/init` action.
*
* @since 2.3.0
* @access public
*/
public function on_elementor_editor_init() {
Plugin::$instance->common->add_template( $this->get_editor_template(), 'text' );
}
/**
* Get saved settings.
*
* Retrieve the saved settings from the database.
*
* @since 1.6.0
* @access protected
* @abstract
*
* @param int $id Post ID.
*/
abstract protected function get_saved_settings( $id );
/**
* Save settings to DB.
*
* Save settings to the database.
*
* @since 1.6.0
* @access protected
* @abstract
*
* @param array $settings Settings.
* @param int $id Post ID.
*/
abstract protected function save_settings_to_db( array $settings, $id );
/**
* Get special settings names.
*
* Retrieve the names of the special settings that are not saved as regular
* settings. Those settings have a separate saving process.
*
* @since 1.6.0
* @access protected
*
* @return array Special settings names.
*/
protected function get_special_settings_names() {
return [];
}
/**
* Ajax before saving settings.
*
* Validate the data before saving it and updating the data in the database.
*
* @since 1.6.0
* @access public
*
* @param array $data Post data.
* @param int $id Post ID.
*/
public function ajax_before_save_settings( array $data, $id ) {}
/**
* Print the setting template content in the editor.
*
* Used to generate the control HTML in the editor using Underscore JS
* template. The variables for the class are available using `data` JS
* object.
*
* @since 1.6.0
* @access protected
*
* @param string $name Settings panel name.
*/
protected function print_editor_template_content( $name ) {
?>
<#
const tabs = elementor.config.settings.<?php
// PHPCS - the variable $name does not contain a user input value.
echo $name; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
?>.tabs;
if ( Object.values( tabs ).length > 1 ) { #>
<div class="elementor-panel-navigation">
<# _.each( tabs, function( tabTitle, tabSlug ) {
$e.bc.ensureTab( 'panel/<?php
// PHPCS - the variable $name does not contain a user input value.
echo $name; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
?>-settings', tabSlug ); #>
<button class="elementor-component-tab elementor-panel-navigation-tab elementor-tab-control-{{ tabSlug }}" data-tab="{{ tabSlug }}">
<span>{{{ tabTitle }}}</span>
</button>
<# } ); #>
</div>
<# } #>
<div id="elementor-panel-<?php echo esc_attr( $name ); ?>-settings-controls"></div>
<?php
}
/**
* Create model.
*
* Create a new model object for any given model ID and store the object in
* models cache property for later use.
*
* @since 1.6.0
* @access private
*
* @param int $id Model ID.
*/
private function create_model( $id ) {
$class_parts = explode( '\\', get_called_class() );
array_splice( $class_parts, count( $class_parts ) - 1, 1, 'Model' );
$class_name = implode( '\\', $class_parts );
$this->models_cache[ $id ] = new $class_name( [
'id' => $id,
'settings' => $this->get_saved_settings( $id ),
] );
}
/**
* Get editor template.
*
* Retrieve the final HTML for the editor.
*
* @since 1.6.0
* @access private
*
* @return string Settings editor template.
*/
private function get_editor_template() {
$name = $this->get_name();
ob_start();
?>
<script type="text/template" id="tmpl-elementor-panel-<?php echo esc_attr( $name ); ?>-settings">
<?php $this->print_editor_template_content( $name ); ?>
</script>
<?php
return ob_get_clean();
}
}
editor-preferences/model.php 0000644 00000013052 15122304710 0012136 0 ustar 00 <?php
namespace Elementor\Core\Settings\EditorPreferences;
use Elementor\Controls_Manager;
use Elementor\Core\Editor\Editor;
use Elementor\Core\Settings\Base\Model as BaseModel;
use Elementor\Plugin;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Model extends BaseModel {
/**
* Get element name.
*
* Retrieve the element name.
*
* @return string The name.
* @since 2.8.0
* @access public
*
*/
public function get_name() {
return 'editor-preferences';
}
/**
* Get panel page settings.
*
* Retrieve the page setting for the current panel.
*
* @since 2.8.0
* @access public
*/
public function get_panel_page_settings() {
return [
'title' => esc_html__( 'User Preferences', 'elementor' ),
];
}
/**
* @since 3.1.0
* @access protected
*/
protected function register_controls() {
$this->start_controls_section(
'preferences',
[
'tab' => Controls_Manager::TAB_SETTINGS,
'label' => esc_html__( 'Preferences', 'elementor' ),
]
);
$this->add_control(
'editor_heading',
[
'label' => esc_html__( 'Panel', 'elementor' ),
'type' => Controls_Manager::HEADING,
]
);
$this->add_control(
'ui_theme',
[
'label' => esc_html__( 'Display mode', 'elementor' ),
'type' => Controls_Manager::CHOOSE,
'options' => [
'light' => [
'title' => esc_html__( 'Light mode', 'elementor' ),
'icon' => 'eicon-light-mode',
],
'dark' => [
'title' => esc_html__( 'Dark mode', 'elementor' ),
'icon' => 'eicon-dark-mode',
],
'auto' => [
'title' => esc_html__( 'Auto detect', 'elementor' ),
'icon' => 'eicon-header',
],
],
'default' => 'auto',
'description' => esc_html__( 'Set light or dark mode, or auto-detect to sync with your operating system settings.', 'elementor' ),
]
);
$this->add_control(
'panel_width',
[
'label' => esc_html__( 'Width', 'elementor' ) . ' (px)',
'type' => Controls_Manager::SLIDER,
'range' => [
'px' => [
'min' => 200,
'max' => 680,
],
],
'default' => [
'size' => 300,
],
]
);
$this->add_control(
'preview_heading',
[
'label' => esc_html__( 'Canvas', 'elementor' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
]
);
if ( ! Plugin::$instance->experiments->is_feature_active( Editor::EDITOR_V2_EXPERIMENT_NAME ) ) {
$this->add_control(
'default_device_view',
[
'label' => esc_html__( 'Default device view', 'elementor' ),
'type' => Controls_Manager::SELECT,
'default' => 'default',
'options' => [
'default' => esc_html__( 'Default', 'elementor' ),
'mobile' => esc_html__( 'Mobile', 'elementor' ),
'tablet' => esc_html__( 'Tablet', 'elementor' ),
'desktop' => esc_html__( 'Desktop', 'elementor' ),
],
'description' => esc_html__( 'Choose which device to display when clicking the Responsive Mode icon.', 'elementor' ),
]
);
}
$this->add_control(
'edit_buttons',
[
'label' => esc_html__( 'Show quick edit options', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => esc_html__( 'Yes', 'elementor' ),
'label_off' => esc_html__( 'No', 'elementor' ),
'description' => esc_html__( 'Show additional actions while hovering over the handle of an element.', 'elementor' ),
]
);
$this->add_control(
'lightbox_in_editor',
[
'label' => esc_html__( 'Expand images in lightbox', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
'label_on' => esc_html__( 'Yes', 'elementor' ),
'label_off' => esc_html__( 'No', 'elementor' ),
'description' => esc_html__( 'This only applies while you’re working in the editor. The front end won’t be affected.', 'elementor' ),
]
);
$this->add_control(
'show_hidden_elements',
[
'label' => esc_html__( 'Show hidden elements', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => esc_html__( 'Yes', 'elementor' ),
'label_off' => esc_html__( 'No', 'elementor' ),
'default' => 'yes',
'description' => esc_html__( 'This refers to elements you’ve hidden in the Responsive Visibility settings.', 'elementor' ),
]
);
$this->add_control(
'design_system_heading',
[
'label' => esc_html__( 'Design System', 'elementor' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
]
);
$this->add_control(
'enable_styleguide_preview',
[
'label' => esc_html__( 'Show global settings', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
'label_on' => esc_html__( 'Yes', 'elementor' ),
'label_off' => esc_html__( 'No', 'elementor' ),
'description' => esc_html__( 'Temporarily overlay the canvas with the style guide to preview your changes to global colors and fonts.', 'elementor' ),
]
);
$this->add_control(
'navigation_heading',
[
'label' => esc_html__( 'Navigation', 'elementor' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
]
);
$this->add_control(
'exit_to',
[
'label' => esc_html__( 'Exit to', 'elementor' ),
'type' => Controls_Manager::SELECT,
'default' => 'this_post',
'options' => [
'this_post' => esc_html__( 'This Post', 'elementor' ),
'all_posts' => esc_html__( 'All Posts', 'elementor' ),
'dashboard' => esc_html__( 'WP Dashboard', 'elementor' ),
],
'description' => esc_html__( 'Decide where you want to go when leaving the editor.', 'elementor' ),
]
);
$this->end_controls_section();
}
}
editor-preferences/manager.php 0000644 00000002662 15122304710 0012455 0 ustar 00 <?php
namespace Elementor\Core\Settings\EditorPreferences;
use Elementor\Core\Settings\Base\Manager as BaseManager;
use Elementor\Core\Settings\Base\Model as BaseModel;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Manager extends BaseManager {
const META_KEY = 'elementor_preferences';
/**
* Get model for config.
*
* Retrieve the model for settings configuration.
*
* @since 2.8.0
* @access public
*
* @return BaseModel The model object.
*
*/
public function get_model_for_config() {
return $this->get_model();
}
/**
* Get manager name.
*
* Retrieve settings manager name.
*
* @since 2.8.0
* @access public
*/
public function get_name() {
return 'editorPreferences';
}
/**
* Get saved settings.
*
* Retrieve the saved settings from the database.
*
* @since 2.8.0
* @access protected
*
* @param int $id.
* @return array
*
*/
protected function get_saved_settings( $id ) {
$settings = get_user_meta( get_current_user_id(), self::META_KEY, true );
if ( ! $settings ) {
$settings = [];
}
return $settings;
}
/**
* Save settings to DB.
*
* Save settings to the database.
*
* @param array $settings Settings.
* @param int $id Post ID.
* @since 2.8.0
* @access protected
*
*/
protected function save_settings_to_db( array $settings, $id ) {
update_user_meta( get_current_user_id(), self::META_KEY, $settings );
}
}
manager.php 0000644 00000011751 15122304710 0006667 0 ustar 00 <?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();
}
}