X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/76aea3697c6043c1613370f172395b4f65ee71f0..refs/tags/wordpress-2.7.1:/wp-admin/includes/dashboard.php diff --git a/wp-admin/includes/dashboard.php b/wp-admin/includes/dashboard.php index 27839fcf..b08615f9 100644 --- a/wp-admin/includes/dashboard.php +++ b/wp-admin/includes/dashboard.php @@ -1,39 +1,35 @@ 'WordPress Dashboard', - 'id' => 'wp_dashboard', - 'before_widget' => "\t
\n\n\t\t
\n\n", - 'after_widget' => "\t\t
\n\n\t
\n\n", - 'before_title' => "\t\t\t

", - 'after_title' => "

\n\n" - ) ); - - /* Register Widgets and Controls */ + // Right Now + wp_add_dashboard_widget( 'dashboard_right_now', __( 'Right Now' ), 'wp_dashboard_right_now' ); + // Recent Comments Widget - $mod_comments = wp_count_comments(); - $mod_comments = $mod_comments->moderated; - if ( current_user_can( 'moderate_comments' ) && $mod_comments ) { - $notice = sprintf( __ngettext( '%d comment awaiting moderation', '%d comments awaiting moderation', $mod_comments ), $mod_comments ); - $notice = "$notice"; - } else { - $notice = ''; - } - wp_register_sidebar_widget( 'dashboard_recent_comments', __( 'Recent Comments' ), 'wp_dashboard_recent_comments', - array( 'all_link' => 'edit-comments.php', 'notice' => $notice, 'width' => 'half' ) - ); + $recent_comments_title = __( 'Recent Comments' ); + wp_add_dashboard_widget( 'dashboard_recent_comments', $recent_comments_title, 'wp_dashboard_recent_comments' ); // Incoming Links Widget if ( !isset( $widget_options['dashboard_incoming_links'] ) || !isset( $widget_options['dashboard_incoming_links']['home'] ) || $widget_options['dashboard_incoming_links']['home'] != get_option('home') ) { @@ -42,25 +38,23 @@ function wp_dashboard_setup() { 'home' => get_option('home'), 'link' => apply_filters( 'dashboard_incoming_links_link', 'http://blogsearch.google.com/blogsearch?hl=en&scoring=d&partner=wordpress&q=link:' . trailingslashit( get_option('home') ) ), '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') ) ), - 'items' => 5, - 'show_date' => 0 + 'items' => isset($widget_options['dashboard_incoming_links']['items']) ? $widget_options['dashboard_incoming_links']['items'] : 10, + 'show_date' => isset($widget_options['dashboard_incoming_links']['show_date']) ? $widget_options['dashboard_incoming_links']['show_date'] : false ); } - wp_register_sidebar_widget( 'dashboard_incoming_links', __( 'Incoming Links' ), 'wp_dashboard_empty', - array( 'all_link' => $widget_options['dashboard_incoming_links']['link'], 'feed_link' => $widget_options['dashboard_incoming_links']['url'], 'width' => 'half' ), - 'wp_dashboard_cached_rss_widget', 'wp_dashboard_incoming_links_output' - ); - wp_register_widget_control( 'dashboard_incoming_links', __( 'Incoming Links' ), 'wp_dashboard_rss_control', array(), - array( 'widget_id' => 'dashboard_incoming_links', 'form_inputs' => array( 'title' => false, 'show_summary' => false, 'show_author' => false ) ) - ); - + wp_add_dashboard_widget( 'dashboard_incoming_links', __( 'Incoming Links' ), 'wp_dashboard_incoming_links', 'wp_dashboard_incoming_links_control' ); // WP Plugins Widget - wp_register_sidebar_widget( 'dashboard_plugins', __( 'Plugins' ), 'wp_dashboard_empty', - array( 'all_link' => 'http://wordpress.org/extend/plugins/', 'feed_link' => 'http://wordpress.org/extend/plugins/rss/topics/', 'width' => 'half' ), - 'wp_dashboard_cached_rss_widget', 'wp_dashboard_plugins_output', - array( 'http://wordpress.org/extend/plugins/rss/browse/popular/', 'http://wordpress.org/extend/plugins/rss/browse/new/', 'http://wordpress.org/extend/plugins/rss/browse/updated/' ) - ); + if ( current_user_can( 'activate_plugins' ) ) + wp_add_dashboard_widget( 'dashboard_plugins', __( 'Plugins' ), 'wp_dashboard_plugins' ); + + // QuickPress Widget + if ( current_user_can('edit_posts') ) + wp_add_dashboard_widget( 'dashboard_quick_press', __( 'QuickPress' ), 'wp_dashboard_quick_press' ); + + // Recent Drafts + if ( current_user_can('edit_posts') ) + wp_add_dashboard_widget( 'dashboard_recent_drafts', __('Recent Drafts'), 'wp_dashboard_recent_drafts' ); // Primary feed (Dev Blog) Widget if ( !isset( $widget_options['dashboard_primary'] ) ) { @@ -75,14 +69,7 @@ function wp_dashboard_setup() { 'show_date' => 1 ); } - wp_register_sidebar_widget( 'dashboard_primary', $widget_options['dashboard_primary']['title'], 'wp_dashboard_empty', - array( 'all_link' => $widget_options['dashboard_primary']['link'], 'feed_link' => $widget_options['dashboard_primary']['url'], 'width' => 'half', 'class' => 'widget_rss' ), - 'wp_dashboard_cached_rss_widget', 'wp_dashboard_rss_output' - ); - wp_register_widget_control( 'dashboard_primary', __( 'Primary Feed' ), 'wp_dashboard_rss_control', array(), - array( 'widget_id' => 'dashboard_primary' ) - ); - + wp_add_dashboard_widget( 'dashboard_primary', $widget_options['dashboard_primary']['title'], 'wp_dashboard_primary', 'wp_dashboard_primary_control' ); // Secondary Feed (Planet) Widget if ( !isset( $widget_options['dashboard_secondary'] ) ) { @@ -91,60 +78,21 @@ function wp_dashboard_setup() { 'link' => apply_filters( 'dashboard_secondary_link', __( 'http://planet.wordpress.org/' ) ), 'url' => apply_filters( 'dashboard_secondary_feed', __( 'http://planet.wordpress.org/feed/' ) ), 'title' => apply_filters( 'dashboard_secondary_title', __( 'Other WordPress News' ) ), - 'items' => 15 + 'items' => 5 ); } - wp_register_sidebar_widget( 'dashboard_secondary', $widget_options['dashboard_secondary']['title'], 'wp_dashboard_empty', - array( 'all_link' => $widget_options['dashboard_secondary']['link'], 'feed_link' => $widget_options['dashboard_secondary']['url'], 'width' => 'full' ), - 'wp_dashboard_cached_rss_widget', 'wp_dashboard_secondary_output' - ); - wp_register_widget_control( 'dashboard_secondary', __( 'Secondary Feed' ), 'wp_dashboard_rss_control', array(), - array( 'widget_id' => 'dashboard_secondary', 'form_inputs' => array( 'show_summary' => false, 'show_author' => false, 'show_date' => false ) ) - ); - - - /* Dashboard Widget Template - wp_register_sidebar_widget( $widget_id (unique slug) , $widget_title, $output_callback, - array( - 'all_link' => full url for "See All" link, - 'feed_link' => full url for "RSS" link, - 'width' => 'fourth', 'third', 'half', 'full' (defaults to 'half'), - 'height' => 'single', 'double' (defaults to 'single'), - ), - $wp_dashboard_empty_callback (only needed if using 'wp_dashboard_empty' as your $output_callback), - $arg, $arg, $arg... (further args passed to callbacks) - ); - - // optional: if you want users to be able to edit the settings of your widget, you need to register a widget_control - wp_register_widget_control( $widget_id, $widget_control_title, $control_output_callback, - array(), // leave an empty array here: oddity in widget code - array( - 'widget_id' => $widget_id, // Yes - again. This is required: oddity in widget code - 'arg' => an arg to pass to the $control_output_callback, - 'another' => another arg to pass to the $control_output_callback, - ... - ) - ); - */ + wp_add_dashboard_widget( 'dashboard_secondary', $widget_options['dashboard_secondary']['title'], 'wp_dashboard_secondary', 'wp_dashboard_secondary_control' ); // Hook to register new widgets do_action( 'wp_dashboard_setup' ); - // Hard code the sidebar's widgets and order - $dashboard_widgets = array(); - $dashboard_widgets[] = 'dashboard_recent_comments'; - $dashboard_widgets[] = 'dashboard_incoming_links'; - $dashboard_widgets[] = 'dashboard_primary'; - if ( current_user_can( 'activate_plugins' ) ) - $dashboard_widgets[] = 'dashboard_plugins'; - $dashboard_widgets[] = 'dashboard_secondary'; - // Filter widget order - $dashboard_widgets = apply_filters( 'wp_dashboard_widgets', $dashboard_widgets ); - - $wp_dashboard_sidebars = array( 'wp_dashboard' => $dashboard_widgets, 'array_version' => 3.5 ); + $dashboard_widgets = apply_filters( 'wp_dashboard_widgets', array() ); - add_filter( 'dynamic_sidebar_params', 'wp_dashboard_dynamic_sidebar_params' ); + foreach ( $dashboard_widgets as $widget_id ) { + $name = empty( $wp_registered_widgets[$widget_id]['all_link'] ) ? $wp_registered_widgets[$widget_id]['name'] : $wp_registered_widgets[$widget_id]['name'] . " " . __('View all') . ''; + wp_add_dashboard_widget( $widget_id, $name, $wp_registered_widgets[$widget_id]['callback'], $wp_registered_widget_controls[$widget_id]['callback'] ); + } if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget_id']) ) { ob_start(); // hack - but the same hack wp-admin/widgets.php uses @@ -156,162 +104,469 @@ function wp_dashboard_setup() { if ( $update ) update_option( 'dashboard_widget_options', $widget_options ); + + do_action('do_meta_boxes', 'dashboard', 'normal', ''); + do_action('do_meta_boxes', 'dashboard', 'side', ''); } -// Echoes out the dashboard -function wp_dashboard() { - echo "
\n\n"; +function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback = null ) { + global $wp_dashboard_control_callbacks; + if ( $control_callback && current_user_can( 'edit_dashboard' ) && is_callable( $control_callback ) ) { + $wp_dashboard_control_callbacks[$widget_id] = $control_callback; + if ( isset( $_GET['edit'] ) && $widget_id == $_GET['edit'] ) { + list($url) = explode( '#', add_query_arg( 'edit', false ), 2 ); + $widget_name .= ' ' . __( 'Cancel' ) . ''; + add_meta_box( $widget_id, $widget_name, '_wp_dashboard_control_callback', 'dashboard', 'normal', 'core' ); + return; + } + list($url) = explode( '#', add_query_arg( 'edit', $widget_id ), 2 ); + $widget_name .= ' ' . __( 'Configure' ) . ''; + } + $side_widgets = array('dashboard_quick_press', 'dashboard_recent_drafts', 'dashboard_primary', 'dashboard_secondary'); + $location = 'normal'; + if ( in_array($widget_id, $side_widgets) ) + $location = 'side'; + add_meta_box( $widget_id, $widget_name , $callback, 'dashboard', $location, 'core' ); +} - // We're already filtering dynamic_sidebar_params obove - add_filter( 'option_sidebars_widgets', 'wp_dashboard_sidebars_widgets' ); // here there be hackery - dynamic_sidebar( 'wp_dashboard' ); - remove_filter( 'option_sidebars_widgets', 'wp_dashboard_sidebars_widgets' ); +function _wp_dashboard_control_callback( $dashboard, $meta_box ) { + echo '
'; + wp_dashboard_trigger_widget_control( $meta_box['id'] ); + echo "

