X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/9e77185fafaf4e60e2b73821e0e4b9b1a11fb85f..607b7e02d77e7326161e8ec15639052d2040f745:/wp-includes/class-wp-customize-control.php
diff --git a/wp-includes/class-wp-customize-control.php b/wp-includes/class-wp-customize-control.php
index 216ceafb..1920140f 100644
--- a/wp-includes/class-wp-customize-control.php
+++ b/wp-includes/class-wp-customize-control.php
@@ -1,12 +1,41 @@
active_callback ) ) {
$this->active_callback = array( $this, 'active_callback' );
}
+ self::$instance_count += 1;
+ $this->instance_number = self::$instance_count;
// Process settings.
- if ( empty( $this->settings ) ) {
+ if ( ! isset( $this->settings ) ) {
$this->settings = $id;
}
@@ -137,7 +208,7 @@ class WP_Customize_Control {
foreach ( $this->settings as $key => $setting ) {
$settings[ $key ] = $this->manager->get_setting( $setting );
}
- } else {
+ } else if ( is_string( $this->settings ) ) {
$this->setting = $this->manager->get_setting( $this->settings );
$settings['default'] = $this->setting;
}
@@ -152,19 +223,19 @@ class WP_Customize_Control {
public function enqueue() {}
/**
- * Check whether control is active to current customizer preview.
+ * Check whether control is active to current Customizer preview.
*
* @since 4.0.0
* @access public
*
* @return bool Whether the control is active to the current preview.
*/
- public final function active() {
+ final public function active() {
$control = $this;
$active = call_user_func( $this->active_callback, $this );
/**
- * Filter response of WP_Customize_Control::active().
+ * Filters response of WP_Customize_Control::active().
*
* @since 4.0.0
*
@@ -185,7 +256,7 @@ class WP_Customize_Control {
* @since 4.0.0
* @access public
*
- * @return bool Always true.
+ * @return true Always true.
*/
public function active_callback() {
return true;
@@ -200,7 +271,7 @@ class WP_Customize_Control {
* @param string $setting_key
* @return mixed The requested setting's value, if the setting exists.
*/
- public final function value( $setting_key = 'default' ) {
+ final public function value( $setting_key = 'default' ) {
if ( isset( $this->settings[ $setting_key ] ) ) {
return $this->settings[ $setting_key ]->value();
}
@@ -218,36 +289,78 @@ class WP_Customize_Control {
}
$this->json['type'] = $this->type;
+ $this->json['priority'] = $this->priority;
$this->json['active'] = $this->active();
+ $this->json['section'] = $this->section;
+ $this->json['content'] = $this->get_content();
+ $this->json['label'] = $this->label;
+ $this->json['description'] = $this->description;
+ $this->json['instanceNumber'] = $this->instance_number;
+ }
+
+ /**
+ * Get the data to export to the client via JSON.
+ *
+ * @since 4.1.0
+ *
+ * @return array Array of parameters passed to the JavaScript.
+ */
+ public function json() {
+ $this->to_json();
+ return $this->json;
}
/**
- * Check if the theme supports the control and check user capabilities.
+ * Checks if the user can use this control.
+ *
+ * Returns false if the user cannot manipulate one of the associated settings,
+ * or if one of the associated settings does not exist. Also returns false if
+ * the associated section does not exist or if its capability check returns
+ * false.
*
* @since 3.4.0
*
* @return bool False if theme doesn't support the control or user doesn't have the required permissions, otherwise true.
*/
- public final function check_capabilities() {
+ final public function check_capabilities() {
+ if ( ! empty( $this->capability ) && ! current_user_can( $this->capability ) ) {
+ return false;
+ }
+
foreach ( $this->settings as $setting ) {
- if ( ! $setting->check_capabilities() )
+ if ( ! $setting || ! $setting->check_capabilities() ) {
return false;
+ }
}
$section = $this->manager->get_section( $this->section );
- if ( isset( $section ) && ! $section->check_capabilities() )
+ if ( isset( $section ) && ! $section->check_capabilities() ) {
return false;
+ }
return true;
}
+ /**
+ * Get the control's content for insertion into the Customizer pane.
+ *
+ * @since 4.1.0
+ *
+ * @return string Contents of the control.
+ */
+ final public function get_content() {
+ ob_start();
+ $this->maybe_render();
+ return trim( ob_get_clean() );
+ }
+
/**
* Check capabilities and render the control.
*
* @since 3.4.0
* @uses WP_Customize_Control::render()
*/
- public final function maybe_render() {
+ final public function maybe_render() {
if ( ! $this->check_capabilities() )
return;
@@ -263,7 +376,7 @@ class WP_Customize_Control {
/**
* Fires just before a specific Customizer control is rendered.
*
- * The dynamic portion of the hook name, $this->id, refers to
+ * The dynamic portion of the hook name, `$this->id`, refers to
* the control ID.
*
* @since 3.4.0
@@ -281,7 +394,7 @@ class WP_Customize_Control {
* @since 3.4.0
*/
protected function render() {
- $id = 'customize-control-' . str_replace( '[', '-', str_replace( ']', '', $this->id ) );
+ $id = 'customize-control-' . str_replace( array( '[', ']' ), array( '-', '' ), $this->id );
$class = 'customize-control customize-control-' . $this->type;
?>
@@ -323,7 +436,7 @@ class WP_Customize_Control {
* @access public
*/
public function input_attrs() {
- foreach( $this->input_attrs as $attr => $value ) {
+ foreach ( $this->input_attrs as $attr => $value ) {
echo $attr . '="' . esc_attr( $value ) . '" ';
}
}
@@ -331,11 +444,13 @@ class WP_Customize_Control {
/**
* Render the control's content.
*
- * Allows the content to be overriden without having to rewrite the wrapper in $this->render().
+ * Allows the content to be overriden without having to rewrite the wrapper in `$this::render()`.
*
* Supports basic input types `text`, `checkbox`, `textarea`, `radio`, `select` and `dropdown-pages`.
* Additional input types such as `email`, `url`, `number`, `hidden` and `date` are supported implicitly.
*
+ * Control content can alternately be rendered in JS. See WP_Customize_Control::print_template().
+ *
* @since 3.4.0
*/
protected function render_content() {
@@ -409,7 +524,16 @@ class WP_Customize_Control {
+
+
@@ -443,682 +565,87 @@ class WP_Customize_Control {
break;
}
}
-}
-
-/**
- * Customize Color Control Class
- *
- * @package WordPress
- * @subpackage Customize
- * @since 3.4.0
- */
-class WP_Customize_Color_Control extends WP_Customize_Control {
- /**
- * @access public
- * @var string
- */
- public $type = 'color';
/**
- * @access public
- * @var array
- */
- public $statuses;
-
- /**
- * Constructor.
+ * Render the control's JS template.
*
- * @since 3.4.0
- * @uses WP_Customize_Control::__construct()
+ * This function is only run for control types that have been registered with
+ * WP_Customize_Manager::register_control_type().
*
- * @param WP_Customize_Manager $manager
- * @param string $id
- * @param array $args
- */
- public function __construct( $manager, $id, $args = array() ) {
- $this->statuses = array( '' => __('Default') );
- parent::__construct( $manager, $id, $args );
- }
-
- /**
- * Enqueue scripts/styles for the color picker.
+ * In the future, this will also print the template for the control's container
+ * element and be override-able.
*
- * @since 3.4.0
+ * @since 4.1.0
*/
- public function enqueue() {
- wp_enqueue_script( 'wp-color-picker' );
- wp_enqueue_style( 'wp-color-picker' );
- }
-
- /**
- * Refresh the parameters passed to the JavaScript via JSON.
- *
- * @since 3.4.0
- * @uses WP_Customize_Control::to_json()
- */
- public function to_json() {
- parent::to_json();
- $this->json['statuses'] = $this->statuses;
- }
-
- /**
- * Render the control's content.
- *
- * @since 3.4.0
- */
- public function render_content() {
- $this_default = $this->setting->default;
- $default_attr = '';
- if ( $this_default ) {
- if ( false === strpos( $this_default, '#' ) )
- $this_default = '#' . $this_default;
- $default_attr = ' data-default-color="' . esc_attr( $this_default ) . '"';
- }
- // The input's value gets set by JS. Don't fill it.
+ final public function print_template() {
?>
-
- label ) ) : ?>
- label ); ?>
- description ) ) : ?>
- description; ?>
-
-
-
' . sprintf( __('The web browser on your device cannot be used to upload files. You may be able to use the native app for your device instead.'), 'http://apps.wordpress.org/' ) . '
- Add new image, your theme recommends a header size of %s × %s pixels.' ), $width, $height );
- } elseif ( $width ) {
- printf( __( 'While you can crop images to your liking after clicking Add new image, your theme recommends a header width of %s pixels.' ), $width );
- } else {
- printf( __( 'While you can crop images to your liking after clicking Add new image, your theme recommends a header height of %s pixels.' ), $height );
- }
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- json[ $key ] = $this->$key;
- }
- }
-
- public function render_content() {
- ?>
-
-
-
-
-
-
-
-
- manager->widgets->is_sidebar_rendered( $this->sidebar_id );
- }
-}
-
-/**
- * Widget Form Customize Control Class
- */
-class WP_Widget_Form_Customize_Control extends WP_Customize_Control {
- public $type = 'widget_form';
- public $widget_id;
- public $widget_id_base;
- public $sidebar_id;
- public $is_new = false;
- public $width;
- public $height;
- public $is_wide = false;
-
- public function to_json() {
- parent::to_json();
- $exported_properties = array( 'widget_id', 'widget_id_base', 'sidebar_id', 'width', 'height', 'is_wide' );
- foreach ( $exported_properties as $key ) {
- $this->json[ $key ] = $this->$key;
- }
- }
-
- public function render_content() {
- global $wp_registered_widgets;
- require_once ABSPATH . '/wp-admin/includes/widgets.php';
-
- $widget = $wp_registered_widgets[ $this->widget_id ];
- if ( ! isset( $widget['params'][0] ) ) {
- $widget['params'][0] = array();
- }
-
- $args = array(
- 'widget_id' => $widget['id'],
- 'widget_name' => $widget['name'],
- );
+/** WP_Customize_Nav_Menu_Location_Control class */
+require_once( ABSPATH . WPINC . '/customize/class-wp-customize-nav-menu-location-control.php' );
- $args = wp_list_widget_controls_dynamic_sidebar( array( 0 => $args, 1 => $widget['params'][0] ) );
- echo $this->manager->widgets->get_widget_control( $args );
- }
+/** WP_Customize_Nav_Menu_Name_Control class */
+require_once( ABSPATH . WPINC . '/customize/class-wp-customize-nav-menu-name-control.php' );
- /**
- * Whether the current widget is rendered on the page.
- *
- * @since 4.0.0
- * @access public
- *
- * @return bool Whether the widget is rendered.
- */
- function active_callback() {
- return $this->manager->widgets->is_widget_rendered( $this->widget_id );
- }
-}
+/** WP_Customize_Nav_Menu_Auto_Add_Control class */
+require_once( ABSPATH . WPINC . '/customize/class-wp-customize-nav-menu-auto-add-control.php' );
+/** WP_Customize_New_Menu_Control class */
+require_once( ABSPATH . WPINC . '/customize/class-wp-customize-new-menu-control.php' );