2012-03-28 06:14:09 +02:00
< ? php
/**
* Customize Control Class
*
* @ package WordPress
* @ subpackage Customize
* @ since 3.4 . 0
*/
class WP_Customize_Control {
public $manager ;
public $id ;
2012-06-10 02:32:19 +02:00
// All settings tied to the control.
2012-03-28 06:14:09 +02:00
public $settings ;
2012-06-10 02:32:19 +02:00
// The primary setting for the control (if there is one).
public $setting = 'default' ;
2012-03-28 06:14:09 +02:00
public $priority = 10 ;
public $section = '' ;
public $label = '' ;
// @todo: remove choices
public $choices = array ();
2012-03-29 08:35:54 +02:00
public $json = array ();
2012-03-28 06:14:09 +02:00
public $type = 'text' ;
/**
* Constructor .
*
* If $args [ 'settings' ] is not defined , use the $id as the setting ID .
*
* @ since 3.4 . 0
*/
function __construct ( $manager , $id , $args = array () ) {
2012-03-29 08:35:54 +02:00
$keys = array_keys ( get_object_vars ( $this ) );
2012-03-28 06:14:09 +02:00
foreach ( $keys as $key ) {
if ( isset ( $args [ $key ] ) )
$this -> $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
*/
2012-04-25 23:03:29 +02:00
public function enqueue () {}
2012-03-28 06:14:09 +02:00
/**
* 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 ();
}
2012-03-29 08:35:54 +02:00
/**
* Refresh the parameters passed to the JavaScript via JSON .
*
* @ since 3.4 . 0
*/
public function to_json () {
$this -> json [ 'settings' ] = array ();
2012-03-28 06:14:09 +02:00
foreach ( $this -> settings as $key => $setting ) {
2012-03-29 08:35:54 +02:00
$this -> json [ 'settings' ][ $key ] = $setting -> id ;
2012-03-28 06:14:09 +02:00
}
2012-03-29 08:35:54 +02:00
$this -> json [ 'type' ] = $this -> type ;
2012-03-28 06:14:09 +02:00
}
/**
* 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 ;
}
/**
2012-04-04 19:32:03 +02:00
* Check capabilities and render the control .
2012-03-28 06:14:09 +02:00
*
* @ 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 () {
2012-03-28 11:10:29 +02:00
$id = 'customize-control-' . str_replace ( '[' , '-' , str_replace ( ']' , '' , $this -> id ) );
2012-03-28 06:14:09 +02:00
$class = 'customize-control customize-control-' . $this -> type ;
2012-04-18 19:13:31 +02:00
?> <li id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>">
2012-03-28 06:14:09 +02:00
< ? php $this -> render_content (); ?>
</ li >< ? php
}
2012-03-28 11:45:51 +02:00
public function get_link ( $setting_key = 'default' ) {
2012-03-28 06:14:09 +02:00
if ( ! isset ( $this -> settings [ $setting_key ] ) )
2012-03-28 11:45:51 +02:00
return '' ;
2012-03-28 06:14:09 +02:00
2012-03-28 11:45:51 +02:00
return 'data-customize-setting-link="' . esc_attr ( $this -> settings [ $setting_key ] -> id ) . '"' ;
}
public function link ( $setting_key = 'default' ) {
echo $this -> get_link ( $setting_key );
2012-03-28 06:14:09 +02:00
}
/**
* 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' :
?>
< label >
< span class = " customize-control-title " >< ? php echo esc_html ( $this -> label ); ?> </span>
< input type = " text " value = " <?php echo esc_attr( $this->value () ); ?> " < ? php $this -> link (); ?> />
</ label >
< ? php
break ;
case 'checkbox' :
?>
< label >
2012-04-25 23:03:29 +02:00
< input type = " checkbox " value = " <?php echo esc_attr( $this->value () ); ?> " < ? php $this -> link (); checked ( $this -> value () ); ?> />
2012-05-12 02:48:20 +02:00
< ? php echo esc_html ( $this -> label ); ?>
2012-03-28 06:14:09 +02:00
</ label >
< ? php
break ;
case 'radio' :
if ( empty ( $this -> choices ) )
return ;
$name = '_customize-radio-' . $this -> id ;
?>
< span class = " customize-control-title " >< ? php echo esc_html ( $this -> label ); ?> </span>
< ? php
foreach ( $this -> choices as $value => $label ) :
?>
< label >
< input type = " radio " value = " <?php echo esc_attr( $value ); ?> " name = " <?php echo esc_attr( $name ); ?> " < ? php $this -> link (); checked ( $this -> value (), $value ); ?> />
< ? php echo esc_html ( $label ); ?> <br/>
</ label >
< ? php
endforeach ;
break ;
case 'select' :
if ( empty ( $this -> choices ) )
return ;
?>
< label >
< span class = " customize-control-title " >< ? php echo esc_html ( $this -> label ); ?> </span>
2012-04-25 23:03:29 +02:00
< select < ? php $this -> link (); ?> >
2012-03-28 06:14:09 +02:00
< ? php
foreach ( $this -> choices as $value => $label )
echo '<option value="' . esc_attr ( $value ) . '"' . selected ( $this -> value (), $value , false ) . '>' . $label . '</option>' ;
?>
</ select >
</ label >
< ? php
break ;
case 'dropdown-pages' :
2012-03-28 11:45:51 +02:00
$dropdown = wp_dropdown_pages (
array (
'name' => '_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 ( '<select' , '<select ' . $this -> get_link (), $dropdown );
2012-03-28 06:14:09 +02:00
printf (
'<label class="customize-control-select"><span class="customize-control-title">%s</span> %s</label>' ,
$this -> label ,
2012-03-28 11:45:51 +02:00
$dropdown
2012-03-28 06:14:09 +02:00
);
break ;
}
}
2012-03-29 08:35:54 +02:00
}
2012-04-25 23:03:29 +02:00
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 () {
?>
< label >
< span class = " customize-control-title " >< ? php echo esc_html ( $this -> label ); ?> </span>
< div class = " customize-control-content " >
< div class = " dropdown " >
< div class = " dropdown-content " >
< div class = " dropdown-status " ></ div >
</ div >
< div class = " dropdown-arrow " ></ div >
</ div >
2012-05-26 20:44:31 +02:00
< input class = " color-picker-hex " type = " text " maxlength = " 7 " placeholder = " <?php esc_attr_e('Hex Value'); ?> " />
2012-04-25 23:03:29 +02:00
</ div >
< div class = " farbtastic-placeholder " ></ div >
</ label >
< ? php
}
}
2012-03-29 08:35:54 +02:00
class WP_Customize_Upload_Control extends WP_Customize_Control {
public $type = 'upload' ;
public $removed = '' ;
public $context ;
public function enqueue () {
wp_enqueue_script ( 'wp-plupload' );
}
public function to_json () {
parent :: to_json ();
$this -> json [ 'removed' ] = $this -> removed ;
if ( $this -> context )
$this -> json [ 'context' ] = $this -> context ;
}
public function render_content () {
?>
< label >
< span class = " customize-control-title " >< ? php echo esc_html ( $this -> label ); ?> </span>
< div >
< a href = " # " class = " button-secondary upload " >< ? php _e ( 'Upload' ); ?> </a>
< a href = " # " class = " remove " >< ? php _e ( 'Remove' ); ?> </a>
</ div >
</ label >
< ? php
}
}
class WP_Customize_Image_Control extends WP_Customize_Upload_Control {
public $type = 'image' ;
public $get_url ;
2012-04-25 23:03:29 +02:00
public $statuses ;
2012-03-29 08:35:54 +02:00
2012-04-20 04:39:55 +02:00
protected $tabs = array ();
public function __construct ( $manager , $id , $args ) {
2012-04-25 23:03:29 +02:00
$this -> statuses = array ( '' => __ ( 'No Image' ) );
2012-04-20 04:39:55 +02:00
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' ) );
}
2012-04-25 23:03:29 +02:00
public function to_json () {
parent :: to_json ();
$this -> json [ 'statuses' ] = $this -> statuses ;
}
2012-03-29 08:35:54 +02:00
public function render_content () {
$src = $this -> value ();
if ( isset ( $this -> get_url ) )
$src = call_user_func ( $this -> get_url , $src );
?>
2012-06-06 23:45:17 +02:00
< div class = " customize-image-picker " >
2012-03-29 08:35:54 +02:00
< span class = " customize-control-title " >< ? php echo esc_html ( $this -> label ); ?> </span>
2012-04-19 08:29:54 +02:00
2012-04-25 23:03:29 +02:00
< div class = " customize-control-content " >
< div class = " dropdown preview-thumbnail " >
< div class = " dropdown-content " >
< ? php if ( empty ( $src ) ) : ?>
< img style = " display:none; " />
< ? php else : ?>
2012-05-18 22:22:57 +02:00
< img src = " <?php echo esc_url( set_url_scheme( $src ) ); ?> " />
2012-04-25 23:03:29 +02:00
< ? php endif ; ?>
< div class = " dropdown-status " ></ div >
</ div >
< div class = " dropdown-arrow " ></ div >
2012-04-20 04:39:55 +02:00
</ div >
2012-04-19 08:29:54 +02:00
</ div >
< div class = " library " >
< ul >
2012-04-20 04:39:55 +02:00
< ? php foreach ( $this -> tabs as $id => $tab ) : ?>
< li data - customize - tab = '<?php echo esc_attr( $id ); ?>' >
< ? php echo esc_html ( $tab [ 'label' ] ); ?>
2012-04-19 08:29:54 +02:00
</ li >
2012-03-29 08:35:54 +02:00
< ? php endforeach ; ?>
2012-04-19 08:29:54 +02:00
</ ul >
2012-04-20 04:39:55 +02:00
< ? php foreach ( $this -> tabs as $id => $tab ) : ?>
< div class = " library-content " data - customize - tab = '<?php echo esc_attr( $id ); ?>' >
< ? php call_user_func ( $tab [ 'callback' ] ); ?>
2012-04-19 08:29:54 +02:00
</ div >
< ? php endforeach ; ?>
2012-03-29 08:35:54 +02:00
</ div >
2012-04-20 04:39:55 +02:00
< div class = " actions " >
< a href = " # " class = " remove " >< ? php _e ( 'Remove Image' ); ?> </a>
</ div >
2012-06-06 23:45:17 +02:00
</ div >
2012-03-29 08:35:54 +02:00
< ? php
}
2012-04-20 04:39:55 +02:00
public function add_tab ( $id , $label , $callback ) {
$this -> tabs [ $id ] = array (
'label' => $label ,
'callback' => $callback ,
);
}
public function remove_tab ( $id ) {
unset ( $this -> tabs [ $id ] );
}
public function tab_upload_new () {
2012-06-06 23:45:17 +02:00
if ( ! _device_can_upload () ) {
?>
< p >< ? php _e ( 'The web browser on your device cannot be used to upload files. You may be able to use the <a href="http://wordpress.org/extend/mobile/">native app for your device</a> instead.' ); ?> </p>
< ? php
} else {
?>
< div class = " upload-dropzone " >
< ? php _e ( 'Drop a file here or <a href="#" class="upload">select a file</a>.' ); ?>
</ div >
< div class = " upload-fallback " >
< span class = " button-secondary " >< ? php _e ( 'Select File' ); ?> </span>
</ div >
< ? php
}
2012-04-20 04:39:55 +02:00
}
public function tab_uploaded () {
?>
< div class = " uploaded-target " ></ div >
< ? php
}
2012-05-25 22:26:25 +02:00
public function print_tab_image ( $url , $thumbnail_url = null ) {
$url = set_url_scheme ( $url );
$thumbnail_url = ( $thumbnail_url ) ? set_url_scheme ( $thumbnail_url ) : $url ;
?>
< a href = " # " class = " thumbnail " data - customize - image - value = " <?php echo esc_url( $url ); ?> " >
< img src = " <?php echo esc_url( $thumbnail_url ); ?> " />
</ a >
< ? php
}
}
class WP_Customize_Background_Image_Control extends WP_Customize_Image_Control {
public function __construct ( $manager ) {
parent :: __construct ( $manager , 'background_image' , array (
'label' => __ ( '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 ,
) );
?> <div class="uploaded-target"></div><?php
if ( empty ( $backgrounds ) )
return ;
foreach ( ( array ) $backgrounds as $background )
$this -> print_tab_image ( esc_url_raw ( $background -> guid ) );
}
public function tab_default_background () {
$this -> print_tab_image ( $this -> setting -> default );
}
2012-04-04 19:32:03 +02:00
}
2012-04-20 04:39:55 +02:00
class WP_Customize_Header_Image_Control extends WP_Customize_Image_Control {
public function __construct ( $manager ) {
parent :: __construct ( $manager , 'header_image' , array (
2012-04-25 23:03:29 +02:00
'label' => __ ( 'Header Image' ),
2012-06-10 02:32:19 +02:00
'settings' => array (
'default' => 'header_image' ,
'data' => 'header_image_data' ,
),
2012-05-25 21:52:54 +02:00
'section' => 'header_image' ,
2012-04-25 23:03:29 +02:00
'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' ),
)
2012-04-20 04:39:55 +02:00
) );
$this -> add_tab ( 'default' , __ ( 'Default' ), array ( $this , 'tab_default_headers' ) );
}
2012-06-10 02:32:19 +02:00
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 ];
}
?>
< a href = " # " class = " thumbnail "
data - customize - image - value = " <?php echo esc_url( $header['url'] ); ?> "
data - customize - header - image - data = " <?php echo esc_attr( json_encode( $header_image_data ) ); ?> " >
< img src = " <?php echo esc_url( $header['thumbnail_url'] ); ?> " />
</ a >
< ? php
}
2012-04-20 04:39:55 +02:00
public function tab_uploaded () {
$headers = get_uploaded_header_images ();
?> <div class="uploaded-target"></div><?php
2012-06-10 02:32:19 +02:00
foreach ( $headers as $choice => $header )
$this -> print_header_image ( $choice , $header );
2012-04-20 04:39:55 +02:00
}
public function tab_default_headers () {
global $custom_image_header ;
$custom_image_header -> process_default_headers ();
2012-06-10 02:32:19 +02:00
foreach ( $custom_image_header -> default_headers as $choice => $header )
$this -> print_header_image ( $choice , $header );
2012-04-20 04:39:55 +02:00
}
}