"; - echo "
\n
\n\n\n"; + echo ''; } -// Makes sidebar_widgets option reflect the dashboard settings -function wp_dashboard_sidebars_widgets() { // hackery - return $GLOBALS['wp_dashboard_sidebars']; +/** + * Displays the dashboard. + * + * @since unknown + */ +function wp_dashboard() { + echo "
\n\n"; + + echo "
\n\n"; + $class = do_meta_boxes( 'dashboard', 'side', '' ) ? ' class="has-sidebar"' : ''; + echo "
\n\n"; + + echo "
\n\n"; + echo "
\n\n"; + do_meta_boxes( 'dashboard', 'normal', '' ); + echo "
\n\n"; + echo "
\n\n"; + + echo "
\n

\n"; + wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); + wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); + echo "

\n
\n"; + + echo "
"; } -// Modifies sidbar params on the fly to set up ids, class names, titles for each widget (called once per widget) -// Switches widget to edit mode if $_GET['edit'] -function wp_dashboard_dynamic_sidebar_params( $params ) { - global $wp_registered_widgets, $wp_registered_widget_controls; - - $sidebar_defaults = array('widget_id' => 0, 'before_widget' => '', 'after_widget' => '', 'before_title' => '', 'after_title' => ''); - extract( $sidebar_defaults, EXTR_PREFIX_ALL, 'sidebar' ); - extract( $params[0], EXTR_PREFIX_ALL, 'sidebar' ); - - if ( !isset($wp_registered_widgets[$sidebar_widget_id]) || !is_array($wp_registered_widgets[$sidebar_widget_id]) ) { - return $params; - } - $widget_defaults = array('id' => '', 'width' => '', 'height' => '', 'class' => '', 'feed_link' => '', 'all_link' => '', 'notice' => false, 'error' => false); - extract( $widget_defaults, EXTR_PREFIX_ALL, 'widget' ); - extract( $wp_registered_widgets[$sidebar_widget_id], EXTR_PREFIX_ALL, 'widget' ); - - $the_classes = array(); - if ( in_array($widget_width, array( 'third', 'fourth', 'full' ) ) ) - $the_classes[] = $widget_width; - - if ( 'double' == $widget_height ) - $the_classes[] = 'double'; - - if ( $widget_class ) - $the_classes[] = $widget_class; - - // Add classes to the widget holder - if ( $the_classes ) - $sidebar_before_widget = str_replace( "
' . __( 'See All' ) . ''; - - $content_class = 'dashboard-widget-content'; - if ( current_user_can( 'edit_dashboard' ) && isset($wp_registered_widget_controls[$widget_id]) && is_callable($wp_registered_widget_controls[$widget_id]['callback']) ) { - // Switch this widget to edit mode - if ( isset($_GET['edit']) && $_GET['edit'] == $widget_id ) { - $content_class .= ' dashboard-widget-control'; - $wp_registered_widgets[$widget_id]['callback'] = 'wp_dashboard_empty'; - $sidebar_widget_name = $wp_registered_widget_controls[$widget_id]['name']; - $params[1] = 'wp_dashboard_trigger_widget_control'; - $sidebar_before_widget .= '
'; - $sidebar_after_widget = "
$sidebar_after_widget"; - $links[] = '' . __( 'Cancel' ) . ''; - } else { - $links[] = '' . __( 'Edit' ) . ''; - } - } +/* Dashboard Widgets */ - if ( $widget_feed_link ) - $links[] = '' . __( 'rss icon' ) . ' ' . __( 'RSS' ) . ''; +function wp_dashboard_right_now() { + $num_posts = wp_count_posts( 'post' ); + $num_pages = wp_count_posts( 'page' ); - $links = apply_filters( "wp_dashboard_widget_links_$widget_id", $links ); + $num_cats = wp_count_terms('category'); - // Add links to widget's title bar - if ( $links ) { - $sidebar_before_title .= ''; - $sidebar_after_title = '' . join( ' | ', $links ) . "
$sidebar_after_title"; - } + $num_tags = wp_count_terms('post_tag'); - // Could have put this in widget-content. Doesn't really matter - if ( $widget_notice ) - $sidebar_after_title .= "\t\t\t
$widget_notice
\n\n"; + $num_comm = wp_count_comments( ); - if ( $widget_error ) - $sidebar_after_title .= "\t\t\t
$widget_error
\n\n"; + echo "\n\t".'

