diff -r 2f6f6f7551ca -r 32102edaa81b web/wp-includes/class-wp-customize-control.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/wp-includes/class-wp-customize-control.php Mon Nov 19 18:26:13 2012 +0100 @@ -0,0 +1,567 @@ +$key = $args[ $key ]; + } + + $this->manager = $manager; + $this->id = $id; + + + // Process settings. + if ( empty( $this->settings ) ) + $this->settings = $id; + + $settings = array(); + if ( is_array( $this->settings ) ) { + foreach ( $this->settings as $key => $setting ) { + $settings[ $key ] = $this->manager->get_setting( $setting ); + } + } else { + $this->setting = $this->manager->get_setting( $this->settings ); + $settings['default'] = $this->setting; + } + $this->settings = $settings; + } + + /** + * Enqueue control related scripts/styles. + * + * @since 3.4.0 + */ + public function enqueue() {} + + + /** + * Fetch a setting's value. + * Grabs the main setting by default. + * + * @since 3.4.0 + */ + public final function value( $setting_key = 'default' ) { + if ( isset( $this->settings[ $setting_key ] ) ) + return $this->settings[ $setting_key ]->value(); + } + + /** + * Refresh the parameters passed to the JavaScript via JSON. + * + * @since 3.4.0 + */ + public function to_json() { + $this->json['settings'] = array(); + foreach ( $this->settings as $key => $setting ) { + $this->json['settings'][ $key ] = $setting->id; + } + + $this->json['type'] = $this->type; + } + + /** + * Check if the theme supports the control and check user capabilities. + * + * @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() { + foreach ( $this->settings as $setting ) { + if ( ! $setting->check_capabilities() ) + return false; + } + + $section = $this->manager->get_section( $this->section ); + if ( isset( $section ) && ! $section->check_capabilities() ) + return false; + + return true; + } + + /** + * Check capabilities and render the control. + * + * @since 3.4.0 + */ + public final function maybe_render() { + if ( ! $this->check_capabilities() ) + return; + + do_action( 'customize_render_control', $this ); + do_action( 'customize_render_control_' . $this->id, $this ); + + $this->render(); + } + + /** + * Render the control. Renders the control wrapper, then calls $this->render_content(). + * + * @since 3.4.0 + */ + protected function render() { + $id = 'customize-control-' . str_replace( '[', '-', str_replace( ']', '', $this->id ) ); + $class = 'customize-control customize-control-' . $this->type; + + ?>
  • + render_content(); ?> +
  • settings[ $setting_key ] ) ) + return ''; + + return 'data-customize-setting-link="' . esc_attr( $this->settings[ $setting_key ]->id ) . '"'; + } + + public function link( $setting_key = 'default' ) { + echo $this->get_link( $setting_key ); + } + + /** + * Render the control's content. + * + * Allows the content to be overriden without having to rewrite the wrapper. + * + * @since 3.4.0 + */ + protected function render_content() { + switch( $this->type ) { + case 'text': + ?> + + + + choices ) ) + return; + + $name = '_customize-radio-' . $this->id; + + ?> + label ); ?> + choices as $value => $label ) : + ?> + + choices ) ) + return; + + ?> + + '_customize-dropdown-pages-' . $this->id, + 'echo' => 0, + 'show_option_none' => __( '— Select —' ), + 'option_none_value' => '0', + 'selected' => $this->value(), + ) + ); + + // Hackily add in the data link parameter. + $dropdown = str_replace( 'get_link(), $dropdown ); + + printf( + '', + $this->label, + $dropdown + ); + break; + } + } +} + +class WP_Customize_Color_Control extends WP_Customize_Control { + public $type = 'color'; + public $statuses; + + public function __construct( $manager, $id, $args = array() ) { + $this->statuses = array( '' => __('Default') ); + parent::__construct( $manager, $id, $args ); + } + + public function enqueue() { + wp_enqueue_script( 'farbtastic' ); + wp_enqueue_style( 'farbtastic' ); + } + + public function to_json() { + parent::to_json(); + $this->json['statuses'] = $this->statuses; + } + + public function render_content() { + ?> + + json['removed'] = $this->removed; + + if ( $this->context ) + $this->json['context'] = $this->context; + } + + public function render_content() { + ?> + + statuses = array( '' => __('No Image') ); + + parent::__construct( $manager, $id, $args ); + + $this->add_tab( 'upload-new', __('Upload New'), array( $this, 'tab_upload_new' ) ); + $this->add_tab( 'uploaded', __('Uploaded'), array( $this, 'tab_uploaded' ) ); + + // Early priority to occur before $this->manager->prepare_controls(); + add_action( 'customize_controls_init', array( $this, 'prepare_control' ), 5 ); + } + + /** + * Prepares the control. + * + * If no tabs exist, removes the control from the manager. + * + * @since 3.4.2 + */ + public function prepare_control() { + if ( ! $this->tabs ) + $this->manager->remove_control( $this->id ); + } + + public function to_json() { + parent::to_json(); + $this->json['statuses'] = $this->statuses; + } + + public function render_content() { + $src = $this->value(); + if ( isset( $this->get_url ) ) + $src = call_user_func( $this->get_url, $src ); + + ?> +
    + label ); ?> + +
    + +
    + +
    +
      + tabs as $id => $tab ): ?> +
    • + +
    • + +
    + tabs as $id => $tab ): ?> +
    + +
    + +
    + +
    + +
    +
    + tabs[ $id ] = array( + 'label' => $label, + 'callback' => $callback, + ); + } + + public function remove_tab( $id ) { + unset( $this->tabs[ $id ] ); + } + + public function tab_upload_new() { + if ( ! _device_can_upload() ) { + ?> +

    native app for your device instead.'); ?>

    + +
    + select a file.'); ?> +
    +
    + +
    + +
    + + + + + __( 'Background Image' ), + 'section' => 'background_image', + 'context' => 'custom-background', + 'get_url' => 'get_background_image', + ) ); + + if ( $this->setting->default ) + $this->add_tab( 'default', __('Default'), array( $this, 'tab_default_background' ) ); + } + + public function tab_uploaded() { + $backgrounds = get_posts( array( + 'post_type' => 'attachment', + 'meta_key' => '_wp_attachment_is_custom_background', + 'meta_value' => $this->manager->get_stylesheet(), + 'orderby' => 'none', + 'nopaging' => true, + ) ); + + ?>
    print_tab_image( esc_url_raw( $background->guid ) ); + } + + public function tab_default_background() { + $this->print_tab_image( $this->setting->default ); + } +} + +class WP_Customize_Header_Image_Control extends WP_Customize_Image_Control { + /** + * The processed default headers. + * @since 3.4.2 + * @var array + */ + protected $default_headers; + + /** + * The uploaded headers. + * @since 3.4.2 + * @var array + */ + protected $uploaded_headers; + + public function __construct( $manager ) { + parent::__construct( $manager, 'header_image', array( + 'label' => __( 'Header Image' ), + 'settings' => array( + 'default' => 'header_image', + 'data' => 'header_image_data', + ), + 'section' => 'header_image', + 'context' => 'custom-header', + 'removed' => 'remove-header', + 'get_url' => 'get_header_image', + 'statuses' => array( + '' => __('Default'), + 'remove-header' => __('No Image'), + 'random-default-image' => __('Random Default Image'), + 'random-uploaded-image' => __('Random Uploaded Image'), + ) + ) ); + + // Remove the upload tab. + $this->remove_tab( 'upload-new' ); + } + + /** + * Prepares the control. + * + * If no tabs exist, removes the control from the manager. + * + * @since 3.4.2 + */ + public function prepare_control() { + global $custom_image_header; + if ( empty( $custom_image_header ) ) + return parent::prepare_control(); + + // Process default headers and uploaded headers. + $custom_image_header->process_default_headers(); + $this->default_headers = $custom_image_header->default_headers; + $this->uploaded_headers = get_uploaded_header_images(); + + if ( $this->default_headers ) + $this->add_tab( 'default', __('Default'), array( $this, 'tab_default_headers' ) ); + + if ( ! $this->uploaded_headers ) + $this->remove_tab( 'uploaded' ); + + return parent::prepare_control(); + } + + public function print_header_image( $choice, $header ) { + $header['url'] = set_url_scheme( $header['url'] ); + $header['thumbnail_url'] = set_url_scheme( $header['thumbnail_url'] ); + + $header_image_data = array( 'choice' => $choice ); + foreach ( array( 'attachment_id', 'width', 'height', 'url', 'thumbnail_url' ) as $key ) { + if ( isset( $header[ $key ] ) ) + $header_image_data[ $key ] = $header[ $key ]; + } + + + ?> + + + +
    uploaded_headers as $choice => $header ) + $this->print_header_image( $choice, $header ); + } + + public function tab_default_headers() { + foreach ( $this->default_headers as $choice => $header ) + $this->print_header_image( $choice, $header ); + } +} \ No newline at end of file