Changeset 27904
- Timestamp:
- 04/02/2014 06:11:49 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/class-wp-customize-widgets.php
r27903 r27904 28 28 */ 29 29 protected $core_widget_id_bases = array( 30 'archives', 31 'calendar', 32 'categories', 33 'links', 34 'meta', 35 'nav_menu', 36 'pages', 37 'recent-comments', 38 'recent-posts', 39 'rss', 40 'search', 41 'tag_cloud', 42 'text', 30 'archives', 'calendar', 'categories', 'links', 'meta', 31 'nav_menu', 'pages', 'recent-comments', 'recent-posts', 32 'rss', 'search', 'tag_cloud', 'text', 43 33 ); 44 34 … … 127 117 public function setup_widget_addition_previews() { 128 118 $is_customize_preview = false; 119 129 120 if ( ! empty( $this->manager ) && ! is_admin() && 'on' === $this->get_post_value( 'wp_customize' ) ) { 130 121 $is_customize_preview = check_ajax_referer( 'preview-customize_' . $this->manager->get_stylesheet(), 'nonce', false ); … … 149 140 if ( isset( $_POST['customized'] ) ) { 150 141 $customized = json_decode( $this->get_post_value( 'customized' ), true ); 151 } 152 153 // Input from ajax widget update request. 154 else { 142 } else { // Input from ajax widget update request. 155 143 $customized = array(); 156 144 $id_base = $this->get_post_value( 'id_base' ); … … 259 247 $instance = array(); 260 248 } 261 } 262 // Multi widget 263 else if ( false === $instance || ! isset( $instance[$widget_number] ) ) { 249 } else if ( false === $instance || ! isset( $instance[$widget_number] ) ) { // Multi widget 264 250 if ( empty( $instance ) ) { 265 251 $instance = array( '_multiwidget' => 1 ); … … 352 338 $setting_id = $this->get_setting_id( $widget_id ); 353 339 $setting_args = $this->get_setting_args( $setting_id ); 340 354 341 $setting_args['sanitize_callback'] = array( $this, 'sanitize_widget_instance' ); 355 342 $setting_args['sanitize_js_callback'] = array( $this, 'sanitize_widget_js_instance' ); 343 356 344 $this->manager->add_setting( $setting_id, $setting_args ); 345 357 346 $new_setting_ids[] = $setting_id; 358 347 } … … 362 351 $sidebar_widget_ids = array(); 363 352 } 353 364 354 $is_registered_sidebar = isset( $GLOBALS['wp_registered_sidebars'][$sidebar_id] ); 365 355 $is_inactive_widgets = ( 'wp_inactive_widgets' === $sidebar_id ); … … 370 360 $setting_id = sprintf( 'sidebars_widgets[%s]', $sidebar_id ); 371 361 $setting_args = $this->get_setting_args( $setting_id ); 362 372 363 $setting_args['sanitize_callback'] = array( $this, 'sanitize_sidebar_widgets' ); 373 364 $setting_args['sanitize_js_callback'] = array( $this, 'sanitize_sidebar_widgets_js_instance' ); 365 374 366 $this->manager->add_setting( $setting_id, $setting_args ); 375 367 $new_setting_ids[] = $setting_id; … … 378 370 $section_id = sprintf( 'sidebar-widgets-%s', $sidebar_id ); 379 371 if ( $is_active_sidebar ) { 372 380 373 $section_args = array( 381 374 /* translators: %s: sidebar name */ … … 385 378 ); 386 379 $section_args = apply_filters( 'customizer_widgets_section_args', $section_args, $section_id, $sidebar_id ); 380 387 381 $this->manager->add_section( $section_id, $section_args ); 388 382 389 $control = new WP_Widget_Area_Customize_Control( 390 $this->manager, 391 $setting_id, 392 array( 393 'section' => $section_id, 394 'sidebar_id' => $sidebar_id, 395 'priority' => count( $sidebar_widget_ids ), // place Add Widget & Reorder buttons at end 396 ) 397 ); 383 $control = new WP_Widget_Area_Customize_Control( $this->manager, $setting_id, array( 384 'section' => $section_id, 385 'sidebar_id' => $sidebar_id, 386 'priority' => count( $sidebar_widget_ids ), // place 'Add Widget' and 'Reorder' buttons at end. 387 ) ); 398 388 $new_setting_ids[] = $setting_id; 389 399 390 $this->manager->add_control( $control ); 400 391 } … … 408 399 continue; 409 400 } 401 410 402 $registered_widget = $GLOBALS['wp_registered_widgets'][$widget_id]; 411 $setting_id = $this->get_setting_id( $widget_id ); 412 $id_base = $GLOBALS['wp_registered_widget_controls'][$widget_id]['id_base']; 403 $setting_id = $this->get_setting_id( $widget_id ); 404 $id_base = $GLOBALS['wp_registered_widget_controls'][$widget_id]['id_base']; 405 413 406 assert( false !== is_active_widget( $registered_widget['callback'], $registered_widget['id'], false, false ) ); 414 $control = new WP_Widget_Form_Customize_Control( 415 $this->manager, 416 $setting_id, 417 array( 418 'label' => $registered_widget['name'], 419 'section' => $section_id, 420 'sidebar_id' => $sidebar_id, 421 'widget_id' => $widget_id, 422 'widget_id_base' => $id_base, 423 'priority' => $i, 424 'width' => $wp_registered_widget_controls[$widget_id]['width'], 425 'height' => $wp_registered_widget_controls[$widget_id]['height'], 426 'is_wide' => $this->is_wide_widget( $widget_id ), 427 ) 428 ); 407 408 $control = new WP_Widget_Form_Customize_Control( $this->manager, $setting_id, array( 409 'label' => $registered_widget['name'], 410 'section' => $section_id, 411 'sidebar_id' => $sidebar_id, 412 'widget_id' => $widget_id, 413 'widget_id_base' => $id_base, 414 'priority' => $i, 415 'width' => $wp_registered_widget_controls[$widget_id]['width'], 416 'height' => $wp_registered_widget_controls[$widget_id]['height'], 417 'is_wide' => $this->is_wide_widget( $widget_id ), 418 ) ); 429 419 $this->manager->add_control( $control ); 430 420 } … … 440 430 } 441 431 } 442 443 432 $this->remove_prepreview_filters(); 444 433 } … … 455 444 public function get_setting_id( $widget_id ) { 456 445 $parsed_widget_id = $this->parse_widget_id( $widget_id ); 457 $setting_id = sprintf( 'widget_%s', $parsed_widget_id['id_base'] ); 446 $setting_id = sprintf( 'widget_%s', $parsed_widget_id['id_base'] ); 447 458 448 if ( ! is_null( $parsed_widget_id['number'] ) ) { 459 449 $setting_id .= sprintf( '[%d]', $parsed_widget_id['number'] ); … … 480 470 public function is_wide_widget( $widget_id ) { 481 471 global $wp_registered_widget_controls; 472 482 473 $parsed_widget_id = $this->parse_widget_id( $widget_id ); 483 $width = $wp_registered_widget_controls[$widget_id]['width'];484 $is_core = in_array( $parsed_widget_id['id_base'], $this->core_widget_id_bases );485 $is_wide = ( $width > 250 && ! $is_core );474 $width = $wp_registered_widget_controls[$widget_id]['width']; 475 $is_core = in_array( $parsed_widget_id['id_base'], $this->core_widget_id_bases ); 476 $is_wide = ( $width > 250 && ! $is_core ); 486 477 487 478 /** … … 510 501 'id_base' => null, 511 502 ); 503 512 504 if ( preg_match( '/^(.+)-(\d+)$/', $widget_id, $matches ) ) { 513 505 $parsed['id_base'] = $matches[1]; … … 537 529 $id_base = $matches[2]; 538 530 $number = isset( $matches[3] ) ? intval( $matches[3] ) : null; 531 539 532 return compact( 'id_base', 'number' ); 540 533 } … … 555 548 */ 556 549 $available_widgets = array(); 550 557 551 foreach ( $this->get_available_widgets() as $available_widget ) { 558 552 unset( $available_widget['control_tpl'] ); … … 593 587 */ 594 588 global $wp_scripts; 589 595 590 $exports = array( 596 'nonce' => wp_create_nonce( 'update-widget' ),591 'nonce' => wp_create_nonce( 'update-widget' ), 597 592 'registered_sidebars' => array_values( $GLOBALS['wp_registered_sidebars'] ), 598 'registered_widgets' => $GLOBALS['wp_registered_widgets'],599 'available_widgets' => $available_widgets, // @todo Merge this with registered_widgets593 'registered_widgets' => $GLOBALS['wp_registered_widgets'], 594 'available_widgets' => $available_widgets, // @todo Merge this with registered_widgets 600 595 'i18n' => array( 601 'save_btn_label' => __( 'Apply' ),596 'save_btn_label' => __( 'Apply' ), 602 597 // @todo translate? do we want these tooltips? 603 'save_btn_tooltip' => ( 'Save and preview changes before publishing them.' ),604 'remove_btn_label' => __( 'Remove' ),598 'save_btn_tooltip' => ( 'Save and preview changes before publishing them.' ), 599 'remove_btn_label' => __( 'Remove' ), 605 600 'remove_btn_tooltip' => ( 'Trash widget by moving it to the inactive widgets sidebar.' ), 606 'error' => __( 'An error has occurred. Please reload the page and try again.' ),601 'error' => __( 'An error has occurred. Please reload the page and try again.' ), 607 602 ), 608 'tpl' => array(603 'tpl' => array( 609 604 'widget_reorder_nav' => $widget_reorder_nav_tpl, 610 'move_widget_area' => $move_widget_area_tpl,605 'move_widget_area' => $move_widget_area_tpl, 611 606 ), 612 607 ); 608 613 609 foreach ( $exports['registered_widgets'] as &$registered_widget ) { 614 610 unset( $registered_widget['callback'] ); // may not be JSON-serializeable … … 658 654 public function get_setting_args( $id, $overrides = array() ) { 659 655 $args = array( 660 'type' => 'option',656 'type' => 'option', 661 657 'capability' => 'edit_theme_options', 662 'transport' => 'refresh',663 'default' => array(),658 'transport' => 'refresh', 659 'default' => array(), 664 660 ); 665 661 $args = array_merge( $args, $overrides ); … … 691 687 public function sanitize_sidebar_widgets( $widget_ids ) { 692 688 global $wp_registered_widgets; 693 $widget_ids = array_map( 'strval', (array) $widget_ids ); 689 690 $widget_ids = array_map( 'strval', (array) $widget_ids ); 694 691 $sanitized_widget_ids = array(); 692 695 693 foreach ( $widget_ids as $widget_id ) { 696 694 if ( array_key_exists( $widget_id, $wp_registered_widgets ) ) { … … 740 738 741 739 $args = array( 742 'widget_id' => $widget['id'],740 'widget_id' => $widget['id'], 743 741 'widget_name' => $widget['name'], 744 '_display' => 'template',742 '_display' => 'template', 745 743 ); 746 744 747 745 $is_disabled = false; 748 $is_multi_widget = ( 749 isset( $wp_registered_widget_controls[$widget['id']]['id_base'] ) 750 && 751 isset( $widget['params'][0]['number'] ) 752 ); 746 $is_multi_widget = ( isset( $wp_registered_widget_controls[$widget['id']]['id_base'] ) && isset( $widget['params'][0]['number'] ) ); 753 747 if ( $is_multi_widget ) { 754 $id_base = $wp_registered_widget_controls[$widget['id']]['id_base'];748 $id_base = $wp_registered_widget_controls[$widget['id']]['id_base']; 755 749 $args['_temp_id'] = "$id_base-__i__"; 756 750 $args['_multi_num'] = next_widget_id_number( $id_base ); … … 758 752 } else { 759 753 $args['_add'] = 'single'; 754 760 755 if ( $sidebar && 'wp_inactive_widgets' !== $sidebar ) { 761 756 $is_disabled = true; … … 768 763 769 764 // The properties here are mapped to the Backbone Widget model. 770 $available_widget = array_merge( 771 $available_widget, 772 array( 773 'temp_id' => isset( $args['_temp_id'] ) ? $args['_temp_id'] : null, 774 'is_multi' => $is_multi_widget, 775 'control_tpl' => $control_tpl, 776 'multi_number' => ( $args['_add'] === 'multi' ) ? $args['_multi_num'] : false, 777 'is_disabled' => $is_disabled, 778 'id_base' => $id_base, 779 'transport' => 'refresh', 780 'width' => $wp_registered_widget_controls[$widget['id']]['width'], 781 'height' => $wp_registered_widget_controls[$widget['id']]['height'], 782 'is_wide' => $this->is_wide_widget( $widget['id'] ), 783 ) 784 ); 765 $available_widget = array_merge( $available_widget, array( 766 'temp_id' => isset( $args['_temp_id'] ) ? $args['_temp_id'] : null, 767 'is_multi' => $is_multi_widget, 768 'control_tpl' => $control_tpl, 769 'multi_number' => ( $args['_add'] === 'multi' ) ? $args['_multi_num'] : false, 770 'is_disabled' => $is_disabled, 771 'id_base' => $id_base, 772 'transport' => 'refresh', 773 'width' => $wp_registered_widget_controls[$widget['id']]['width'], 774 'height' => $wp_registered_widget_controls[$widget['id']]['height'], 775 'is_wide' => $this->is_wide_widget( $widget['id'] ), 776 ) ); 785 777 786 778 $available_widgets[] = $available_widget; … … 815 807 public function get_widget_control( $args ) { 816 808 ob_start(); 809 817 810 call_user_func_array( 'wp_widget_control', $args ); 818 811 $replacements = array( … … 820 813 '</form>' => '</div><!-- .form -->', 821 814 ); 815 822 816 $control_tpl = ob_get_clean(); 817 823 818 $control_tpl = str_replace( array_keys( $replacements ), array_values( $replacements ), $control_tpl ); 819 824 820 return $control_tpl; 825 821 } … … 900 896 */ 901 897 public function export_preview_data() { 898 902 899 // Prepare customizer settings to pass to Javascript. 903 900 $settings = array( … … 1020 1017 return $value; 1021 1018 } 1022 $invalid = ( 1023 empty( $value['is_widget_customizer_js_value'] ) 1024 || 1025 empty( $value['instance_hash_key'] ) 1026 || 1027 empty( $value['encoded_serialized_instance'] ) 1028 ); 1029 if ( $invalid ) { 1019 1020 if ( empty( $value['is_widget_customizer_js_value'] ) 1021 || empty( $value['instance_hash_key'] ) 1022 || empty( $value['encoded_serialized_instance'] ) ) 1023 { 1030 1024 return null; 1031 1025 } 1026 1032 1027 $decoded = base64_decode( $value['encoded_serialized_instance'], true ); 1028 1033 1029 if ( false === $decoded ) { 1034 1030 return null; 1035 1031 } 1036 1032 $instance = unserialize( $decoded ); 1033 1037 1034 if ( false === $instance ) { 1038 1035 return null; … … 1056 1053 if ( empty( $value['is_widget_customizer_js_value'] ) ) { 1057 1054 $serialized = serialize( $value ); 1055 1058 1056 $value = array( 1059 'encoded_serialized_instance' => base64_encode( $serialized ),1060 'title' => empty( $value['title'] ) ? '' : $value['title'],1057 'encoded_serialized_instance' => base64_encode( $serialized ), 1058 'title' => empty( $value['title'] ) ? '' : $value['title'], 1061 1059 'is_widget_customizer_js_value' => true, 1062 'instance_hash_key' => $this->get_instance_hash_key( $value ),1060 'instance_hash_key' => $this->get_instance_hash_key( $value ), 1063 1061 ); 1064 1062 } … … 1167 1165 // Obtain the widget control with the updated instance in place. 1168 1166 ob_start(); 1167 1169 1168 $form = $wp_registered_widget_controls[$widget_id]; 1170 1169 if ( $form ) { 1171 1170 call_user_func_array( $form['callback'], $form['params'] ); 1172 1171 } 1172 1173 1173 $form = ob_get_clean(); 1174 1174 1175 1175 // Obtain the widget instance. 1176 1176 $option = get_option( $option_name ); 1177 1177 1178 if ( null !== $parsed_id['number'] ) { 1178 1179 $instance = $option[$parsed_id['number']]; … … 1182 1183 1183 1184 $this->stop_capturing_option_updates(); 1185 1184 1186 return compact( 'instance', 'form' ); 1185 1187 } … … 1315 1317 1316 1318 $this->_is_capturing_option_updates = true; 1319 1317 1320 add_filter( 'pre_update_option', array( $this, '_capture_filter_pre_update_option' ), 10, 3 ); 1318 1321 } … … 1321 1324 * Pre-filter captured option values before updating. 1322 1325 * 1323 * @access private 1326 * @since 3.9.0 1327 * @access public 1328 * 1324 1329 * @param mixed $new_value 1325 1330 * @param string $option_name … … 1327 1332 * @return mixed 1328 1333 */ 1329 p rivatefunction _capture_filter_pre_update_option( $new_value, $option_name, $old_value ) {1334 public function _capture_filter_pre_update_option( $new_value, $option_name, $old_value ) { 1330 1335 if ( $this->is_option_capture_ignored( $option_name ) ) { 1331 1336 return; … … 1344 1349 * Pre-filter captured option values before retrieving. 1345 1350 * 1346 * @access private 1351 * @since 3.9.0 1352 * @access public 1353 * 1347 1354 * @param mixed $value Option 1348 1355 * @return mixed 1349 1356 */ 1350 p rivatefunction _capture_filter_pre_get_option( $value ) {1357 public function _capture_filter_pre_get_option( $value ) { 1351 1358 $option_name = preg_replace( '/^pre_option_/', '', current_filter() ); 1359 1352 1360 if ( isset( $this->_captured_options[$option_name] ) ) { 1353 1361 $value = $this->_captured_options[$option_name];
Note: See TracChangeset
for help on using the changeset viewer.