' . __('At a Glance') . '

'; + echo "\n\t".'
'."\n\t".''; + echo "\n\t".''; - $sidebar_after_title .= "\t\t\t
\n\n"; + // Posts + $num = number_format_i18n( $num_posts->publish ); + $text = __ngettext( 'Post', 'Posts', intval($num_posts->publish) ); + if ( current_user_can( 'edit_posts' ) ) { + $num = "$num"; + $text = "$text"; + } + echo '
'; + echo ''; + /* TODO: Show status breakdown on hover + if ( $can_edit_pages && !empty($num_pages->publish) ) { // how many pages is not exposed in feeds. Don't show if !current_user_can + $post_type_texts[] = ''.sprintf( __ngettext( '%s page', '%s pages', $num_pages->publish ), number_format_i18n( $num_pages->publish ) ).''; + } + if ( $can_edit_posts && !empty($num_posts->draft) ) { + $post_type_texts[] = ''.sprintf( __ngettext( '%s draft', '%s drafts', $num_posts->draft ), number_format_i18n( $num_posts->draft ) ).''; + } + if ( $can_edit_posts && !empty($num_posts->future) ) { + $post_type_texts[] = ''.sprintf( __ngettext( '%s scheduled post', '%s scheduled posts', $num_posts->future ), number_format_i18n( $num_posts->future ) ).''; + } + if ( current_user_can('publish_posts') && !empty($num_posts->pending) ) { + $pending_text = sprintf( __ngettext( 'There is %2$s post pending your review.', 'There are %2$s posts pending your review.', $num_posts->pending ), 'edit.php?post_status=pending', number_format_i18n( $num_posts->pending ) ); + } else { + $pending_text = ''; + } + */ + + // Total Comments + $num = number_format_i18n($num_comm->total_comments); + $text = __ngettext( 'Comment', 'Comments', $num_comm->total_comments ); + if ( current_user_can( 'moderate_comments' ) ) { + $num = "$num"; + $text = "$text"; + } + echo ''; + echo ''; - $sidebar_after_widget .= "\t\t\t\n\n"; + echo ''; - foreach( array_keys( $params[0] ) as $key ) - $$key = ${'sidebar_' . $key}; + // Pages + $num = number_format_i18n( $num_pages->publish ); + $text = __ngettext( 'Page', 'Pages', $num_pages->publish ); + if ( current_user_can( 'edit_pages' ) ) { + $num = "$num"; + $text = "$text"; + } + echo ''; + echo ''; + + // Approved Comments + $num = number_format_i18n($num_comm->approved); + $text = __ngettext( 'Approved', 'Approved', $num_comm->approved ); + if ( current_user_can( 'moderate_comments' ) ) { + $num = "$num"; + $text = "$text"; + } + echo ''; + echo ''; - $params[0] = compact( array_keys( $params[0] ) ); + echo "\n\t"; - return $params; -} + // Categories + $num = number_format_i18n( $num_cats ); + $text = __ngettext( 'Category', 'Categories', $num_cats ); + if ( current_user_can( 'manage_categories' ) ) { + $num = "$num"; + $text = "$text"; + } + echo ''; + echo ''; + + // Pending Comments + $num = number_format_i18n($num_comm->moderated); + $text = __ngettext( 'Pending', 'Pending', $num_comm->moderated ); + if ( current_user_can( 'moderate_comments' ) ) { + $num = "$num"; + $text = "$text"; + } + echo ''; + echo ''; + echo "\n\t"; -/* Dashboard Widgets */ + // Tags + $num = number_format_i18n( $num_tags ); + $text = __ngettext( 'Tag', 'Tags', $num_tags ); + if ( current_user_can( 'manage_categories' ) ) { + $num = "$num"; + $text = "$text"; + } + echo ''; + echo ''; + + // Spam Comments + $num = number_format_i18n($num_comm->spam); + $text = __ngettext( 'Spam', 'Spam', $num_comm->spam ); + if ( current_user_can( 'moderate_comments' ) ) { + $num = "$num"; + $text = "$text"; + } + echo ''; + echo ''; + + echo ""; + do_action('right_now_table_end'); + echo "\n\t
' . $num . '' . $text . '' . $num . '' . $text . '
' . $num . '' . $text . '' . $num . '' . $text . '
' . $num . '' . $text . '' . $num . '' . $text . '
' . $num . '' . $text . '' . $num . '' . $text . '
\n\t
"; + + echo "\n\t".'
'; + $ct = current_theme_info(); + $sidebars_widgets = wp_get_sidebars_widgets(); + $num_widgets = array_reduce( $sidebars_widgets, create_function( '$prev, $curr', 'return $prev+count($curr);' ), 0 ); + $num = number_format_i18n( $num_widgets ); + + echo "\n\t

