WordPress.org

Make WordPress Core

Ticket #5750: 5750.diff

File 5750.diff, 39.9 KB (added by mdawaffe, 7 years ago)
  • wp-includes/version.php

     
    1616 * 
    1717 * @global int $wp_db_version 
    1818 */ 
    19 $wp_db_version = 6124; 
     19$wp_db_version = 6689; 
    2020 
    2121?> 
     22 No newline at end of file 
  • wp-includes/widgets.php

     
    221221 
    222222        $did_one = false; 
    223223        foreach ( $sidebars_widgets[$index] as $id ) { 
    224                 $callback = $wp_registered_widgets[$id]['callback']; 
     224                $params = array_merge( 
     225                        array( array_merge( $sidebar, array('widget_id' => $id, 'widget_name' => $wp_registered_widgets[$id]['name']) ) ), 
     226                        (array) $wp_registered_widgets[$id]['params'] 
     227                ); 
    225228 
    226                 $params = array_merge(array($sidebar), (array) $wp_registered_widgets[$id]['params']); 
    227  
    228229                // Substitute HTML id and class attributes into before_widget 
    229230                $classname_ = ''; 
    230231                foreach ( (array) $wp_registered_widgets[$id]['classname'] as $cn ) { 
     
    236237                $classname_ = ltrim($classname_, '_'); 
    237238                $params[0]['before_widget'] = sprintf($params[0]['before_widget'], $id, $classname_); 
    238239 
     240                $params = apply_filters( 'dynamic_sidebar_params', $params ); 
     241 
     242                $callback = $wp_registered_widgets[$id]['callback']; 
     243 
    239244                if ( is_callable($callback) ) { 
    240245                        call_user_func_array($callback, $params); 
    241246                        $did_one = true; 
     
    10031008        if ( isset($options[$number]['error']) && $options[$number]['error'] ) 
    10041009                return; 
    10051010 
    1006         $num_items = (int) $options[$number]['items']; 
    1007         $show_summary = $options[$number]['show_summary']; 
    1008         if ( empty($num_items) || $num_items < 1 || $num_items > 10 ) $num_items = 10; 
    10091011        $url = $options[$number]['url']; 
    10101012        while ( strstr($url, 'http') != $url ) 
    10111013                $url = substr($url, 1); 
     
    10321034        else 
    10331035                $icon = get_option('siteurl').'/wp-includes/images/rss.png'; 
    10341036        $title = "<a class='rsswidget' href='$url' title='" . attribute_escape(__('Syndicate this content')) ."'><img style='background:orange;color:white;border:none;' width='14' height='14' src='$icon' alt='RSS' /></a> <a class='rsswidget' href='$link' title='$desc'>$title</a>"; 
    1035 ?> 
    1036                 <?php echo $before_widget; ?> 
    1037                         <?php $title ? print($before_title . $title . $after_title) : null; ?> 
    1038 <?php 
     1037 
     1038        echo $before_widget; 
     1039        echo $before_title . $title . $after_title; 
     1040 
     1041        wp_widget_rss_output( $rss, $options[$number] ); 
     1042 
     1043        echo $after_widget; 
     1044} 
     1045 
     1046function wp_widget_rss_output( $rss, $args = null ) { 
     1047        if ( is_string( $rss ) ) { 
     1048                require_once(ABSPATH . WPINC . '/rss.php'); 
     1049                if ( !$rss = fetch_rss($rss) ) 
     1050                        return; 
     1051        } elseif ( is_array($rss) && isset($rss['url']) ) { 
     1052                require_once(ABSPATH . WPINC . '/rss.php'); 
     1053                $args = $rss; 
     1054                if ( !$rss = fetch_rss($rss['url']) ) 
     1055                        return; 
     1056        } elseif ( !is_object($rss) ) { 
     1057                return; 
     1058        } 
     1059 
     1060        extract( $args, EXTR_SKIP ); 
     1061 
     1062        $items = (int) $items; 
     1063        if ( $items < 1 || 20 < $items ) 
     1064                $items = 10; 
     1065        $show_summary  = (int) $show_summary; 
     1066        $show_author   = (int) $show_author; 
     1067        $show_date     = (int) $show_date; 
     1068 
    10391069        if ( is_array( $rss->items ) && !empty( $rss->items ) ) { 
    1040                 $rss->items = array_slice($rss->items, 0, $num_items); 
     1070                $rss->items = array_slice($rss->items, 0, $items); 
    10411071                echo '<ul>'; 
    10421072                foreach ($rss->items as $item ) { 
    10431073                        while ( strstr($item['link'], 'http') != $item['link'] ) 
     
    10471077                        if ( empty($title) ) 
    10481078                                $title = __('Untitled'); 
    10491079                        $desc = ''; 
     1080                                if ( isset( $item['description'] ) && is_string( $item['description'] ) ) 
     1081                                        $desc = str_replace(array("\n", "\r"), ' ', attribute_escape(strip_tags(html_entity_decode($item['description'], ENT_QUOTES)))); 
     1082                                elseif ( isset( $item['summary'] ) && is_string( $item['summary'] ) ) 
     1083                                        $desc = str_replace(array("\n", "\r"), ' ', attribute_escape(strip_tags(html_entity_decode($item['summary'], ENT_QUOTES)))); 
     1084 
     1085                        $summary = ''; 
     1086                        if ( isset( $item['description'] ) && is_string( $item['description'] ) ) 
     1087                                $summary = $item['description']; 
     1088                        elseif ( isset( $item['summary'] ) && is_string( $item['summary'] ) ) 
     1089                                $summary = $item['summary']; 
     1090 
     1091                        $desc = str_replace(array("\n", "\r"), ' ', attribute_escape(strip_tags(html_entity_decode($summary, ENT_QUOTES)))); 
     1092 
    10501093                        if ( $show_summary ) { 
    1051                                 $summary = '<div class="rssSummary">' . $item['description'] . '</div>'; 
     1094                                $desc = ''; 
     1095                                $summary = wp_specialchars( $summary ); 
     1096                                $summary = "<div class='rssSummary'>$summary</div>"; 
    10521097                        } else { 
    1053                                 if ( isset( $item['description'] ) && is_string( $item['description'] ) ) 
    1054                                         $desc = str_replace(array("\n", "\r"), ' ', attribute_escape(strip_tags(html_entity_decode($item['description'], ENT_QUOTES)))); 
    10551098                                $summary = ''; 
    10561099                        } 
    1057                         echo "<li><a class='rsswidget' href='$link' title='$desc'>$title</a>$summary</li>"; 
     1100 
     1101                        $date = ''; 
     1102                        if ( $show_date ) { 
     1103                                if ( isset($item['pubdate']) ) 
     1104                                        $date = $item['pubdate']; 
     1105                                elseif ( isset($item['published']) ) 
     1106                                        $date = $item['published']; 
     1107 
     1108                                if ( $date ) { 
     1109                                        if ( $date_stamp = strtotime( $date ) ) 
     1110                                                $date = '<span class="rss-date">' . gmdate( get_option( 'date_format' ), $date_stamp ) . '</span>'; 
     1111                                        else 
     1112                                                $date = ''; 
     1113                                } 
     1114                        } 
     1115 
     1116                        $author = ''; 
     1117                        if ( $show_author ) { 
     1118                                if ( isset($item['dc']['creator']) ) 
     1119                                        $author = ' <cite>' . wp_specialchars( strip_tags( $item['dc']['creator'] ) ) . '</cite>'; 
     1120                                elseif ( isset($item['author_name']) ) 
     1121                                        $author = ' <cite>' . wp_specialchars( strip_tags( $item['author_name'] ) ) . '</cite>'; 
     1122                        } 
     1123 
     1124                        echo "<li><a class='rsswidget' href='$link' title='$desc'>$title</a>{$date}{$summary}{$author}</li>"; 
    10581125                } 
    10591126                echo '</ul>'; 
    10601127        } else { 
    10611128                echo '<ul><li>' . __( 'An error has occurred; the feed is probably down. Try again later.' ) . '</li></ul>'; 
    10621129        } 
    1063  
    1064         echo $after_widget; 
    10651130} 
    10661131 
    10671132function wp_widget_rss_control($widget_args) { 
     
    10821147                if ( isset($option['url']) ) 
    10831148                        $urls[$option['url']] = true; 
    10841149 
    1085         if ( !$updated && !empty($_POST['sidebar']) ) { 
     1150        if ( !$updated && 'POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['sidebar']) ) { 
    10861151                $sidebar = (string) $_POST['sidebar']; 
    10871152 
    10881153                $sidebars_widgets = wp_get_sidebars_widgets(); 
     
    10991164                } 
    11001165 
    11011166                foreach( (array) $_POST['widget-rss'] as $widget_number => $widget_rss ) { 
    1102                         $items = (int) $widget_rss['items']; 
    1103                         if ( $items < 1 ) 
    1104                                 $items = 10; 
    1105                         $url = sanitize_url(strip_tags(stripslashes($widget_rss['url']))); 
    1106                         $title = trim(strip_tags(stripslashes($widget_rss['title']))); 
    1107  
    1108                         if ( !isset($urls[$url]) ) { 
    1109                                 require_once(ABSPATH . WPINC . '/rss.php'); 
    1110                                 $rss = fetch_rss($url); 
    1111                                 $error = false; 
    1112                                 if ( !is_object($rss) ) { 
    1113                                         $url = wp_specialchars(__('Error: could not find an RSS or ATOM feed at that URL.'), 1); 
    1114                                         $error = sprintf(__('Error in RSS %1$d'), $widget_number ); 
    1115                                 } 
    1116                         } 
    1117                         $options[$widget_number] = compact( 'title', 'url', 'items', 'error' ); 
     1167                        $widget_rss = stripslashes_deep( $widget_rss ); 
     1168                        $url = sanitize_url(strip_tags($widget_rss['url'])); 
     1169                        $options[$widget_number] = wp_widget_rss_process( $widget_rss, !isset($urls[$url]) ); 
    11181170                } 
    11191171 
    11201172                update_option('widget_rss', $options); 
     
    11271179                $items = 10; 
    11281180                $error = false; 
    11291181                $number = '%i%'; 
     1182                $show_summary = 0; 
     1183                $show_author = 0; 
     1184                $show_date = 0; 
    11301185        } else { 
    1131                 $title = attribute_escape($options[$number]['title']); 
    1132                 $url = attribute_escape($options[$number]['url']); 
    1133                 $items = (int) $options[$number]['items']; 
    1134                 if ( $items < 1 ) 
    1135                         $items = 10; 
    1136                 $error = $options[$number]['error']; 
     1186                extract( $options[$number] ); 
    11371187        } 
    11381188 
     1189        wp_widget_rss_form( compact( 'number', 'title', 'url', 'items', 'error', 'show_summary', 'show_author', 'show_date' ) ); 
     1190} 
     1191 
     1192function wp_widget_rss_form( $args, $inputs = null ) { 
     1193        $default_inputs = array( 'url' => true, 'title' => true, 'items' => true, 'show_summary' => true, 'show_author' => true, 'show_date' => true ); 
     1194        $inputs = wp_parse_args( $inputs, $default_inputs ); 
     1195        extract( $args ); 
     1196        $number = attribute_escape( $number ); 
     1197        $title  = attribute_escape( $title ); 
     1198        $url    = attribute_escape( $url ); 
     1199        $items  = (int) $items; 
     1200        if ( $items < 1 || 20 < $items ) 
     1201                $items  = 10; 
     1202        $show_summary   = (int) $show_summary; 
     1203        $show_author    = (int) $show_author; 
     1204        $show_date      = (int) $show_date; 
     1205 
     1206        if ( $inputs['url'] ) : 
    11391207?> 
    1140                         <p> 
    1141                                 <label for="rss-url-<?php echo $number; ?>"><?php _e('Enter the RSS feed URL here:'); ?> 
    1142                                         <input class="widefat" id="rss-url-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][url]" type="text" value="<?php echo $url; ?>" /> 
    1143                                 </label> 
    1144                         </p> 
    1145                         <p> 
    1146                                 <label for="rss-title-<?php echo $number; ?>"><?php _e('Give the feed a title (optional):'); ?> 
    1147                                         <input class="widefat" id="rss-title-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][title]" type="text" value="<?php echo $title; ?>" /> 
    1148                                 </label> 
    1149                         </p> 
    1150                         <p> 
    1151                                 <label for="rss-items-<?php echo $number; ?>"><?php _e('How many items would you like to display?'); ?> 
    1152                                         <select id="rss-items-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][items]"> 
    1153                                                 <?php 
    1154                                                         for ( $i = 1; $i <= 10; ++$i ) 
    1155                                                                 echo "<option value='$i' " . ( $items == $i ? "selected='selected'" : '' ) . ">$i</option>"; 
    1156                                                 ?> 
    1157                                         </select> 
    1158                                 </label> 
    1159                         </p> 
    1160                         <input type="hidden" id="rss-submit-<?php echo $number; ?>" name="rss-submit-<?php echo $number; ?>" value="1" /> 
     1208        <p> 
     1209                <label for="rss-url-<?php echo $number; ?>"><?php _e('Enter the RSS feed URL here:'); ?> 
     1210                        <input class="widefat" id="rss-url-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][url]" type="text" value="<?php echo $url; ?>" /> 
     1211                </label> 
     1212        </p> 
     1213<?php endif; if ( $inputs['title'] ) : ?> 
     1214        <p> 
     1215                <label for="rss-title-<?php echo $number; ?>"><?php _e('Give the feed a title (optional):'); ?> 
     1216                        <input class="widefat" id="rss-title-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][title]" type="text" value="<?php echo $title; ?>" /> 
     1217                </label> 
     1218        </p> 
     1219<?php endif; if ( $inputs['items'] ) : ?> 
     1220        <p> 
     1221                <label for="rss-items-<?php echo $number; ?>"><?php _e('How many items would you like to display?'); ?> 
     1222                        <select id="rss-items-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][items]"> 
     1223                                <?php 
     1224                                        for ( $i = 1; $i <= 20; ++$i ) 
     1225                                                echo "<option value='$i' " . ( $items == $i ? "selected='selected'" : '' ) . ">$i</option>"; 
     1226                                ?> 
     1227                        </select> 
     1228                </label> 
     1229        </p> 
     1230<?php endif; if ( $inputs['show_summary'] ) : ?> 
     1231        <p> 
     1232                <label for="rss-show-summary-<?php echo $number; ?>"> 
     1233                        <input id="rss-show-summary-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][show_summary]" type="checkbox" value="1" <?php if ( $show_summary ) echo 'checked="checked"'; ?>/> 
     1234                        <?php _e('Display item content?'); ?> 
     1235                </label> 
     1236        </p> 
     1237<?php endif; if ( $inputs['show_author'] ) : ?> 
     1238        <p> 
     1239                <label for="rss-show-author-<?php echo $number; ?>"> 
     1240                        <input id="rss-show-author-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][show_author]" type="checkbox" value="1" <?php if ( $show_author ) echo 'checked="checked"'; ?>/> 
     1241                        <?php _e('Display item author if available?'); ?> 
     1242                </label> 
     1243        </p> 
     1244<?php endif; if ( $inputs['show_date'] ) : ?> 
     1245        <p> 
     1246                <label for="rss-show-date-<?php echo $number; ?>"> 
     1247                        <input id="rss-show-date-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][show_date]" type="checkbox" value="1" <?php if ( $show_date ) echo 'checked="checked"'; ?>/> 
     1248                        <?php _e('Display item date?'); ?> 
     1249                </label> 
     1250        </p> 
     1251        <input type="hidden" id="rss-submit-<?php echo $number; ?>" name="rss-submit-<?php echo $number; ?>" value="1" /> 
    11611252<?php 
     1253        endif; 
     1254        foreach ( array_keys($default_inputs) as $input ) : 
     1255                if ( 'hidden' === $inputs[$input] ) : 
     1256                        $id = str_replace( '_', '-', $input ); 
     1257?> 
     1258        <input type="hidden" id="rss-<?php echo $id; ?>-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][<?php echo $input; ?>]" value="<?php echo $$input; ?>" /> 
     1259<?php 
     1260                endif; 
     1261        endforeach; 
    11621262} 
    11631263 
     1264// Expects unescaped data 
     1265function wp_widget_rss_process( $widget_rss, $check_feed = true ) { 
     1266        $items = (int) $widget_rss['items']; 
     1267        if ( $items < 1 || 20 < $items ) 
     1268                $items = 10; 
     1269        $url           = sanitize_url(strip_tags( $widget_rss['url'] )); 
     1270        $title         = trim(strip_tags( $widget_rss['title'] )); 
     1271        $show_summary  = (int) $widget_rss['show_summary']; 
     1272        $show_author   = (int) $widget_rss['show_author']; 
     1273        $show_date     = (int) $widget_rss['show_date']; 
     1274 
     1275        if ( $check_feed ) { 
     1276                require_once(ABSPATH . WPINC . '/rss.php'); 
     1277                $rss = fetch_rss($url); 
     1278                $error = false; 
     1279                $link = ''; 
     1280                if ( !is_object($rss) ) { 
     1281                        $url = wp_specialchars(__('Error: could not find an RSS or ATOM feed at that URL.'), 1); 
     1282                        $error = sprintf(__('Error in RSS %1$d'), $widget_number ); 
     1283                } else { 
     1284                        $link = clean_url(strip_tags($rss->channel['link'])); 
     1285                        while ( strstr($link, 'http') != $link ) 
     1286                                $link = substr($link, 1);                        
     1287                } 
     1288        } 
     1289 
     1290        return compact( 'title', 'url', 'link', 'items', 'error', 'show_summary', 'show_author', 'show_date' ); 
     1291} 
     1292 
    11641293function wp_widget_rss_register() { 
    11651294        if ( !$options = get_option('widget_rss') ) 
    11661295                $options = array(); 
  • wp-admin/wp-admin.css

     
    10171017        background: #464646 url('images/logo-ghost.png') no-repeat 20px 10px; 
    10181018        color: #999; 
    10191019        position: relative;  
    1020         margin-top: -75px;  
     1020//      margin-top: -75px;  
    10211021} 
    10221022 
    10231023#footer a { 
  • wp-admin/includes/schema.php

     
    251251        populate_roles_160(); 
    252252        populate_roles_210(); 
    253253        populate_roles_230(); 
     254        populate_roles_250(); 
    254255} 
    255256 
    256257function populate_roles_160() { 
     
    390391        } 
    391392} 
    392393 
     394function populate_roles_250() { 
     395        $role = get_role( 'administrator' ); 
     396 
     397        if ( !empty( $role ) ) { 
     398                $role->add_cap( 'edit_dashboard' ); 
     399        } 
     400} 
     401 
    393402?> 
  • wp-admin/includes/upgrade.php

     
    198198        if ( $wp_current_db_version < 6124 ) 
    199199                upgrade_230_old_tables(); 
    200200 
     201        if ( $wp_current_db_version < 6689 ) 
     202                upgrade_250(); 
     203 
    201204        maybe_disable_automattic_widgets(); 
    202205 
    203206        $wp_rewrite->flush_rules(); 
     
    716719} 
    717720 
    718721 
     722function upgrade_250() { 
     723        global $wp_current_db_version; 
     724 
     725        if ( $wp_current_db_version < 6689 ) { 
     726                populate_roles_250(); 
     727        } 
     728} 
     729 
    719730// The functions we use to actually do stuff 
    720731 
    721732// General 
  • wp-admin/includes/dashboard.php

     
     1<?php 
     2 
     3// Registers dashboard widgets, handles POST data, sets up filters 
     4function wp_dashboard_setup() { 
     5        global $wpdb, $wp_dashboard_sidebars; 
     6        $update = false; 
     7        if ( !$widget_options = get_option( 'dashboard_widget_options' ) ) 
     8                $widget_options = array(); 
     9 
     10 
     11        /* Register WP Dashboard Dynamic Sidebar */ 
     12        register_sidebar( array( 
     13                'name' => 'WordPress Dashboard', 
     14                'id' => 'wp_dashboard', 
     15                'before_widget' => "\t<div class='dashboard-widget-holder %2\$s' id='%1\$s'>\n\n\t\t<div class='dashboard-widget'>\n\n", 
     16                'after_widget' => "\t\t</div>\n\n\t</div>\n\n", 
     17                'before_title' => "\t\t\t<h3 class='dashboard-widget-title'>", 
     18                'after_title' => "</h3>\n\n" 
     19        ) ); 
     20 
     21 
     22        /* Register Widgets and Controls */ 
     23 
     24        // Recent Comments Widget 
     25        if ( $mod_comments = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '0'") ) { 
     26                $notice = sprintf( __ngettext( '%d comment awaiting moderation', '%d comments awaiting moderation', $mod_comments ), $mod_comments ); 
     27                $notice = "<a href='moderation.php'>$notice</a>"; 
     28        } else { 
     29                $notice = ''; 
     30        } 
     31        wp_register_sidebar_widget( 'dashboard_recent_comments', __( 'Recent Comments' ), 'wp_dashboard_recent_comments', 
     32                array( 'all_link' => 'edit-comments.php', 'notice' => $notice, 'width' => 'half' ) 
     33        ); 
     34 
     35 
     36        // Incoming Links Widget 
     37        if ( !isset( $widget_options['dashboard_incoming_links'] ) ) { 
     38                $update = true; 
     39                $widget_options['dashboard_incoming_links'] = array( 
     40                        'link' => apply_filters( 'dashboard_incoming_links_link', 'http://blogsearch.google.com/blogsearch?hl=en&scoring=d&partner=wordpress&q=link:' . trailingslashit( get_option('home') ) ), 
     41                        'url' => apply_filters( 'dashboard_incoming_links_feed', 'http://blogsearch.google.com/blogsearch_feeds?hl=en&scoring=d&ie=utf-8&num=10&output=rss&partner=wordpress&q=link:' . trailingslashit( get_option('home') ) ), 
     42                        'items' => 5, 
     43                        'show_date' => 0 
     44                ); 
     45        } 
     46        wp_register_sidebar_widget( 'dashboard_incoming_links', __( 'Incoming Links' ), 'wp_dashboard_empty', 
     47                array( 'all_link' => $widget_options['dashboard_incoming_links']['link'], 'feed_link' => $widget_options['dashboard_incoming_links']['url'], 'width' => 'half' ) 
     48        ); 
     49        wp_register_widget_control( 'dashboard_incoming_links', __( 'Incoming Links' ), 'wp_dashboard_rss_control', array(), 
     50                array( 'widget_id' => 'dashboard_incoming_links', 'form_inputs' => array( 'title' => false, 'show_summary' => false, 'show_author' => false ) ) 
     51        ); 
     52 
     53 
     54        // WP Plugins Widget 
     55        wp_register_sidebar_widget( 'dashboard_plugins', __( 'Plugins' ), 'wp_dashboard_empty', 
     56                array( 'all_link' => 'http://wordpress.org/extend/plugins/', 'feed_link' => 'http://wordpress.org/extend/plugins/rss/', 'width' => 'half' ) 
     57        ); 
     58        wp_register_widget_control( 'dashboard_plugins', __( 'Plugins' ), 'wp_dashboard_empty', array(), 
     59                array( 'widget_id' => 'dashboard_plugins' ) 
     60        ); 
     61         
     62 
     63        // Primary feed (Dev Blog) Widget 
     64        if ( !isset( $widget_options['dashboard_primary'] ) ) { 
     65                $update = true; 
     66                $widget_options['dashboard_primary'] = array( 
     67                        'link' => apply_filters( 'dashboard_primary_link', 'http://wordpress.org/development/' ), 
     68                        'url' => apply_filters( 'dashboard_primary_feed', 'http://wordpress.org/development/feed/' ), 
     69                        'title' => apply_filters( 'dashboard_primary_title', __( 'WordPress Development Blog' ) ), 
     70                        'items' => 2, 
     71                        'show_summary' => 1, 
     72                        'show_author' => 0, 
     73                        'show_date' => 1 
     74                ); 
     75        } 
     76        wp_register_sidebar_widget( 'dashboard_primary', $widget_options['dashboard_primary']['title'], 'wp_dashboard_empty', 
     77                array( 'all_link' => $widget_options['dashboard_primary']['link'], 'feed_link' => $widget_options['dashboard_primary']['url'], 'width' => 'half', 'class' => 'widget_rss' ) 
     78        ); 
     79        wp_register_widget_control( 'dashboard_primary', __( 'Primary Feed' ), 'wp_dashboard_rss_control', array(), 
     80                array( 'widget_id' => 'dashboard_primary' ) 
     81        ); 
     82 
     83 
     84        // Secondary Feed (Planet) Widget 
     85        if ( !isset( $widget_options['dashboard_secondary'] ) ) { 
     86                $update = true; 
     87                $widget_options['dashboard_secondary'] = array( 
     88                        'link' => apply_filters( 'dashboard_secondary_link', 'http://planet.wordpress.org/' ), 
     89                        'url' => apply_filters( 'dashboard_secondary_feed', 'http://planet.wordpress.org/feed/' ), 
     90                        'title' => apply_filters( 'dashboard_secondary_title', __( 'Other WordPress News' ) ), 
     91                        'items' => 15 
     92                ); 
     93        } 
     94        wp_register_sidebar_widget( 'dashboard_secondary', $widget_options['dashboard_secondary']['title'], 'wp_dashboard_empty',  
     95                array( 'all_link' => $widget_options['dashboard_secondary']['link'], 'feed_link' => $widget_options['dashboard_secondary']['url'], 'width' => 'full' ) 
     96        ); 
     97        wp_register_widget_control( 'dashboard_secondary', __( 'Secondary Feed' ), 'wp_dashboard_rss_control', array(), 
     98                array( 'widget_id' => 'dashboard_secondary', 'form_inputs' => array( 'show_summary' => false, 'show_author' => false, 'show_date' => false ) ) 
     99        ); 
     100 
     101 
     102        // Hook to register new widgets 
     103        do_action( 'wp_dashboard_setup' ); 
     104 
     105        // Hard code the sidebar's widgets and order 
     106        $dashboard_widgets = array( 'dashboard_recent_comments', 'dashboard_incoming_links', 'dashboard_primary', 'dashboard_plugins', 'dashboard_secondary' ); 
     107 
     108        // Filter widget order 
     109        $dashboard_widgets = apply_filters( 'wp_dashboard_widgets', $dashboard_widgets ); 
     110 
     111        $wp_dashboard_sidebars = array( 'wp_dashboard' => $dashboard_widgets ); 
     112 
     113        add_filter( 'dynamic_sidebar_params', 'wp_dashboard_dynamic_sidebar_params' ); 
     114 
     115        if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget_id']) ) { 
     116                ob_start(); // hack - but the same hack wp-admin/widgets.php uses 
     117                wp_dashbaord_trigger_widget_control( $_POST['widget_id'] ); 
     118                ob_end_clean(); 
     119                wp_redirect( remove_query_arg( 'edit' ) ); 
     120                exit; 
     121        } 
     122 
     123        if ( $update ) 
     124                update_option( 'dashboard_widget_options', $widget_options ); 
     125} 
     126 
     127// Echoes out the dashboard 
     128function wp_dashboard() { 
     129        echo "<div id='dashboard-widgets'>\n\n"; 
     130 
     131        // We're already filtering dynamic_sidebar_params obove 
     132        add_filter( 'option_sidebars_widgets', 'wp_dashboard_sidebars_widgets' ); // here there be hackery 
     133        dynamic_sidebar( 'wp_dashboard' ); 
     134        remove_filter( 'option_sidebars_widgets', 'wp_dashboard_sidebars_widgets' ); 
     135 
     136        echo "<br class='clear' />\n</div>\n\n\n"; 
     137} 
     138 
     139// Makes sidebar_widgets option reflect the dashboard settings 
     140function wp_dashboard_sidebars_widgets() { // hackery 
     141        return $GLOBALS['wp_dashboard_sidebars']; 
     142} 
     143 
     144// Modifies sidbar params on the fly to set up ids, class names, titles for each widget (called once per widget) 
     145// Switches widget to edit mode if $_GET['edit'] 
     146function wp_dashboard_dynamic_sidebar_params( $params ) { 
     147        global $wp_registered_widgets, $wp_registered_widget_controls; 
     148 
     149        extract( $params[0], EXTR_PREFIX_ALL, 'sidebar' ); 
     150        extract( $wp_registered_widgets[$sidebar_widget_id], EXTR_PREFIX_ALL, 'widget' ); 
     151 
     152        $the_classes = array(); 
     153        if ( in_array($widget_width, array( 'third', 'fourth', 'full' ) ) ) 
     154                $the_classes[] = $widget_width; 
     155 
     156        if ( 'double' == $widget_height ) 
     157                $the_classes[] = 'double'; 
     158 
     159        if ( $widget_class ) 
     160                $the_classes[] = $widget_class; 
     161 
     162        // Add classes to the widget holder 
     163        if ( $the_classes ) 
     164                $sidebar_before_widget = str_replace( "<div class='dashboard-widget-holder ", "<div class='dashboard-widget-holder " . join( ' ', $the_classes ) . ' ', $sidebar_before_widget ); 
     165 
     166        $links = array(); 
     167        if ( $widget_all_link ) 
     168                $links[] = '<a href="' . clean_url( $widget_all_link ) . '">' . __( 'See&nbsp;All' ) . '</a>'; 
     169 
     170        $content_class = 'dashboard-widget-content'; 
     171        if ( current_user_can( 'edit_dashboard' ) && isset($wp_registered_widget_controls[$widget_id]) && is_callable($wp_registered_widget_controls[$widget_id]['callback']) ) { 
     172                // Switch this widget to edit mode 
     173                if ( isset($_GET['edit']) && $_GET['edit'] == $widget_id ) { 
     174                        $content_class .= ' dashboard-widget-control'; 
     175                        $wp_registered_widgets[$widget_id]['callback'] = 'wp_dashboard_empty'; 
     176                        $sidebar_widget_name = $wp_registered_widget_controls[$widget_id]['name']; 
     177                        $params[1] = $widget_id; 
     178                        $sidebar_before_widget .= '<form action="' . remove_query_arg( 'edit' )  . '" method="post">'; 
     179                        $sidebar_after_widget   = "<div class='dashboard-widget-submit'><input type='hidden' name='sidebar' value='wp_dashboard' /><input type='hidden' name='widget_id' value='$widget_id' /><input type='submit' value='" . __( 'Save' ) . "' /></div></form>$sidebar_after_widget"; 
     180                        $links[] = '<a href="' . remove_query_arg( 'edit' ) . '">' . __( 'Cancel' ) . '</a>'; 
     181                } else { 
     182                        $links[] = '<a href="' . add_query_arg( 'edit', $widget_id ) . "#$widget_id" . '">' . __( 'Edit' ) . '</a>'; 
     183                } 
     184        } 
     185 
     186        if ( $widget_feed_link ) 
     187                $links[] = '<img class="rss-icon" src="' . get_option( 'siteurl' ) . '/' . WPINC . '/images/rss.png" alt="' . __( 'rss icon' ) . '" /> <a href="' . clean_url( $widget_feed_link ) . '">' . __( 'RSS' ) . '</a>'; 
     188 
     189        $links = apply_filters( "wp_dashboard_widget_links_$widget_id", $links ); 
     190 
     191        // Add links to widget's title bar 
     192        if ( $links ) { 
     193                $sidebar_before_title .= '<span>'; 
     194                $sidebar_after_title   = '</span><small>' . join( '&nbsp;|&nbsp;', $links ) . "</small><br class='clear' />$sidebar_after_title"; 
     195        } 
     196 
     197        // Could have put this in widget-content.  Doesn't really matter 
     198        if ( $widget_notice ) 
     199                $sidebar_after_title .= "\t\t\t<div class='dashboard-widget-notice'>$widget_notice</div>\n\n"; 
     200 
     201        if ( $widget_error ) 
     202                $sidebar_after_title .= "\t\t\t<div class='dashboard-widget-error'>$widget_error</div>\n\n"; 
     203 
     204        $sidebar_after_title .= "\t\t\t<div class='$content_class'>\n\n"; 
     205 
     206        $sidebar_after_widget .= "\t\t\t</div>\n\n"; 
     207 
     208        foreach( array_keys( $params[0] ) as $key ) 
     209                $$key = ${'sidebar_' . $key}; 
     210 
     211        $params[0] = compact( array_keys( $params[0] ) ); 
     212 
     213        return $params; 
     214} 
     215 
     216 
     217/* Dashboard Widgets */ 
     218 
     219function wp_dashboard_recent_comments( $sidebar_args ) { 
     220        global $comment; 
     221 
     222        extract( $sidebar_args, EXTR_SKIP ); 
     223 
     224        echo $before_widget; 
     225 
     226        echo $before_title; 
     227        echo $widget_name; 
     228        echo $after_title; 
     229 
     230        $lambda = create_function( '', 'return 5;' ); 
     231        add_filter( 'option_posts_per_rss', $lambda ); // hack - comments query doesn't accept per_page parameter 
     232        $comments_query = new WP_Query('feed=rss2&withcomments=1'); 
     233        remove_filter( 'option_posts_per_rss', $lambda ); 
     234 
     235        $is_first = true; 
     236 
     237        if ( $comments_query->have_comments() ) { 
     238                while ( $comments_query->have_comments() ) { $comments_query->the_comment(); 
     239 
     240                        $comment_post_url = get_permalink( $comment->comment_post_ID ); 
     241                        $comment_post_title = get_the_title( $comment->comment_post_ID ); 
     242                        $comment_post_link = "<a href='$comment_post_url'>$comment_post_title</a>"; 
     243                        $comment_link = '<a class="comment-link" href="' . get_comment_link() . '">#</a>'; 
     244                        $comment_meta = sprintf( __( 'From <strong>%s</strong> on %s %s' ), get_comment_author(), $comment_post_link, $comment_link ); 
     245 
     246                        if ( $is_first ) : $is_first = false; 
     247?> 
     248                                <blockquote><?php comment_text(); ?></blockquote> 
     249                                <p class='comment-meta'><?php echo $comment_meta; ?></p> 
     250 
     251                                <ul id="dashboard-comments-list"> 
     252<?php 
     253                        else : 
     254?> 
     255 
     256                                        <li class='comment-meta'><?php echo $comment_meta; ?></li> 
     257<?php 
     258                        endif; 
     259                } 
     260?> 
     261 
     262                                </ul> 
     263 
     264<?php 
     265 
     266        } 
     267 
     268        echo $after_widget; 
     269} 
     270 
     271// Empty widget used for JS/AJAX created output.  Also used when widget is in edit mode. 
     272function wp_dashboard_empty( $sidebar_args, $widget_control_id = false ) { 
     273        extract( $sidebar_args, EXTR_SKIP ); 
     274 
     275        echo $before_widget; 
     276 
     277        echo $before_title; 
     278        echo $widget_name; 
     279        echo $after_title; 
     280 
     281        if ( $widget_control_id ) // If in edit mode 
     282                wp_dashbaord_trigger_widget_control( $widget_control_id ); 
     283 
     284        echo $after_widget; 
     285} 
     286 
     287/* Dashboard Widgets Controls. Ssee also wp_dashboard_empty() */ 
     288 
     289// Calls widget_control callback 
     290function wp_dashbaord_trigger_widget_control( $widget_control_id = false ) { 
     291        global $wp_registered_widget_controls; 
     292        if ( is_scalar($widget_control_id) && $widget_control_id && isset($wp_registered_widget_controls[$widget_control_id]) && is_callable($wp_registered_widget_controls[$widget_control_id]['callback']) ) 
     293                call_user_func_array( $wp_registered_widget_controls[$widget_control_id]['callback'], $wp_registered_widget_controls[$widget_control_id]['params'] ); 
     294} 
     295 
     296// Sets up $args to be used as input to wp_widget_rss_form(), handles POST data from RSS-type widgets 
     297function wp_dashboard_rss_control( $args ) { 
     298        extract( $args ); 
     299        if ( !$widget_id ) 
     300                return false; 
     301 
     302        if ( !$widget_options = get_option( 'dashboard_widget_options' ) ) 
     303                $widget_options = array(); 
     304 
     305        if ( !isset($widget_options[$widget_id]) ) 
     306                $widget_options[$widget_id] = array(); 
     307 
     308        $number = 1; // Hack to use wp_widget_rss_form() 
     309        $widget_options[$widget_id]['number'] = $number; 
     310 
     311        if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-rss'][$number]) ) { 
     312                $_POST['widget-rss'][$number] = stripslashes_deep( $_POST['widget-rss'][$number] ); 
     313                $widget_options[$widget_id] = wp_widget_rss_process( $_POST['widget-rss'][$number] ); 
     314                // title is optional.  If black, fill it if possible 
     315                if ( !$widget_options[$widget_id]['title'] && isset($_POST['widget-rss'][$number]['title']) ) { 
     316                        require_once(ABSPATH . WPINC . '/rss.php'); 
     317                        $rss = fetch_rss($widget_options[$widget_id]['url']); 
     318                        $widget_options[$widget_id]['title'] = htmlentities(strip_tags($rss->channel['title'])); 
     319                } 
     320                update_option( 'dashboard_widget_options', $widget_options ); 
     321        } 
     322 
     323        wp_widget_rss_form( $widget_options[$widget_id], $form_inputs ); 
     324} 
     325 
     326 
     327// Move this into wp-admin.css 
     328function temp_dashboard_css() { 
     329?> 
     330<style type="text/css"> 
     331/* <![CDATA[ */ 
     332 
     333div#dashboard-widgets { 
     334        position: relative; 
     335        left: 20px; 
     336        margin-left: -20px; 
     337} 
     338 
     339div.dashboard-widget-holder { 
     340        margin-top: 20px; 
     341        width: 50%; 
     342        float: left; 
     343} 
     344 
     345div.dashboard-widget-holder.third { 
     346        width: 33.3%; 
     347} 
     348 
     349div.dashboard-widget-holder.fourth { 
     350        width: 25%; 
     351} 
     352 
     353div.dashboard-widget-holder.full { 
     354        width: 100%; 
     355} 
     356 
     357div.dashboard-widget-holder.double div.dashboard-widget { 
     358        height: 52em; 
     359        padding-bottom: 28px /* lame */ 
     360} 
     361 
     362div.dashboard-widget { 
     363        position: relative; 
     364        margin-right: 20px; 
     365        border: 1px solid #ccc; 
     366        padding: 2px; 
     367        height: 26em; 
     368        overflow: auto; 
     369} 
     370 
     371h3.dashboard-widget-title  { 
     372        background-color: #eaf3fa; 
     373        margin: 0; 
     374        position: relative; 
     375        padding: 0 10px; 
     376        font-size: 1.2em; 
     377        line-height: 2; 
     378} 
     379 
     380h3.dashboard-widget-title span { 
     381        background-color: #eaf3fa; 
     382        display: block; 
     383        text-align: left; 
     384        float: left; 
     385} 
     386 
     387h3.dashboard-widget-title small { 
     388        background-color: #eaf3fa; 
     389        display: block; 
     390        text-align: right; 
     391        float: right; 
     392        font-size: 75%; 
     393        line-height: 2.67; /* math: it works */ 
     394        margin-top: 2px; 
     395} 
     396 
     397h3.dashboard-widget-title img.rss-icon { 
     398        vertical-align: middle; 
     399} 
     400 
     401div.dashboard-widget-notice { 
     402        background-color: #cfe1ef; 
     403        padding: 0 20px; 
     404        font-size: 1.2em; 
     405        line-height: 2; 
     406} 
     407 
     408div.dashboard-widget-error { 
     409        background-color: #c43; 
     410        padding: 0 20px; 
     411        font-size: 1.2em; 
     412        line-height: 2; 
     413} 
     414 
     415div.dashboard-widget-content { 
     416        margin: 10px 15px; 
     417} 
     418 
     419div.dashboard-widget-submit { 
     420        border-top: 1px solid #ccc; 
     421        margin: 10px 15px; 
     422        padding-top: 10px; 
     423} 
     424div.dashboard-widget-content ul, div.dashboard-widget-content ol, div.dashboard-widget-content dl { 
     425        text-indent: 0; 
     426        padding-left: 15px; 
     427} 
     428 
     429div.dashboard-widget-content blockquote { 
     430        margin: 0 0 -1em; 
     431} 
     432 
     433div.dashboard-widget-content .comment-meta { 
     434        font-size: 95%; 
     435} 
     436 
     437#dashboard_secondary div.dashboard-widget-content ul { 
     438        list-style: none; 
     439        padding: 0; 
     440        margin: 0; 
     441} 
     442 
     443#dashboard_secondary div.dashboard-widget-content ul li { 
     444        display: block; 
     445        width: 20%; 
     446        height: 6em; 
     447        padding-bottom: 20px; 
     448        margin: 0; 
     449        float: left; 
     450        font-size: 95%; 
     451} 
     452 
     453#dashboard_secondary div.dashboard-widget-content { 
     454        margin: 10px 5px; 
     455        padding: 0; 
     456} 
     457 
     458#dashboard_secondary div.dashboard-widget-content ul li .post { 
     459        display:block; 
     460        font-family:Georgia,"Times New Roman",Times,serif; 
     461        font-size:18px; 
     462        height:60px; 
     463        overflow:hidden; 
     464} 
     465 
     466#dashboard_secondary div.dashboard-widget-content ul li a { 
     467        background:#DDDDDD none repeat scroll 0%; 
     468        display:block; 
     469        height:100%; 
     470        overflow:hidden; 
     471        margin: 10px; 
     472        padding: .5em; 
     473} 
     474 
     475#dashboard_secondary div.dashboard-widget-content ul li a cite { 
     476        display: block; 
     477} 
     478 
     479#dashboard-widgets .widget_rss ul { 
     480        list-style: none; 
     481        padding: 0; 
     482        margin: 0; 
     483} 
     484 
     485#dashboard-widgets .widget_rss ul li { 
     486        clear: both; 
     487} 
     488 
     489#dashboard-widgets .widget_rss ul li span.rss-date { 
     490        float: left; 
     491        margin: .5em 0 1em; 
     492} 
     493 
     494#dashboard-widgets .widget_rss ul li a { 
     495        float: left; 
     496        margin: .5em .5em 1em 0; 
     497        font-weight: bold; 
     498} 
     499 
     500#dashboard-widgets .widget_rss ul li div { 
     501        clear: both; 
     502} 
     503/* ]]> */ 
     504</style> 
     505<?php 
     506} 
     507 
     508add_action( 'admin_head', 'temp_dashboard_css' ); 
     509 
     510?> 
  • wp-admin/index.php

     
    11<?php 
     2 
    23require_once('admin.php'); 
    34 
     5require( './includes/dashboard.php' ); 
     6 
     7wp_dashboard_setup(); 
     8 
    49function index_js() { 
    510?> 
    611<script type="text/javascript"> 
    712        jQuery(function() { 
    8                 jQuery('#incominglinks').load('index-extra.php?jax=incominglinks'); 
    9                 jQuery('#devnews').load('index-extra.php?jax=devnews'); 
    10 //              jQuery('#planetnews').load('index-extra.php?jax=planetnews'); 
     13                jQuery('#dashboard_incoming_links div.dashboard-widget-content').not( '.dashboard-widget-control' ).load('index-extra.php?jax=incominglinks'); 
     14                jQuery('#dashboard_primary div.dashboard-widget-content').not( '.dashboard-widget-control' ).load('index-extra.php?jax=devnews'); 
     15                jQuery('#dashboard_secondary div.dashboard-widget-content').not( '.dashboard-widget-control' ).load('index-extra.php?jax=planetnews'); 
     16                jQuery('#dashboard_plugins div.dashboard-widget-content').not( '.dashboard-widget-control' ).html( 'TODO' ); 
    1117        }); 
    1218</script> 
    1319<?php 
     
    7783$widgets_text = sprintf( __ngettext( '%d widget', '%d widgets', $num_widgets ), $num_widgets ); 
    7884?> 
    7985<p><?php printf( __( 'You are using %1$s theme with %2$s.' ), $ct->title, "<a href='widgets.php'>$widgets_text</a>" ); ?> <a href="themes.php" class="rbutton"><?php _e('Change Theme'); ?></a> You're using BetaPress TODO.</p> 
    80 <p> 
    8186<?php do_action( 'rightnow_end' ); ?> 
    8287<?php do_action( 'activity_box_end' ); ?> 
    83 </div> 
     88</div><!-- rightnow --> 
    8489 
    85 <div id="dashboard-widgets"> 
     90<?php wp_dashboard(); ?> 
    8691 
    87 <div class="dashboard-widget"> 
    88 <div class="dashboard-widget-edit"><a href=""><?php _e('See All'); ?></a> | <a href=""><?php _e('Edit'); ?></a></div> 
    89 <h3>Recent Comments</h3> 
     92</div><!-- wrap --> 
    9093 
    91 <?php 
    92 $comments = $wpdb->get_results("SELECT comment_author, comment_author_url, comment_ID, comment_post_ID FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 5"); 
    93 $numcomments = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '0'"); 
    94  
    95 if ( $comments || $numcomments ) : 
    96 ?> 
    97  
    98 <?php if ( $numcomments ) : ?> 
    99 <p><strong><a href="moderation.php"><?php echo sprintf(__('Comments in moderation (%s) &raquo;'), number_format_i18n($numcomments) ); ?></a></strong></p> 
    100 <?php endif; ?> 
    101  
    102 <ul> 
    103 <?php 
    104 if ( $comments ) { 
    105 foreach ($comments as $comment) { 
    106         echo '<li>' . sprintf(__('%1$s on %2$s'), get_comment_author_link(), '<a href="'. get_permalink($comment->comment_post_ID) . '#comment-' . $comment->comment_ID . '">' . get_the_title($comment->comment_post_ID) . '</a>'); 
    107         edit_comment_link(__("Edit"), ' <small>(', ')</small>'); 
    108         echo '</li>'; 
    109 } 
    110 } 
    111 ?> 
    112 </ul> 
    113 <?php endif; ?> 
    114 </div> 
    115  
    116  
    117 <div class="dashboard-widget"> 
    118 <?php 
    119 $more_link = apply_filters( 'dashboard_incoming_links_link', 'http://blogsearch.google.com/blogsearch?hl=en&scoring=d&partner=wordpress&q=link:' . trailingslashit( get_option('home') ) ); 
    120 ?> 
    121 <div class="dashboard-widget-edit"><a href="<?php echo htmlspecialchars( $more_link ); ?>"><?php _e('See All'); ?></a> | <a href=""><?php _e('Edit'); ?></a></div> 
    122 <h3><?php _e('Incoming Links'); ?></h3> 
    123  
    124 <div id="incominglinks"></div> 
    125 </div> 
    126  
    127 <div class="dashboard-widget"> 
    128 <?php 
    129 $recentposts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'post' AND " . get_private_posts_cap_sql('post') . " AND post_date_gmt < '$today' ORDER BY post_date DESC LIMIT 5"); 
    130 ?> 
    131 <div class="dashboard-widget-edit"><a href="<?php echo htmlspecialchars( $more_link ); ?>"><?php _e('See All'); ?></a> | <a href=""><?php _e('Edit'); ?></a></div> 
    132 <h3>Recent Posts</h3> 
    133  
    134 <ul> 
    135 <?php 
    136 foreach ($recentposts as $post) { 
    137         if ($post->post_title == '') 
    138                 $post->post_title = sprintf(__('Post #%s'), $post->ID); 
    139         echo "<li><a href='post.php?action=edit&amp;post=$post->ID'>"; 
    140         the_title(); 
    141         echo '</a></li>'; 
    142 } 
    143 ?> 
    144 </ul> 
    145 </div> 
    146  
    147 <div class="dashboard-widget"> 
    148 <div class="dashboard-widget-edit"><a href="<?php echo htmlspecialchars( $more_link ); ?>"><?php _e('See All'); ?></a> | <a href=""><?php _e('Edit'); ?></a> | <a href=""><?php _e('RSS'); ?></a></div> 
    149 <h3><?php echo apply_filters( 'dashboard_primary_title', __('Blog') ); ?></h3> 
    150  
    151 <div id="devnews"></div> 
    152 </div> 
    153  
    154 <?php do_action( 'dashboard_widgets' ); ?> 
    155  
    156 <p><a href=""><?php _e('Customize this page'); ?></a>.</p> 
    157  
    158 </div> 
    159  
    160  
    161 <div id="planetnews"></div> 
    162  
    163 <div style="clear: both">&nbsp; 
    164 <br clear="all" /> 
    165 </div> 
    166 </div> 
    167  
    168 <?php 
    169 require('./admin-footer.php'); 
    170 ?> 
     94<?php require('./admin-footer.php'); ?> 
  • wp-admin/index-extra.php

     
    44 
    55@header('Content-Type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); 
    66 
     7$widgets = get_option( 'dashboard_widget_options' ); 
     8 
     9 
    710switch ( $_GET['jax'] ) { 
    811 
    912case 'incominglinks' : 
    10  
    11 $rss_feed = apply_filters( 'dashboard_incoming_links_feed', 'http://blogsearch.google.com/blogsearch_feeds?hl=en&scoring=d&ie=utf-8&num=10&output=rss&partner=wordpress&q=link:' . trailingslashit( get_option('home') ) ); 
    12  
    13  
    14 $rss = @fetch_rss( $rss_feed ); 
     13@extract( @$widgets['dashboard_incoming_links'], EXTR_SKIP ); 
     14$rss = @fetch_rss( $url ); 
    1515if ( isset($rss->items) && 1 < count($rss->items) ) { // Technorati returns a 1-item feed when it has no results 
    1616?> 
    1717 
    1818<ul> 
    1919<?php 
    20 $rss->items = array_slice($rss->items, 0, 10); 
     20$rss->items = array_slice($rss->items, 0, $items); 
    2121foreach ($rss->items as $item ) { 
     22        $publisher = ''; 
     23        $site_link = ''; 
     24        $link = ''; 
     25        $content = ''; 
     26        $date = ''; 
     27        $link = clean_url( strip_tags( $item['link'] ) ); 
     28 
     29        if ( isset( $item['author_uri'] ) ) 
     30                $site_link = clean_url( strip_tags( $item['author_uri'] ) ); 
     31 
     32        if ( !$publisher = wp_specialchars( strip_tags( isset($item['dc']['publisher']) ? $item['dc']['publisher'] : $item['author_name'] ) ) ) 
     33                $publisher = __( 'Somebody' ); 
     34        if ( $site_link ) 
     35                $publisher = "<a href='$site_link'>$publisher</a>"; 
     36        else 
     37                $publisher = "<strong>$publisher</strong>"; 
     38 
     39        if ( isset($item['description']) ) 
     40                $content = $item['description']; 
     41        elseif ( isset($item['summary']) ) 
     42                $content = $item['summary']; 
     43        elseif ( isset($item['atom_content']) ) 
     44                $content = $item['atom_content']; 
     45        else 
     46                $content = __( 'something' ); 
     47        $content = strip_tags( $content ); 
     48        if ( 50 < strlen($content) ) 
     49                $content = substr($content, 0, 50) . ' ...'; 
     50        $content = wp_specialchars( $content ); 
     51        if ( $link ) 
     52                $text = _c( '%1$s linked here <a href="%2$s">saying</a>, "%3$s"|feed_display' ); 
     53        else 
     54                $text = _c( '%1$s linked here saying, "%3$s"|feed_display' ); 
     55 
     56        if ( $show_date ) { 
     57                if ( $show_author || $show_summary ) 
     58                        $text .= _c( ' on %4$s|feed_display' ); 
     59                $date = wp_specialchars( strip_tags( isset($item['pubdate']) ? $item['pubdate'] : $item['published'] ) ); 
     60                $date = strtotime( $date ); 
     61                $date = gmdate( get_option( 'date_format' ), $date ); 
     62        } 
     63 
    2264?> 
    23         <li><a href="<?php echo wp_filter_kses($item['link']); ?>"><?php echo wptexturize(wp_specialchars($item['title'])); ?></a></li> 
     65        <li><?php printf( _c( "$text|feed_display" ), $publisher, $link, $content, $date ); ?></li> 
    2466<?php } ?> 
    2567</ul> 
    2668<?php 
     
    3274break; 
    3375 
    3476case 'devnews' : 
    35 $rss = @fetch_rss(apply_filters( 'dashboard_primary_feed', 'http://wordpress.org/development/feed/' )); 
    36 if ( isset($rss->items) && 0 != count($rss->items) ) { 
    37  
    38 $rss->items = array_slice($rss->items, 0, 2); 
    39 foreach ($rss->items as $item ) { 
    40 ?> 
    41 <h4><a href='<?php echo wp_filter_kses($item['link']); ?>'><?php echo wp_specialchars($item['title']); ?></a> <?php gmdate( 'Y/m/d', strtotime( $item['pubdate'] ) ); ?></h4> 
    42 <p><?php echo $item['description']; ?></p> 
    43 <?php 
    44         } 
    45 } 
    46 ?> 
    47  
    48 <?php 
     77wp_widget_rss_output( $widgets['dashboard_primary'] ); 
    4978break; 
    5079 
    5180case 'planetnews' : 
    52 $rss = @fetch_rss(apply_filters( 'dashboard_secondary_feed', 'http://planet.wordpress.org/feed/' )); 
     81extract( $widgets['dashboard_secondary'], EXTR_SKIP ); 
     82$rss = @fetch_rss( $url ); 
    5383if ( isset($rss->items) && 0 != count($rss->items) ) { 
    5484?> 
    55 <h3><?php echo apply_filters( 'dashboard_secondary_title', __('Other WordPress News') ); ?></h3> 
    5685<ul> 
    5786<?php 
    58 $rss->items = array_slice($rss->items, 0, 20); 
     87$rss->items = array_slice($rss->items, 0, $items); 
    5988foreach ($rss->items as $item ) { 
    6089$title = wp_specialchars($item['title']); 
    6190$author = preg_replace( '|(.+?):.+|s', '$1', $item['title'] ); 
     
    6695        } 
    6796?> 
    6897</ul> 
    69 <p class="readmore"><a href="<?php echo apply_filters( 'dashboard_secondary_link', 'http://planet.wordpress.org/' ); ?>"><?php _e('Read more &raquo;'); ?></a></p> 
    7098<?php 
    7199} 
    72100break;