first commit
This commit is contained in:
119
wp-content/plugins/elementor/core/settings/base/css-manager.php
Normal file
119
wp-content/plugins/elementor/core/settings/base/css-manager.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?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() ]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?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();
|
||||
}
|
||||
339
wp-content/plugins/elementor/core/settings/base/manager.php
Normal file
339
wp-content/plugins/elementor/core/settings/base/manager.php
Normal file
@@ -0,0 +1,339 @@
|
||||
<?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();
|
||||
}
|
||||
}
|
||||
31
wp-content/plugins/elementor/core/settings/base/model.php
Normal file
31
wp-content/plugins/elementor/core/settings/base/model.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?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();
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
<?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 );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
<?php
|
||||
|
||||
namespace Elementor\Core\Settings\EditorPreferences;
|
||||
|
||||
use Elementor\Controls_Manager;
|
||||
use Elementor\Core\Settings\Base\Model as BaseModel;
|
||||
|
||||
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(
|
||||
'ui_theme',
|
||||
[
|
||||
'label' => esc_html__( 'UI Theme', 'elementor' ),
|
||||
'type' => Controls_Manager::SELECT,
|
||||
'description' => esc_html__( 'Set light or dark mode, or use Auto Detect to sync it with your OS setting.', 'elementor' ),
|
||||
'default' => 'auto',
|
||||
'options' => [
|
||||
'auto' => esc_html__( 'Auto Detect', 'elementor' ),
|
||||
'light' => esc_html__( 'Light', 'elementor' ),
|
||||
'dark' => esc_html__( 'Dark', 'elementor' ),
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'panel_width',
|
||||
[
|
||||
'label' => esc_html__( 'Panel Width', 'elementor' ) . ' (px)',
|
||||
'type' => Controls_Manager::SLIDER,
|
||||
'range' => [
|
||||
'px' => [
|
||||
'min' => 200,
|
||||
'max' => 680,
|
||||
],
|
||||
],
|
||||
'default' => [
|
||||
'size' => 300,
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'edit_buttons',
|
||||
[
|
||||
'label' => esc_html__( 'Editing Handles', 'elementor' ),
|
||||
'type' => Controls_Manager::SWITCHER,
|
||||
'description' => esc_html__( 'Show editing handles when hovering over the element edit button.', 'elementor' ),
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'lightbox_in_editor',
|
||||
[
|
||||
'label' => esc_html__( 'Enable Lightbox In Editor', 'elementor' ),
|
||||
'type' => Controls_Manager::SWITCHER,
|
||||
'default' => 'yes',
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'responsive_heading',
|
||||
[
|
||||
'label' => esc_html__( 'Responsive Preview', 'elementor' ),
|
||||
'type' => Controls_Manager::HEADING,
|
||||
'separator' => 'before',
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'show_hidden_elements',
|
||||
[
|
||||
'label' => esc_html__( 'Hidden Elements', 'elementor' ),
|
||||
'type' => Controls_Manager::SWITCHER,
|
||||
'label_on' => esc_html__( 'Show', 'elementor' ),
|
||||
'label_off' => esc_html__( 'Hide', 'elementor' ),
|
||||
'default' => 'yes',
|
||||
]
|
||||
);
|
||||
|
||||
$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' ),
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'exit_to',
|
||||
[
|
||||
'label' => esc_html__( 'Exit to', 'elementor' ),
|
||||
'type' => Controls_Manager::SELECT,
|
||||
'separator' => 'before',
|
||||
'description' => esc_html__( 'Decide where you want to go when you click the "Exit" button.', 'elementor' ),
|
||||
'default' => 'this_post',
|
||||
'options' => [
|
||||
'this_post' => esc_html__( 'This Post', 'elementor' ),
|
||||
'all_posts' => esc_html__( 'All Posts', 'elementor' ),
|
||||
'dashboard' => esc_html__( 'WP Dashboard', 'elementor' ),
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'enable_styleguide_preview',
|
||||
[
|
||||
'label' => esc_html__( 'Style Guide Preview', 'elementor' ),
|
||||
'type' => Controls_Manager::SWITCHER,
|
||||
'description' => esc_html__( 'Switch between the content area and style guide to preview your changes to global colors and fonts.', 'elementor' ),
|
||||
'separator' => 'before',
|
||||
'label_off' => esc_html__( 'Off', 'elementor' ),
|
||||
'label_on' => esc_html__( 'On', 'elementor' ),
|
||||
'default' => 'yes',
|
||||
]
|
||||
);
|
||||
|
||||
$this->end_controls_section();
|
||||
}
|
||||
}
|
||||
120
wp-content/plugins/elementor/core/settings/general/manager.php
Normal file
120
wp-content/plugins/elementor/core/settings/general/manager.php
Normal file
@@ -0,0 +1,120 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
66
wp-content/plugins/elementor/core/settings/general/model.php
Normal file
66
wp-content/plugins/elementor/core/settings/general/model.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?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 );
|
||||
}
|
||||
}
|
||||
210
wp-content/plugins/elementor/core/settings/manager.php
Normal file
210
wp-content/plugins/elementor/core/settings/manager.php
Normal file
@@ -0,0 +1,210 @@
|
||||
<?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();
|
||||
}
|
||||
}
|
||||
354
wp-content/plugins/elementor/core/settings/page/manager.php
Normal file
354
wp-content/plugins/elementor/core/settings/page/manager.php
Normal file
@@ -0,0 +1,354 @@
|
||||
<?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 );
|
||||
}
|
||||
}
|
||||
184
wp-content/plugins/elementor/core/settings/page/model.php
Normal file
184
wp-content/plugins/elementor/core/settings/page/model.php
Normal file
@@ -0,0 +1,184 @@
|
||||
<?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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user