"; + if ( current_user_can( 'switch_themes' ) ) { + echo '' . __('Change Theme') . ''; + printf(__ngettext('Theme %1$s with %2$s Widget', 'Theme %1$s with %2$s Widgets', $num_widgets), $ct->title, $num); + } else { + printf(__ngettext('Theme %1$s with %2$s Widget', 'Theme %1$s with %2$s Widgets', $num_widgets), $ct->title, $num); + } + + echo '

'; -function wp_dashboard_recent_comments( $sidebar_args ) { - global $comment; - extract( $sidebar_args, EXTR_SKIP ); + update_right_now_message(); - echo $before_widget; + echo "\n\t".'
'; + do_action( 'rightnow_end' ); + do_action( 'activity_box_end' ); +} - echo $before_title; - echo $widget_name; - echo $after_title; +function wp_dashboard_quick_press() { + $drafts = false; + if ( 'post' === strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['action'] ) && 0 === strpos( $_POST['action'], 'post-quickpress' ) && (int) $_POST['post_ID'] ) { + $view = get_permalink( $_POST['post_ID'] ); + $edit = clean_url( get_edit_post_link( $_POST['post_ID'] ) ); + if ( 'post-quickpress-publish' == $_POST['action'] ) { + if ( current_user_can('publish_posts') ) + printf( '

