From cd5949d0c286ba0c55b8cc7a804bf9be80896768 Mon Sep 17 00:00:00 2001 From: ryan Date: Wed, 18 Mar 2009 01:50:20 +0000 Subject: [PATCH] Move categories widget to WP_Widget. see #8441 git-svn-id: http://svn.automattic.com/wordpress/trunk@10809 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/default-widgets.php | 215 +++++++------------------------- 1 file changed, 47 insertions(+), 168 deletions(-) diff --git a/wp-includes/default-widgets.php b/wp-includes/default-widgets.php index 92db18193..1f76f0611 100644 --- a/wp-includes/default-widgets.php +++ b/wp-includes/default-widgets.php @@ -83,7 +83,6 @@ class WP_Widget_Pages extends WP_Widget { } - /** * Links widget class * @@ -362,40 +361,33 @@ class WP_Widget_Text extends WP_Widget { } /** - * Display categories widget. + * Categories widget class * - * Allows multiple category widgets. - * - * @since 2.2.0 - * - * @param array $args Widget arguments. - * @param int $number Widget number. + * @since 2.8.0 */ -function wp_widget_categories($args, $widget_args = 1) { - extract($args, EXTR_SKIP); - if ( is_numeric($widget_args) ) - $widget_args = array( 'number' => $widget_args ); - $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) ); - extract($widget_args, EXTR_SKIP); +class WP_Widget_Categories extends WP_Widget { - $options = get_option('widget_categories'); - if ( !isset($options[$number]) ) - return; + function WP_Widget_Categories() { + $widget_ops = array( 'classname' => 'widget_categories', 'description' => __( "A list or dropdown of categories" ) ); + $this->WP_Widget('categories', __('Categories'), $widget_ops); + } - $c = $options[$number]['count'] ? '1' : '0'; - $h = $options[$number]['hierarchical'] ? '1' : '0'; - $d = $options[$number]['dropdown'] ? '1' : '0'; + function widget( $args, $instance ) { + extract( $args ); - $title = empty($options[$number]['title']) ? __('Categories') : apply_filters('widget_title', $options[$number]['title']); + $title = empty( $instance['title'] ) ? __( 'Categories' ) : apply_filters('widget_title', $instance['title']); + $c = $instance['count'] ? '1' : '0'; + $h = $instance['hierarchical'] ? '1' : '0'; + $d = $instance['dropdown'] ? '1' : '0'; - echo $before_widget; - echo $before_title . $title . $after_title; + echo $before_widget; + echo $before_title . $title . $after_title; - $cat_args = array('orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h); + $cat_args = array('orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h); - if ( $d ) { - $cat_args['show_option_none'] = __('Select Category'); - wp_dropdown_categories($cat_args); + if ( $d ) { + $cat_args['show_option_none'] = __('Select Category'); + wp_dropdown_categories($cat_args); ?> $widget_args ); - $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) ); - extract($widget_args, EXTR_SKIP); - - $options = get_option('widget_categories'); - - if ( !is_array( $options ) ) - $options = array(); - - if ( !$updated && !empty($_POST['sidebar']) ) { - $sidebar = (string) $_POST['sidebar']; - - $sidebars_widgets = wp_get_sidebars_widgets(); - if ( isset($sidebars_widgets[$sidebar]) ) - $this_sidebar =& $sidebars_widgets[$sidebar]; - else - $this_sidebar = array(); - - foreach ( (array) $this_sidebar as $_widget_id ) { - if ( 'wp_widget_categories' == $wp_registered_widgets[$_widget_id]['callback'] && isset($wp_registered_widgets[$_widget_id]['params'][0]['number']) ) { - $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number']; - if ( !in_array( "categories-$widget_number", $_POST['widget-id'] ) ) // the widget has been removed. - unset($options[$widget_number]); - } } - foreach ( (array) $_POST['widget-categories'] as $widget_number => $widget_cat ) { - if ( !isset($widget_cat['title']) && isset($options[$widget_number]) ) // user clicked cancel - continue; - $title = trim(strip_tags(stripslashes($widget_cat['title']))); - $count = isset($widget_cat['count']); - $hierarchical = isset($widget_cat['hierarchical']); - $dropdown = isset($widget_cat['dropdown']); - $options[$widget_number] = compact( 'title', 'count', 'hierarchical', 'dropdown' ); - } - - update_option('widget_categories', $options); - $updated = true; + echo $after_widget; } + + function update( $new_instance, $old_instance ) { + $instance = $old_instance; + $instance['title'] = strip_tags($new_instance['title']); + $instance['count'] = $new_instance['count'] ? 1 : 0; + $instance['hierarchical'] = $new_instance['hierarchical'] ? 1 : 0; + $instance['dropdown'] = $new_instance['dropdown'] ? 1 : 0; - if ( -1 == $number ) { - $title = ''; - $count = false; - $hierarchical = false; - $dropdown = false; - $number = '%i%'; - } else { - $title = attribute_escape( $options[$number]['title'] ); - $count = (bool) $options[$number]['count']; - $hierarchical = (bool) $options[$number]['hierarchical']; - $dropdown = (bool) $options[$number]['dropdown']; + return $instance; } + + function form( $instance ) { + //Defaults + $instance = wp_parse_args( (array) $instance, array( 'title' => '') ); + $title = attribute_escape( $instance['title'] ); + $count = (bool) $instance['count']; + $hierarchical = (bool) $instance['hierarchical']; + $dropdown = (bool) $instance['dropdown']; ?>

