WordPress.org

Make WordPress Core

Changeset 10802


Ignore:
Timestamp:
03/17/09 15:39:36 (6 years ago)
Author:
ryan
Message:

Move text widget to WP_Widget. see #8441

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/default-widgets.php

    r10801 r10802  
    283283} 
    284284 
    285  
    286285/** 
    287286 * Calendar widget class 
     
    324323 
    325324/** 
    326  * Display the Text widget, depending on the widget number. 
    327  * 
    328  * Supports multiple text widgets and keeps track of the widget number by using 
    329  * the $widget_args parameter. The option 'widget_text' is used to store the 
    330  * content for the widgets. The content and title are passed through the 
    331  * 'widget_text' and 'widget_title' filters respectively. 
    332  * 
    333  * @since 2.2.0 
    334  * 
    335  * @param array $args Widget arguments. 
    336  * @param int $number Widget number. 
    337  */ 
    338 function wp_widget_text($args, $widget_args = 1) { 
    339     extract( $args, EXTR_SKIP ); 
    340     if ( is_numeric($widget_args) ) 
    341         $widget_args = array( 'number' => $widget_args ); 
    342     $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) ); 
    343     extract( $widget_args, EXTR_SKIP ); 
    344  
    345     $options = get_option('widget_text'); 
    346     if ( !isset($options[$number]) ) 
    347         return; 
    348  
    349     $title = apply_filters('widget_title', $options[$number]['title']); 
    350     $text = apply_filters( 'widget_text', $options[$number]['text'] ); 
    351 ?> 
    352         <?php echo $before_widget; ?> 
    353             <?php if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?> 
     325 * Text widget class 
     326 * 
     327 * @since 2.8.0 
     328 */ 
     329class WP_Widget_Text extends WP_Widget { 
     330 
     331    function WP_Widget_Text() { 
     332        $widget_ops = array('classname' => 'widget_text', 'description' => __('Arbitrary text or HTML')); 
     333        $control_ops = array('width' => 400, 'height' => 350); 
     334        $this->WP_Widget('text', __('Text'), $widget_ops, $control_ops); 
     335    } 
     336 
     337    function widget( $args, $instance ) { 
     338        extract($args); 
     339        $title = empty($instance['title']) ? '' : apply_filters('widget_title', $instance['title']); 
     340        $text = apply_filters( 'widget_text', $instance['text'] ); 
     341        echo $before_widget; 
     342        if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?> 
    354343            <div class="textwidget"><?php echo $text; ?></div> 
    355         <?php echo $after_widget; ?> 
    356 <?php 
    357 } 
    358  
    359 /** 
    360  * Display and process text widget options form. 
    361  * 
    362  * @since 2.2.0 
    363  * 
    364  * @param int $widget_args Widget number. 
    365  */ 
    366 function wp_widget_text_control($widget_args) { 
    367     global $wp_registered_widgets; 
    368     static $updated = false; 
    369  
    370     if ( is_numeric($widget_args) ) 
    371         $widget_args = array( 'number' => $widget_args ); 
    372     $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) ); 
    373     extract( $widget_args, EXTR_SKIP ); 
    374  
    375     $options = get_option('widget_text'); 
    376     if ( !is_array($options) ) 
    377         $options = array(); 
    378  
    379     if ( !$updated && !empty($_POST['sidebar']) ) { 
    380         $sidebar = (string) $_POST['sidebar']; 
    381  
    382         $sidebars_widgets = wp_get_sidebars_widgets(); 
    383         if ( isset($sidebars_widgets[$sidebar]) ) 
    384             $this_sidebar =& $sidebars_widgets[$sidebar]; 
     344        <?php 
     345        echo $after_widget; 
     346    } 
     347 
     348    function update( $new_instance, $old_instance ) { 
     349        $instance = $old_instance; 
     350        $instance['title'] = strip_tags($new_instance['title']); 
     351        if ( current_user_can('unfiltered_html') ) 
     352            $instance['text'] =  $new_instance['text']; 
    385353        else 
    386             $this_sidebar = array(); 
    387  
    388         foreach ( (array) $this_sidebar as $_widget_id ) { 
    389             if ( 'wp_widget_text' == $wp_registered_widgets[$_widget_id]['callback'] && isset($wp_registered_widgets[$_widget_id]['params'][0]['number']) ) { 
    390                 $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number']; 
    391                 if ( !in_array( "text-$widget_number", $_POST['widget-id'] ) ) // the widget has been removed. 
    392                     unset($options[$widget_number]); 
    393             } 
    394         } 
    395  
    396         foreach ( (array) $_POST['widget-text'] as $widget_number => $widget_text ) { 
    397             if ( !isset($widget_text['text']) && isset($options[$widget_number]) ) // user clicked cancel 
    398                 continue; 
    399             $title = strip_tags(stripslashes($widget_text['title'])); 
    400             if ( current_user_can('unfiltered_html') ) 
    401                 $text = stripslashes( $widget_text['text'] ); 
    402             else 
    403                 $text = stripslashes(wp_filter_post_kses( $widget_text['text'] )); 
    404             $options[$widget_number] = compact( 'title', 'text' ); 
    405         } 
    406  
    407         update_option('widget_text', $options); 
    408         $updated = true; 
    409     } 
    410  
    411     if ( -1 == $number ) { 
    412         $title = ''; 
    413         $text = ''; 
    414         $number = '%i%'; 
    415     } else { 
    416         $title = attribute_escape($options[$number]['title']); 
    417         $text = format_to_edit($options[$number]['text']); 
    418     } 
    419 ?> 
    420         <p> 
    421             <input class="widefat" id="text-title-<?php echo $number; ?>" name="widget-text[<?php echo $number; ?>][title]" type="text" value="<?php echo $title; ?>" /> 
    422             <textarea class="widefat" rows="16" cols="20" id="text-text-<?php echo $number; ?>" name="widget-text[<?php echo $number; ?>][text]"><?php echo $text; ?></textarea> 
    423             <input type="hidden" name="widget-text[<?php echo $number; ?>][submit]" value="1" /> 
    424         </p> 
    425 <?php 
    426 } 
    427  
    428 /** 
    429  * Register text widget on startup. 
    430  * 
    431  * @since 2.2.0 
    432  */ 
    433 function wp_widget_text_register() { 
    434     $options = get_option('widget_text'); 
    435     if ( !is_array($options) ) 
    436         $options = array(); 
    437  
    438     $widget_ops = array('classname' => 'widget_text', 'description' => __('Arbitrary text or HTML')); 
    439     $control_ops = array('width' => 400, 'height' => 350, 'id_base' => 'text'); 
    440     $name = __('Text'); 
    441  
    442     $id = false; 
    443     foreach ( (array) array_keys($options) as $o ) { 
    444         // Old widgets can have null values for some reason 
    445         if ( !isset($options[$o]['title']) || !isset($options[$o]['text']) ) 
    446             continue; 
    447         $id = "text-$o"; // Never never never translate an id 
    448         wp_register_sidebar_widget($id, $name, 'wp_widget_text', $widget_ops, array( 'number' => $o )); 
    449         wp_register_widget_control($id, $name, 'wp_widget_text_control', $control_ops, array( 'number' => $o )); 
    450     } 
    451  
    452     // If there are none, we register the widget's existance with a generic template 
    453     if ( !$id ) { 
    454         wp_register_sidebar_widget( 'text-1', $name, 'wp_widget_text', $widget_ops, array( 'number' => -1 ) ); 
    455         wp_register_widget_control( 'text-1', $name, 'wp_widget_text_control', $control_ops, array( 'number' => -1 ) ); 
     354            $instance['text'] = wp_filter_post_kses( $new_instance['text'] ); 
     355        return $instance; 
     356    } 
     357 
     358    function form( $instance ) { 
     359        $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'text' => '' ) ); 
     360        $title = strip_tags($instance['title']); 
     361        $text = format_to_edit($instance['text']); 
     362?> 
     363            <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo attribute_escape($title); ?>" /></label></p> 
     364            <textarea class="widefat" rows="16" cols="20" id="<?php echo $this->get_field_id('text'); ?>" name="<?php echo $this->get_field_name('text'); ?>"><?php echo $text; ?></textarea> 
     365            <input type="hidden" id="<?php echo $this->get_field_id('submit'); ?>" name="<?php echo $this->get_field_name('submit'); ?>" value="1" /> 
     366<?php 
    456367    } 
    457368} 
     
    13271238    new WP_Widget_Search(); 
    13281239 
     1240    new WP_Widget_Text(); 
     1241 
    13291242    $widget_ops = array('classname' => 'widget_recent_entries', 'description' => __( "The most recent posts on your blog") ); 
    13301243    wp_register_sidebar_widget('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries', $widget_ops); 
     
    13361249 
    13371250    wp_widget_categories_register(); 
    1338     wp_widget_text_register(); 
    13391251    wp_widget_rss_register(); 
    13401252    wp_widget_recent_comments_register(); 
Note: See TracChangeset for help on using the changeset viewer.