From 7ee6f897197f09d3592cfae0b72eecd7fb4369c0 Mon Sep 17 00:00:00 2001
From: azaozz
Date: Mon, 27 Apr 2009 08:46:47 +0000
Subject: [PATCH] Move RSS widget to WP_Widget, see #8441
git-svn-id: http://svn.automattic.com/wordpress/trunk@11093 1a063a9b-81f0-0310-95a4-ce76da25c4cd
---
wp-admin/js/widgets.dev.js | 1 +
wp-admin/js/widgets.js | 2 +-
wp-includes/default-widgets.php | 244 ++++++++++----------------------
wp-includes/script-loader.php | 2 +-
4 files changed, 79 insertions(+), 170 deletions(-)
diff --git a/wp-admin/js/widgets.dev.js b/wp-admin/js/widgets.dev.js
index 73f28914cb..6c7f8fcd29 100644
--- a/wp-admin/js/widgets.dev.js
+++ b/wp-admin/js/widgets.dev.js
@@ -15,6 +15,7 @@ wpWidgets = {
$(this).siblings('#widget-list').toggle();
});
this.addEvents();
+ $('.widget-error').parents('.widget').find('a.widget-action').click();
$('#widget-list .widget').draggable({
connectToSortable: '.widgets-sortables',
diff --git a/wp-admin/js/widgets.js b/wp-admin/js/widgets.js
index a375f1d17e..11c68829e3 100644
--- a/wp-admin/js/widgets.js
+++ b/wp-admin/js/widgets.js
@@ -1 +1 @@
-var wpWidgets;(function(a){wpWidgets={init:function(){var b;a("h3.sidebar-name").click(function(){var d=a(this).siblings(".widgets-sortables");if(d.is(":visible")){d.hide().sortable("disable")}else{d.show().sortable("enable").sortable("refresh")}a(this).siblings("#widget-list").toggle()});this.addEvents();a("#widget-list .widget").draggable({connectToSortable:".widgets-sortables",handle:".widget-title",distance:2,helper:"clone",zIndex:5,start:function(){wpWidgets.fixWebkit(1)},stop:function(d,c){if(b){a(b).hide()}b="";wpWidgets.fixWebkit()}});a(".widgets-sortables").sortable({placeholder:"widget-placeholder",connectWith:".widgets-sortables",items:".widget",handle:".widget-title",cursor:"move",distance:2,opacity:0.65,start:function(d,c){wpWidgets.fixWebkit(1);c.item.find(".widget-inside").hide();c.item.css({marginLeft:"",width:""})},stop:function(f,c){var d=c.item.find("input.add_new").val(),i=c.item.find("input.multi_number").val(),h=c.item.attr("id"),g=a(this).parent().attr("id");c.item.css({marginLeft:"",width:""});if(d){if("multi"==d){c.item.html(c.item.html().replace(/<[^<>]+>/g,function(e){return e.replace(/__i__/g,i)}));c.item.attr("id",h.replace(/__i__/g,i));i++;a("li#"+h).find("input.multi_number").val(i)}else{if("single"==d){c.item.attr("id","new-"+h);b="li#"+h}}wpWidgets.addEvents(c.item);wpWidgets.save(c.item.find("form").serializeArray(),g,0,0);c.item.find("input.add_new").val("");c.item.find("a.widget-action").click()}wpWidgets.saveOrder(g);wpWidgets.fixWebkit()},receive:function(d,c){if(!a(this).is(":visible")){a(this).sortable("cancel")}}}).not(":visible").sortable("disable")},saveOrder:function(c){a("#"+c+" .ajax-feedback").css("visibility","visible");var b={action:"widgets-order",savewidgets:a("#_wpnonce_widgets").val(),sidebars:[]};a(".widgets-sortables").each(function(){b["sidebars["+a(this).parent().attr("id")+"]"]=a(this).sortable("toArray").join(",")});a.post(ajaxurl,b,function(){a(".ajax-feedback").css("visibility","hidden")})},save:function(e,f,c,d){a("#"+f+" .ajax-feedback").css("visibility","visible");var b={action:"save-widget",savewidgets:a("#_wpnonce_widgets").val(),sidebar:f};if(c){b.delete_widget=1}a.map(e,function(h,g){b[h.name]=h.value});a.post(ajaxurl,b,function(g){var h;a(".ajax-feedback").css("visibility","hidden");if(!d){return}if(c){a(d).parents("li.widget").slideUp("normal",function(){a(this).remove()});if(!b.widget_number){h=b["widget-id"];a("#available-widgets .widget-id").each(function(){if(a(this).val()==h){a(this).parents("li.widget").show()}})}}else{a(d).parents(".widget-inside").slideUp("normal",function(){a(this).parents("li.widget").css({width:"",marginLeft:""})})}})},fixWebkit:function(b){b=b?"none":"";a("body").css({WebkitUserSelect:b,KhtmlUserSelect:b})},addEvents:function(b){b=b||document;a("a.widget-action",b).click(function(){var d=parseInt(a(this).parents(".widget").find(".widget-width").val(),10),e={},c=a(this).parents(".widget-top").siblings(".widget-inside");if(c.is(":hidden")){if(d>270&&c.parents(".widgets-sortables").length){e.width=d+30+"px";if(c.parents(".widget-liquid-right").length){e.marginLeft=270-d+"px"}c.parents(".widget").css(e)}c.slideDown("normal")}else{c.slideUp("normal",function(){c.parents(".widget").css({width:"",marginLeft:""})})}return false});a(".widget-control-save",b).click(function(){wpWidgets.save(a(this).parents("form").serializeArray(),a(this).parents(".widgets-holder-wrap").attr("id"),0,this);return false});a(".widget-control-remove",b).click(function(){wpWidgets.save(a(this).parents("form").serializeArray(),a(this).parents(".widgets-holder-wrap").attr("id"),1,this);return false})}};a(document).ready(function(){wpWidgets.init()})})(jQuery);
\ No newline at end of file
+var wpWidgets;(function(a){wpWidgets={init:function(){var b;a("h3.sidebar-name").click(function(){var d=a(this).siblings(".widgets-sortables");if(d.is(":visible")){d.hide().sortable("disable")}else{d.show().sortable("enable").sortable("refresh")}a(this).siblings("#widget-list").toggle()});this.addEvents();a(".widget-error").parents(".widget").find("a.widget-action").click();a("#widget-list .widget").draggable({connectToSortable:".widgets-sortables",handle:".widget-title",distance:2,helper:"clone",zIndex:5,start:function(){wpWidgets.fixWebkit(1)},stop:function(d,c){if(b){a(b).hide()}b="";wpWidgets.fixWebkit()}});a(".widgets-sortables").sortable({placeholder:"widget-placeholder",connectWith:".widgets-sortables",items:".widget",handle:".widget-title",cursor:"move",distance:2,opacity:0.65,start:function(d,c){wpWidgets.fixWebkit(1);c.item.find(".widget-inside").hide();c.item.css({marginLeft:"",width:""})},stop:function(f,c){var d=c.item.find("input.add_new").val(),i=c.item.find("input.multi_number").val(),h=c.item.attr("id"),g=a(this).parent().attr("id");c.item.css({marginLeft:"",width:""});if(d){if("multi"==d){c.item.html(c.item.html().replace(/<[^<>]+>/g,function(e){return e.replace(/__i__/g,i)}));c.item.attr("id",h.replace(/__i__/g,i));i++;a("li#"+h).find("input.multi_number").val(i)}else{if("single"==d){c.item.attr("id","new-"+h);b="li#"+h}}wpWidgets.addEvents(c.item);wpWidgets.save(c.item.find("form").serializeArray(),g,0,0);c.item.find("input.add_new").val("");c.item.find("a.widget-action").click()}wpWidgets.saveOrder(g);wpWidgets.fixWebkit()},receive:function(d,c){if(!a(this).is(":visible")){a(this).sortable("cancel")}}}).not(":visible").sortable("disable")},saveOrder:function(c){a("#"+c+" .ajax-feedback").css("visibility","visible");var b={action:"widgets-order",savewidgets:a("#_wpnonce_widgets").val(),sidebars:[]};a(".widgets-sortables").each(function(){b["sidebars["+a(this).parent().attr("id")+"]"]=a(this).sortable("toArray").join(",")});a.post(ajaxurl,b,function(){a(".ajax-feedback").css("visibility","hidden")})},save:function(e,f,c,d){a("#"+f+" .ajax-feedback").css("visibility","visible");var b={action:"save-widget",savewidgets:a("#_wpnonce_widgets").val(),sidebar:f};if(c){b.delete_widget=1}a.map(e,function(h,g){b[h.name]=h.value});a.post(ajaxurl,b,function(g){var h;a(".ajax-feedback").css("visibility","hidden");if(!d){return}if(c){a(d).parents("li.widget").slideUp("normal",function(){a(this).remove()});if(!b.widget_number){h=b["widget-id"];a("#available-widgets .widget-id").each(function(){if(a(this).val()==h){a(this).parents("li.widget").show()}})}}else{a(d).parents(".widget-inside").slideUp("normal",function(){a(this).parents("li.widget").css({width:"",marginLeft:""})})}})},fixWebkit:function(b){b=b?"none":"";a("body").css({WebkitUserSelect:b,KhtmlUserSelect:b})},addEvents:function(b){b=b||document;a("a.widget-action",b).click(function(){var d=parseInt(a(this).parents(".widget").find(".widget-width").val(),10),e={},c=a(this).parents(".widget-top").siblings(".widget-inside");if(c.is(":hidden")){if(d>270&&c.parents(".widgets-sortables").length){e.width=d+30+"px";if(c.parents(".widget-liquid-right").length){e.marginLeft=270-d+"px"}c.parents(".widget").css(e)}c.slideDown("normal")}else{c.slideUp("normal",function(){c.parents(".widget").css({width:"",marginLeft:""})})}return false});a(".widget-control-save",b).click(function(){wpWidgets.save(a(this).parents("form").serializeArray(),a(this).parents(".widgets-holder-wrap").attr("id"),0,this);return false});a(".widget-control-remove",b).click(function(){wpWidgets.save(a(this).parents("form").serializeArray(),a(this).parents(".widgets-holder-wrap").attr("id"),1,this);return false})}};a(document).ready(function(){wpWidgets.init()})})(jQuery);
\ No newline at end of file
diff --git a/wp-includes/default-widgets.php b/wp-includes/default-widgets.php
index e4a5dcb4d7..19f13fe2a2 100644
--- a/wp-includes/default-widgets.php
+++ b/wp-includes/default-widgets.php
@@ -505,10 +505,10 @@ class WP_Widget_Recent_Posts extends WP_Widget {
function widget($args, $instance) {
$cache = wp_cache_get('widget_recent_posts', 'widget');
-
+
if ( !is_array($cache) )
$cache = array();
-
+
if ( isset($cache[$args['widget_id']]) )
return $cache[$args['widget_id']];
@@ -547,7 +547,7 @@ class WP_Widget_Recent_Posts extends WP_Widget {
$instance['title'] = strip_tags($new_instance['title']);
$instance['number'] = (int) $new_instance['number'];
$this->flush_widget_cache();
-
+
$alloptions = wp_cache_get( 'alloptions', 'options' );
if ( isset($alloptions['widget_recent_entries']) )
delete_option('widget_recent_entries');
@@ -594,7 +594,7 @@ class WP_Widget_Recent_Comments extends WP_Widget {
add_action( 'comment_post', array(&$this, 'flush_widget_cache') );
add_action( 'wp_set_comment_status', array(&$this, 'flush_widget_cache') );
}
-
+
function recent_comments_style() { ?>
15 )
$number = 15;
-
+
if ( !$comments = wp_cache_get( 'recent_comments', 'widget' ) ) {
$comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 15");
wp_cache_add( 'recent_comments', $comments, 'widget' );
}
-
+
$comments = array_slice( (array) $comments, 0, $number );
?>
@@ -664,63 +664,74 @@ class WP_Widget_Recent_Comments extends WP_Widget {
}
/**
- * Display RSS widget.
+ * RSS widget class
*
- * Allows for multiple widgets to be displayed.
- *
- * @since 2.2.0
- *
- * @param array $args Widget arguments.
- * @param int $number Widget number.
+ * @since 2.8.0
*/
-function wp_widget_rss($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_RSS extends WP_Widget {
- $options = get_option('widget_rss');
-
- if ( !isset($options[$number]) )
- return;
-
- if ( isset($options[$number]['error']) && $options[$number]['error'] )
- return;
-
- $url = $options[$number]['url'];
- while ( stristr($url, 'http') != $url )
- $url = substr($url, 1);
- if ( empty($url) )
- return;
-
- $rss = fetch_feed($url);
- $title = $options[$number]['title'];
- $desc = '';
- $link = '';
- if ( ! is_wp_error($rss) ) {
- $desc = attribute_escape(strip_tags(@html_entity_decode($rss->get_description(), ENT_QUOTES, get_option('blog_charset'))));
- if ( empty($title) )
- $title = htmlentities(strip_tags($rss->get_title()));
- $link = clean_url(strip_tags($rss->get_permalink()));
- while ( stristr($link, 'http') != $link )
- $link = substr($link, 1);
+ function WP_Widget_RSS() {
+ $widget_ops = array( 'description' => __('Entries from any RSS or Atom feed') );
+ $control_ops = array( 'width' => 400, 'height' => 200 );
+ $this->WP_Widget( 'rss', __('RSS'), $widget_ops, $control_ops );
}
- if ( empty($title) )
- $title = $desc;
- if ( empty($title) )
- $title = __('Unknown Feed');
- $title = apply_filters('widget_title', $title );
- $url = clean_url(strip_tags($url));
- $icon = includes_url('images/rss.png');
- $title = " ";
- echo $before_widget;
- echo $before_title . $title . $after_title;
+ function widget($args, $instance) {
- wp_widget_rss_output( $rss, $options[$number] );
+ if ( isset($instance['error']) && $instance['error'] )
+ return;
- echo $after_widget;
+ extract($args, EXTR_SKIP);
+
+ $url = $instance['url'];
+ while ( stristr($url, 'http') != $url )
+ $url = substr($url, 1);
+
+ if ( empty($url) )
+ return;
+
+ $rss = fetch_feed($url);
+ $title = $instance['title'];
+ $desc = '';
+ $link = '';
+
+ if ( ! is_wp_error($rss) ) {
+ $desc = attribute_escape(strip_tags(@html_entity_decode($rss->get_description(), ENT_QUOTES, get_option('blog_charset'))));
+ if ( empty($title) )
+ $title = htmlentities(strip_tags($rss->get_title()));
+ $link = clean_url(strip_tags($rss->get_permalink()));
+ while ( stristr($link, 'http') != $link )
+ $link = substr($link, 1);
+ }
+
+ if ( empty($title) )
+ $title = empty($desc) ? __('Unknown Feed') : $desc;
+
+ $title = apply_filters('widget_title', $title );
+ $url = clean_url(strip_tags($url));
+ $icon = includes_url('images/rss.png');
+ $title = " ";
+
+ echo $before_widget;
+ echo $before_title . $title . $after_title;
+ wp_widget_rss_output( $rss, $instance );
+ echo $after_widget;
+ }
+
+ function update($new_instance, $old_instance) {
+ $testurl = $new_instance['url'] != $old_instance['url'];
+ return wp_widget_rss_process( $new_instance, $testurl );
+ }
+
+ function form($instance) {
+
+ if ( empty($instance) )
+ $instance = array( 'number' => '__i__', 'title' => '', 'url' => '', 'items' => 10, 'error' => false, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0 );
+ else
+ $instance['number'] = $this->number;
+
+ wp_widget_rss_form( $instance );
+ }
}
/**
@@ -742,11 +753,9 @@ function wp_widget_rss_output( $rss, $args = array() ) {
}
if ( is_wp_error($rss) ) {
- if ( is_admin() || current_user_can('manage_options') ) {
- echo '';
- printf(__('RSS Error: %s'), $rss->get_error_message());
- echo '
';
- }
+ if ( is_admin() || current_user_can('manage_options') )
+ echo '' . sprintf( __('RSS Error: %s'), $rss->get_error_message() ) . '
';
+
return;
}
@@ -814,75 +823,7 @@ function wp_widget_rss_output( $rss, $args = array() ) {
echo '';
}
-/**
- * Display and process RSS widget control form.
- *
- * @since 2.2.0
- *
- * @param int $widget_args Widget number.
- */
-function wp_widget_rss_control($widget_args) {
- global $wp_registered_widgets;
- static $updated = false;
- 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);
-
- $options = get_option('widget_rss');
- if ( !is_array($options) )
- $options = array();
-
- $urls = array();
- foreach ( (array) $options as $option )
- if ( isset($option['url']) )
- $urls[$option['url']] = true;
-
- if ( !$updated && 'POST' == $_SERVER['REQUEST_METHOD'] && !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_rss' == $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( "rss-$widget_number", $_POST['widget-id'] ) ) // the widget has been removed.
- unset($options[$widget_number]);
- }
- }
-
- foreach( (array) $_POST['widget-rss'] as $widget_number => $widget_rss ) {
- if ( !isset($widget_rss['url']) && isset($options[$widget_number]) ) // user clicked cancel
- continue;
- $widget_rss = stripslashes_deep( $widget_rss );
- $url = sanitize_url(strip_tags($widget_rss['url']));
- $options[$widget_number] = wp_widget_rss_process( $widget_rss, !isset($urls[$url]) );
- }
-
- update_option('widget_rss', $options);
- $updated = true;
- }
-
- if ( -1 == $number ) {
- $title = '';
- $url = '';
- $items = 10;
- $error = false;
- $number = '__i__';
- $show_summary = 0;
- $show_author = 0;
- $show_date = 0;
- } else {
- extract( (array) $options[$number] );
- }
-
- wp_widget_rss_form( compact( 'number', 'title', 'url', 'items', 'error', 'show_summary', 'show_author', 'show_date' ) );
-}
/**
* Display RSS widget options form.
@@ -913,11 +854,8 @@ function wp_widget_rss_form( $args, $inputs = null ) {
$show_author = (int) $show_author;
$show_date = (int) $show_date;
- if ( !empty($error) ) {
- $message = sprintf( __('Error in RSS Widget: %s'), $error);
- echo "";
- echo "$message
";
- }
+ if ( !empty($error) )
+ echo '' . sprintf( __('RSS Error: %s'), $error) . '
';
if ( $inputs['url'] ) :
?>
@@ -964,7 +902,6 @@ function wp_widget_rss_form( $args, $inputs = null ) {
-
'widget_rss', 'description' => __( 'Entries from any RSS or Atom feed' ));
- $control_ops = array('width' => 400, 'height' => 200, 'id_base' => 'rss');
- $name = __('RSS');
-
- $id = false;
- foreach ( (array) array_keys($options) as $o ) {
- // Old widgets can have null values for some reason
- if ( !isset($options[$o]['url']) || !isset($options[$o]['title']) || !isset($options[$o]['items']) )
- continue;
- $id = "rss-$o"; // Never never never translate an id
- wp_register_sidebar_widget($id, $name, 'wp_widget_rss', $widget_ops, array( 'number' => $o ));
- wp_register_widget_control($id, $name, 'wp_widget_rss_control', $control_ops, array( 'number' => $o ));
- }
-
- // If there are none, we register the widget's existance with a generic template
- if ( !$id ) {
- wp_register_sidebar_widget( 'rss-1', $name, 'wp_widget_rss', $widget_ops, array( 'number' => -1 ) );
- wp_register_widget_control( 'rss-1', $name, 'wp_widget_rss_control', $control_ops, array( 'number' => -1 ) );
- }
-}
/**
* Display tag cloud widget.
@@ -1125,15 +1033,15 @@ function wp_widgets_init() {
register_widget('WP_Widget_Categories');
register_widget('WP_Widget_Recent_Posts');
-
+
register_widget('WP_Widget_Recent_Comments');
+ register_widget('WP_Widget_RSS');
+
$widget_ops = array('classname' => 'widget_tag_cloud', 'description' => __( "Your most used tags in cloud format") );
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_rss_register();
-
do_action('widgets_init');
}
diff --git a/wp-includes/script-loader.php b/wp-includes/script-loader.php
index a125f40c4f..f4db56fcb7 100644
--- a/wp-includes/script-loader.php
+++ b/wp-includes/script-loader.php
@@ -330,7 +330,7 @@ function wp_default_scripts( &$scripts ) {
$scripts->add( 'media-upload', "/wp-admin/js/media-upload$suffix.js", array( 'thickbox' ), '20090114' );
$scripts->add_data( 'media-upload', 'group', 1 );
- $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable' ), '20090413a' );
+ $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable' ), '20090426' );
$scripts->add_data( 'admin-widgets', 'group', 1 );
$scripts->add( 'word-count', "/wp-admin/js/word-count$suffix.js", array( 'jquery' ), '20090422' );