-

-

- - 'widget_categories', 'description' => __( "A list or dropdown of categories" ) ); - - $name = __( 'Categories' ); - - $id = false; - foreach ( (array) array_keys($options) as $o ) { - // Old widgets can have null values for some reason - if ( !isset($options[$o]['title']) ) - continue; - $id = "categories-$o"; - wp_register_sidebar_widget( $id, $name, 'wp_widget_categories', $widget_ops, array( 'number' => $o ) ); - wp_register_widget_control( $id, $name, 'wp_widget_categories_control', array( 'id_base' => 'categories' ), array( 'number' => $o ) ); } - // If there are none, we register the widget's existance with a generic template - if ( !$id ) { - wp_register_sidebar_widget( 'categories-1', $name, 'wp_widget_categories', $widget_ops, array( 'number' => -1 ) ); - wp_register_widget_control( 'categories-1', $name, 'wp_widget_categories_control', array( 'id_base' => 'categories' ), array( 'number' => -1 ) ); - } -} - -/** - * Upgrade previous category widget to current version. - * - * @since 2.3.0 - * - * @return array - */ -function wp_widget_categories_upgrade() { - $options = get_option( 'widget_categories' ); - - if ( !isset( $options['title'] ) ) - return $options; - - $newoptions = array( 1 => $options ); - - update_option( 'widget_categories', $newoptions ); - - $sidebars_widgets = get_option( 'sidebars_widgets' ); - if ( is_array( $sidebars_widgets ) ) { - foreach ( $sidebars_widgets as $sidebar => $widgets ) { - if ( is_array( $widgets ) ) { - foreach ( $widgets as $widget ) - $new_widgets[$sidebar][] = ( $widget == 'categories' ) ? 'categories-1' : $widget; - } else { - $new_widgets[$sidebar] = $widgets; - } - } - if ( $new_widgets != $sidebars_widgets ) - update_option( 'sidebars_widgets', $new_widgets ); - } - - return $newoptions; } /** @@ -1233,6 +1111,8 @@ function wp_widgets_init() { register_widget('WP_Widget_Text'); + register_widget('WP_Widget_Categories'); + $widget_ops = array('classname' => 'widget_recent_entries', 'description' => __( "The most recent posts on your blog") ); wp_register_sidebar_widget('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries', $widget_ops); wp_register_widget_control('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries_control' ); @@ -1241,7 +1121,6 @@ function wp_widgets_init() { wp_register_sidebar_widget('tag_cloud', __('Tag Cloud'), 'wp_widget_tag_cloud', $widget_ops); wp_register_widget_control('tag_cloud', __('Tag Cloud'), 'wp_widget_tag_cloud_control' ); - wp_widget_categories_register(); wp_widget_rss_register(); wp_widget_recent_comments_register();