' . __( 'Post Published. View post | Edit post' ) . '

', clean_url( $view ), $edit ); + else + printf( '

' . __( 'Post submitted. Preview post | Edit post' ) . '

', clean_url( add_query_arg( 'preview', 1, $view ) ), $edit ); + } else { + printf( '

' . __( 'Draft Saved. Preview post | Edit post' ) . '

', clean_url( add_query_arg( 'preview', 1, $view ) ), $edit ); + $drafts_query = new WP_Query( array( + 'post_type' => 'post', + 'what_to_show' => 'posts', + 'post_status' => 'draft', + 'author' => $GLOBALS['current_user']->ID, + 'posts_per_page' => 1, + 'orderby' => 'modified', + 'order' => 'DESC' + ) ); + + if ( $drafts_query->posts ) + $drafts =& $drafts_query->posts; + } + printf('

' . __('You can also try %s, easy blogging from anywhere on the Web.') . '

', '' . __('Press This') . '' ); + $_REQUEST = array(); // hack for get_default_post_to_edit() + } - $lambda = create_function( '', 'return 5;' ); - add_filter( 'option_posts_per_rss', $lambda ); // hack - comments query doesn't accept per_page parameter - $comments_query = new WP_Query(array('feed' => 'rss2', 'withcomments' => 1)); - remove_filter( 'option_posts_per_rss', $lambda ); + $post = get_default_post_to_edit(); +?> - $is_first = true; +
+

