WordPress.org

Make WordPress Core

Ticket #4169: fracture.diff

File fracture.diff, 12.0 KB (added by ryan, 7 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();