2008-02-02 08:57:51 +01:00
< ? php
2008-09-17 02:40:10 +02:00
/**
2011-04-28 17:24:49 +02:00
* WordPress Dashboard Widget Administration Screen API
2008-09-17 02:40:10 +02:00
*
* @ package WordPress
* @ subpackage Administration
*/
/**
* Registers dashboard widgets .
*
2010-09-05 04:45:39 +02:00
* Handles POST data , sets up filters .
2008-09-17 02:40:10 +02:00
*
2010-09-05 04:45:39 +02:00
* @ since 2.5 . 0
2015-05-28 23:41:30 +02:00
*
* @ global array $wp_registered_widgets
* @ global array $wp_registered_widget_controls
* @ global array $wp_dashboard_control_callbacks
2008-09-17 02:40:10 +02:00
*/
2008-02-02 08:57:51 +01:00
function wp_dashboard_setup () {
2008-10-09 01:32:34 +02:00
global $wp_registered_widgets , $wp_registered_widget_controls , $wp_dashboard_control_callbacks ;
$wp_dashboard_control_callbacks = array ();
2010-10-07 21:34:18 +02:00
$screen = get_current_screen ();
2008-10-09 01:32:34 +02:00
2008-02-02 08:57:51 +01:00
/* Register Widgets and Controls */
2011-05-12 05:33:27 +02:00
$response = wp_check_browser_version ();
2011-06-05 17:14:51 +02:00
if ( $response && $response [ 'upgrade' ] ) {
2011-05-12 05:33:27 +02:00
add_filter ( 'postbox_classes_dashboard_dashboard_browser_nag' , 'dashboard_browser_nag_class' );
if ( $response [ 'insecure' ] )
wp_add_dashboard_widget ( 'dashboard_browser_nag' , __ ( 'You are using an insecure browser!' ), 'wp_dashboard_browser_nag' );
else
wp_add_dashboard_widget ( 'dashboard_browser_nag' , __ ( 'Your browser is out of date!' ), 'wp_dashboard_browser_nag' );
}
2008-10-21 19:56:48 +02:00
// Right Now
2010-10-07 21:34:18 +02:00
if ( is_blog_admin () && current_user_can ( 'edit_posts' ) )
2013-12-05 23:38:11 +01:00
wp_add_dashboard_widget ( 'dashboard_right_now' , __ ( 'At a Glance' ), 'wp_dashboard_right_now' );
2008-10-21 19:56:48 +02:00
2010-11-08 18:31:00 +01:00
if ( is_network_admin () )
wp_add_dashboard_widget ( 'network_dashboard_right_now' , __ ( 'Right Now' ), 'wp_network_dashboard_right_now' );
2013-11-13 23:09:10 +01:00
// Activity Widget
2013-11-26 06:29:10 +01:00
if ( is_blog_admin () ) {
2013-12-05 22:23:10 +01:00
wp_add_dashboard_widget ( 'dashboard_activity' , __ ( 'Activity' ), 'wp_dashboard_site_activity' );
2013-11-26 06:29:10 +01:00
}
2011-12-23 01:25:09 +01:00
2008-10-31 21:47:36 +01:00
// QuickPress Widget
2015-10-20 07:49:24 +02:00
if ( is_blog_admin () && current_user_can ( get_post_type_object ( 'post' ) -> cap -> create_posts ) ) {
2013-12-03 18:32:19 +01:00
$quick_draft_title = sprintf ( '<span class="hide-if-no-js">%1$s</span> <span class="hide-if-js">%2$s</span>' , __ ( 'Quick Draft' ), __ ( 'Drafts' ) );
wp_add_dashboard_widget ( 'dashboard_quick_press' , $quick_draft_title , 'wp_dashboard_quick_press' );
}
2008-10-31 21:47:36 +01:00
2013-11-13 23:09:10 +01:00
// WordPress News
2013-11-15 21:15:10 +01:00
wp_add_dashboard_widget ( 'dashboard_primary' , __ ( 'WordPress News' ), 'wp_dashboard_primary' );
2008-02-21 22:20:09 +01:00
2010-10-21 12:06:17 +02:00
if ( is_network_admin () ) {
2014-03-24 03:21:15 +01:00
/**
* Fires after core widgets for the Network Admin dashboard have been registered .
*
* @ since 3.1 . 0
*/
2010-10-21 12:06:17 +02:00
do_action ( 'wp_network_dashboard_setup' );
2014-03-24 03:21:15 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the list of widgets to load for the Network Admin dashboard .
2014-03-24 03:21:15 +01:00
*
* @ since 3.1 . 0
*
* @ param array $dashboard_widgets An array of dashboard widgets .
*/
2010-10-21 12:06:17 +02:00
$dashboard_widgets = apply_filters ( 'wp_network_dashboard_widgets' , array () );
2010-10-21 19:51:49 +02:00
} elseif ( is_user_admin () ) {
2014-03-24 03:21:15 +01:00
/**
* Fires after core widgets for the User Admin dashboard have been registered .
*
* @ since 3.1 . 0
*/
2010-10-21 19:51:49 +02:00
do_action ( 'wp_user_dashboard_setup' );
2014-03-24 03:21:15 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the list of widgets to load for the User Admin dashboard .
2014-03-24 03:21:15 +01:00
*
* @ since 3.1 . 0
*
* @ param array $dashboard_widgets An array of dashboard widgets .
*/
2010-10-21 19:53:26 +02:00
$dashboard_widgets = apply_filters ( 'wp_user_dashboard_widgets' , array () );
2010-10-21 12:06:17 +02:00
} else {
2014-03-24 03:21:15 +01:00
/**
* Fires after core widgets for the admin dashboard have been registered .
*
* @ since 2.5 . 0
*/
2010-10-21 12:06:17 +02:00
do_action ( 'wp_dashboard_setup' );
2014-03-24 03:21:15 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the list of widgets to load for the admin dashboard .
2014-03-24 03:21:15 +01:00
*
* @ since 2.5 . 0
*
* @ param array $dashboard_widgets An array of dashboard widgets .
*/
2010-10-21 12:06:17 +02:00
$dashboard_widgets = apply_filters ( 'wp_dashboard_widgets' , array () );
}
2008-02-02 08:57:51 +01:00
2008-11-18 02:04:41 +01:00
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' ] . " <a href=' { $wp_registered_widgets [ $widget_id ][ 'all_link' ] } ' class='edit-box open-box'> " . __ ( 'View all' ) . '</a>' ;
wp_add_dashboard_widget ( $widget_id , $name , $wp_registered_widgets [ $widget_id ][ 'callback' ], $wp_registered_widget_controls [ $widget_id ][ 'callback' ] );
}
2008-02-02 08:57:51 +01:00
if ( 'POST' == $_SERVER [ 'REQUEST_METHOD' ] && isset ( $_POST [ 'widget_id' ]) ) {
2012-12-02 01:12:43 +01:00
check_admin_referer ( 'edit-dashboard-widget_' . $_POST [ 'widget_id' ], 'dashboard-widget-nonce' );
2008-02-02 08:57:51 +01:00
ob_start (); // hack - but the same hack wp-admin/widgets.php uses
2008-03-23 17:34:28 +01:00
wp_dashboard_trigger_widget_control ( $_POST [ 'widget_id' ] );
2008-02-02 08:57:51 +01:00
ob_end_clean ();
wp_redirect ( remove_query_arg ( 'edit' ) );
exit ;
}
2013-10-25 00:59:20 +02:00
/** This action is documented in wp-admin/edit-form-advanced.php */
2014-03-24 03:21:15 +01:00
do_action ( 'do_meta_boxes' , $screen -> id , 'normal' , '' );
2013-10-25 00:59:20 +02:00
/** This action is documented in wp-admin/edit-form-advanced.php */
2014-03-24 03:21:15 +01:00
do_action ( 'do_meta_boxes' , $screen -> id , 'side' , '' );
2008-02-02 08:57:51 +01:00
}
2015-05-28 23:41:30 +02:00
/**
2016-03-06 13:08:28 +01:00
* Adds a new dashboard widget .
2015-05-28 23:41:30 +02:00
*
2016-03-07 23:17:26 +01:00
* @ since 2.7 . 0
*
* @ global array $wp_dashboard_control_callbacks
2015-05-28 23:41:30 +02:00
*
2016-03-06 13:08:28 +01:00
* @ param string $widget_id Widget ID ( used in the 'id' attribute for the widget ) .
* @ param string $widget_name Title of the widget .
* @ param callable $callback Function that fills the widget with the desired content .
* The function should echo its output .
* @ param callable $control_callback Optional . Function that outputs controls for the widget . Default null .
* @ param array $callback_args Optional . Data that should be set as the $args property of the widget array
* ( which is the second parameter passed to your callback ) . Default null .
2015-05-28 23:41:30 +02:00
*/
2013-09-16 20:07:10 +02:00
function wp_add_dashboard_widget ( $widget_id , $widget_name , $callback , $control_callback = null , $callback_args = null ) {
2010-10-07 21:34:18 +02:00
$screen = get_current_screen ();
2008-10-09 01:32:34 +02:00
global $wp_dashboard_control_callbacks ;
2010-12-08 20:53:26 +01:00
2016-07-05 17:22:29 +02:00
$private_callback_args = array ( '__widget_basename' => $widget_name );
if ( is_null ( $callback_args ) ) {
$callback_args = $private_callback_args ;
} else if ( is_array ( $callback_args ) ) {
$callback_args = array_merge ( $callback_args , $private_callback_args );
}
2008-10-09 01:32:34 +02:00
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 );
2009-05-18 18:00:33 +02:00
$widget_name .= ' <span class="postbox-title-action"><a href="' . esc_url ( $url ) . '">' . __ ( 'Cancel' ) . '</a></span>' ;
2010-12-13 22:21:50 +01:00
$callback = '_wp_dashboard_control_callback' ;
} else {
list ( $url ) = explode ( '#' , add_query_arg ( 'edit' , $widget_id ), 2 );
2010-12-08 20:53:26 +01:00
$widget_name .= ' <span class="postbox-title-action"><a href="' . esc_url ( " $url # $widget_id " ) . '" class="edit-box open-box">' . __ ( 'Configure' ) . '</a></span>' ;
2008-10-09 01:32:34 +02:00
}
}
2010-11-17 19:47:34 +01:00
2013-11-15 21:15:10 +01:00
$side_widgets = array ( 'dashboard_quick_press' , 'dashboard_primary' );
2010-11-08 18:31:00 +01:00
2008-10-31 22:04:48 +01:00
$location = 'normal' ;
if ( in_array ( $widget_id , $side_widgets ) )
$location = 'side' ;
2011-06-15 21:23:35 +02:00
$priority = 'core' ;
if ( 'dashboard_browser_nag' === $widget_id )
$priority = 'high' ;
2013-09-16 20:07:10 +02:00
add_meta_box ( $widget_id , $widget_name , $callback , $screen , $location , $priority , $callback_args );
2008-10-09 01:32:34 +02:00
}
2008-02-02 08:57:51 +01:00
2015-05-29 23:17:27 +02:00
/**
2016-02-03 21:20:26 +01:00
* Outputs controls for the current dashboard widget .
2015-05-29 23:17:27 +02:00
*
2016-02-03 21:20:26 +01:00
* @ access private
* @ since 2.7 . 0
*
* @ param mixed $dashboard
* @ param array $meta_box
2015-05-29 23:17:27 +02:00
*/
2008-10-09 01:32:34 +02:00
function _wp_dashboard_control_callback ( $dashboard , $meta_box ) {
2015-01-16 05:16:24 +01:00
echo '<form method="post" class="dashboard-widget-control-form">' ;
2008-10-09 01:32:34 +02:00
wp_dashboard_trigger_widget_control ( $meta_box [ 'id' ] );
2012-12-02 01:12:43 +01:00
wp_nonce_field ( 'edit-dashboard-widget_' . $meta_box [ 'id' ], 'dashboard-widget-nonce' );
2010-10-17 20:24:34 +02:00
echo '<input type="hidden" name="widget_id" value="' . esc_attr ( $meta_box [ 'id' ]) . '" />' ;
submit_button ( __ ( 'Submit' ) );
2008-12-09 19:03:31 +01:00
echo '</form>' ;
2008-02-02 08:57:51 +01:00
}
2008-09-17 02:40:10 +02:00
/**
2008-10-09 01:32:34 +02:00
* Displays the dashboard .
2008-09-17 02:40:10 +02:00
*
2010-09-05 04:45:39 +02:00
* @ since 2.5 . 0
2008-09-17 02:40:10 +02:00
*/
2008-10-09 01:32:34 +02:00
function wp_dashboard () {
2010-10-07 21:34:18 +02:00
$screen = get_current_screen ();
2013-12-04 18:28:11 +01:00
$columns = absint ( $screen -> get_columns () );
$columns_css = '' ;
if ( $columns ) {
$columns_css = " columns- $columns " ;
}
2010-10-07 21:34:18 +02:00
2009-02-24 03:37:22 +01:00
?>
2013-12-04 18:28:11 +01:00
< div id = " dashboard-widgets " class = " metabox-holder<?php echo $columns_css ; ?> " >
2014-05-19 03:59:15 +02:00
< div id = " postbox-container-1 " class = " postbox-container " >
2012-03-23 22:41:00 +01:00
< ? php do_meta_boxes ( $screen -> id , 'normal' , '' ); ?>
</ div >
2014-05-19 03:59:15 +02:00
< div id = " postbox-container-2 " class = " postbox-container " >
2012-03-23 22:41:00 +01:00
< ? php do_meta_boxes ( $screen -> id , 'side' , '' ); ?>
</ div >
2014-05-19 03:59:15 +02:00
< div id = " postbox-container-3 " class = " postbox-container " >
2012-03-23 22:41:00 +01:00
< ? php do_meta_boxes ( $screen -> id , 'column3' , '' ); ?>
</ div >
2014-05-19 03:59:15 +02:00
< div id = " postbox-container-4 " class = " postbox-container " >
2012-03-23 22:41:00 +01:00
< ? php do_meta_boxes ( $screen -> id , 'column4' , '' ); ?>
</ div >
</ div >
2008-10-09 01:32:34 +02:00
2009-02-24 03:37:22 +01:00
< ? php
2008-10-09 01:32:34 +02:00
wp_nonce_field ( 'closedpostboxes' , 'closedpostboxesnonce' , false );
wp_nonce_field ( 'meta-box-order' , 'meta-box-order-nonce' , false );
2008-10-11 01:54:27 +02:00
2008-02-02 08:57:51 +01:00
}
2014-03-24 03:21:15 +01:00
//
// Dashboard Widgets
//
2008-02-02 08:57:51 +01:00
2013-11-15 21:15:10 +01:00
/**
* Dashboard widget that displays some basic stats about the site .
*
2013-12-05 23:38:11 +01:00
* Formerly 'Right Now' . A streamlined 'At a Glance' as of 3.8 .
2013-11-15 21:15:10 +01:00
*
* @ since 2.7 . 0
*/
function wp_dashboard_right_now () {
2013-11-13 23:09:10 +01:00
?>
< div class = " main " >
< ul >
< ? php
2013-12-06 00:34:11 +01:00
// Posts and Pages
foreach ( array ( 'post' , 'page' ) as $post_type ) {
2013-11-13 23:09:10 +01:00
$num_posts = wp_count_posts ( $post_type );
if ( $num_posts && $num_posts -> publish ) {
2013-12-06 00:34:11 +01:00
if ( 'post' == $post_type ) {
$text = _n ( '%s Post' , '%s Posts' , $num_posts -> publish );
} else {
$text = _n ( '%s Page' , '%s Pages' , $num_posts -> publish );
}
$text = sprintf ( $text , number_format_i18n ( $num_posts -> publish ) );
2014-01-22 17:52:11 +01:00
$post_type_object = get_post_type_object ( $post_type );
if ( $post_type_object && current_user_can ( $post_type_object -> cap -> edit_posts ) ) {
printf ( '<li class="%1$s-count"><a href="edit.php?post_type=%1$s">%2$s</a></li>' , $post_type , $text );
} else {
printf ( '<li class="%1$s-count"><span>%2$s</span></li>' , $post_type , $text );
}
2009-04-30 01:30:07 +02:00
}
2008-10-31 05:23:17 +01:00
}
2013-11-13 23:09:10 +01:00
// Comments
$num_comm = wp_count_comments ();
2016-05-01 13:06:28 +02:00
if ( $num_comm && ( $num_comm -> approved || $num_comm -> moderated ) ) {
2014-09-29 14:42:16 +02:00
$text = sprintf ( _n ( '%s Comment' , '%s Comments' , $num_comm -> approved ), number_format_i18n ( $num_comm -> approved ) );
2013-12-06 00:34:11 +01:00
?>
< li class = " comment-count " >< a href = " edit-comments.php " >< ? php echo $text ; ?> </a></li>
< ? php
2016-01-05 15:19:28 +01:00
$moderated_comments_count_i18n = number_format_i18n ( $num_comm -> moderated );
2015-09-24 17:53:25 +02:00
/* translators: Number of comments in moderation */
2016-01-05 15:19:28 +01:00
$text = sprintf ( _nx ( '%s in moderation' , '%s in moderation' , $num_comm -> moderated , 'comments' ), $moderated_comments_count_i18n );
/* translators: Number of comments in moderation */
$aria_label = sprintf ( _nx ( '%s comment in moderation' , '%s comments in moderation' , $num_comm -> moderated , 'comments' ), $moderated_comments_count_i18n );
2015-09-24 17:53:25 +02:00
?>
< li class = " comment-mod-count<?php
if ( ! $num_comm -> moderated ) {
echo ' hidden' ;
}
2016-01-05 15:19:28 +01:00
?> "><a href="edit-comments.php?comment_status=moderated" aria-label="<?php esc_attr_e( $aria_label ); ?>"><?php echo $text; ?></a></li>
2015-09-24 17:53:25 +02:00
< ? php
2011-05-07 01:42:37 +02:00
}
2013-12-09 20:12:10 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the array of extra elements to list in the 'At a Glance'
2014-03-24 03:21:15 +01:00
* dashboard widget .
*
* Prior to 3.8 . 0 , the widget was named 'Right Now' . Each element
* is wrapped in list - item tags on output .
2013-12-09 20:12:10 +01:00
*
* @ since 3.8 . 0
2014-03-24 03:21:15 +01:00
*
* @ param array $items Array of extra 'At a Glance' widget items .
2013-12-09 20:12:10 +01:00
*/
$elements = apply_filters ( 'dashboard_glance_items' , array () );
2014-03-24 03:21:15 +01:00
2013-12-09 20:12:10 +01:00
if ( $elements ) {
echo '<li>' . implode ( " </li> \n <li> " , $elements ) . " </li> \n " ;
}
2013-11-13 23:09:10 +01:00
?>
</ ul >
2013-12-06 00:05:10 +01:00
< ? php
2014-03-25 15:36:15 +01:00
update_right_now_message ();
2013-12-06 00:05:10 +01:00
// Check if search engines are asked not to index this site.
2015-12-11 23:03:26 +01:00
if ( ! is_network_admin () && ! is_user_admin () && current_user_can ( 'manage_options' ) && '0' == get_option ( 'blog_public' ) ) {
2013-12-06 00:05:10 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the link title attribute for the 'Search Engines Discouraged'
2014-03-24 03:21:15 +01:00
* message displayed in the 'At a Glance' dashboard widget .
*
* Prior to 3.8 . 0 , the widget was named 'Right Now' .
2013-12-06 00:05:10 +01:00
*
* @ since 3.0 . 0
2016-03-03 09:56:26 +01:00
* @ since 4.5 . 0 The default for `$title` was updated to an empty string .
2013-12-06 00:05:10 +01:00
*
2014-03-24 03:21:15 +01:00
* @ param string $title Default attribute text .
2013-12-06 00:05:10 +01:00
*/
2016-01-05 15:19:28 +01:00
$title = apply_filters ( 'privacy_on_link_title' , '' );
2011-05-07 01:42:37 +02:00
2013-12-06 00:05:10 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the link label for the 'Search Engines Discouraged' message
2014-03-24 03:21:15 +01:00
* displayed in the 'At a Glance' dashboard widget .
*
* Prior to 3.8 . 0 , the widget was named 'Right Now' .
2013-12-06 00:05:10 +01:00
*
* @ since 3.0 . 0
*
2014-03-24 03:21:15 +01:00
* @ param string $content Default text .
2013-12-06 00:05:10 +01:00
*/
$content = apply_filters ( 'privacy_on_link_text' , __ ( 'Search Engines Discouraged' ) );
2016-01-05 15:19:28 +01:00
$title_attr = '' === $title ? '' : " title=' $title ' " ;
2013-12-06 00:05:10 +01:00
2016-01-05 15:19:28 +01:00
echo " <p><a href='options-reading.php' $title_attr > $content </a></p> " ;
2013-12-06 00:05:10 +01:00
}
?>
</ div >
2013-11-13 23:09:10 +01:00
< ? php
2014-03-24 03:21:15 +01:00
/*
* activity_box_end has a core action , but only prints content when multisite .
* Using an output buffer is the only way to really check if anything ' s displayed here .
*/
2013-11-13 23:09:10 +01:00
ob_start ();
2014-03-24 03:21:15 +01:00
/**
* Fires at the end of the 'At a Glance' dashboard widget .
*
* Prior to 3.8 . 0 , the widget was named 'Right Now' .
*
* @ since 2.5 . 0
*/
2008-10-21 19:56:48 +02:00
do_action ( 'rightnow_end' );
2014-03-24 03:21:15 +01:00
/**
* Fires at the end of the 'At a Glance' dashboard widget .
*
* Prior to 3.8 . 0 , the widget was named 'Right Now' .
*
* @ since 2.0 . 0
*/
2008-10-21 19:56:48 +02:00
do_action ( 'activity_box_end' );
2014-03-24 03:21:15 +01:00
2013-11-13 23:09:10 +01:00
$actions = ob_get_clean ();
if ( ! empty ( $actions ) ) : ?>
< div class = " sub " >
< ? php echo $actions ; ?>
</ div >
< ? php endif ;
2008-10-21 19:56:48 +02:00
}
2015-05-31 05:18:25 +02:00
/**
* @ since 3.1 . 0
*/
2010-11-08 18:31:00 +01:00
function wp_network_dashboard_right_now () {
$actions = array ();
if ( current_user_can ( 'create_sites' ) )
$actions [ 'create-site' ] = '<a href="' . network_admin_url ( 'site-new.php' ) . '">' . __ ( 'Create a New Site' ) . '</a>' ;
if ( current_user_can ( 'create_users' ) )
$actions [ 'create-user' ] = '<a href="' . network_admin_url ( 'user-new.php' ) . '">' . __ ( 'Create a New User' ) . '</a>' ;
$c_users = get_user_count ();
$c_blogs = get_blog_count ();
2016-11-21 03:46:30 +01:00
/* translators: 1: Number of users on the network */
2010-11-08 18:31:00 +01:00
$user_text = sprintf ( _n ( '%s user' , '%s users' , $c_users ), number_format_i18n ( $c_users ) );
2016-11-21 03:46:30 +01:00
/* translators: 1: Number of sites on the network */
2010-11-08 18:31:00 +01:00
$blog_text = sprintf ( _n ( '%s site' , '%s sites' , $c_blogs ), number_format_i18n ( $c_blogs ) );
2010-11-17 19:47:34 +01:00
2016-11-21 03:46:30 +01:00
/* translators: 1: Text indicating the number of sites on the network, 2: Text indicating the number of users on the network */
2010-11-08 18:31:00 +01:00
$sentence = sprintf ( __ ( 'You have %1$s and %2$s.' ), $blog_text , $user_text );
if ( $actions ) {
echo '<ul class="subsubsub">' ;
2010-11-08 18:36:09 +01:00
foreach ( $actions as $class => $action ) {
2010-11-08 18:31:00 +01:00
$actions [ $class ] = " \t <li class=' $class '> $action " ;
}
echo implode ( " |</li> \n " , $actions ) . " </li> \n " ;
echo '</ul>' ;
}
?>
< br class = " clear " />
< p class = " youhave " >< ? php echo $sentence ; ?> </p>
2014-03-24 03:21:15 +01:00
< ? php
/**
* Fires in the Network Admin 'Right Now' dashboard widget
* just before the user and site search form fields .
*
* @ since MU
*
* @ param null $unused
*/
do_action ( 'wpmuadminresult' , '' );
?>
2010-11-08 18:31:00 +01:00
2012-06-05 20:51:33 +02:00
< form action = " <?php echo network_admin_url('users.php'); ?> " method = " get " >
2010-11-08 18:31:00 +01:00
< p >
2015-02-23 03:29:26 +01:00
< label class = " screen-reader-text " for = " search-users " >< ? php _e ( 'Search Users' ); ?> </label>
< input type = " search " name = " s " value = " " size = " 30 " autocomplete = " off " id = " search-users " />
2016-09-28 21:54:28 +02:00
< ? php submit_button ( __ ( 'Search Users' ), '' , false , false , array ( 'id' => 'submit_users' ) ); ?>
2010-11-08 18:31:00 +01:00
</ p >
</ form >
2012-06-05 20:51:33 +02:00
< form action = " <?php echo network_admin_url('sites.php'); ?> " method = " get " >
2010-11-08 18:31:00 +01:00
< p >
2015-02-23 03:29:26 +01:00
< label class = " screen-reader-text " for = " search-sites " >< ? php _e ( 'Search Sites' ); ?> </label>
< input type = " search " name = " s " value = " " size = " 30 " autocomplete = " off " id = " search-sites " />
2016-09-28 21:54:28 +02:00
< ? php submit_button ( __ ( 'Search Sites' ), '' , false , false , array ( 'id' => 'submit_sites' ) ); ?>
2010-11-08 18:31:00 +01:00
</ p >
</ form >
< ? php
2014-03-24 03:21:15 +01:00
/**
* Fires at the end of the 'Right Now' widget in the Network Admin dashboard .
*
* @ since MU
*/
2010-11-08 18:31:00 +01:00
do_action ( 'mu_rightnow_end' );
2014-03-24 03:21:15 +01:00
/**
* Fires at the end of the 'Right Now' widget in the Network Admin dashboard .
*
* @ since MU
*/
2010-11-08 18:31:00 +01:00
do_action ( 'mu_activity_box_end' );
}
2013-11-13 23:09:10 +01:00
/**
2013-11-17 04:21:10 +01:00
* The Quick Draft widget display and creation of drafts .
2013-11-13 23:09:10 +01:00
*
* @ since 3.8 . 0
*
2015-05-28 23:41:30 +02:00
* @ global int $post_ID
*
2013-12-06 20:18:11 +01:00
* @ param string $error_msg Optional . Error message . Default false .
2013-11-13 23:09:10 +01:00
*/
2013-11-17 04:21:10 +01:00
function wp_dashboard_quick_press ( $error_msg = false ) {
2010-05-23 09:58:06 +02:00
global $post_ID ;
2015-07-22 06:02:25 +02:00
if ( ! current_user_can ( 'edit_posts' ) ) {
return ;
}
2010-05-23 09:58:06 +02:00
/* Check if a new auto-draft (= no new post_ID) is needed or if the old can be used */
$last_post_id = ( int ) get_user_option ( 'dashboard_quick_press_last_post_id' ); // Get the last post_ID
if ( $last_post_id ) {
$post = get_post ( $last_post_id );
if ( empty ( $post ) || $post -> post_status != 'auto-draft' ) { // auto-draft doesn't exists anymore
2013-11-13 23:09:10 +01:00
$post = get_default_post_to_edit ( 'post' , true );
2012-10-17 20:58:09 +02:00
update_user_option ( get_current_user_id (), 'dashboard_quick_press_last_post_id' , ( int ) $post -> ID ); // Save post_ID
2010-05-23 09:58:06 +02:00
} else {
$post -> post_title = '' ; // Remove the auto draft title
}
} else {
2012-10-17 20:58:09 +02:00
$post = get_default_post_to_edit ( 'post' , true );
$user_id = get_current_user_id ();
// Don't create an option if this is a super admin who does not belong to this site.
if ( ! ( is_super_admin ( $user_id ) && ! in_array ( get_current_blog_id (), array_keys ( get_blogs_of_user ( $user_id ) ) ) ) )
update_user_option ( $user_id , 'dashboard_quick_press_last_post_id' , ( int ) $post -> ID ); // Save post_ID
2010-05-23 09:58:06 +02:00
}
$post_ID = ( int ) $post -> ID ;
2008-08-27 21:36:12 +02:00
?>
2013-12-03 18:32:19 +01:00
< form name = " post " action = " <?php echo esc_url( admin_url( 'post.php' ) ); ?> " method = " post " id = " quick-press " class = " initial-form hide-if-no-js " >
2008-08-27 21:36:12 +02:00
2013-11-17 04:21:10 +01:00
< ? php if ( $error_msg ) : ?>
< div class = " error " >< ? php echo $error_msg ; ?> </div>
2008-12-09 21:31:51 +01:00
< ? php endif ; ?>
2008-10-17 00:35:53 +02:00
2013-11-13 23:09:10 +01:00
< div class = " input-text-wrap " id = " title-wrap " >
2014-03-24 03:21:15 +01:00
< label class = " screen-reader-text prompt " for = " title " id = " title-prompt-text " >
< ? php
/** This filter is documented in wp-admin/edit-form-advanced.php */
echo apply_filters ( 'enter_title_here' , __ ( 'Title' ), $post );
?>
</ label >
2013-11-13 23:09:10 +01:00
< input type = " text " name = " post_title " id = " title " autocomplete = " off " />
2008-08-27 21:36:12 +02:00
</ div >
2008-12-09 19:03:31 +01:00
2013-11-13 23:09:10 +01:00
< div class = " textarea-wrap " id = " description-wrap " >
2013-12-09 01:43:11 +01:00
< label class = " screen-reader-text prompt " for = " content " id = " content-prompt-text " >< ? php _e ( 'What’s on your mind?' ); ?> </label>
2014-07-29 17:34:16 +02:00
< textarea name = " content " id = " content " class = " mceEditor " rows = " 3 " cols = " 15 " autocomplete = " off " ></ textarea >
2008-08-27 21:36:12 +02:00
</ div >
< p class = " submit " >
2013-11-13 23:09:10 +01:00
< input type = " hidden " name = " action " id = " quickpost-action " value = " post-quickdraft-save " />
2011-10-31 18:08:36 +01:00
< input type = " hidden " name = " post_ID " value = " <?php echo $post_ID ; ?> " />
2010-01-27 15:36:17 +01:00
< input type = " hidden " name = " post_type " value = " post " />
2013-11-13 23:09:10 +01:00
< ? php wp_nonce_field ( 'add-post' ); ?>
< ? php submit_button ( __ ( 'Save Draft' ), 'primary' , 'save' , false , array ( 'id' => 'save-post' ) ); ?>
2008-10-09 01:32:34 +02:00
< br class = " clear " />
2008-08-27 21:36:12 +02:00
</ p >
2008-10-09 01:32:34 +02:00
</ form >
2013-11-15 21:40:15 +01:00
< ? php
2013-12-05 22:23:10 +01:00
wp_dashboard_recent_drafts ();
}
/**
* Show recent drafts of the user on the dashboard .
*
* @ since 2.7 . 0
2015-05-29 23:17:27 +02:00
*
* @ param array $drafts
2013-12-05 22:23:10 +01:00
*/
function wp_dashboard_recent_drafts ( $drafts = false ) {
2013-11-15 21:40:15 +01:00
if ( ! $drafts ) {
2013-12-05 22:23:10 +01:00
$query_args = array (
'post_type' => 'post' ,
'post_status' => 'draft' ,
'author' => get_current_user_id (),
'posts_per_page' => 4 ,
'orderby' => 'modified' ,
'order' => 'DESC'
);
2015-10-10 08:33:25 +02:00
/**
2016-05-22 20:01:30 +02:00
* Filters the post query arguments for the 'Recent Drafts' dashboard widget .
2015-10-10 08:33:25 +02:00
*
* @ since 4.4 . 0
*
2015-10-10 08:39:24 +02:00
* @ param array $query_args The query arguments for the 'Recent Drafts' dashboard widget .
2015-10-10 08:33:25 +02:00
*/
$query_args = apply_filters ( 'dashboard_recent_drafts_query_args' , $query_args );
2013-12-05 22:23:10 +01:00
$drafts = get_posts ( $query_args );
if ( ! $drafts ) {
return ;
}
2013-11-15 21:40:15 +01:00
}
2013-11-23 15:13:09 +01:00
2013-11-15 21:40:15 +01:00
echo '<div class="drafts">' ;
if ( count ( $drafts ) > 3 ) {
2015-10-28 18:57:25 +01:00
echo '<p class="view-all"><a href="' . esc_url ( admin_url ( 'edit.php?post_status=draft' ) ) . '" aria-label="' . __ ( 'View all drafts' ) . '">' . _x ( 'View all' , 'drafts' ) . " </a></p> \n " ;
2013-11-15 21:40:15 +01:00
}
2015-10-28 18:57:25 +01:00
echo '<h2 class="hide-if-no-js">' . __ ( 'Drafts' ) . " </h2> \n <ul> " ;
2013-11-23 15:13:09 +01:00
2013-11-15 21:40:15 +01:00
$drafts = array_slice ( $drafts , 0 , 3 );
foreach ( $drafts as $draft ) {
$url = get_edit_post_link ( $draft -> ID );
$title = _draft_or_post_title ( $draft -> ID );
echo " <li> \n " ;
2016-01-05 15:19:28 +01:00
/* translators: %s: post title */
echo '<div class="draft-title"><a href="' . esc_url ( $url ) . '" aria-label="' . esc_attr ( sprintf ( __ ( 'Edit “%s”' ), $title ) ) . '">' . esc_html ( $title ) . '</a>' ;
2015-12-07 05:26:27 +01:00
echo '<time datetime="' . get_the_time ( 'c' , $draft ) . '">' . get_the_time ( __ ( 'F j, Y' ), $draft ) . '</time></div>' ;
2013-11-15 21:40:15 +01:00
if ( $the_content = wp_trim_words ( $draft -> post_content , 10 ) ) {
echo '<p>' . $the_content . '</p>' ;
}
echo " </li> \n " ;
}
echo " </ul> \n </div> " ;
2008-08-27 21:36:12 +02:00
}
2015-05-28 23:41:30 +02:00
/**
2016-02-03 21:20:26 +01:00
* Outputs a row for the Recent Comments widget .
*
* @ access private
* @ since 2.7 . 0
*
2015-09-03 20:17:24 +02:00
* @ global WP_Comment $comment
2015-05-28 23:41:30 +02:00
*
2016-02-03 21:20:26 +01:00
* @ param WP_Comment $comment The current comment .
* @ param bool $show_date Optional . Whether to display the date .
2015-05-28 23:41:30 +02:00
*/
2008-10-09 01:32:34 +02:00
function _wp_dashboard_recent_comments_row ( & $comment , $show_date = true ) {
2015-09-24 17:53:25 +02:00
$GLOBALS [ 'comment' ] = clone $comment ;
2008-10-09 01:32:34 +02:00
2016-02-24 17:07:26 +01:00
if ( $comment -> comment_post_ID > 0 ) {
2015-09-11 07:56:24 +02:00
$comment_post_title = _draft_or_post_title ( $comment -> comment_post_ID );
2016-02-24 17:07:26 +01:00
$comment_post_url = get_the_permalink ( $comment -> comment_post_ID );
2014-03-18 23:44:27 +01:00
$comment_post_link = " <a href=' $comment_post_url '> $comment_post_title </a> " ;
} else {
2015-09-11 07:56:24 +02:00
$comment_post_link = '' ;
2014-03-18 23:44:27 +01:00
}
2008-12-09 18:44:04 +01:00
$actions_string = '' ;
2010-09-08 01:35:28 +02:00
if ( current_user_can ( 'edit_comment' , $comment -> comment_ID ) ) {
2014-07-17 11:14:16 +02:00
// Pre-order it: Approve | Reply | Edit | Spam | Trash.
2009-11-27 13:57:35 +01:00
$actions = array (
'approve' => '' , 'unapprove' => '' ,
'reply' => '' ,
'edit' => '' ,
2009-12-01 23:05:03 +01:00
'spam' => '' ,
2015-09-10 19:49:24 +02:00
'trash' => '' , 'delete' => '' ,
'view' => '' ,
2009-11-27 13:57:35 +01:00
);
2009-10-08 10:24:59 +02:00
$del_nonce = esc_html ( '_wpnonce=' . wp_create_nonce ( " delete-comment_ $comment->comment_ID " ) );
$approve_nonce = esc_html ( '_wpnonce=' . wp_create_nonce ( " approve-comment_ $comment->comment_ID " ) );
$approve_url = esc_url ( " comment.php?action=approvecomment&p= $comment->comment_post_ID &c= $comment->comment_ID & $approve_nonce " );
$unapprove_url = esc_url ( " comment.php?action=unapprovecomment&p= $comment->comment_post_ID &c= $comment->comment_ID & $approve_nonce " );
2009-12-15 10:45:29 +01:00
$spam_url = esc_url ( " comment.php?action=spamcomment&p= $comment->comment_post_ID &c= $comment->comment_ID & $del_nonce " );
2009-10-08 10:24:59 +02:00
$trash_url = esc_url ( " comment.php?action=trashcomment&p= $comment->comment_post_ID &c= $comment->comment_ID & $del_nonce " );
2009-11-10 11:38:19 +01:00
$delete_url = esc_url ( " comment.php?action=deletecomment&p= $comment->comment_post_ID &c= $comment->comment_ID & $del_nonce " );
2009-10-08 10:24:59 +02:00
2016-01-05 15:19:28 +01:00
$actions [ 'approve' ] = " <a href=' $approve_url ' data-wp-lists='dim:the-comment-list:comment- $comment->comment_ID :unapproved:e7e7d3:e7e7d3:new=approved' class='vim-a' aria-label=' " . esc_attr__ ( 'Approve this comment' ) . " '> " . __ ( 'Approve' ) . '</a>' ;
$actions [ 'unapprove' ] = " <a href=' $unapprove_url ' data-wp-lists='dim:the-comment-list:comment- $comment->comment_ID :unapproved:e7e7d3:e7e7d3:new=unapproved' class='vim-u' aria-label=' " . esc_attr__ ( 'Unapprove this comment' ) . " '> " . __ ( 'Unapprove' ) . '</a>' ;
$actions [ 'edit' ] = " <a href='comment.php?action=editcomment&c= { $comment -> comment_ID } ' aria-label=' " . esc_attr__ ( 'Edit this comment' ) . " '> " . __ ( 'Edit' ) . '</a>' ;
$actions [ 'reply' ] = '<a onclick="window.commentReply && commentReply.open(\'' . $comment -> comment_ID . '\',\'' . $comment -> comment_post_ID . '\');return false;" class="vim-r hide-if-no-js" aria-label="' . esc_attr__ ( 'Reply to this comment' ) . '" href="#">' . __ ( 'Reply' ) . '</a>' ;
$actions [ 'spam' ] = " <a href=' $spam_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID ::spam=1' class='vim-s vim-destructive' aria-label=' " . esc_attr__ ( 'Mark this comment as spam' ) . " '> " . /* translators: mark as spam link */ _x ( 'Spam' , 'verb' ) . '</a>' ;
2015-09-10 19:49:24 +02:00
if ( ! EMPTY_TRASH_DAYS ) {
2016-01-05 15:19:28 +01:00
$actions [ 'delete' ] = " <a href=' $delete_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID ::trash=1' class='delete vim-d vim-destructive' aria-label=' " . esc_attr__ ( 'Delete this comment permanently' ) . " '> " . __ ( 'Delete Permanently' ) . '</a>' ;
2015-09-10 19:49:24 +02:00
} else {
2016-01-05 15:19:28 +01:00
$actions [ 'trash' ] = " <a href=' $trash_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID ::trash=1' class='delete vim-d vim-destructive' aria-label=' " . esc_attr__ ( 'Move this comment to the Trash' ) . " '> " . _x ( 'Trash' , 'verb' ) . '</a>' ;
2015-09-10 19:49:24 +02:00
}
2016-04-22 23:30:28 +02:00
$actions [ 'view' ] = '<a class="comment-link" href="' . esc_url ( get_comment_link ( $comment ) ) . '" aria-label="' . esc_attr__ ( 'View this comment' ) . '">' . __ ( 'View' ) . '</a>' ;
2008-02-02 08:57:51 +01:00
2014-03-24 03:21:15 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the action links displayed for each comment in the 'Recent Comments'
2014-03-24 03:21:15 +01:00
* dashboard widget .
*
* @ since 2.6 . 0
*
2015-09-03 20:17:24 +02:00
* @ param array $actions An array of comment actions . Default actions include :
* 'Approve' , 'Unapprove' , 'Edit' , 'Reply' , 'Spam' ,
* 'Delete' , and 'Trash' .
* @ param WP_Comment $comment The comment object .
2014-03-24 03:21:15 +01:00
*/
2009-11-27 13:57:35 +01:00
$actions = apply_filters ( 'comment_row_actions' , array_filter ( $actions ), $comment );
2008-02-02 08:57:51 +01:00
2008-10-09 01:32:34 +02:00
$i = 0 ;
foreach ( $actions as $action => $link ) {
++ $i ;
( ( ( 'approve' == $action || 'unapprove' == $action ) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | ' ;
2008-02-02 08:57:51 +01:00
2008-10-09 01:32:34 +02:00
// Reply and quickedit need a hide-if-no-js span
2016-04-22 23:30:28 +02:00
if ( 'reply' == $action || 'quickedit' == $action ) {
2008-10-09 01:32:34 +02:00
$action .= ' hide-if-no-js' ;
2016-04-22 23:30:28 +02:00
}
2008-02-02 08:57:51 +01:00
2016-04-22 23:30:28 +02:00
if ( 'view' === $action && '1' !== $comment -> comment_approved ) {
$action .= ' hidden' ;
}
2008-12-09 13:00:44 +01:00
$actions_string .= " <span class=' $action '> $sep $link </span> " ;
2008-02-02 08:57:51 +01:00
}
2008-10-09 01:32:34 +02:00
}
?>
2008-02-02 08:57:51 +01:00
2016-02-24 17:07:26 +01:00
< li id = " comment-<?php echo $comment->comment_ID ; ?> " < ? php comment_class ( array ( 'comment-item' , wp_get_comment_status ( $comment ) ), $comment ); ?> >
2008-10-09 01:32:34 +02:00
2013-08-22 22:08:08 +02:00
< ? php echo get_avatar ( $comment , 50 , 'mystery' ); ?>
2009-03-06 04:20:38 +01:00
2014-03-03 21:14:14 +01:00
< ? php if ( ! $comment -> comment_type || 'comment' == $comment -> comment_type ) : ?>
2015-07-07 17:26:24 +02:00
< div class = " dashboard-comment-wrap has-row-actions " >
2015-10-28 18:57:25 +01:00
< p class = " comment-meta " >
2016-02-24 17:07:26 +01:00
< ? php
// Comments might not have a post they relate to, e.g. programmatically created ones.
2015-09-11 07:56:24 +02:00
if ( $comment_post_link ) {
printf (
/* translators: 1: comment author, 2: post link, 3: notification if the comment is pending */
2016-02-24 17:07:26 +01:00
__ ( 'From %1$s on %2$s %3$s' ),
2015-09-11 07:56:24 +02:00
'<cite class="comment-author">' . get_comment_author_link ( $comment ) . '</cite>' ,
$comment_post_link ,
2016-02-24 17:07:26 +01:00
'<span class="approve">' . __ ( '[Pending]' ) . '</span>'
2015-09-11 07:56:24 +02:00
);
} else {
printf (
/* translators: 1: comment author, 2: notification if the comment is pending */
__ ( 'From %1$s %2$s' ),
'<cite class="comment-author">' . get_comment_author_link ( $comment ) . '</cite>' ,
2016-02-24 17:07:26 +01:00
'<span class="approve">' . __ ( '[Pending]' ) . '</span>'
2015-09-11 07:56:24 +02:00
);
}
2016-02-24 17:07:26 +01:00
?>
2015-10-28 18:57:25 +01:00
</ p >
2008-10-09 01:32:34 +02:00
< ? php
else :
2014-05-30 19:58:15 +02:00
switch ( $comment -> comment_type ) {
case 'pingback' :
$type = __ ( 'Pingback' );
break ;
case 'trackback' :
$type = __ ( 'Trackback' );
break ;
default :
$type = ucwords ( $comment -> comment_type );
}
2009-05-18 17:11:07 +02:00
$type = esc_html ( $type );
2008-10-09 01:32:34 +02:00
?>
2015-07-07 17:26:24 +02:00
< div class = " dashboard-comment-wrap has-row-actions " >
2016-02-24 17:07:26 +01:00
< p class = " comment-meta " >
< ? php
// Pingbacks, Trackbacks or custom comment types might not have a post they relate to, e.g. programmatically created ones.
if ( $comment_post_link ) {
printf (
/* translators: 1: type of comment, 2: post link, 3: notification if the comment is pending */
_x ( '%1$s on %2$s %3$s' , 'dashboard' ),
" <strong> $type </strong> " ,
$comment_post_link ,
'<span class="approve">' . __ ( '[Pending]' ) . '</span>'
);
} else {
printf (
/* translators: 1: type of comment, 2: notification if the comment is pending */
2016-02-28 22:39:26 +01:00
_x ( '%1$s %2$s' , 'dashboard' ),
2016-02-24 17:07:26 +01:00
" <strong> $type </strong> " ,
'<span class="approve">' . __ ( '[Pending]' ) . '</span>'
);
}
?>
</ p >
2015-09-11 07:56:24 +02:00
< p class = " comment-author " >< ? php comment_author_link ( $comment ); ?> </p>
2008-10-09 01:32:34 +02:00
< ? php endif ; // comment_type ?>
2015-09-11 07:56:24 +02:00
< blockquote >< p >< ? php comment_excerpt ( $comment ); ?> </p></blockquote>
2016-02-24 17:07:26 +01:00
< ? php if ( $actions_string ) : ?>
2008-11-28 05:33:35 +01:00
< p class = " row-actions " >< ? php echo $actions_string ; ?> </p>
2016-02-24 17:07:26 +01:00
< ? php endif ; ?>
2009-03-06 04:20:38 +01:00
</ div >
2016-02-24 17:07:26 +01:00
</ li >
2008-10-09 01:32:34 +02:00
< ? php
2015-09-11 07:56:24 +02:00
$GLOBALS [ 'comment' ] = null ;
2008-10-09 01:32:34 +02:00
}
2008-02-02 08:57:51 +01:00
2010-02-13 05:39:39 +01:00
/**
2013-11-17 04:21:10 +01:00
* Callback function for Activity widget .
2013-11-13 23:09:10 +01:00
*
* @ since 3.8 . 0
2010-02-13 05:39:39 +01:00
*/
2013-12-05 22:23:10 +01:00
function wp_dashboard_site_activity () {
2010-02-13 05:39:39 +01:00
2013-11-13 23:09:10 +01:00
echo '<div id="activity-widget">' ;
2010-02-13 05:39:39 +01:00
2013-12-05 22:23:10 +01:00
$future_posts = wp_dashboard_recent_posts ( array (
2013-11-13 23:09:10 +01:00
'max' => 5 ,
'status' => 'future' ,
'order' => 'ASC' ,
'title' => __ ( 'Publishing Soon' ),
'id' => 'future-posts' ,
) );
2013-12-05 22:23:10 +01:00
$recent_posts = wp_dashboard_recent_posts ( array (
2013-11-13 23:09:10 +01:00
'max' => 5 ,
'status' => 'publish' ,
'order' => 'DESC' ,
'title' => __ ( 'Recently Published' ),
'id' => 'published-posts' ,
) );
2010-02-13 05:39:39 +01:00
2013-12-05 22:23:10 +01:00
$recent_comments = wp_dashboard_recent_comments ();
2013-11-13 23:09:10 +01:00
if ( ! $future_posts && ! $recent_posts && ! $recent_comments ) {
echo '<div class="no-activity">' ;
2016-08-30 18:14:30 +02:00
echo '<p class="smiley" aria-hidden="true"></p>' ;
2013-11-13 23:09:10 +01:00
echo '<p>' . __ ( 'No activity yet!' ) . '</p>' ;
echo '</div>' ;
}
echo '</div>' ;
2008-02-02 08:57:51 +01:00
}
2008-09-17 02:40:10 +02:00
/**
2013-11-17 04:21:10 +01:00
* Generates Publishing Soon and Recently Published sections .
2013-11-13 23:09:10 +01:00
*
* @ since 3.8 . 0
2008-09-17 02:40:10 +02:00
*
2013-12-06 20:18:11 +01:00
* @ param array $args {
* An array of query and display arguments .
*
2014-03-18 13:56:14 +01:00
* @ type int $max Number of posts to display .
2013-12-06 20:18:11 +01:00
* @ type string $status Post status .
* @ type string $order Designates ascending ( 'ASC' ) or descending ( 'DESC' ) order .
* @ type string $title Section title .
* @ type string $id The container id .
* }
* @ return bool False if no posts were found . True otherwise .
2008-09-17 02:40:10 +02:00
*/
2013-12-05 22:23:10 +01:00
function wp_dashboard_recent_posts ( $args ) {
2013-11-13 23:09:10 +01:00
$query_args = array (
'post_type' => 'post' ,
'post_status' => $args [ 'status' ],
'orderby' => 'date' ,
'order' => $args [ 'order' ],
'posts_per_page' => intval ( $args [ 'max' ] ),
'no_found_rows' => true ,
2014-03-18 23:44:27 +01:00
'cache_results' => false ,
'perm' => ( 'future' === $args [ 'status' ] ) ? 'editable' : 'readable' ,
2013-11-13 23:09:10 +01:00
);
2015-02-22 20:57:24 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the query arguments used for the Recent Posts widget .
2015-02-22 20:57:24 +01:00
*
* @ since 4.2 . 0
*
* @ param array $query_args The arguments passed to WP_Query to produce the list of posts .
*/
$query_args = apply_filters ( 'dashboard_recent_posts_query_args' , $query_args );
2013-11-13 23:09:10 +01:00
$posts = new WP_Query ( $query_args );
2009-03-07 20:44:28 +01:00
2013-11-13 23:09:10 +01:00
if ( $posts -> have_posts () ) {
2008-03-02 21:17:30 +01:00
2013-11-13 23:09:10 +01:00
echo '<div id="' . $args [ 'id' ] . '" class="activity-block">' ;
2008-02-21 22:20:09 +01:00
2015-10-28 18:57:25 +01:00
echo '<h3>' . $args [ 'title' ] . '</h3>' ;
2008-02-21 22:20:09 +01:00
2013-11-13 23:09:10 +01:00
echo '<ul>' ;
2009-02-27 20:32:50 +01:00
2013-12-05 22:23:10 +01:00
$today = date ( 'Y-m-d' , current_time ( 'timestamp' ) );
$tomorrow = date ( 'Y-m-d' , strtotime ( '+1 day' , current_time ( 'timestamp' ) ) );
2013-11-13 23:09:10 +01:00
while ( $posts -> have_posts () ) {
$posts -> the_post ();
2013-12-05 22:23:10 +01:00
$time = get_the_time ( 'U' );
if ( date ( 'Y-m-d' , $time ) == $today ) {
$relative = __ ( 'Today' );
} elseif ( date ( 'Y-m-d' , $time ) == $tomorrow ) {
$relative = __ ( 'Tomorrow' );
2015-10-09 06:26:24 +02:00
} elseif ( date ( 'Y' , $time ) !== date ( 'Y' , current_time ( 'timestamp' ) ) ) {
2016-06-10 06:50:33 +02:00
/* translators: date and time format for recent posts on the dashboard, from a different calendar year, see https://secure.php.net/date */
2015-10-09 06:26:24 +02:00
$relative = date_i18n ( __ ( 'M jS Y' ), $time );
2013-12-05 22:23:10 +01:00
} else {
2016-06-10 06:50:33 +02:00
/* translators: date and time format for recent posts on the dashboard, see https://secure.php.net/date */
2013-12-06 00:34:11 +01:00
$relative = date_i18n ( __ ( 'M jS' ), $time );
2013-12-05 22:23:10 +01:00
}
2015-01-08 01:26:22 +01:00
// Use the post edit link for those who can edit, the permalink otherwise.
$recent_post_link = current_user_can ( 'edit_post' , get_the_ID () ) ? get_edit_post_link () : get_permalink ();
2016-01-05 15:19:28 +01:00
$draft_or_post_title = _draft_or_post_title ();
2016-03-01 02:39:27 +01:00
printf (
'<li><span>%1$s</span> <a href="%2$s" aria-label="%3$s">%4$s</a></li>' ,
/* translators: 1: relative date, 2: time */
sprintf ( _x ( '%1$s, %2$s' , 'dashboard' ), $relative , get_the_time () ),
2016-01-05 15:19:28 +01:00
$recent_post_link ,
/* translators: %s: post title */
2016-03-01 02:39:27 +01:00
esc_attr ( sprintf ( __ ( 'Edit “%s”' ), $draft_or_post_title ) ),
$draft_or_post_title
2016-01-05 15:19:28 +01:00
);
2009-06-15 18:56:51 +02:00
}
2009-02-27 20:32:50 +01:00
2013-11-13 23:09:10 +01:00
echo '</ul>' ;
echo '</div>' ;
2009-02-27 20:32:50 +01:00
2013-11-13 23:09:10 +01:00
} else {
return false ;
2008-02-21 22:20:09 +01:00
}
2009-02-27 20:32:50 +01:00
2013-11-13 23:09:10 +01:00
wp_reset_postdata ();
2008-02-21 22:20:09 +01:00
2013-11-13 23:09:10 +01:00
return true ;
2008-10-09 01:32:34 +02:00
}
2008-09-17 02:40:10 +02:00
/**
2013-11-17 04:21:10 +01:00
* Show Comments section .
2008-09-17 02:40:10 +02:00
*
2013-11-13 23:09:10 +01:00
* @ since 3.8 . 0
2008-09-17 02:40:10 +02:00
*
2013-12-06 20:18:11 +01:00
* @ param int $total_items Optional . Number of comments to query . Default 5.
* @ return bool False if no comments were found . True otherwise .
2008-09-17 02:40:10 +02:00
*/
2013-12-05 22:23:10 +01:00
function wp_dashboard_recent_comments ( $total_items = 5 ) {
2013-11-13 23:09:10 +01:00
// Select all comment types and filter out spam later for better query performance.
$comments = array ();
2011-12-23 01:25:09 +01:00
2013-11-13 23:09:10 +01:00
$comments_query = array (
'number' => $total_items * 5 ,
'offset' => 0
);
if ( ! current_user_can ( 'edit_posts' ) )
$comments_query [ 'status' ] = 'approve' ;
2011-12-23 01:25:09 +01:00
2013-11-13 23:09:10 +01:00
while ( count ( $comments ) < $total_items && $possible = get_comments ( $comments_query ) ) {
2015-05-25 19:59:25 +02:00
if ( ! is_array ( $possible ) ) {
break ;
}
2013-11-13 23:09:10 +01:00
foreach ( $possible as $comment ) {
if ( ! current_user_can ( 'read_post' , $comment -> comment_post_ID ) )
continue ;
$comments [] = $comment ;
if ( count ( $comments ) == $total_items )
break 2 ;
}
$comments_query [ 'offset' ] += $comments_query [ 'number' ];
$comments_query [ 'number' ] = $total_items * 10 ;
2011-12-23 01:25:09 +01:00
}
2013-11-13 23:09:10 +01:00
if ( $comments ) {
echo '<div id="latest-comments" class="activity-block">' ;
2016-02-24 17:07:26 +01:00
echo '<h3>' . __ ( 'Recent Comments' ) . '</h3>' ;
2011-12-23 01:25:09 +01:00
2016-02-24 17:07:26 +01:00
echo '<ul id="the-comment-list" data-wp-lists="list:comment">' ;
2013-11-13 23:09:10 +01:00
foreach ( $comments as $comment )
_wp_dashboard_recent_comments_row ( $comment );
2016-02-24 17:07:26 +01:00
echo '</ul>' ;
2011-12-23 01:25:09 +01:00
2016-02-24 17:07:26 +01:00
if ( current_user_can ( 'edit_posts' ) ) {
echo '<h3 class="screen-reader-text">' . __ ( 'View more comments' ) . '</h3>' ;
_get_list_table ( 'WP_Comments_List_Table' ) -> views ();
}
2011-12-23 01:25:09 +01:00
2013-11-13 23:09:10 +01:00
wp_comment_reply ( - 1 , false , 'dashboard' , false );
wp_comment_trashnotice ();
2011-12-23 01:25:09 +01:00
2013-11-13 23:09:10 +01:00
echo '</div>' ;
} else {
return false ;
}
return true ;
}
2011-12-23 01:25:09 +01:00
2013-11-15 21:15:10 +01:00
/**
* Display generic dashboard RSS widget feed .
*
* @ since 2.5 . 0
*
* @ param string $widget_id
*/
function wp_dashboard_rss_output ( $widget_id ) {
$widgets = get_option ( 'dashboard_widget_options' );
echo '<div class="rss-widget">' ;
wp_widget_rss_output ( $widgets [ $widget_id ] );
echo " </div> " ;
}
2008-09-17 02:40:10 +02:00
/**
* 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
2011-09-03 16:18:10 +02:00
* widget options of $widget_id . If cached , call $callback , a function that
2008-09-17 02:40:10 +02:00
* echoes out output for this widget . If not cache , echo a " Loading... " stub
2016-07-10 02:51:30 +02:00
* which is later replaced by Ajax call ( see top of / wp - admin / index . php )
2008-09-17 02:40:10 +02:00
*
2010-09-05 04:45:39 +02:00
* @ since 2.5 . 0
2008-09-17 02:40:10 +02:00
*
2010-09-05 04:45:39 +02:00
* @ param string $widget_id
2015-09-26 01:58:25 +02:00
* @ param callable $callback
2008-09-17 02:40:10 +02:00
* @ param array $check_urls RSS feeds
* @ return bool False on failure . True on success .
*/
2008-02-21 22:20:09 +01:00
function wp_dashboard_cached_rss_widget ( $widget_id , $callback , $check_urls = array () ) {
2011-04-30 19:24:06 +02:00
$loading = '<p class="widget-loading hide-if-no-js">' . __ ( 'Loading…' ) . '</p><p class="hide-if-js">' . __ ( 'This widget requires JavaScript.' ) . '</p>' ;
2016-08-23 16:33:30 +02:00
$doing_ajax = wp_doing_ajax ();
2008-02-21 22:20:09 +01:00
if ( empty ( $check_urls ) ) {
2011-04-29 16:46:27 +02:00
$widgets = get_option ( 'dashboard_widget_options' );
2011-06-10 08:31:39 +02:00
if ( empty ( $widgets [ $widget_id ][ 'url' ]) && ! $doing_ajax ) {
2008-02-21 22:20:09 +01:00
echo $loading ;
return false ;
}
$check_urls = array ( $widgets [ $widget_id ][ 'url' ] );
}
2015-07-13 00:07:25 +02:00
$locale = get_locale ();
2015-07-13 17:32:25 +02:00
$cache_key = 'dash_' . md5 ( $widget_id . '_' . $locale );
2011-06-10 08:31:39 +02:00
if ( false !== ( $output = get_transient ( $cache_key ) ) ) {
echo $output ;
return true ;
}
if ( ! $doing_ajax ) {
echo $loading ;
return false ;
2008-02-21 22:20:09 +01:00
}
if ( $callback && is_callable ( $callback ) ) {
2014-08-07 23:47:16 +02:00
$args = array_slice ( func_get_args (), 3 );
array_unshift ( $args , $widget_id , $check_urls );
2011-06-10 08:31:39 +02:00
ob_start ();
2008-02-21 22:20:09 +01:00
call_user_func_array ( $callback , $args );
2012-09-25 07:26:19 +02:00
set_transient ( $cache_key , ob_get_flush (), 12 * HOUR_IN_SECONDS ); // Default lifetime in cache of 12 hours (same as the feeds)
2008-02-21 22:20:09 +01:00
}
return true ;
}
2015-09-26 00:51:24 +02:00
//
// Dashboard Widgets Controls
//
2008-02-02 08:57:51 +01:00
2008-09-17 02:40:10 +02:00
/**
* Calls widget control callback .
*
2010-09-05 04:45:39 +02:00
* @ since 2.5 . 0
2008-09-17 02:40:10 +02:00
*
2015-05-28 23:41:30 +02:00
* @ global array $wp_dashboard_control_callbacks
*
2008-09-17 02:40:10 +02:00
* @ param int $widget_control_id Registered Widget ID .
*/
2008-03-23 17:34:28 +01:00
function wp_dashboard_trigger_widget_control ( $widget_control_id = false ) {
2008-10-09 01:32:34 +02:00
global $wp_dashboard_control_callbacks ;
2008-12-09 19:03:31 +01:00
2008-10-09 01:32:34 +02:00
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 ] ) );
}
2008-02-02 08:57:51 +01:00
}
2013-12-05 22:23:10 +01:00
/**
* 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 2.5 . 0
*
* @ 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 ();
if ( ! isset ( $widget_options [ $widget_id ]) )
$widget_options [ $widget_id ] = array ();
$number = 1 ; // Hack to use wp_widget_rss_form()
$widget_options [ $widget_id ][ 'number' ] = $number ;
if ( 'POST' == $_SERVER [ 'REQUEST_METHOD' ] && isset ( $_POST [ 'widget-rss' ][ $number ]) ) {
$_POST [ 'widget-rss' ][ $number ] = wp_unslash ( $_POST [ 'widget-rss' ][ $number ] );
$widget_options [ $widget_id ] = wp_widget_rss_process ( $_POST [ 'widget-rss' ][ $number ] );
$widget_options [ $widget_id ][ 'number' ] = $number ;
2014-07-17 11:14:16 +02:00
// Title is optional. If black, fill it if possible.
2013-12-05 22:23:10 +01:00
if ( ! $widget_options [ $widget_id ][ 'title' ] && isset ( $_POST [ 'widget-rss' ][ $number ][ 'title' ]) ) {
$rss = fetch_feed ( $widget_options [ $widget_id ][ 'url' ]);
if ( is_wp_error ( $rss ) ) {
$widget_options [ $widget_id ][ 'title' ] = htmlentities ( __ ( 'Unknown Feed' ));
} else {
$widget_options [ $widget_id ][ 'title' ] = htmlentities ( strip_tags ( $rss -> get_title ()));
$rss -> __destruct ();
unset ( $rss );
}
}
update_option ( 'dashboard_widget_options' , $widget_options );
$cache_key = 'dash_' . md5 ( $widget_id );
delete_transient ( $cache_key );
}
wp_widget_rss_form ( $widget_options [ $widget_id ], $form_inputs );
}
2008-09-17 02:40:10 +02:00
/**
2013-11-15 21:15:10 +01:00
* WordPress News dashboard widget .
2013-11-13 23:09:10 +01:00
*
2013-11-15 21:15:10 +01:00
* @ since 2.7 . 0
2013-11-13 23:09:10 +01:00
*/
2013-11-15 21:15:10 +01:00
function wp_dashboard_primary () {
$feeds = array (
2014-03-24 03:21:15 +01:00
'news' => array (
/**
2016-05-22 20:01:30 +02:00
* Filters the primary link URL for the 'WordPress News' dashboard widget .
2014-03-24 03:21:15 +01:00
*
* @ since 2.5 . 0
*
* @ param string $link The widget ' s primary link URL .
*/
2015-10-03 00:46:28 +02:00
'link' => apply_filters ( 'dashboard_primary_link' , __ ( 'https://wordpress.org/news/' ) ),
2014-03-24 03:21:15 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the primary feed URL for the 'WordPress News' dashboard widget .
2014-03-24 03:21:15 +01:00
*
* @ since 2.3 . 0
*
* @ param string $url The widget ' s primary feed URL .
*/
'url' => apply_filters ( 'dashboard_primary_feed' , __ ( 'http://wordpress.org/news/feed/' ) ),
/**
2016-05-22 20:01:30 +02:00
* Filters the primary link title for the 'WordPress News' dashboard widget .
2014-03-24 03:21:15 +01:00
*
* @ since 2.3 . 0
*
* @ param string $title Title attribute for the widget ' s primary link .
*/
2013-12-05 22:23:10 +01:00
'title' => apply_filters ( 'dashboard_primary_title' , __ ( 'WordPress Blog' ) ),
2013-11-13 23:09:10 +01:00
'items' => 1 ,
'show_summary' => 1 ,
'show_author' => 0 ,
'show_date' => 1 ,
),
'planet' => array (
2014-03-24 03:21:15 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the secondary link URL for the 'WordPress News' dashboard widget .
2014-03-24 03:21:15 +01:00
*
* @ since 2.3 . 0
*
* @ param string $link The widget ' s secondary link URL .
*/
2014-09-29 15:24:15 +02:00
'link' => apply_filters ( 'dashboard_secondary_link' , __ ( 'https://planet.wordpress.org/' ) ),
2014-03-24 03:21:15 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the secondary feed URL for the 'WordPress News' dashboard widget .
2014-03-24 03:21:15 +01:00
*
* @ since 2.3 . 0
*
* @ param string $url The widget ' s secondary feed URL .
*/
2014-09-29 15:24:15 +02:00
'url' => apply_filters ( 'dashboard_secondary_feed' , __ ( 'https://planet.wordpress.org/feed/' ) ),
2014-03-24 03:21:15 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the secondary link title for the 'WordPress News' dashboard widget .
2014-03-24 03:21:15 +01:00
*
* @ since 2.3 . 0
*
* @ param string $title Title attribute for the widget ' s secondary link .
*/
2013-12-05 22:23:10 +01:00
'title' => apply_filters ( 'dashboard_secondary_title' , __ ( 'Other WordPress News' ) ),
2015-08-31 23:57:21 +02:00
/**
2016-05-22 20:01:30 +02:00
* Filters the number of secondary link items for the 'WordPress News' dashboard widget .
2015-08-31 23:57:21 +02:00
*
* @ since 4.4 . 0
*
* @ param string $items How many items to show in the secondary feed .
*/
'items' => apply_filters ( 'dashboard_secondary_items' , 3 ),
2013-11-13 23:09:10 +01:00
'show_summary' => 0 ,
'show_author' => 0 ,
'show_date' => 0 ,
2013-11-15 21:15:10 +01:00
)
);
2016-10-19 10:44:30 +02:00
if ( ( ! defined ( 'DISALLOW_FILE_MODS' ) || ! DISALLOW_FILE_MODS ) && ( ! is_multisite () && is_blog_admin () && current_user_can ( 'install_plugins' ) ) || ( is_network_admin () && current_user_can ( 'manage_network_plugins' ) && current_user_can ( 'install_plugins' ) ) ) {
2013-11-15 21:15:10 +01:00
$feeds [ 'plugins' ] = array (
2013-11-13 23:09:10 +01:00
'link' => '' ,
'url' => array (
2013-11-15 21:15:10 +01:00
'popular' => 'http://wordpress.org/plugins/rss/browse/popular/' ,
2013-11-13 23:09:10 +01:00
),
'title' => '' ,
'items' => 1 ,
'show_summary' => 0 ,
'show_author' => 0 ,
'show_date' => 0 ,
2013-11-15 21:15:10 +01:00
);
2013-11-13 23:09:10 +01:00
}
2013-11-15 21:15:10 +01:00
wp_dashboard_cached_rss_widget ( 'dashboard_primary' , 'wp_dashboard_primary_output' , $feeds );
2013-11-13 23:09:10 +01:00
}
/**
2013-11-15 21:15:10 +01:00
* Display the WordPress news feeds .
2013-11-13 23:09:10 +01:00
*
* @ since 3.8 . 0
2013-12-06 20:18:11 +01:00
*
* @ param string $widget_id Widget ID .
* @ param array $feeds Array of RSS feeds .
2013-11-13 23:09:10 +01:00
*/
2013-11-15 21:15:10 +01:00
function wp_dashboard_primary_output ( $widget_id , $feeds ) {
2015-08-25 22:28:22 +02:00
foreach ( $feeds as $type => $args ) {
2013-11-13 23:09:10 +01:00
$args [ 'type' ] = $type ;
echo '<div class="rss-widget">' ;
2013-11-15 21:15:10 +01:00
if ( $type === 'plugins' ) {
wp_dashboard_plugins_output ( $args [ 'url' ], $args );
} else {
wp_widget_rss_output ( $args [ 'url' ], $args );
}
2013-11-13 23:09:10 +01:00
echo " </div> " ;
2008-02-02 08:57:51 +01:00
}
2013-11-13 23:09:10 +01:00
}
/**
2013-11-15 21:15:10 +01:00
* Display plugins text for the WordPress news widget .
2013-11-13 23:09:10 +01:00
*
2013-11-15 21:15:10 +01:00
* @ since 2.5 . 0
2016-01-10 02:26:25 +01:00
*
* @ param string $rss The RSS feed URL .
* @ param array $args Array of arguments for this RSS feed .
2013-11-13 23:09:10 +01:00
*/
2013-11-15 21:15:10 +01:00
function wp_dashboard_plugins_output ( $rss , $args = array () ) {
2013-11-13 23:09:10 +01:00
// Plugin feeds plus link to install them
2013-11-15 21:15:10 +01:00
$popular = fetch_feed ( $args [ 'url' ][ 'popular' ] );
2013-11-13 23:09:10 +01:00
2013-11-15 21:15:10 +01:00
if ( false === $plugin_slugs = get_transient ( 'plugin_slugs' ) ) {
$plugin_slugs = array_keys ( get_plugins () );
set_transient ( 'plugin_slugs' , $plugin_slugs , DAY_IN_SECONDS );
}
2013-11-13 23:09:10 +01:00
2013-11-15 21:15:10 +01:00
echo '<ul>' ;
2013-11-13 23:09:10 +01:00
2014-06-11 20:55:14 +02:00
foreach ( array ( $popular ) as $feed ) {
if ( is_wp_error ( $feed ) || ! $feed -> get_item_quantity () )
2013-11-15 21:15:10 +01:00
continue ;
2013-11-13 23:09:10 +01:00
2014-06-11 20:55:14 +02:00
$items = $feed -> get_items ( 0 , 5 );
2013-11-13 23:09:10 +01:00
2013-11-15 21:15:10 +01:00
// Pick a random, non-installed plugin
while ( true ) {
// Abort this foreach loop iteration if there's no plugins left of this type
if ( 0 == count ( $items ) )
continue 2 ;
2013-11-13 23:09:10 +01:00
2013-11-15 21:15:10 +01:00
$item_key = array_rand ( $items );
$item = $items [ $item_key ];
2013-11-13 23:09:10 +01:00
2013-11-15 21:15:10 +01:00
list ( $link , $frag ) = explode ( '#' , $item -> get_link () );
2008-02-02 08:57:51 +01:00
2013-11-15 21:15:10 +01:00
$link = esc_url ( $link );
if ( preg_match ( '|/([^/]+?)/?$|' , $link , $matches ) )
$slug = $matches [ 1 ];
else {
unset ( $items [ $item_key ] );
continue ;
}
2013-11-13 23:09:10 +01:00
2013-11-15 21:15:10 +01:00
// Is this random plugin's slug already installed? If so, try again.
reset ( $plugin_slugs );
foreach ( $plugin_slugs as $plugin_slug ) {
if ( $slug == substr ( $plugin_slug , 0 , strlen ( $slug ) ) ) {
unset ( $items [ $item_key ] );
continue 2 ;
2013-11-13 23:09:10 +01:00
}
}
2013-11-15 21:15:10 +01:00
// If we get to this point, then the random plugin isn't installed and we can stop the while().
break ;
}
2013-11-13 23:09:10 +01:00
2013-11-15 21:15:10 +01:00
// Eliminate some common badly formed plugin descriptions
while ( ( null !== $item_key = array_rand ( $items ) ) && false !== strpos ( $items [ $item_key ] -> get_description (), 'Plugin Name:' ) )
unset ( $items [ $item_key ]);
2013-11-13 23:09:10 +01:00
2013-11-15 21:15:10 +01:00
if ( ! isset ( $items [ $item_key ]) )
continue ;
2013-11-13 23:09:10 +01:00
2016-01-05 15:19:28 +01:00
$raw_title = $item -> get_title ();
2013-11-13 23:09:10 +01:00
2013-11-15 21:15:10 +01:00
$ilink = wp_nonce_url ( 'plugin-install.php?tab=plugin-information&plugin=' . $slug , 'install-plugin_' . $slug ) . '&TB_iframe=true&width=600&height=800' ;
2016-01-05 15:19:28 +01:00
echo '<li class="dashboard-news-plugin"><span>' . __ ( 'Popular Plugin' ) . ':</span> ' . esc_html ( $raw_title ) .
2016-03-10 23:37:26 +01:00
' <a href="' . $ilink . '" class="thickbox open-plugin-details-modal" aria-label="' .
2016-01-05 15:19:28 +01:00
/* translators: %s: plugin name */
esc_attr ( sprintf ( __ ( 'Install %s' ), $raw_title ) ) . '">(' . __ ( 'Install' ) . ')</a></li>' ;
2013-11-13 23:09:10 +01:00
2014-06-11 20:55:14 +02:00
$feed -> __destruct ();
unset ( $feed );
2013-11-13 23:09:10 +01:00
}
2013-11-15 21:15:10 +01:00
echo '</ul>' ;
2008-02-02 08:57:51 +01:00
}
2013-05-14 14:37:30 +02:00
/**
* Display file upload quota on dashboard .
*
2016-05-23 19:28:27 +02:00
* Runs on the { @ see 'activity_box_end' } hook in wp_dashboard_right_now () .
2013-05-14 14:37:30 +02:00
*
* @ since 3.0 . 0
*
2014-11-03 08:09:23 +01:00
* @ return bool | null True if not multisite , user can ' t upload files , or the space check option is disabled .
2015-12-12 16:37:28 +01:00
*/
2010-08-02 19:56:05 +02:00
function wp_dashboard_quota () {
2015-10-07 19:11:25 +02:00
if ( ! is_multisite () || ! current_user_can ( 'upload_files' ) || get_site_option ( 'upload_space_check_disabled' ) )
2010-08-02 19:56:05 +02:00
return true ;
$quota = get_space_allowed ();
2012-08-01 15:52:06 +02:00
$used = get_space_used ();
2010-08-02 19:56:05 +02:00
if ( $used > $quota )
$percentused = '100' ;
else
$percentused = ( $used / $quota ) * 100 ;
2013-11-13 23:09:10 +01:00
$used_class = ( $percentused >= 70 ) ? ' warning' : '' ;
2010-08-02 19:56:05 +02:00
$used = round ( $used , 2 );
$percentused = number_format ( $percentused );
?>
2015-10-28 18:57:25 +01:00
< h3 class = " mu-storage " >< ? php _e ( 'Storage Space' ); ?> </h3>
2013-11-13 23:09:10 +01:00
< div class = " mu-storage " >
< ul >
< li class = " storage-count " >
2013-12-06 00:34:11 +01:00
< ? php $text = sprintf (
/* translators: number of megabytes */
__ ( '%s MB Space Allowed' ),
number_format_i18n ( $quota )
);
printf (
2016-01-05 15:19:28 +01:00
'<a href="%1$s">%2$s <span class="screen-reader-text">(%3$s)</span></a>' ,
2013-11-13 23:09:10 +01:00
esc_url ( admin_url ( 'upload.php' ) ),
2016-01-05 15:19:28 +01:00
$text ,
__ ( 'Manage Uploads' )
2013-11-13 23:09:10 +01:00
); ?>
</ li >< li class = " storage-count <?php echo $used_class ; ?> " >
2013-12-06 00:34:11 +01:00
< ? php $text = sprintf (
/* translators: 1: number of megabytes, 2: percentage */
__ ( '%1$s MB (%2$s%%) Space Used' ),
2013-11-13 23:09:10 +01:00
number_format_i18n ( $used , 2 ),
2013-12-06 00:34:11 +01:00
$percentused
);
printf (
2016-01-05 15:19:28 +01:00
'<a href="%1$s" class="musublink">%2$s <span class="screen-reader-text">(%3$s)</span></a>' ,
2013-12-06 00:34:11 +01:00
esc_url ( admin_url ( 'upload.php' ) ),
2016-01-05 15:19:28 +01:00
$text ,
__ ( 'Manage Uploads' )
2013-11-13 23:09:10 +01:00
); ?>
</ li >
</ ul >
2010-08-02 19:56:05 +02:00
</ div >
< ? php
}
2011-05-12 05:33:27 +02:00
// Display Browser Nag Meta Box
function wp_dashboard_browser_nag () {
$notice = '' ;
$response = wp_check_browser_version ();
2011-06-05 17:14:51 +02:00
if ( $response ) {
if ( $response [ 'insecure' ] ) {
2015-10-30 02:33:25 +01:00
/* translators: %s: browser name and link */
$msg = sprintf ( __ ( " It looks like you're using an insecure version of %s. Using an outdated browser makes your computer unsafe. For the best WordPress experience, please update your browser. " ),
sprintf ( '<a href="%s">%s</a>' , esc_url ( $response [ 'update_url' ] ), esc_html ( $response [ 'name' ] ) )
);
2011-06-05 17:14:51 +02:00
} else {
2015-10-30 02:33:25 +01:00
/* translators: %s: browser name and link */
$msg = sprintf ( __ ( " It looks like you're using an old version of %s. For the best WordPress experience, please update your browser. " ),
sprintf ( '<a href="%s">%s</a>' , esc_url ( $response [ 'update_url' ] ), esc_html ( $response [ 'name' ] ) )
);
2011-06-05 17:14:51 +02:00
}
2011-05-12 05:33:27 +02:00
2011-06-05 17:14:51 +02:00
$browser_nag_class = '' ;
if ( ! empty ( $response [ 'img_src' ] ) ) {
$img_src = ( is_ssl () && ! empty ( $response [ 'img_src_ssl' ] ) ) ? $response [ 'img_src_ssl' ] : $response [ 'img_src' ];
2011-05-12 05:33:27 +02:00
2011-06-05 17:14:51 +02:00
$notice .= '<div class="alignright browser-icon"><a href="' . esc_attr ( $response [ 'update_url' ]) . '"><img src="' . esc_attr ( $img_src ) . '" alt="" /></a></div>' ;
$browser_nag_class = ' has-browser-icon' ;
}
$notice .= " <p class='browser-update-nag { $browser_nag_class } '> { $msg } </p> " ;
2012-05-14 00:44:01 +02:00
$browsehappy = 'http://browsehappy.com/' ;
2016-10-03 09:04:29 +02:00
$locale = get_user_locale ();
2012-05-14 00:44:01 +02:00
if ( 'en_US' !== $locale )
$browsehappy = add_query_arg ( 'locale' , $locale , $browsehappy );
$notice .= '<p>' . sprintf ( __ ( '<a href="%1$s" class="update-browser-link">Update %2$s</a> or learn how to <a href="%3$s" class="browse-happy-link">browse happy</a>' ), esc_attr ( $response [ 'update_url' ] ), esc_html ( $response [ 'name' ] ), esc_url ( $browsehappy ) ) . '</p>' ;
2016-01-05 15:19:28 +01:00
$notice .= '<p class="hide-if-no-js"><a href="" class="dismiss" aria-label="' . esc_attr__ ( 'Dismiss the browser warning panel' ) . '">' . __ ( 'Dismiss' ) . '</a></p>' ;
2011-06-05 17:14:51 +02:00
$notice .= '<div class="clear"></div>' ;
2011-05-12 05:33:27 +02:00
}
2014-03-24 03:21:15 +01:00
/**
2016-05-22 20:01:30 +02:00
* Filters the notice output for the 'Browse Happy' nag meta box .
2014-03-24 03:21:15 +01:00
*
* @ since 3.2 . 0
*
* @ param string $notice The notice content .
* @ param array $response An array containing web browser information .
*/
2011-05-12 05:33:27 +02:00
echo apply_filters ( 'browse-happy-notice' , $notice , $response );
}
2015-05-31 05:18:25 +02:00
/**
* @ since 3.2 . 0
*
* @ param array $classes
* @ return array
*/
2011-05-12 05:33:27 +02:00
function dashboard_browser_nag_class ( $classes ) {
$response = wp_check_browser_version ();
2011-06-05 17:14:51 +02:00
if ( $response && $response [ 'insecure' ] )
2011-05-12 05:33:27 +02:00
$classes [] = 'browser-insecure' ;
return $classes ;
}
/**
* Check if the user needs a browser update
*
2011-06-11 06:40:18 +02:00
* @ since 3.2 . 0
2011-06-05 17:14:51 +02:00
*
* @ return array | bool False on failure , array of browser data on success .
2011-05-12 05:33:27 +02:00
*/
function wp_check_browser_version () {
2011-06-05 17:14:51 +02:00
if ( empty ( $_SERVER [ 'HTTP_USER_AGENT' ] ) )
return false ;
2011-05-12 05:33:27 +02:00
$key = md5 ( $_SERVER [ 'HTTP_USER_AGENT' ] );
2011-05-12 07:45:02 +02:00
if ( false === ( $response = get_site_transient ( 'browser_' . $key ) ) ) {
2011-05-12 05:33:27 +02:00
$options = array (
'body' => array ( 'useragent' => $_SERVER [ 'HTTP_USER_AGENT' ] ),
2016-08-31 07:49:37 +02:00
'user-agent' => 'WordPress/' . get_bloginfo ( 'version' ) . '; ' . home_url ()
2011-05-12 05:33:27 +02:00
);
2013-09-14 21:31:08 +02:00
$response = wp_remote_post ( 'http://api.wordpress.org/core/browse-happy/1.1/' , $options );
2011-05-12 05:33:27 +02:00
2011-05-14 21:45:07 +02:00
if ( is_wp_error ( $response ) || 200 != wp_remote_retrieve_response_code ( $response ) )
return false ;
2011-05-12 05:33:27 +02:00
/**
* Response should be an array with :
2011-06-05 17:14:51 +02:00
* 'name' - string - A user friendly browser name
2015-09-06 02:17:24 +02:00
* 'version' - string - The version of the browser the user is using
* 'current_version' - string - The most recent version of the browser
2011-05-12 05:33:27 +02:00
* 'upgrade' - boolean - Whether the browser needs an upgrade
* 'insecure' - boolean - Whether the browser is deemed insecure
* 'upgrade_url' - string - The url to visit to upgrade
* 'img_src' - string - An image representing the browser
2011-05-12 05:45:25 +02:00
* 'img_src_ssl' - string - An image ( over SSL ) representing the browser
2011-05-12 05:33:27 +02:00
*/
2013-09-14 21:31:08 +02:00
$response = json_decode ( wp_remote_retrieve_body ( $response ), true );
2011-05-12 05:33:27 +02:00
2012-04-27 17:57:51 +02:00
if ( ! is_array ( $response ) )
2011-06-05 17:14:51 +02:00
return false ;
2011-05-12 05:33:27 +02:00
2012-09-25 07:26:19 +02:00
set_site_transient ( 'browser_' . $key , $response , WEEK_IN_SECONDS );
2011-05-12 05:33:27 +02:00
}
return $response ;
}
2008-11-18 02:04:41 +01:00
/**
* Empty function usable by plugins to output empty dashboard widget ( to be populated later by JS ) .
*/
function wp_dashboard_empty () {}
2011-09-22 08:23:10 +02:00
/**
* Displays a welcome panel to introduce users to WordPress .
*
2012-01-04 20:03:33 +01:00
* @ since 3.3 . 0
2011-09-22 08:23:10 +02:00
*/
function wp_welcome_panel () {
?>
2011-11-19 01:42:22 +01:00
< div class = " welcome-panel-content " >
2015-10-28 18:57:25 +01:00
< h2 >< ? php _e ( 'Welcome to WordPress!' ); ?> </h2>
2012-09-26 21:44:43 +02:00
< p class = " about-description " >< ? php _e ( 'We’ve assembled some links to get you started:' ); ?> </p>
2011-11-19 01:42:22 +01:00
< div class = " welcome-panel-column-container " >
< div class = " welcome-panel-column " >
2014-07-14 21:01:16 +02:00
< ? php if ( current_user_can ( 'customize' ) ) : ?>
2015-10-28 18:57:25 +01:00
< h3 >< ? php _e ( 'Get Started' ); ?> </h3>
2014-07-14 21:01:16 +02:00
< a class = " button button-primary button-hero load-customize hide-if-no-customize " href = " <?php echo wp_customize_url(); ?> " >< ? php _e ( 'Customize Your Site' ); ?> </a>
< ? php endif ; ?>
2012-11-30 14:40:59 +01:00
< a class = " button button-primary button-hero hide-if-customize " href = " <?php echo admin_url( 'themes.php' ); ?> " >< ? php _e ( 'Customize Your Site' ); ?> </a>
2012-09-26 21:44:43 +02:00
< ? php if ( current_user_can ( 'install_themes' ) || ( current_user_can ( 'switch_themes' ) && count ( wp_get_themes ( array ( 'allowed' => true ) ) ) > 1 ) ) : ?>
2012-10-01 16:58:05 +02:00
< p class = " hide-if-no-customize " >< ? php printf ( __ ( 'or, <a href="%s">change your theme completely</a>' ), admin_url ( 'themes.php' ) ); ?> </p>
2012-09-26 21:44:43 +02:00
< ? php endif ; ?>
2011-11-19 01:42:22 +01:00
</ div >
< div class = " welcome-panel-column " >
2015-10-28 18:57:25 +01:00
< h3 >< ? php _e ( 'Next Steps' ); ?> </h3>
2011-11-19 01:42:22 +01:00
< ul >
2012-09-26 21:44:43 +02:00
< ? php if ( 'page' == get_option ( 'show_on_front' ) && ! get_option ( 'page_for_posts' ) ) : ?>
2012-11-17 22:51:39 +01:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-edit-page">' . __ ( 'Edit your front page' ) . '</a>' , get_edit_post_link ( get_option ( 'page_on_front' ) ) ); ?> </li>
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-add-page">' . __ ( 'Add additional pages' ) . '</a>' , admin_url ( 'post-new.php?post_type=page' ) ); ?> </li>
2012-09-26 21:44:43 +02:00
< ? php elseif ( 'page' == get_option ( 'show_on_front' ) ) : ?>
2012-11-17 22:51:39 +01:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-edit-page">' . __ ( 'Edit your front page' ) . '</a>' , get_edit_post_link ( get_option ( 'page_on_front' ) ) ); ?> </li>
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-add-page">' . __ ( 'Add additional pages' ) . '</a>' , admin_url ( 'post-new.php?post_type=page' ) ); ?> </li>
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-write-blog">' . __ ( 'Add a blog post' ) . '</a>' , admin_url ( 'post-new.php' ) ); ?> </li>
2012-09-26 21:44:43 +02:00
< ? php else : ?>
2012-11-17 22:51:39 +01:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-write-blog">' . __ ( 'Write your first blog post' ) . '</a>' , admin_url ( 'post-new.php' ) ); ?> </li>
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-add-page">' . __ ( 'Add an About page' ) . '</a>' , admin_url ( 'post-new.php?post_type=page' ) ); ?> </li>
2012-09-26 21:44:43 +02:00
< ? php endif ; ?>
2012-11-17 22:51:39 +01:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-view-site">' . __ ( 'View your site' ) . '</a>' , home_url ( '/' ) ); ?> </li>
2011-11-19 01:42:22 +01:00
</ ul >
</ div >
2011-11-20 03:10:10 +01:00
< div class = " welcome-panel-column welcome-panel-last " >
2015-10-28 18:57:25 +01:00
< h3 >< ? php _e ( 'More Actions' ); ?> </h3>
2012-09-26 21:44:43 +02:00
< ul >
2014-03-17 20:47:15 +01:00
< ? php if ( current_theme_supports ( 'widgets' ) || current_theme_supports ( 'menus' ) ) : ?>
< li >< div class = " welcome-icon welcome-widgets-menus " >< ? php
if ( current_theme_supports ( 'widgets' ) && current_theme_supports ( 'menus' ) ) {
printf ( __ ( 'Manage <a href="%1$s">widgets</a> or <a href="%2$s">menus</a>' ),
admin_url ( 'widgets.php' ), admin_url ( 'nav-menus.php' ) );
} elseif ( current_theme_supports ( 'widgets' ) ) {
echo '<a href="' . admin_url ( 'widgets.php' ) . '">' . __ ( 'Manage widgets' ) . '</a>' ;
} else {
echo '<a href="' . admin_url ( 'nav-menus.php' ) . '">' . __ ( 'Manage menus' ) . '</a>' ;
}
?> </div></li>
< ? php endif ; ?>
< ? php if ( current_user_can ( 'manage_options' ) ) : ?>
2012-11-17 22:51:39 +01:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-comments">' . __ ( 'Turn comments on or off' ) . '</a>' , admin_url ( 'options-discussion.php' ) ); ?> </li>
2014-03-17 20:47:15 +01:00
< ? php endif ; ?>
2015-04-12 23:29:32 +02:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-learn-more">' . __ ( 'Learn more about getting started' ) . '</a>' , __ ( 'https://codex.wordpress.org/First_Steps_With_WordPress' ) ); ?> </li>
2012-09-26 21:44:43 +02:00
</ ul >
2011-11-19 01:42:22 +01:00
</ div >
</ div >
2011-09-22 08:23:10 +02:00
</ div >
< ? php
}