+
+ +
+ + +
+ +
+ + +

+
+ +
+ + + +

+
+ +
+ +

+ + + + + + + + + + +
+

+ +
- if ( $comments_query->have_comments() ) { - while ( $comments_query->have_comments() ) { $comments_query->the_comment(); +comment_post_ID ); - $comment_post_title = get_the_title( $comment->comment_post_ID ); - $comment_post_link = "$comment_post_title"; - $comment_link = '#'; - $comment_meta = sprintf( __( 'From %1$s on %2$s %3$s' ), get_comment_author(), $comment_post_link, $comment_link ); +function wp_dashboard_recent_drafts( $drafts = false ) { + if ( !$drafts ) { + $drafts_query = new WP_Query( array( + 'post_type' => 'post', + 'what_to_show' => 'posts', + 'post_status' => 'draft', + 'author' => $GLOBALS['current_user']->ID, + 'posts_per_page' => 5, + 'orderby' => 'modified', + 'order' => 'DESC' + ) ); + $drafts =& $drafts_query->posts; + } - if ( $is_first ) : $is_first = false; + if ( $drafts && is_array( $drafts ) ) { + $list = array(); + foreach ( $drafts as $draft ) { + $url = get_edit_post_link( $draft->ID ); + $title = _draft_or_post_title( $draft->ID ); + $item = "

$title " . get_the_time( get_option( 'date_format' ), $draft ) . '

'; + if ( $the_content = preg_split( '#\s#', strip_tags( $draft->post_content ), 11, PREG_SPLIT_NO_EMPTY ) ) + $item .= '

' . join( ' ', array_slice( $the_content, 0, 10 ) ) . ( 10 < count( $the_content ) ? '…' : '' ) . '

'; + $list[] = $item; + } ?> -

-

+ +

comment_count > 1 ) : ?> - comment_post_ID ); + $comment_post_title = get_the_title( $comment->comment_post_ID ); + $comment_post_link = "$comment_post_title"; + $comment_link = '#'; + + $delete_url = clean_url( wp_nonce_url( "comment.php?action=deletecomment&p=$comment->comment_post_ID&c=$comment->comment_ID", "delete-comment_$comment->comment_ID" ) ); + $approve_url = clean_url( wp_nonce_url( "comment.php?action=approvecomment&p=$comment->comment_post_ID&c=$comment->comment_ID", "approve-comment_$comment->comment_ID" ) ); + $unapprove_url = clean_url( wp_nonce_url( "comment.php?action=unapprovecomment&p=$comment->comment_post_ID&c=$comment->comment_ID", "unapprove-comment_$comment->comment_ID" ) ); + $spam_url = clean_url( wp_nonce_url( "comment.php?action=deletecomment&dt=spam&p=$comment->comment_post_ID&c=$comment->comment_ID", "delete-comment_$comment->comment_ID" ) ); + + $actions = array(); + + $actions_string = ''; + if ( current_user_can('edit_post', $comment->comment_post_ID) ) { + $actions['approve'] = "" . __( 'Approve' ) . ''; + $actions['unapprove'] = "" . __( 'Unapprove' ) . ''; + $actions['edit'] = "". __('Edit') . ''; + //$actions['quickedit'] = '' . __('Quick Edit') . ''; + $actions['reply'] = '' . __('Reply') . ''; + $actions['spam'] = "" . _c( 'Spam|verb' ) . ''; + $actions['delete'] = "" . __('Delete') . ''; + + $actions = apply_filters( 'comment_row_actions', $actions, $comment ); + + $i = 0; + foreach ( $actions as $action => $link ) { + ++$i; + ( ( ('approve' == $action || 'unapprove' == $action) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | '; + // Reply and quickedit need a hide-if-no-js span + if ( 'reply' == $action || 'quickedit' == $action ) + $action .= ' hide-if-no-js'; + + $actions_string .= "$sep$link"; + } } - echo $after_widget; +?> + +
comment_ID) ) ); ?>> + comment_type || 'comment' == $comment->comment_type ) : ?> + + +

