WordPress.org

Make WordPress Core

Ticket #4169: fracture.diff

File fracture.diff, 12.0 KB (added by ryan, 11 years ago)

Back compat and rss fixes

  • wp-includes/widgets.php

     
    6464                unset( $wp_registered_sidebars[$name] );
    6565}
    6666
    67 function register_sidebar_widget($name, $output_callback, $classname = '', $id = '') {
    68         global $wp_registered_widgets, $wp_register_widget_defaults;
    69 
     67function register_sidebar_widget($name, $output_callback, $classname = '') {
    7068        // Compat
    7169        if ( is_array($name) ) {
    7270                if ( count($name) == 3 )
     
    7573                        $name = $name[0];
    7674        }
    7775
    78         // Last resort -- this can be broken when names get translated so please provide a unique id.
    79         if ( empty($id) )
    80                 $id = sanitize_title($name);
     76        $id = sanitize_title($name);
     77        $options = array();
     78        if ( !empty($classname) )
     79                $options['classname'] = $classname;
     80        $params = array_slice(func_get_args(), 3);
     81        $args = array($id, $name, $output_callback, $options);
     82        if ( !empty($params) )
     83                $args = array_merge($args, $params);
    8184
    82         if ( (!isset($classname) || empty($classname) || !is_string($classname)) && is_string($output_callback) )
    83                         $classname = $output_callback;
     85        call_user_func_array('wp_register_sidebar_widget', $args);
     86}
    8487
     88function wp_register_sidebar_widget($id, $name, $output_callback, $options = array()) {
     89
     90        global $wp_registered_widgets, $wp_register_widget_defaults;
     91
     92        $id = sanitize_title($id);
     93
     94        if ( empty($output_callback) ) {
     95                unset($wp_registered_widgets[$id]);
     96                return;
     97        }
     98
     99        $defaults = array('classname' => $output_callback);
     100        $options = wp_parse_args($options, $defaults);
    85101        $widget = array(
    86102                'name' => $name,
    87103                'id' => $id,
    88104                'callback' => $output_callback,
    89                 'classname' => $classname,
    90105                'params' => array_slice(func_get_args(), 4)
    91106        );
     107        $widget = array_merge($widget, $options);
    92108
    93         if ( empty($output_callback) )
    94                 unset($wp_registered_widgets[$id]);
    95         elseif ( is_callable($output_callback) && ( !isset($wp_registered_widgets[$id]) || !$wp_register_widget_defaults) )
     109        if ( is_callable($output_callback) && ( !isset($wp_registered_widgets[$id]) || !$wp_register_widget_defaults) )
    96110                $wp_registered_widgets[$id] = $widget;
    97111}
    98112
    99113function unregister_sidebar_widget($id) {
    100         $id = sanitize_title($id);
    101         register_sidebar_widget('', '', '', $id);
    102         unregister_widget_control($id);
     114        return wp_unregister_sidebar_widget($id);
    103115}
    104116
    105 function register_widget_control($name, $control_callback, $width = 300, $height = 200, $id = '') {
    106         global $wp_registered_widget_controls, $wp_register_widget_defaults;
     117function wp_unregister_sidebar_widget($id) {
     118        wp_register_sidebar_widget($id, '', '');
     119        wp_unregister_widget_control($id);
     120}
    107121
     122function register_widget_control($name, $control_callback, $width = '', $height = '') {
    108123        // Compat
    109124        if ( is_array($name) ) {
    110125                if ( count($name) == 3 )
     
    113128                        $name = $name[0];
    114129        }
    115130
    116         if ( empty($id) )
    117                 $id = $name;
     131        $id = sanitize_title($name);
     132        $options = array();
     133        if ( !empty($width) )
     134                $options['width'] = $width;
     135        if ( !empty($height) )
     136                $options['height'] = $height;
     137        $params = array_slice(func_get_args(), 4);
     138        $args = array($id, $name, $control_callback, $options);
     139        if ( !empty($params) )
     140                $args = array_merge($args, $params);
    118141
     142        call_user_func_array('wp_register_widget_control', $args);
     143}
     144
     145function wp_register_widget_control($id, $name, $control_callback, $options = array()) {
     146        global $wp_registered_widget_controls, $wp_register_widget_defaults;
     147
    119148        $id = sanitize_title($id);
    120149
    121         $width = (int) $width > 90 ? (int) $width + 60 : 360;
    122         $height = (int) $height > 60 ? (int) $height + 40 : 240;
     150        if ( empty($control_callback) ) {
     151                unset($wp_registered_widget_controls[$id]);
     152                return;
     153        }
    123154
    124         if ( empty($control_callback) )
    125                 unset($wp_registered_widget_controls[$id]);
    126         elseif ( !isset($wp_registered_widget_controls[$id]) || !$wp_register_widget_defaults )
    127                 $wp_registered_widget_controls[$id] = array(
    128                         'name' => $name,
    129                         'id' => $id,
    130                         'callback' => $control_callback,
    131                         'width' => $width,
    132                         'height' => $height,
    133                         'params' => array_slice(func_get_args(), 5)
    134                 );
     155        if ( isset($wp_registered_widget_controls[$id]) && $wp_register_widget_defaults )
     156                return;
     157
     158        $defaults = array('width' => 300, 'height' => 200);
     159        $options = wp_parse_args($options, $defaults);
     160        $options['width'] = (int) $options['width'];
     161        $options['height'] = (int) $options['height'];
     162        $options['width'] = $options['width'] > 90 ? $options['width'] + 60 : 360;
     163        $options['height'] = $options['height'] > 60 ? $options['height'] + 40 : 240;
     164
     165        $widget = array(
     166                'name' => $name,
     167                'id' => $id,
     168                'callback' => $control_callback,
     169                'params' => array_slice(func_get_args(), 4)
     170        );
     171        $widget = array_merge($widget, $options);
     172
     173        $wp_registered_widget_controls[$id] = $widget;
    135174}
    136175
    137176function unregister_widget_control($id) {
    138         $id = sanitize_title($id);
    139         return register_widget_control($id, '');
     177        return wp_unregister_widget_control($id);
    140178}
    141179
     180function wp_unregister_widget_control($id) {
     181        return wp_register_widget_control($id, '', '');
     182}
     183
    142184function dynamic_sidebar($index = 1) {
    143185        global $wp_registered_sidebars, $wp_registered_widgets;
    144186
     
    515557        $number = $options['number'];
    516558        if ( $number < 1 ) $number = 1;
    517559        if ( $number > 9 ) $number = 9;
     560        $dims = array('width' => 460, 'height' => 350);
     561        $class = array('classname' => 'widget_text');
    518562        for ($i = 1; $i <= 9; $i++) {
    519563                $name = sprintf(__('Text %d'), $i);
    520564                $id = "text-$i"; // Never never never translate an id
    521                 register_sidebar_widget($name, $i <= $number ? 'wp_widget_text' : /* unregister */ '', 'widget_text', $id, $i);
    522                 register_widget_control($name, $i <= $number ? 'wp_widget_text_control' : /* unregister */ '', 460, 350, $id, $i);
     565                wp_register_sidebar_widget($id, $name, $i <= $number ? 'wp_widget_text' : /* unregister */ '', $class, $i);
     566                wp_register_widget_control($id, $name, $i <= $number ? 'wp_widget_text_control' : /* unregister */ '', $dims, $i);
    523567        }
    524568        add_action('sidebar_admin_setup', 'wp_widget_text_setup');
    525569        add_action('sidebar_admin_page', 'wp_widget_text_page');
     
    710754}
    711755
    712756function wp_widget_recent_comments_register() {
    713         register_sidebar_widget(__('Recent Comments'), 'wp_widget_recent_comments', null, 'recent-comments');
    714         register_widget_control(__('Recent Comments'), 'wp_widget_recent_comments_control', 320, 90, 'recent-comments');
     757        $dims = array('width' => 320, 'height' => 90);
     758        $class = array('classname' => 'widget_recent_comments');
     759        wp_register_sidebar_widget('recent-comments', __('Recent Comments'), 'wp_widget_recent_comments', $class);
     760        wp_register_widget_control('recent-comments', __('Recent Comments'), 'wp_widget_recent_comments_control', $dims);
    715761       
    716762        if ( is_active_widget('wp_widget_recent_comments') )
    717763                add_action('wp_head', 'wp_widget_recent_comments_style');
     
    731777                $url = substr($url, 1);
    732778        if ( empty($url) )
    733779                return;
    734         $rss = fetch_rss_summary($url, array( 'link', 'title', 'description' ) );
     780        $rss = fetch_rss($url);
    735781        $link = wp_specialchars(strip_tags($rss->channel['link']), 1);
    736782        while ( strstr($link, 'http') != $link )
    737783                $link = substr($link, 1);
     
    790836                $newoptions[$number]['title'] = trim(strip_tags(stripslashes($_POST["rss-title-$number"])));
    791837                if ( $url !== $options[$number]['url'] ) {
    792838                        require_once(ABSPATH . WPINC . '/rss.php');
    793                         $rss = fetch_rss_summary($url);
    794                         if ( is_object($rss) && $rss->status == 200 ) {
     839                        $rss = fetch_rss($url);
     840                        if ( is_object($rss) ) {
    795841                                $newoptions[$number]['url'] = $url;
    796842                                $newoptions[$number]['error'] = false;
    797843                        } else {
    798844                                $newoptions[$number]['error'] = true;
    799845                                $newoptions[$number]['url'] = wp_specialchars(__('Error: could not find an RSS or ATOM feed at that URL.'), 1);
    800                                 $error = sprintf(__('Error in RSS %1$d: %2$s', 'sandbox'), $number, $newoptions[$number]['error']);
     846                                $error = sprintf(__('Error in RSS %1$d: %2$s'), $number, $newoptions[$number]['error']);
    801847                        }
    802848                }
    803849        }
     
    855901        $number = $options['number'];
    856902        if ( $number < 1 ) $number = 1;
    857903        if ( $number > 9 ) $number = 9;
     904        $dims = array('width' => 410, 'height' => 200);
     905        $class = array('classname' => 'widget_rss');
    858906        for ($i = 1; $i <= 9; $i++) {
    859907                $name = sprintf(__('RSS %d'), $i);
    860908                $id = "rss-$i"; // Never never never translate an id
    861                 register_sidebar_widget($name, $i <= $number ? 'wp_widget_rss' : /* unregister */ '', 'widget_rss', $id, $i);
    862                 register_widget_control($name, $i <= $number ? 'wp_widget_rss_control' : /* unregister */ '', 410, 200, $id, $i);
     909                wp_register_sidebar_widget($id, $name, $i <= $number ? 'wp_widget_rss' : /* unregister */ '', $class, $i);
     910                wp_register_widget_control($id, $name, $i <= $number ? 'wp_widget_rss_control' : /* unregister */ '', $dims, $i);
    863911        }
    864912        add_action('sidebar_admin_setup', 'wp_widget_rss_setup');
    865913        add_action('sidebar_admin_page', 'wp_widget_rss_page');
     
    869917        global $wp_register_widget_defaults;
    870918
    871919        $wp_register_widget_defaults = true;
    872 
    873         register_sidebar_widget(__('Pages'), 'wp_widget_pages', 'widget_pages', 'pages');
    874         register_widget_control(__('Pages'), 'wp_widget_pages_control', 300, 90, 'pages');
    875         register_sidebar_widget(__('Calendar'), 'wp_widget_calendar', 'widget_calendar', 'calendar');
    876         register_widget_control(__('Calendar'), 'wp_widget_calendar_control', 300, 90, 'calendar');
    877         register_sidebar_widget(__('Archives'), 'wp_widget_archives', 'widget_archives', 'archives');
    878         register_widget_control(__('Archives'), 'wp_widget_archives_control', 300, 100, 'archives');
    879         register_sidebar_widget(__('Links'), 'wp_widget_links', 'widget_links', 'links');
    880         register_sidebar_widget(__('Meta'), 'wp_widget_meta', 'widget_meta', 'meta');
    881         register_widget_control(__('Meta'), 'wp_widget_meta_control', 300, 90, 'meta');
    882         register_sidebar_widget(__('Search'), 'wp_widget_search', 'widget_search', 'search');
    883         register_sidebar_widget(__('Categories'), 'wp_widget_categories', 'widget_categories', 'categories');
    884         register_widget_control(__('Categories'), 'wp_widget_categories_control', 300, 150, 'categories');
    885         register_sidebar_widget(__('Recent Posts'), 'wp_widget_recent_entries', 'widget_recent_entries', 'recent-posts');
    886         register_widget_control(__('Recent Posts'), 'wp_widget_recent_entries_control', 300, 90, 'recent-posts');
     920        $dims90 = array('height' => 90, 'width' => 300);
     921        $dims100 = array('height' => 100, 'width' => 300);
     922        $dims150 = array('height' => 150, 'width' => 300);
     923        $class = array('classname' => 'widget_pages');
     924        wp_register_sidebar_widget('pages', __('Pages'), 'wp_widget_pages', $class);
     925        wp_register_widget_control('pages', __('Pages'), 'wp_widget_pages_control', $dims90);
     926        $class['classname'] = 'widget_calendar';
     927        wp_register_sidebar_widget('calendar', __('Calendar'), 'wp_widget_calendar', $class);
     928        wp_register_widget_control('calendar', __('Calendar'), 'wp_widget_calendar_control', $dims90);
     929        $class['classname'] = 'widget_archives';
     930        wp_register_sidebar_widget('archives', __('Archives'), 'wp_widget_archives', $class);
     931        wp_register_widget_control('archives', __('Archives'), 'wp_widget_archives_control', $dims100);
     932        $class['classname'] = 'widget_links';
     933        wp_register_sidebar_widget('links', __('Links'), 'wp_widget_links', $class);
     934        $class['classname'] = 'widget_meta';
     935        wp_register_sidebar_widget('meta', __('Meta'), 'wp_widget_meta', $class);
     936        wp_register_widget_control('meta', __('Meta'), 'wp_widget_meta_control', $dims90);
     937        $class['classname'] = 'widget_search';
     938        wp_register_sidebar_widget('search', __('Search'), 'wp_widget_search', $class);
     939        $class['classname'] = 'widget_categories';
     940        wp_register_sidebar_widget('categories', __('Categories'), 'wp_widget_categories', $class);
     941        wp_register_widget_control('categories', __('Categories'), 'wp_widget_categories_control', $dims150);
     942        $class['classname'] = 'widget_recent_entries';
     943        wp_register_sidebar_widget('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries', $class);
     944        wp_register_widget_control('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries_control', $dims90);
    887945        wp_widget_text_register();
    888946        wp_widget_rss_register();
    889947        wp_widget_recent_comments_register();