' . get_comment_author_link() . '', $comment_post_link." ".$comment_link, ' ' . __( '[Pending]' ) . '' ); ?>

+ + comment_type ) : + case 'pingback' : + $type = __( 'Pingback' ); + break; + case 'trackback' : + $type = __( 'Trackback' ); + break; + default : + $type = ucwords( $comment->comment_type ); + endswitch; + $type = wp_specialchars( $type ); + ?> + +

$type", $comment_post_link ); ?>

+

+ + +

+

+ + + +
+ false, 'show_summary' => false, 'show_author' => false ) ); +} + +function wp_dashboard_primary() { + wp_dashboard_cached_rss_widget( 'dashboard_primary', 'wp_dashboard_rss_output' ); +} + +function wp_dashboard_primary_control() { + wp_dashboard_rss_control( 'dashboard_primary' ); +} + +/** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param int $widget_id + */ function wp_dashboard_rss_output( $widget_id ) { $widgets = get_option( 'dashboard_widget_options' ); + echo "
"; wp_widget_rss_output( $widgets[$widget_id] ); + echo "
"; +} + +function wp_dashboard_secondary() { + wp_dashboard_cached_rss_widget( 'dashboard_secondary', 'wp_dashboard_secondary_output' ); +} + +function wp_dashboard_secondary_control() { + wp_dashboard_rss_control( 'dashboard_secondary' ); } -// $sidebar_args are handled by wp_dashboard_empty() +/** + * Display secondary dashboard RSS widget feed. + * + * @since unknown + * + * @return unknown + */ function wp_dashboard_secondary_output() { $widgets = get_option( 'dashboard_widget_options' ); @extract( @$widgets['dashboard_secondary'], EXTR_SKIP ); $rss = @fetch_rss( $url ); + if ( !isset($rss->items) || 0 == count($rss->items) ) return false; - echo "\n
\n"; + echo "
"; + wp_widget_rss_output( $rss, $widgets['dashboard_secondary'] ); + echo "
"; } -// $sidebar_args are handled by wp_dashboard_empty() +function wp_dashboard_plugins() { + wp_dashboard_cached_rss_widget( 'dashboard_plugins', 'wp_dashboard_plugins_output', array( + 'http://wordpress.org/extend/plugins/rss/browse/popular/', + 'http://wordpress.org/extend/plugins/rss/browse/new/', + 'http://wordpress.org/extend/plugins/rss/browse/updated/' + ) ); +} + +/** + * Display plugins most popular, newest plugins, and recently updated widget text. + * + * @since unknown + */ function wp_dashboard_plugins_output() { $popular = @fetch_rss( 'http://wordpress.org/extend/plugins/rss/browse/popular/' ); $new = @fetch_rss( 'http://wordpress.org/extend/plugins/rss/browse/new/' ); @@ -433,18 +736,35 @@ function wp_dashboard_plugins_output() { list($link, $frag) = explode( '#', $item['link'] ); $link = clean_url($link); - $dlink = rtrim($link, '/') . '/download/'; + if( preg_match('|/([^/]+?)/?$|', $link, $matches) ) + $slug = $matches[1]; + else + $slug = ''; + + $ilink = wp_nonce_url('plugin-install.php?tab=plugin-information&plugin=' . $slug, 'install-plugin_' . $slug) . + '&TB_iframe=true&width=600&height=800'; echo "

$label

\n"; - echo "
$title
 (" . __( 'Download' ) . ")\n"; + echo "
$title
 (" . __( 'Install' ) . ")\n"; echo "

$description

\n"; } } -// Checks to see if all of the feed url in $check_urls are cached. -// If $check_urls is empty, look for the rss feed url found in the dashboard widget optios of $widget_id. -// If cached, call $callback, a function that echoes out output for this widget. -// If not cache, echo a "Loading..." stub which is later replaced by AJAX call (see top of /wp-admin/index.php) +/** + * Checks to see if all of the feed url in $check_urls are cached. + * + * If $check_urls is empty, look for the rss feed url found in the dashboard + * widget optios of $widget_id. If cached, call $callback, a function that + * echoes out output for this widget. If not cache, echo a "Loading..." stub + * which is later replaced by AJAX call (see top of /wp-admin/index.php) + * + * @since unknown + * + * @param int $widget_id + * @param callback $callback + * @param array $check_urls RSS feeds + * @return bool False on failure. True on success. + */ function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = array() ) { $loading = '

' . __( 'Loading…' ) . '

'; @@ -480,42 +800,36 @@ function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = ar return true; } -// Empty widget used for JS/AJAX created output. -// Callback inserts content between before_widget and after_widget. Used when widget is in edit mode. Can also be used for custom widgets. -function wp_dashboard_empty( $sidebar_args, $callback = false ) { - extract( $sidebar_args, EXTR_SKIP ); - - echo $before_widget; - - echo $before_title; - echo $widget_name; - echo $after_title; - - // When in edit mode, the callback passed to this function is the widget_control callback - if ( $callback && is_callable( $callback ) ) { - $args = array_slice( func_get_args(), 2 ); - array_unshift( $args, $widget_id ); - call_user_func_array( $callback, $args ); - } - - echo $after_widget; -} - -/* Dashboard Widgets Controls. Ssee also wp_dashboard_empty() */ +/* Dashboard Widgets Controls */ // Calls widget_control callback +/** + * Calls widget control callback. + * + * @since unknown + * + * @param int $widget_control_id Registered Widget ID. + */ function wp_dashboard_trigger_widget_control( $widget_control_id = false ) { - global $wp_registered_widget_controls; - 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']) ) - call_user_func_array( $wp_registered_widget_controls[$widget_control_id]['callback'], $wp_registered_widget_controls[$widget_control_id]['params'] ); -} + global $wp_dashboard_control_callbacks; -// Sets up $args to be used as input to wp_widget_rss_form(), handles POST data from RSS-type widgets -function wp_dashboard_rss_control( $args ) { - extract( $args ); - if ( !$widget_id ) - return false; + if ( is_scalar($widget_control_id) && $widget_control_id && isset($wp_dashboard_control_callbacks[$widget_control_id]) && is_callable($wp_dashboard_control_callbacks[$widget_control_id]) ) { + call_user_func( $wp_dashboard_control_callbacks[$widget_control_id], '', array( 'id' => $widget_control_id, 'callback' => $wp_dashboard_control_callbacks[$widget_control_id] ) ); + } +} +/** + * The RSS dashboard widget control. + * + * Sets up $args to be used as input to wp_widget_rss_form(). Handles POST data + * from RSS-type widgets. + * + * @since unknown + * + * @param string widget_id + * @param array form_inputs + */ +function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) { if ( !$widget_options = get_option( 'dashboard_widget_options' ) ) $widget_options = array(); @@ -540,4 +854,9 @@ function wp_dashboard_rss_control( $args ) { wp_widget_rss_form( $widget_options[$widget_id], $form_inputs ); } +/** + * Empty function usable by plugins to output empty dashboard widget (to be populated later by JS). + */ +function wp_dashboard_empty() {} + ?>