web/wp-admin/includes/dashboard.php
changeset 194 32102edaa81b
parent 136 bde1974c263b
child 204 09a1c134465b
equal deleted inserted replaced
193:2f6f6f7551ca 194:32102edaa81b
     1 <?php
     1 <?php
     2 /**
     2 /**
     3  * WordPress Dashboard Widget Administration Panel API
     3  * WordPress Dashboard Widget Administration Screen API
     4  *
     4  *
     5  * @package WordPress
     5  * @package WordPress
     6  * @subpackage Administration
     6  * @subpackage Administration
     7  */
     7  */
     8 
     8 
     9 /**
     9 /**
    10  * Registers dashboard widgets.
    10  * Registers dashboard widgets.
    11  *
    11  *
    12  * handles POST data, sets up filters.
    12  * Handles POST data, sets up filters.
    13  *
    13  *
    14  * @since unknown
    14  * @since 2.5.0
    15  */
    15  */
    16 function wp_dashboard_setup() {
    16 function wp_dashboard_setup() {
    17 	global $wp_registered_widgets, $wp_registered_widget_controls, $wp_dashboard_control_callbacks;
    17 	global $wp_registered_widgets, $wp_registered_widget_controls, $wp_dashboard_control_callbacks;
    18 	$wp_dashboard_control_callbacks = array();
    18 	$wp_dashboard_control_callbacks = array();
       
    19 	$screen = get_current_screen();
    19 
    20 
    20 	$update = false;
    21 	$update = false;
    21 	$widget_options = get_option( 'dashboard_widget_options' );
    22 	$widget_options = get_option( 'dashboard_widget_options' );
    22 	if ( !$widget_options || !is_array($widget_options) )
    23 	if ( !$widget_options || !is_array($widget_options) )
    23 		$widget_options = array();
    24 		$widget_options = array();
    24 
    25 
    25 	/* Register Widgets and Controls */
    26 	/* Register Widgets and Controls */
    26 
    27 
       
    28 	$response = wp_check_browser_version();
       
    29 
       
    30 	if ( $response && $response['upgrade'] ) {
       
    31 		add_filter( 'postbox_classes_dashboard_dashboard_browser_nag', 'dashboard_browser_nag_class' );
       
    32 		if ( $response['insecure'] )
       
    33 			wp_add_dashboard_widget( 'dashboard_browser_nag', __( 'You are using an insecure browser!' ), 'wp_dashboard_browser_nag' );
       
    34 		else
       
    35 			wp_add_dashboard_widget( 'dashboard_browser_nag', __( 'Your browser is out of date!' ), 'wp_dashboard_browser_nag' );
       
    36 	}
       
    37 
    27 	// Right Now
    38 	// Right Now
    28 	wp_add_dashboard_widget( 'dashboard_right_now', __( 'Right Now' ), 'wp_dashboard_right_now' );
    39 	if ( is_blog_admin() && current_user_can('edit_posts') )
       
    40 		wp_add_dashboard_widget( 'dashboard_right_now', __( 'Right Now' ), 'wp_dashboard_right_now' );
       
    41 
       
    42 	if ( is_network_admin() )
       
    43 		wp_add_dashboard_widget( 'network_dashboard_right_now', __( 'Right Now' ), 'wp_network_dashboard_right_now' );
    29 
    44 
    30 	// Recent Comments Widget
    45 	// Recent Comments Widget
    31 	$recent_comments_title = __( 'Recent Comments' );
    46 	if ( is_blog_admin() && current_user_can('moderate_comments') ) {
    32 	wp_add_dashboard_widget( 'dashboard_recent_comments', $recent_comments_title, 'wp_dashboard_recent_comments' );
    47 		if ( !isset( $widget_options['dashboard_recent_comments'] ) || !isset( $widget_options['dashboard_recent_comments']['items'] ) ) {
       
    48 			$update = true;
       
    49 			$widget_options['dashboard_recent_comments'] = array(
       
    50 				'items' => 5,
       
    51 			);
       
    52 		}
       
    53 		$recent_comments_title = __( 'Recent Comments' );
       
    54 		wp_add_dashboard_widget( 'dashboard_recent_comments', $recent_comments_title, 'wp_dashboard_recent_comments', 'wp_dashboard_recent_comments_control' );
       
    55 	}
    33 
    56 
    34 	// Incoming Links Widget
    57 	// Incoming Links Widget
    35 	if ( !isset( $widget_options['dashboard_incoming_links'] ) || !isset( $widget_options['dashboard_incoming_links']['home'] ) || $widget_options['dashboard_incoming_links']['home'] != get_option('home') ) {
    58 	if ( is_blog_admin() && current_user_can('publish_posts') ) {
    36 		$update = true;
    59 		if ( !isset( $widget_options['dashboard_incoming_links'] ) || !isset( $widget_options['dashboard_incoming_links']['home'] ) || $widget_options['dashboard_incoming_links']['home'] != get_option('home') ) {
    37 		$num_items = isset($widget_options['dashboard_incoming_links']['items']) ? $widget_options['dashboard_incoming_links']['items'] : 10;
    60 			$update = true;
    38 		$widget_options['dashboard_incoming_links'] = array(
    61 			$num_items = isset($widget_options['dashboard_incoming_links']['items']) ? $widget_options['dashboard_incoming_links']['items'] : 10;
    39 			'home' => get_option('home'),
    62 			$widget_options['dashboard_incoming_links'] = array(
    40 			'link' => apply_filters( 'dashboard_incoming_links_link', 'http://blogsearch.google.com/blogsearch?scoring=d&partner=wordpress&q=link:' . trailingslashit( get_option('home') ) ),
    63 				'home' => get_option('home'),
    41 			'url' => isset($widget_options['dashboard_incoming_links']['url']) ? apply_filters( 'dashboard_incoming_links_feed', $widget_options['dashboard_incoming_links']['url'] ) : apply_filters( 'dashboard_incoming_links_feed', 'http://blogsearch.google.com/blogsearch_feeds?scoring=d&ie=utf-8&num=' . $num_items . '&output=rss&partner=wordpress&q=link:' . trailingslashit( get_option('home') ) ),
    64 				'link' => apply_filters( 'dashboard_incoming_links_link', 'http://blogsearch.google.com/blogsearch?scoring=d&partner=wordpress&q=link:' . trailingslashit( get_option('home') ) ),
    42 			'items' => $num_items,
    65 				'url' => isset($widget_options['dashboard_incoming_links']['url']) ? apply_filters( 'dashboard_incoming_links_feed', $widget_options['dashboard_incoming_links']['url'] ) : apply_filters( 'dashboard_incoming_links_feed', 'http://blogsearch.google.com/blogsearch_feeds?scoring=d&ie=utf-8&num=' . $num_items . '&output=rss&partner=wordpress&q=link:' . trailingslashit( get_option('home') ) ),
    43 			'show_date' => isset($widget_options['dashboard_incoming_links']['show_date']) ? $widget_options['dashboard_incoming_links']['show_date'] : false
    66 				'items' => $num_items,
    44 		);
    67 				'show_date' => isset($widget_options['dashboard_incoming_links']['show_date']) ? $widget_options['dashboard_incoming_links']['show_date'] : false
    45 	}
    68 			);
    46 	wp_add_dashboard_widget( 'dashboard_incoming_links', __( 'Incoming Links' ), 'wp_dashboard_incoming_links', 'wp_dashboard_incoming_links_control' );
    69 		}
       
    70 		wp_add_dashboard_widget( 'dashboard_incoming_links', __( 'Incoming Links' ), 'wp_dashboard_incoming_links', 'wp_dashboard_incoming_links_control' );
       
    71 	}
    47 
    72 
    48 	// WP Plugins Widget
    73 	// WP Plugins Widget
    49 	if ( current_user_can( 'activate_plugins' ) )
    74 	if ( ( ! is_multisite() && is_blog_admin() && current_user_can( 'install_plugins' ) ) || ( is_network_admin() && current_user_can( 'manage_network_plugins' ) && current_user_can( 'install_plugins' ) ) )
    50 		wp_add_dashboard_widget( 'dashboard_plugins', __( 'Plugins' ), 'wp_dashboard_plugins' );
    75 		wp_add_dashboard_widget( 'dashboard_plugins', __( 'Plugins' ), 'wp_dashboard_plugins' );
    51 
    76 
    52 	// QuickPress Widget
    77 	// QuickPress Widget
    53 	if ( current_user_can('edit_posts') )
    78 	if ( is_blog_admin() && current_user_can('edit_posts') )
    54 		wp_add_dashboard_widget( 'dashboard_quick_press', __( 'QuickPress' ), 'wp_dashboard_quick_press' );
    79 		wp_add_dashboard_widget( 'dashboard_quick_press', __( 'QuickPress' ), 'wp_dashboard_quick_press' );
    55 
    80 
    56 	// Recent Drafts
    81 	// Recent Drafts
    57 	if ( current_user_can('edit_posts') )
    82 	if ( is_blog_admin() && current_user_can('edit_posts') )
    58 		wp_add_dashboard_widget( 'dashboard_recent_drafts', __('Recent Drafts'), 'wp_dashboard_recent_drafts' );
    83 		wp_add_dashboard_widget( 'dashboard_recent_drafts', __('Recent Drafts'), 'wp_dashboard_recent_drafts' );
    59 
    84 
    60 	// Primary feed (Dev Blog) Widget
    85 	// Primary feed (Dev Blog) Widget
    61 	if ( !isset( $widget_options['dashboard_primary'] ) ) {
    86 	if ( !isset( $widget_options['dashboard_primary'] ) ) {
    62 		$update = true;
    87 		$update = true;
    63 		$widget_options['dashboard_primary'] = array(
    88 		$widget_options['dashboard_primary'] = array(
    64 			'link' => apply_filters( 'dashboard_primary_link',  __( 'http://wordpress.org/development/' ) ),
    89 			'link' => apply_filters( 'dashboard_primary_link', __( 'http://wordpress.org/news/' ) ),
    65 			'url' => apply_filters( 'dashboard_primary_feed',  __( 'http://wordpress.org/development/feed/' ) ),
    90 			'url' => apply_filters( 'dashboard_primary_feed', __( 'http://wordpress.org/news/feed/' ) ),
    66 			'title' => apply_filters( 'dashboard_primary_title', __( 'WordPress Development Blog' ) ),
    91 			'title' => apply_filters( 'dashboard_primary_title', __( 'WordPress Blog' ) ),
    67 			'items' => 2,
    92 			'items' => 2,
    68 			'show_summary' => 1,
    93 			'show_summary' => 1,
    69 			'show_author' => 0,
    94 			'show_author' => 0,
    70 			'show_date' => 1
    95 			'show_date' => 1,
    71 		);
    96 		);
    72 	}
    97 	}
    73 	wp_add_dashboard_widget( 'dashboard_primary', $widget_options['dashboard_primary']['title'], 'wp_dashboard_primary', 'wp_dashboard_primary_control' );
    98 	wp_add_dashboard_widget( 'dashboard_primary', $widget_options['dashboard_primary']['title'], 'wp_dashboard_primary', 'wp_dashboard_primary_control' );
    74 
    99 
    75 	// Secondary Feed (Planet) Widget
   100 	// Secondary Feed (Planet) Widget
    76 	if ( !isset( $widget_options['dashboard_secondary'] ) ) {
   101 	if ( !isset( $widget_options['dashboard_secondary'] ) ) {
    77 		$update = true;
   102 		$update = true;
    78 		$widget_options['dashboard_secondary'] = array(
   103 		$widget_options['dashboard_secondary'] = array(
    79 			'link' => apply_filters( 'dashboard_secondary_link',  __( 'http://planet.wordpress.org/' ) ),
   104 			'link' => apply_filters( 'dashboard_secondary_link', __( 'http://planet.wordpress.org/' ) ),
    80 			'url' => apply_filters( 'dashboard_secondary_feed',  __( 'http://planet.wordpress.org/feed/' ) ),
   105 			'url' => apply_filters( 'dashboard_secondary_feed', __( 'http://planet.wordpress.org/feed/' ) ),
    81 			'title' => apply_filters( 'dashboard_secondary_title', __( 'Other WordPress News' ) ),
   106 			'title' => apply_filters( 'dashboard_secondary_title', __( 'Other WordPress News' ) ),
    82 			'items' => 5
   107 			'items' => 5,
       
   108 			'show_summary' => 0,
       
   109 			'show_author' => 0,
       
   110 			'show_date' => 0,
    83 		);
   111 		);
    84 	}
   112 	}
    85 	wp_add_dashboard_widget( 'dashboard_secondary', $widget_options['dashboard_secondary']['title'], 'wp_dashboard_secondary', 'wp_dashboard_secondary_control' );
   113 	wp_add_dashboard_widget( 'dashboard_secondary', $widget_options['dashboard_secondary']['title'], 'wp_dashboard_secondary', 'wp_dashboard_secondary_control' );
    86 
   114 
    87 	// Hook to register new widgets
   115 	// Hook to register new widgets
    88 	do_action( 'wp_dashboard_setup' );
       
    89 
       
    90 	// Filter widget order
   116 	// Filter widget order
    91 	$dashboard_widgets = apply_filters( 'wp_dashboard_widgets', array() );
   117 	if ( is_network_admin() ) {
       
   118 		do_action( 'wp_network_dashboard_setup' );
       
   119 		$dashboard_widgets = apply_filters( 'wp_network_dashboard_widgets', array() );
       
   120 	} elseif ( is_user_admin() ) {
       
   121 		do_action( 'wp_user_dashboard_setup' );
       
   122 		$dashboard_widgets = apply_filters( 'wp_user_dashboard_widgets', array() );
       
   123 	} else {
       
   124 		do_action( 'wp_dashboard_setup' );
       
   125 		$dashboard_widgets = apply_filters( 'wp_dashboard_widgets', array() );
       
   126 	}
    92 
   127 
    93 	foreach ( $dashboard_widgets as $widget_id ) {
   128 	foreach ( $dashboard_widgets as $widget_id ) {
    94 		$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>';
   129 		$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>';
    95 		wp_add_dashboard_widget( $widget_id, $name, $wp_registered_widgets[$widget_id]['callback'], $wp_registered_widget_controls[$widget_id]['callback'] );
   130 		wp_add_dashboard_widget( $widget_id, $name, $wp_registered_widgets[$widget_id]['callback'], $wp_registered_widget_controls[$widget_id]['callback'] );
    96 	}
   131 	}
   104 	}
   139 	}
   105 
   140 
   106 	if ( $update )
   141 	if ( $update )
   107 		update_option( 'dashboard_widget_options', $widget_options );
   142 		update_option( 'dashboard_widget_options', $widget_options );
   108 
   143 
   109 	do_action('do_meta_boxes', 'dashboard', 'normal', '');
   144 	do_action('do_meta_boxes', $screen->id, 'normal', '');
   110 	do_action('do_meta_boxes', 'dashboard', 'side', '');
   145 	do_action('do_meta_boxes', $screen->id, 'side', '');
   111 }
   146 }
   112 
   147 
   113 function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback = null ) {
   148 function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback = null ) {
       
   149 	$screen = get_current_screen();
   114 	global $wp_dashboard_control_callbacks;
   150 	global $wp_dashboard_control_callbacks;
       
   151 
   115 	if ( $control_callback && current_user_can( 'edit_dashboard' ) && is_callable( $control_callback ) ) {
   152 	if ( $control_callback && current_user_can( 'edit_dashboard' ) && is_callable( $control_callback ) ) {
   116 		$wp_dashboard_control_callbacks[$widget_id] = $control_callback;
   153 		$wp_dashboard_control_callbacks[$widget_id] = $control_callback;
   117 		if ( isset( $_GET['edit'] ) && $widget_id == $_GET['edit'] ) {
   154 		if ( isset( $_GET['edit'] ) && $widget_id == $_GET['edit'] ) {
   118 			list($url) = explode( '#', add_query_arg( 'edit', false ), 2 );
   155 			list($url) = explode( '#', add_query_arg( 'edit', false ), 2 );
   119 			$widget_name .= ' <span class="postbox-title-action"><a href="' . esc_url( $url ) . '">' . __( 'Cancel' ) . '</a></span>';
   156 			$widget_name .= ' <span class="postbox-title-action"><a href="' . esc_url( $url ) . '">' . __( 'Cancel' ) . '</a></span>';
   120 			add_meta_box( $widget_id, $widget_name, '_wp_dashboard_control_callback', 'dashboard', 'normal', 'core' );
   157 			$callback = '_wp_dashboard_control_callback';
   121 			return;
   158 		} else {
   122 		}
   159 			list($url) = explode( '#', add_query_arg( 'edit', $widget_id ), 2 );
   123 		list($url) = explode( '#', add_query_arg( 'edit', $widget_id ), 2 );
   160 			$widget_name .= ' <span class="postbox-title-action"><a href="' . esc_url( "$url#$widget_id" ) . '" class="edit-box open-box">' . __( 'Configure' ) . '</a></span>';
   124 		$widget_name .= ' <span class="postbox-title-action"><a href="' . esc_url( "$url#$widget_id" ) . '" class="edit-box open-box">' . __( 'Configure' ) . '</a></span>';
   161 		}
   125 	}
   162 	}
   126 	$side_widgets = array('dashboard_quick_press', 'dashboard_recent_drafts', 'dashboard_primary', 'dashboard_secondary');
   163 
       
   164 	if ( is_blog_admin () )
       
   165 		$side_widgets = array('dashboard_quick_press', 'dashboard_recent_drafts', 'dashboard_primary', 'dashboard_secondary');
       
   166 	else if (is_network_admin() )
       
   167 		$side_widgets = array('dashboard_primary', 'dashboard_secondary');
       
   168 	else
       
   169 		$side_widgets = array();
       
   170 
   127 	$location = 'normal';
   171 	$location = 'normal';
   128 	if ( in_array($widget_id, $side_widgets) )
   172 	if ( in_array($widget_id, $side_widgets) )
   129 		$location = 'side';
   173 		$location = 'side';
   130 	add_meta_box( $widget_id, $widget_name , $callback, 'dashboard', $location, 'core' );
   174 
       
   175 	$priority = 'core';
       
   176 	if ( 'dashboard_browser_nag' === $widget_id )
       
   177 		$priority = 'high';
       
   178 
       
   179 	add_meta_box( $widget_id, $widget_name, $callback, $screen, $location, $priority );
   131 }
   180 }
   132 
   181 
   133 function _wp_dashboard_control_callback( $dashboard, $meta_box ) {
   182 function _wp_dashboard_control_callback( $dashboard, $meta_box ) {
   134 	echo '<form action="" method="post" class="dashboard-widget-control-form">';
   183 	echo '<form action="" method="post" class="dashboard-widget-control-form">';
   135 	wp_dashboard_trigger_widget_control( $meta_box['id'] );
   184 	wp_dashboard_trigger_widget_control( $meta_box['id'] );
   136 	echo '<p class="submit"><input type="hidden" name="widget_id" value="' . esc_attr($meta_box['id']) . '" /><input type="submit" value="' . esc_attr__( 'Submit' ) . '" /></p>';
   185 	echo '<input type="hidden" name="widget_id" value="' . esc_attr($meta_box['id']) . '" />';
   137 
   186 	submit_button( __('Submit') );
   138 	echo '</form>';
   187 	echo '</form>';
   139 }
   188 }
   140 
   189 
   141 /**
   190 /**
   142  * Displays the dashboard.
   191  * Displays the dashboard.
   143  *
   192  *
   144  * @since unknown
   193  * @since 2.5.0
   145  */
   194  */
   146 function wp_dashboard() {
   195 function wp_dashboard() {
   147 	global $screen_layout_columns;
   196 	$screen = get_current_screen();
   148 
   197 	$class = 'columns-' . get_current_screen()->get_columns();
   149 	$hide2 = $hide3 = $hide4 = '';
   198 
   150 	switch ( $screen_layout_columns ) {
       
   151 		case 4:
       
   152 			$width = 'width:24.5%;';
       
   153 			break;
       
   154 		case 3:
       
   155 			$width = 'width:32.67%;';
       
   156 			$hide4 = 'display:none;';
       
   157 			break;
       
   158 		case 2:
       
   159 			$width = 'width:49%;';
       
   160 			$hide3 = $hide4 = 'display:none;';
       
   161 			break;
       
   162 		default:
       
   163 			$width = 'width:98%;';
       
   164 			$hide2 = $hide3 = $hide4 = 'display:none;';
       
   165 	}
       
   166 ?>
   199 ?>
   167 <div id="dashboard-widgets" class="metabox-holder">
   200 <div id="dashboard-widgets" class="metabox-holder <?php echo $class; ?>">
   168 <?php
   201 	<div id='postbox-container-1' class='postbox-container'>
   169 	echo "\t<div class='postbox-container' style='$width'>\n";
   202 	<?php do_meta_boxes( $screen->id, 'normal', '' ); ?>
   170 	do_meta_boxes( 'dashboard', 'normal', '' );
   203 	</div>
   171 
   204 	<div id='postbox-container-2' class='postbox-container'>
   172 	echo "\t</div><div class='postbox-container' style='{$hide2}$width'>\n";
   205 	<?php do_meta_boxes( $screen->id, 'side', '' ); ?>
   173 	do_meta_boxes( 'dashboard', 'side', '' );
   206 	</div>
   174 
   207 	<div id='postbox-container-3' class='postbox-container'>
   175 	echo "\t</div><div class='postbox-container' style='{$hide3}$width'>\n";
   208 	<?php do_meta_boxes( $screen->id, 'column3', '' ); ?>
   176 	do_meta_boxes( 'dashboard', 'column3', '' );
   209 	</div>
   177 
   210 	<div id='postbox-container-4' class='postbox-container'>
   178 	echo "\t</div><div class='postbox-container' style='{$hide4}$width'>\n";
   211 	<?php do_meta_boxes( $screen->id, 'column4', '' ); ?>
   179 	do_meta_boxes( 'dashboard', 'column4', '' );
   212 	</div>
   180 ?>
   213 </div>
   181 </div></div>
   214 
   182 
       
   183 <form style="display:none" method="get" action="">
       
   184 	<p>
       
   185 <?php
   215 <?php
   186 	wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
   216 	wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
   187 	wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
   217 	wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
   188 ?>
   218 
   189 	</p>
       
   190 </form>
       
   191 
       
   192 <?php
       
   193 }
   219 }
   194 
   220 
   195 /* Dashboard Widgets */
   221 /* Dashboard Widgets */
   196 
   222 
   197 function wp_dashboard_right_now() {
   223 function wp_dashboard_right_now() {
   204 
   230 
   205 	$num_tags = wp_count_terms('post_tag');
   231 	$num_tags = wp_count_terms('post_tag');
   206 
   232 
   207 	$num_comm = wp_count_comments( );
   233 	$num_comm = wp_count_comments( );
   208 
   234 
   209 	echo "\n\t".'<p class="sub">' . __('At a Glance') . '</p>';
   235 	echo "\n\t".'<div class="table table_content">';
   210 	echo "\n\t".'<div class="table">'."\n\t".'<table>';
   236 	echo "\n\t".'<p class="sub">' . __('Content') . '</p>'."\n\t".'<table>';
   211 	echo "\n\t".'<tr class="first">';
   237 	echo "\n\t".'<tr class="first">';
   212 
   238 
   213 	// Posts
   239 	// Posts
   214 	$num = number_format_i18n( $num_posts->publish );
   240 	$num = number_format_i18n( $num_posts->publish );
   215 	$text = _n( 'Post', 'Posts', intval($num_posts->publish) );
   241 	$text = _n( 'Post', 'Posts', intval($num_posts->publish) );
   217 		$num = "<a href='edit.php'>$num</a>";
   243 		$num = "<a href='edit.php'>$num</a>";
   218 		$text = "<a href='edit.php'>$text</a>";
   244 		$text = "<a href='edit.php'>$text</a>";
   219 	}
   245 	}
   220 	echo '<td class="first b b-posts">' . $num . '</td>';
   246 	echo '<td class="first b b-posts">' . $num . '</td>';
   221 	echo '<td class="t posts">' . $text . '</td>';
   247 	echo '<td class="t posts">' . $text . '</td>';
       
   248 
       
   249 	echo '</tr><tr>';
   222 	/* TODO: Show status breakdown on hover
   250 	/* TODO: Show status breakdown on hover
   223 	if ( $can_edit_pages && !empty($num_pages->publish) ) { // how many pages is not exposed in feeds.  Don't show if !current_user_can
   251 	if ( $can_edit_pages && !empty($num_pages->publish) ) { // how many pages is not exposed in feeds. Don't show if !current_user_can
   224 		$post_type_texts[] = '<a href="edit-pages.php">'.sprintf( _n( '%s page', '%s pages', $num_pages->publish ), number_format_i18n( $num_pages->publish ) ).'</a>';
   252 		$post_type_texts[] = '<a href="edit-pages.php">'.sprintf( _n( '%s page', '%s pages', $num_pages->publish ), number_format_i18n( $num_pages->publish ) ).'</a>';
   225 	}
   253 	}
   226 	if ( $can_edit_posts && !empty($num_posts->draft) ) {
   254 	if ( $can_edit_posts && !empty($num_posts->draft) ) {
   227 		$post_type_texts[] = '<a href="edit.php?post_status=draft">'.sprintf( _n( '%s draft', '%s drafts', $num_posts->draft ), number_format_i18n( $num_posts->draft ) ).'</a>';
   255 		$post_type_texts[] = '<a href="edit.php?post_status=draft">'.sprintf( _n( '%s draft', '%s drafts', $num_posts->draft ), number_format_i18n( $num_posts->draft ) ).'</a>';
   228 	}
   256 	}
   234 	} else {
   262 	} else {
   235 		$pending_text = '';
   263 		$pending_text = '';
   236 	}
   264 	}
   237 	*/
   265 	*/
   238 
   266 
       
   267 	// Pages
       
   268 	$num = number_format_i18n( $num_pages->publish );
       
   269 	$text = _n( 'Page', 'Pages', $num_pages->publish );
       
   270 	if ( current_user_can( 'edit_pages' ) ) {
       
   271 		$num = "<a href='edit.php?post_type=page'>$num</a>";
       
   272 		$text = "<a href='edit.php?post_type=page'>$text</a>";
       
   273 	}
       
   274 	echo '<td class="first b b_pages">' . $num . '</td>';
       
   275 	echo '<td class="t pages">' . $text . '</td>';
       
   276 
       
   277 	echo '</tr><tr>';
       
   278 
       
   279 	// Categories
       
   280 	$num = number_format_i18n( $num_cats );
       
   281 	$text = _n( 'Category', 'Categories', $num_cats );
       
   282 	if ( current_user_can( 'manage_categories' ) ) {
       
   283 		$num = "<a href='edit-tags.php?taxonomy=category'>$num</a>";
       
   284 		$text = "<a href='edit-tags.php?taxonomy=category'>$text</a>";
       
   285 	}
       
   286 	echo '<td class="first b b-cats">' . $num . '</td>';
       
   287 	echo '<td class="t cats">' . $text . '</td>';
       
   288 
       
   289 	echo '</tr><tr>';
       
   290 
       
   291 	// Tags
       
   292 	$num = number_format_i18n( $num_tags );
       
   293 	$text = _n( 'Tag', 'Tags', $num_tags );
       
   294 	if ( current_user_can( 'manage_categories' ) ) {
       
   295 		$num = "<a href='edit-tags.php'>$num</a>";
       
   296 		$text = "<a href='edit-tags.php'>$text</a>";
       
   297 	}
       
   298 	echo '<td class="first b b-tags">' . $num . '</td>';
       
   299 	echo '<td class="t tags">' . $text . '</td>';
       
   300 
       
   301 	echo "</tr>";
       
   302 	do_action('right_now_content_table_end');
       
   303 	echo "\n\t</table>\n\t</div>";
       
   304 
       
   305 	echo "\n\t".'<div class="table table_discussion">';
       
   306 	echo "\n\t".'<p class="sub">' . __('Discussion') . '</p>'."\n\t".'<table>';
       
   307 	echo "\n\t".'<tr class="first">';
       
   308 
   239 	// Total Comments
   309 	// Total Comments
   240 	$num = '<span class="total-count">' . number_format_i18n($num_comm->total_comments) . '</span>';
   310 	$num = '<span class="total-count">' . number_format_i18n($num_comm->total_comments) . '</span>';
   241 	$text = _n( 'Comment', 'Comments', $num_comm->total_comments );
   311 	$text = _n( 'Comment', 'Comments', $num_comm->total_comments );
   242 	if ( current_user_can( 'moderate_comments' ) ) {
   312 	if ( current_user_can( 'moderate_comments' ) ) {
   243 		$num = "<a href='edit-comments.php'>$num</a>";
   313 		$num = '<a href="edit-comments.php">' . $num . '</a>';
   244 		$text = "<a href='edit-comments.php'>$text</a>";
   314 		$text = '<a href="edit-comments.php">' . $text . '</a>';
   245 	}
   315 	}
   246 	echo '<td class="b b-comments">' . $num . '</td>';
   316 	echo '<td class="b b-comments">' . $num . '</td>';
   247 	echo '<td class="last t comments">' . $text . '</td>';
   317 	echo '<td class="last t comments">' . $text . '</td>';
   248 
   318 
   249 	echo '</tr><tr>';
   319 	echo '</tr><tr>';
   250 
   320 
   251 	// Pages
       
   252 	$num = number_format_i18n( $num_pages->publish );
       
   253 	$text = _n( 'Page', 'Pages', $num_pages->publish );
       
   254 	if ( current_user_can( 'edit_pages' ) ) {
       
   255 		$num = "<a href='edit-pages.php'>$num</a>";
       
   256 		$text = "<a href='edit-pages.php'>$text</a>";
       
   257 	}
       
   258 	echo '<td class="first b b_pages">' . $num . '</td>';
       
   259 	echo '<td class="t pages">' . $text . '</td>';
       
   260 
       
   261 	// Approved Comments
   321 	// Approved Comments
   262 	$num = '<span class="approved-count">' . number_format_i18n($num_comm->approved) . '</span>';
   322 	$num = '<span class="approved-count">' . number_format_i18n($num_comm->approved) . '</span>';
   263 	$text = _nc( 'Approved|Right Now', 'Approved', $num_comm->approved );
   323 	$text = _nx( 'Approved', 'Approved', $num_comm->approved, 'Right Now' );
   264 	if ( current_user_can( 'moderate_comments' ) ) {
   324 	if ( current_user_can( 'moderate_comments' ) ) {
   265 		$num = "<a href='edit-comments.php?comment_status=approved'>$num</a>";
   325 		$num = "<a href='edit-comments.php?comment_status=approved'>$num</a>";
   266 		$text = "<a class='approved' href='edit-comments.php?comment_status=approved'>$text</a>";
   326 		$text = "<a class='approved' href='edit-comments.php?comment_status=approved'>$text</a>";
   267 	}
   327 	}
   268 	echo '<td class="b b_approved">' . $num . '</td>';
   328 	echo '<td class="b b_approved">' . $num . '</td>';
   269 	echo '<td class="last t">' . $text . '</td>';
   329 	echo '<td class="last t">' . $text . '</td>';
   270 
   330 
   271 	echo "</tr>\n\t<tr>";
   331 	echo "</tr>\n\t<tr>";
   272 
       
   273 	// Categories
       
   274 	$num = number_format_i18n( $num_cats );
       
   275 	$text = _n( 'Category', 'Categories', $num_cats );
       
   276 	if ( current_user_can( 'manage_categories' ) ) {
       
   277 		$num = "<a href='categories.php'>$num</a>";
       
   278 		$text = "<a href='categories.php'>$text</a>";
       
   279 	}
       
   280 	echo '<td class="first b b-cats">' . $num . '</td>';
       
   281 	echo '<td class="t cats">' . $text . '</td>';
       
   282 
   332 
   283 	// Pending Comments
   333 	// Pending Comments
   284 	$num = '<span class="pending-count">' . number_format_i18n($num_comm->moderated) . '</span>';
   334 	$num = '<span class="pending-count">' . number_format_i18n($num_comm->moderated) . '</span>';
   285 	$text = _n( 'Pending', 'Pending', $num_comm->moderated );
   335 	$text = _n( 'Pending', 'Pending', $num_comm->moderated );
   286 	if ( current_user_can( 'moderate_comments' ) ) {
   336 	if ( current_user_can( 'moderate_comments' ) ) {
   290 	echo '<td class="b b-waiting">' . $num . '</td>';
   340 	echo '<td class="b b-waiting">' . $num . '</td>';
   291 	echo '<td class="last t">' . $text . '</td>';
   341 	echo '<td class="last t">' . $text . '</td>';
   292 
   342 
   293 	echo "</tr>\n\t<tr>";
   343 	echo "</tr>\n\t<tr>";
   294 
   344 
   295 	// Tags
       
   296 	$num = number_format_i18n( $num_tags );
       
   297 	$text = _n( 'Tag', 'Tags', $num_tags );
       
   298 	if ( current_user_can( 'manage_categories' ) ) {
       
   299 		$num = "<a href='edit-tags.php'>$num</a>";
       
   300 		$text = "<a href='edit-tags.php'>$text</a>";
       
   301 	}
       
   302 	echo '<td class="first b b-tags">' . $num . '</td>';
       
   303 	echo '<td class="t tags">' . $text . '</td>';
       
   304 
       
   305 	// Spam Comments
   345 	// Spam Comments
   306 	$num = number_format_i18n($num_comm->spam);
   346 	$num = number_format_i18n($num_comm->spam);
   307 	$text = _n( 'Spam', 'Spam', $num_comm->spam );
   347 	$text = _nx( 'Spam', 'Spam', $num_comm->spam, 'comment' );
   308 	if ( current_user_can( 'moderate_comments' ) ) {
   348 	if ( current_user_can( 'moderate_comments' ) ) {
   309 		$num = "<a href='edit-comments.php?comment_status=spam'><span class='spam-count'>$num</span></a>";
   349 		$num = "<a href='edit-comments.php?comment_status=spam'><span class='spam-count'>$num</span></a>";
   310 		$text = "<a class='spam' href='edit-comments.php?comment_status=spam'>$text</a>";
   350 		$text = "<a class='spam' href='edit-comments.php?comment_status=spam'>$text</a>";
   311 	}
   351 	}
   312 	echo '<td class="b b-spam">' . $num . '</td>';
   352 	echo '<td class="b b-spam">' . $num . '</td>';
   313 	echo '<td class="last t">' . $text . '</td>';
   353 	echo '<td class="last t">' . $text . '</td>';
   314 
   354 
   315 	echo "</tr>";
   355 	echo "</tr>";
   316 	do_action('right_now_table_end');
   356 	do_action('right_now_table_end');
       
   357 	do_action('right_now_discussion_table_end');
   317 	echo "\n\t</table>\n\t</div>";
   358 	echo "\n\t</table>\n\t</div>";
   318 
   359 
   319 	echo "\n\t".'<div class="versions">';
   360 	echo "\n\t".'<div class="versions">';
   320 	$ct = current_theme_info();
   361 	$theme = wp_get_theme();
   321 
   362 
   322 	echo "\n\t<p>";
   363 	echo "\n\t<p>";
   323 	if ( !empty($wp_registered_sidebars) ) {
   364 
       
   365 	if ( $theme->errors() ) {
       
   366 		if ( ! is_multisite() || is_super_admin() )
       
   367 			echo '<span class="error-message">' . __('ERROR: The themes directory is either empty or doesn&#8217;t exist. Please check your installation.') . '</span>';
       
   368 	} elseif ( ! empty($wp_registered_sidebars) ) {
   324 		$sidebars_widgets = wp_get_sidebars_widgets();
   369 		$sidebars_widgets = wp_get_sidebars_widgets();
   325 		$num_widgets = 0;
   370 		$num_widgets = 0;
   326 		foreach ( (array) $sidebars_widgets as $k => $v ) {
   371 		foreach ( (array) $sidebars_widgets as $k => $v ) {
   327 			if ( 'wp_inactive_widgets' == $k )
   372 			if ( 'wp_inactive_widgets' == $k || 'orphaned_widgets' == substr( $k, 0, 16 ) )
   328 				continue;
   373 				continue;
   329 			if ( is_array($v) )
   374 			if ( is_array($v) )
   330 				$num_widgets = $num_widgets + count($v);
   375 				$num_widgets = $num_widgets + count($v);
   331 		}
   376 		}
   332 		$num = number_format_i18n( $num_widgets );
   377 		$num = number_format_i18n( $num_widgets );
   333 
   378 
   334 		if ( current_user_can( 'switch_themes' ) ) {
   379 		$switch_themes = $theme->display('Name');
   335 			echo '<a href="themes.php" class="button rbutton">' . __('Change Theme') . '</a>';
   380 		if ( current_user_can( 'switch_themes') )
   336 			printf(_n('Theme <span class="b"><a href="themes.php">%1$s</a></span> with <span class="b"><a href="widgets.php">%2$s Widget</a></span>', 'Theme <span class="b"><a href="themes.php">%1$s</a></span> with <span class="b"><a href="widgets.php">%2$s Widgets</a></span>', $num_widgets), $ct->title, $num);
   381 			$switch_themes = '<a href="themes.php">' . $switch_themes . '</a>';
       
   382 		if ( current_user_can( 'edit_theme_options' ) ) {
       
   383 			printf(_n('Theme <span class="b">%1$s</span> with <span class="b"><a href="widgets.php">%2$s Widget</a></span>', 'Theme <span class="b">%1$s</span> with <span class="b"><a href="widgets.php">%2$s Widgets</a></span>', $num_widgets), $switch_themes, $num);
   337 		} else {
   384 		} else {
   338 			printf(_n('Theme <span class="b">%1$s</span> with <span class="b">%2$s Widget</span>', 'Theme <span class="b">%1$s</span> with <span class="b">%2$s Widgets</span>', $num_widgets), $ct->title, $num);
   385 			printf(_n('Theme <span class="b">%1$s</span> with <span class="b">%2$s Widget</span>', 'Theme <span class="b">%1$s</span> with <span class="b">%2$s Widgets</span>', $num_widgets), $switch_themes, $num);
   339 		}
   386 		}
   340 	} else {
   387 	} else {
   341 		if ( current_user_can( 'switch_themes' ) ) {
   388 		if ( current_user_can( 'switch_themes' ) )
   342 			echo '<a href="themes.php" class="button rbutton">' . __('Change Theme') . '</a>';
   389 			printf( __('Theme <span class="b"><a href="themes.php">%1$s</a></span>'), $theme->display('Name') );
   343 			printf( __('Theme <span class="b"><a href="themes.php">%1$s</a></span>'), $ct->title );
   390 		else
   344 		} else {
   391 			printf( __('Theme <span class="b">%1$s</span>'), $theme->display('Name') );
   345 			printf( __('Theme <span class="b">%1$s</span>'), $ct->title );
       
   346 		}
       
   347 	}
   392 	}
   348 	echo '</p>';
   393 	echo '</p>';
       
   394 
       
   395 	// Check if search engines are blocked.
       
   396 	if ( !is_network_admin() && !is_user_admin() && current_user_can('manage_options') && '1' != get_option('blog_public') ) {
       
   397 		$title = apply_filters('privacy_on_link_title', __('Your site is asking search engines not to index its content') );
       
   398 		$content = apply_filters('privacy_on_link_text', __('Search Engines Blocked') );
       
   399 
       
   400 		echo "<p><a href='options-privacy.php' title='$title'>$content</a></p>";
       
   401 	}
   349 
   402 
   350 	update_right_now_message();
   403 	update_right_now_message();
   351 
   404 
   352 	echo "\n\t".'<br class="clear" /></div>';
   405 	echo "\n\t".'<br class="clear" /></div>';
   353 	do_action( 'rightnow_end' );
   406 	do_action( 'rightnow_end' );
   354 	do_action( 'activity_box_end' );
   407 	do_action( 'activity_box_end' );
   355 }
   408 }
   356 
   409 
       
   410 function wp_network_dashboard_right_now() {
       
   411 	$actions = array();
       
   412 	if ( current_user_can('create_sites') )
       
   413 		$actions['create-site'] = '<a href="' . network_admin_url('site-new.php') . '">' . __( 'Create a New Site' ) . '</a>';
       
   414 	if ( current_user_can('create_users') )
       
   415 		$actions['create-user'] = '<a href="' . network_admin_url('user-new.php') . '">' . __( 'Create a New User' ) . '</a>';
       
   416 
       
   417 	$c_users = get_user_count();
       
   418 	$c_blogs = get_blog_count();
       
   419 
       
   420 	$user_text = sprintf( _n( '%s user', '%s users', $c_users ), number_format_i18n( $c_users ) );
       
   421 	$blog_text = sprintf( _n( '%s site', '%s sites', $c_blogs ), number_format_i18n( $c_blogs ) );
       
   422 
       
   423 	$sentence = sprintf( __( 'You have %1$s and %2$s.' ), $blog_text, $user_text );
       
   424 
       
   425 	if ( $actions ) {
       
   426 		echo '<ul class="subsubsub">';
       
   427 		foreach ( $actions as $class => $action ) {
       
   428 			 $actions[ $class ] = "\t<li class='$class'>$action";
       
   429 		}
       
   430 		echo implode( " |</li>\n", $actions ) . "</li>\n";
       
   431 		echo '</ul>';
       
   432 	}
       
   433 ?>
       
   434 	<br class="clear" />
       
   435 
       
   436 	<p class="youhave"><?php echo $sentence; ?></p>
       
   437 	<?php do_action( 'wpmuadminresult', '' ); ?>
       
   438 
       
   439 	<form action="<?php echo network_admin_url('users.php'); ?>" method="get">
       
   440 		<p>
       
   441 			<input type="search" name="s" value="" size="30" autocomplete="off" />
       
   442 			<?php submit_button( __( 'Search Users' ), 'button', 'submit', false, array( 'id' => 'submit_users' ) ); ?>
       
   443 		</p>
       
   444 	</form>
       
   445 
       
   446 	<form action="<?php echo network_admin_url('sites.php'); ?>" method="get">
       
   447 		<p>
       
   448 			<input type="search" name="s" value="" size="30" autocomplete="off" />
       
   449 			<?php submit_button( __( 'Search Sites' ), 'button', 'submit', false, array( 'id' => 'submit_sites' ) ); ?>
       
   450 		</p>
       
   451 	</form>
       
   452 <?php
       
   453 	do_action( 'mu_rightnow_end' );
       
   454 	do_action( 'mu_activity_box_end' );
       
   455 }
       
   456 
   357 function wp_dashboard_quick_press() {
   457 function wp_dashboard_quick_press() {
       
   458 	global $post_ID;
       
   459 
   358 	$drafts = false;
   460 	$drafts = false;
   359 	if ( 'post' === strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['action'] ) && 0 === strpos( $_POST['action'], 'post-quickpress' ) && (int) $_POST['post_ID'] ) {
   461 	if ( 'post' === strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['action'] ) && 0 === strpos( $_POST['action'], 'post-quickpress' ) && (int) $_POST['post_ID'] ) {
   360 		$view = get_permalink( $_POST['post_ID'] );
   462 		$view = get_permalink( $_POST['post_ID'] );
   361 		$edit = esc_url( get_edit_post_link( $_POST['post_ID'] ) );
   463 		$edit = esc_url( get_edit_post_link( $_POST['post_ID'] ) );
   362 		if ( 'post-quickpress-publish' == $_POST['action'] ) {
   464 		if ( 'post-quickpress-publish' == $_POST['action'] ) {
   363 			if ( current_user_can('publish_posts') )
   465 			if ( current_user_can('publish_posts') )
   364 				printf( '<div class="message"><p>' . __( 'Post Published. <a href="%s">View post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( $view ), $edit );
   466 				printf( '<div class="updated"><p>' . __( 'Post published. <a href="%s">View post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( $view ), $edit );
   365 			else
   467 			else
   366 				printf( '<div class="message"><p>' . __( 'Post submitted. <a href="%s">Preview post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( add_query_arg( 'preview', 1, $view ) ), $edit );
   468 				printf( '<div class="updated"><p>' . __( 'Post submitted. <a href="%s">Preview post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( add_query_arg( 'preview', 1, $view ) ), $edit );
   367 		} else {
   469 		} else {
   368 			printf( '<div class="message"><p>' . __( 'Draft Saved. <a href="%s">Preview post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( add_query_arg( 'preview', 1, $view ) ), $edit );
   470 			printf( '<div class="updated"><p>' . __( 'Draft saved. <a href="%s">Preview post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( add_query_arg( 'preview', 1, $view ) ), $edit );
   369 			$drafts_query = new WP_Query( array(
   471 			$drafts_query = new WP_Query( array(
   370 				'post_type' => 'post',
   472 				'post_type' => 'post',
   371 				'post_status' => 'draft',
   473 				'post_status' => 'draft',
   372 				'author' => $GLOBALS['current_user']->ID,
   474 				'author' => $GLOBALS['current_user']->ID,
   373 				'posts_per_page' => 1,
   475 				'posts_per_page' => 1,
   376 			) );
   478 			) );
   377 
   479 
   378 			if ( $drafts_query->posts )
   480 			if ( $drafts_query->posts )
   379 				$drafts =& $drafts_query->posts;
   481 				$drafts =& $drafts_query->posts;
   380 		}
   482 		}
   381 		printf('<p class="textright">' . __('You can also try %s, easy blogging from anywhere on the Web.') . '</p>', '<a href="tools.php">' . __('Press This') . '</a>' );
   483 		printf('<p class="textright">' . __('You can also try %s, easy blogging from anywhere on the Web.') . '</p>', '<a href="' . esc_url( admin_url( 'tools.php' ) ) . '">' . __('Press This') . '</a>' );
   382 		$_REQUEST = array(); // hack for get_default_post_to_edit()
   484 		$_REQUEST = array(); // hack for get_default_post_to_edit()
   383 	}
   485 	}
   384 
   486 
   385 	$post = get_default_post_to_edit();
   487 	/* Check if a new auto-draft (= no new post_ID) is needed or if the old can be used */
       
   488 	$last_post_id = (int) get_user_option( 'dashboard_quick_press_last_post_id' ); // Get the last post_ID
       
   489 	if ( $last_post_id ) {
       
   490 		$post = get_post( $last_post_id );
       
   491 		if ( empty( $post ) || $post->post_status != 'auto-draft' ) { // auto-draft doesn't exists anymore
       
   492 			$post = get_default_post_to_edit('post', true);
       
   493 			update_user_option( (int) $GLOBALS['current_user']->ID, 'dashboard_quick_press_last_post_id', (int) $post->ID ); // Save post_ID
       
   494 		} else {
       
   495 			$post->post_title = ''; // Remove the auto draft title
       
   496 		}
       
   497 	} else {
       
   498 		$post = get_default_post_to_edit('post', true);
       
   499 		update_user_option( (int) $GLOBALS['current_user']->ID, 'dashboard_quick_press_last_post_id', (int) $post->ID ); // Save post_ID
       
   500 	}
       
   501 
       
   502 	$post_ID = (int) $post->ID;
   386 ?>
   503 ?>
   387 
   504 
   388 	<form name="post" action="<?php echo esc_url( admin_url( 'post.php' ) ); ?>" method="post" id="quick-press">
   505 	<form name="post" action="<?php echo esc_url( admin_url( 'post.php' ) ); ?>" method="post" id="quick-press">
   389 		<h4 id="quick-post-title"><label for="title"><?php _e('Title') ?></label></h4>
   506 		<h4 id="quick-post-title"><label for="title"><?php _e('Title') ?></label></h4>
   390 		<div class="input-text-wrap">
   507 		<div class="input-text-wrap">
   391 			<input type="text" name="post_title" id="title" tabindex="1" autocomplete="off" value="<?php echo esc_attr( $post->post_title ); ?>" />
   508 			<input type="text" name="post_title" id="title" tabindex="1" autocomplete="off" value="<?php echo esc_attr( $post->post_title ); ?>" />
   392 		</div>
   509 		</div>
   393 
   510 
   394 		<?php if ( current_user_can( 'upload_files' ) ) : ?>
   511 		<?php if ( current_user_can( 'upload_files' ) ) : ?>
   395 		<div id="media-buttons" class="hide-if-no-js">
   512 		<div id="wp-content-wrap" class="wp-editor-wrap hide-if-no-js wp-media-buttons">
   396 			<?php do_action( 'media_buttons' ); ?>
   513 			<?php do_action( 'media_buttons', 'content' ); ?>
   397 		</div>
   514 		</div>
   398 		<?php endif; ?>
   515 		<?php endif; ?>
   399 
   516 
   400 		<h4 id="content-label"><label for="content"><?php _e('Content') ?></label></h4>
   517 		<h4 id="content-label"><label for="content"><?php _e('Content') ?></label></h4>
   401 		<div class="textarea-wrap">
   518 		<div class="textarea-wrap">
   402 			<textarea name="content" id="content" class="mceEditor" rows="3" cols="15" tabindex="2"><?php echo $post->post_content; ?></textarea>
   519 			<textarea name="content" id="content" class="mceEditor" rows="3" cols="15" tabindex="2"><?php echo esc_textarea( $post->post_content ); ?></textarea>
   403 		</div>
   520 		</div>
   404 
   521 
   405 		<script type="text/javascript">edCanvas = document.getElementById('content');edInsertContent = null;</script>
   522 		<script type="text/javascript">edCanvas = document.getElementById('content');edInsertContent = null;</script>
   406 
   523 
   407 		<h4><label for="tags-input"><?php _e('Tags') ?></label></h4>
   524 		<h4><label for="tags-input"><?php _e('Tags') ?></label></h4>
   409 			<input type="text" name="tags_input" id="tags-input" tabindex="3" value="<?php echo get_tags_to_edit( $post->ID ); ?>" />
   526 			<input type="text" name="tags_input" id="tags-input" tabindex="3" value="<?php echo get_tags_to_edit( $post->ID ); ?>" />
   410 		</div>
   527 		</div>
   411 
   528 
   412 		<p class="submit">
   529 		<p class="submit">
   413 			<input type="hidden" name="action" id="quickpost-action" value="post-quickpress-save" />
   530 			<input type="hidden" name="action" id="quickpost-action" value="post-quickpress-save" />
   414 			<input type="hidden" name="quickpress_post_ID" value="<?php echo (int) $post->ID; ?>" />
   531 			<input type="hidden" name="post_ID" value="<?php echo $post_ID; ?>" />
       
   532 			<input type="hidden" name="post_type" value="post" />
   415 			<?php wp_nonce_field('add-post'); ?>
   533 			<?php wp_nonce_field('add-post'); ?>
   416 			<input type="submit" name="save" id="save-post" class="button" tabindex="4" value="<?php esc_attr_e('Save Draft'); ?>" />
   534 			<?php submit_button( __( 'Save Draft' ), 'button', 'save', false, array( 'id' => 'save-post', 'tabindex'=> 4 ) ); ?>
   417 			<input type="reset" value="<?php esc_attr_e( 'Reset' ); ?>" class="button" />
   535 			<input type="reset" value="<?php esc_attr_e( 'Reset' ); ?>" class="button" />
   418 			<?php if ( current_user_can('publish_posts') ) { ?>
   536 			<span id="publishing-action">
   419 			<input type="submit" name="publish" id="publish" accesskey="p" tabindex="5" class="button-primary" value="<?php esc_attr_e('Publish'); ?>" />
   537 				<input type="submit" name="publish" id="publish" accesskey="p" tabindex="5" class="button-primary" value="<?php current_user_can('publish_posts') ? esc_attr_e('Publish') : esc_attr_e('Submit for Review'); ?>" />
   420 			<?php } else { ?>
   538 				<img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
   421 			<input type="submit" name="publish" id="publish" accesskey="p" tabindex="5" class="button-primary" value="<?php esc_attr_e('Submit for Review'); ?>" />
   539 			</span>
   422 			<?php } ?>
       
   423 			<br class="clear" />
   540 			<br class="clear" />
   424 		</p>
   541 		</p>
   425 
   542 
   426 	</form>
   543 	</form>
   427 
   544 
   455 		}
   572 		}
   456 ?>
   573 ?>
   457 	<ul>
   574 	<ul>
   458 		<li><?php echo join( "</li>\n<li>", $list ); ?></li>
   575 		<li><?php echo join( "</li>\n<li>", $list ); ?></li>
   459 	</ul>
   576 	</ul>
   460 	<p class="textright"><a href="edit.php?post_status=draft" class="button"><?php _e('View all'); ?></a></p>
   577 	<p class="textright"><a href="edit.php?post_status=draft" ><?php _e('View all'); ?></a></p>
   461 <?php
   578 <?php
   462 	} else {
   579 	} else {
   463 		_e('There are no drafts at the moment');
   580 		_e('There are no drafts at the moment');
   464 	}
   581 	}
   465 }
   582 }
   466 
   583 
   467 /**
   584 /**
   468  * Display recent comments dashboard widget content.
   585  * Display recent comments dashboard widget content.
   469  *
   586  *
   470  * @since unknown
   587  * @since 2.5.0
   471  */
   588  */
   472 function wp_dashboard_recent_comments() {
   589 function wp_dashboard_recent_comments() {
   473 	global $wpdb;
   590 	global $wpdb;
   474 
       
   475 	if ( current_user_can('edit_posts') )
       
   476 		$allowed_states = array('0', '1');
       
   477 	else
       
   478 		$allowed_states = array('1');
       
   479 
   591 
   480 	// Select all comment types and filter out spam later for better query performance.
   592 	// Select all comment types and filter out spam later for better query performance.
   481 	$comments = array();
   593 	$comments = array();
   482 	$start = 0;
   594 	$start = 0;
   483 
   595 
   484 	while ( count( $comments ) < 5 && $possible = $wpdb->get_results( "SELECT * FROM $wpdb->comments c LEFT JOIN $wpdb->posts p ON c.comment_post_ID = p.ID WHERE p.post_status != 'trash' ORDER BY c.comment_date_gmt DESC LIMIT $start, 50" ) ) {
   596 	$widgets = get_option( 'dashboard_widget_options' );
   485 
   597 	$total_items = isset( $widgets['dashboard_recent_comments'] ) && isset( $widgets['dashboard_recent_comments']['items'] )
       
   598 		? absint( $widgets['dashboard_recent_comments']['items'] ) : 5;
       
   599 
       
   600 	$comments_query = array( 'number' => $total_items * 5, 'offset' => 0 );
       
   601 	if ( ! current_user_can( 'edit_posts' ) )
       
   602 		$comments_query['status'] = 'approve';
       
   603 
       
   604 	while ( count( $comments ) < $total_items && $possible = get_comments( $comments_query ) ) {
   486 		foreach ( $possible as $comment ) {
   605 		foreach ( $possible as $comment ) {
   487 			if ( count( $comments ) >= 5 )
   606 			if ( ! current_user_can( 'read_post', $comment->comment_post_ID ) )
   488 				break;
   607 				continue;
   489 			if ( in_array( $comment->comment_approved, $allowed_states ) )
   608 			$comments[] = $comment;
   490 				$comments[] = $comment;
   609 			if ( count( $comments ) == $total_items )
   491 		}
   610 				break 2;
   492 
   611 		}
   493 		$start = $start + 50;
   612 		$comments_query['offset'] += $comments_query['number'];
   494 	}
   613 		$comments_query['number'] = $total_items * 10;
   495 
   614 	}
   496 	if ( $comments ) :
   615 
   497 ?>
   616 	if ( $comments ) {
   498 
   617 		echo '<div id="the-comment-list" class="list:comment">';
   499 		<div id="the-comment-list" class="list:comment">
       
   500 <?php
       
   501 		foreach ( $comments as $comment )
   618 		foreach ( $comments as $comment )
   502 			_wp_dashboard_recent_comments_row( $comment );
   619 			_wp_dashboard_recent_comments_row( $comment );
   503 ?>
   620 		echo '</div>';
   504 
   621 
   505 		</div>
   622 		if ( current_user_can('edit_posts') )
   506 
   623 			_get_list_table('WP_Comments_List_Table')->views();
   507 <?php
       
   508 		if ( current_user_can('edit_posts') ) { ?>
       
   509 			<p class="textright"><a href="edit-comments.php" class="button"><?php _e('View all'); ?></a></p>
       
   510 <?php	}
       
   511 
   624 
   512 		wp_comment_reply( -1, false, 'dashboard', false );
   625 		wp_comment_reply( -1, false, 'dashboard', false );
   513 		wp_comment_trashnotice();
   626 		wp_comment_trashnotice();
   514 
   627 	} else {
   515 	else :
   628 		echo '<p>' . __( 'No comments yet.' ) . '</p>';
   516 ?>
   629 	}
   517 
       
   518 	<p><?php _e( 'No comments yet.' ); ?></p>
       
   519 
       
   520 <?php
       
   521 	endif; // $comments;
       
   522 }
   630 }
   523 
   631 
   524 function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) {
   632 function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) {
   525 	$GLOBALS['comment'] =& $comment;
   633 	$GLOBALS['comment'] =& $comment;
   526 
   634 
   528 	$comment_post_title = strip_tags(get_the_title( $comment->comment_post_ID ));
   636 	$comment_post_title = strip_tags(get_the_title( $comment->comment_post_ID ));
   529 	$comment_post_link = "<a href='$comment_post_url'>$comment_post_title</a>";
   637 	$comment_post_link = "<a href='$comment_post_url'>$comment_post_title</a>";
   530 	$comment_link = '<a class="comment-link" href="' . esc_url(get_comment_link()) . '">#</a>';
   638 	$comment_link = '<a class="comment-link" href="' . esc_url(get_comment_link()) . '">#</a>';
   531 
   639 
   532 	$actions_string = '';
   640 	$actions_string = '';
   533 	if ( current_user_can('edit_post', $comment->comment_post_ID) ) {
   641 	if ( current_user_can( 'edit_comment', $comment->comment_ID ) ) {
   534 		// preorder it: Approve | Reply | Edit | Spam | Trash
   642 		// preorder it: Approve | Reply | Edit | Spam | Trash
   535 		$actions = array(
   643 		$actions = array(
   536 			'approve' => '', 'unapprove' => '',
   644 			'approve' => '', 'unapprove' => '',
   537 			'reply' => '',
   645 			'reply' => '',
   538 			'edit' => '',
   646 			'edit' => '',
   547 		$unapprove_url = esc_url( "comment.php?action=unapprovecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$approve_nonce" );
   655 		$unapprove_url = esc_url( "comment.php?action=unapprovecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$approve_nonce" );
   548 		$spam_url = esc_url( "comment.php?action=spamcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" );
   656 		$spam_url = esc_url( "comment.php?action=spamcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" );
   549 		$trash_url = esc_url( "comment.php?action=trashcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" );
   657 		$trash_url = esc_url( "comment.php?action=trashcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" );
   550 		$delete_url = esc_url( "comment.php?action=deletecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" );
   658 		$delete_url = esc_url( "comment.php?action=deletecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" );
   551 
   659 
   552 		$actions['approve'] = "<a href='$approve_url' class='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=approved vim-a' title='" . __( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a>';
   660 		$actions['approve'] = "<a href='$approve_url' class='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=approved vim-a' title='" . esc_attr__( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a>';
   553 		$actions['unapprove'] = "<a href='$unapprove_url' class='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=unapproved vim-u' title='" . __( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>';
   661 		$actions['unapprove'] = "<a href='$unapprove_url' class='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=unapproved vim-u' title='" . esc_attr__( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>';
   554 		$actions['edit'] = "<a href='comment.php?action=editcomment&amp;c={$comment->comment_ID}' title='" . __('Edit comment') . "'>". __('Edit') . '</a>';
   662 		$actions['edit'] = "<a href='comment.php?action=editcomment&amp;c={$comment->comment_ID}' title='" . esc_attr__('Edit comment') . "'>". __('Edit') . '</a>';
   555 		$actions['reply'] = '<a onclick="commentReply.open(\''.$comment->comment_ID.'\',\''.$comment->comment_post_ID.'\');return false;" class="vim-r hide-if-no-js" title="'.__('Reply to this comment').'" href="#">' . __('Reply') . '</a>';
   663 		$actions['reply'] = '<a onclick="commentReply.open(\''.$comment->comment_ID.'\',\''.$comment->comment_post_ID.'\');return false;" class="vim-r hide-if-no-js" title="'.esc_attr__('Reply to this comment').'" href="#">' . __('Reply') . '</a>';
   556 		$actions['spam'] = "<a href='$spam_url' class='delete:the-comment-list:comment-$comment->comment_ID::spam=1 vim-s vim-destructive' title='" . __( 'Mark this comment as spam' ) . "'>" . /* translators: mark as spam link */  _x( 'Spam', 'verb' ) . '</a>';
   664 		$actions['spam'] = "<a href='$spam_url' class='delete:the-comment-list:comment-$comment->comment_ID::spam=1 vim-s vim-destructive' title='" . esc_attr__( 'Mark this comment as spam' ) . "'>" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . '</a>';
   557 		if ( !EMPTY_TRASH_DAYS )
   665 		if ( !EMPTY_TRASH_DAYS )
   558 			$actions['delete'] = "<a href='$delete_url' class='delete:the-comment-list:comment-$comment->comment_ID::trash=1 delete vim-d vim-destructive'>" . __('Delete Permanently') . '</a>';
   666 			$actions['delete'] = "<a href='$delete_url' class='delete:the-comment-list:comment-$comment->comment_ID::trash=1 delete vim-d vim-destructive'>" . __('Delete Permanently') . '</a>';
   559 		else
   667 		else
   560 			$actions['trash'] = "<a href='$trash_url' class='delete:the-comment-list:comment-$comment->comment_ID::trash=1 delete vim-d vim-destructive' title='" . __( 'Move this comment to the trash' ) . "'>" . _x('Trash', 'verb') . '</a>';
   668 			$actions['trash'] = "<a href='$trash_url' class='delete:the-comment-list:comment-$comment->comment_ID::trash=1 delete vim-d vim-destructive' title='" . esc_attr__( 'Move this comment to the trash' ) . "'>" . _x('Trash', 'verb') . '</a>';
   561 
   669 
   562 		$actions = apply_filters( 'comment_row_actions', array_filter($actions), $comment );
   670 		$actions = apply_filters( 'comment_row_actions', array_filter($actions), $comment );
   563 
   671 
   564 		$i = 0;
   672 		$i = 0;
   565 		foreach ( $actions as $action => $link ) {
   673 		foreach ( $actions as $action => $link ) {
   580 			<?php if ( !$comment->comment_type || 'comment' == $comment->comment_type ) : ?>
   688 			<?php if ( !$comment->comment_type || 'comment' == $comment->comment_type ) : ?>
   581 
   689 
   582 			<?php echo get_avatar( $comment, 50 ); ?>
   690 			<?php echo get_avatar( $comment, 50 ); ?>
   583 
   691 
   584 			<div class="dashboard-comment-wrap">
   692 			<div class="dashboard-comment-wrap">
   585 			<h4 class="comment-meta"><?php printf( __( 'From %1$s on %2$s%3$s' ), '<cite class="comment-author">' . get_comment_author_link() . '</cite>', $comment_post_link.' '.$comment_link, ' <span class="approve">' . __( '[Pending]' ) . '</span>' ); ?></h4>
   693 			<h4 class="comment-meta">
       
   694 				<?php printf( /* translators: 1: comment author, 2: post link, 3: notification if the comment is pending */__( 'From %1$s on %2$s%3$s' ),
       
   695 					'<cite class="comment-author">' . get_comment_author_link() . '</cite>', $comment_post_link.' '.$comment_link, ' <span class="approve">' . __( '[Pending]' ) . '</span>' ); ?>
       
   696 			</h4>
   586 
   697 
   587 			<?php
   698 			<?php
   588 			else :
   699 			else :
   589 				switch ( $comment->comment_type ) :
   700 				switch ( $comment->comment_type ) :
   590 				case 'pingback' :
   701 				case 'pingback' :
   609 			</div>
   720 			</div>
   610 		</div>
   721 		</div>
   611 <?php
   722 <?php
   612 }
   723 }
   613 
   724 
       
   725 /**
       
   726  * The recent comments dashboard widget control.
       
   727  *
       
   728  * @since 3.0.0
       
   729  */
       
   730 function wp_dashboard_recent_comments_control() {
       
   731 	if ( !$widget_options = get_option( 'dashboard_widget_options' ) )
       
   732 		$widget_options = array();
       
   733 
       
   734 	if ( !isset($widget_options['dashboard_recent_comments']) )
       
   735 		$widget_options['dashboard_recent_comments'] = array();
       
   736 
       
   737 	if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-recent-comments']) ) {
       
   738 		$number = absint( $_POST['widget-recent-comments']['items'] );
       
   739 		$widget_options['dashboard_recent_comments']['items'] = $number;
       
   740 		update_option( 'dashboard_widget_options', $widget_options );
       
   741 	}
       
   742 
       
   743 	$number = isset( $widget_options['dashboard_recent_comments']['items'] ) ? (int) $widget_options['dashboard_recent_comments']['items'] : '';
       
   744 
       
   745 	echo '<p><label for="comments-number">' . __('Number of comments to show:') . '</label>';
       
   746 	echo '<input id="comments-number" name="widget-recent-comments[items]" type="text" value="' . $number . '" size="3" /></p>';
       
   747 }
       
   748 
   614 function wp_dashboard_incoming_links() {
   749 function wp_dashboard_incoming_links() {
   615 	echo '<p class="widget-loading hide-if-no-js">' . __( 'Loading&#8230;' ) . '</p><p class="describe hide-if-js">' . __('This widget requires JavaScript.') . '</p>';
   750 	wp_dashboard_cached_rss_widget( 'dashboard_incoming_links', 'wp_dashboard_incoming_links_output' );
   616 }
   751 }
   617 
   752 
   618 /**
   753 /**
   619  * Display incoming links dashboard widget content.
   754  * Display incoming links dashboard widget content.
   620  *
   755  *
   621  * @since unknown
   756  * @since 2.5.0
   622  */
   757  */
   623 function wp_dashboard_incoming_links_output() {
   758 function wp_dashboard_incoming_links_output() {
   624 	$widgets = get_option( 'dashboard_widget_options' );
   759 	$widgets = get_option( 'dashboard_widget_options' );
   625 	@extract( @$widgets['dashboard_incoming_links'], EXTR_SKIP );
   760 	@extract( @$widgets['dashboard_incoming_links'], EXTR_SKIP );
   626 	$rss = fetch_feed( $url );
   761 	$rss = fetch_feed( $url );
   634 		return;
   769 		return;
   635 	}
   770 	}
   636 
   771 
   637 	if ( !$rss->get_item_quantity() ) {
   772 	if ( !$rss->get_item_quantity() ) {
   638 		echo '<p>' . __('This dashboard widget queries <a href="http://blogsearch.google.com/">Google Blog Search</a> so that when another blog links to your site it will show up here. It has found no incoming links&hellip; yet. It&#8217;s okay &#8212; there is no rush.') . "</p>\n";
   773 		echo '<p>' . __('This dashboard widget queries <a href="http://blogsearch.google.com/">Google Blog Search</a> so that when another blog links to your site it will show up here. It has found no incoming links&hellip; yet. It&#8217;s okay &#8212; there is no rush.') . "</p>\n";
   639 		$rss->__destruct(); 
   774 		$rss->__destruct();
   640 		unset($rss);
   775 		unset($rss);
   641 		return;
   776 		return;
   642 	}
   777 	}
   643 
   778 
   644 	echo "<ul>\n";
   779 	echo "<ul>\n";
   676 			$text = __( '%1$s linked here <a href="%2$s">saying</a>, "%3$s"' );
   811 			$text = __( '%1$s linked here <a href="%2$s">saying</a>, "%3$s"' );
   677 		else
   812 		else
   678 			/* translators: incoming links feed, %1$s is other person, %3$s is content */
   813 			/* translators: incoming links feed, %1$s is other person, %3$s is content */
   679 			$text = __( '%1$s linked here saying, "%3$s"' );
   814 			$text = __( '%1$s linked here saying, "%3$s"' );
   680 
   815 
   681 		if ( $show_date ) {
   816 		if ( !empty($show_date) ) {
   682 			if ( $show_author || $show_summary )
   817 			if ( !empty($show_author) || !empty($show_summary) )
   683 				/* translators: incoming links feed, %4$s is the date */
   818 				/* translators: incoming links feed, %4$s is the date */
   684 				$text .= ' ' . __( 'on %4$s' );
   819 				$text .= ' ' . __( 'on %4$s' );
   685 			$date = esc_html( strip_tags( $item->get_date() ) );
   820 			$date = esc_html( strip_tags( $item->get_date() ) );
   686 			$date = strtotime( $date );
   821 			$date = strtotime( $date );
   687 			$date = gmdate( get_option( 'date_format' ), $date );
   822 			$date = gmdate( get_option( 'date_format' ), $date );
   689 
   824 
   690 		echo "\t<li>" . sprintf( $text, $publisher, $link, $content, $date ) . "</li>\n";
   825 		echo "\t<li>" . sprintf( $text, $publisher, $link, $content, $date ) . "</li>\n";
   691 	}
   826 	}
   692 
   827 
   693 	echo "</ul>\n";
   828 	echo "</ul>\n";
   694 	$rss->__destruct(); 
   829 	$rss->__destruct();
   695 	unset($rss);
   830 	unset($rss);
   696 }
   831 }
   697 
   832 
   698 function wp_dashboard_incoming_links_control() {
   833 function wp_dashboard_incoming_links_control() {
   699 	wp_dashboard_rss_control( 'dashboard_incoming_links', array( 'title' => false, 'show_summary' => false, 'show_author' => false ) );
   834 	wp_dashboard_rss_control( 'dashboard_incoming_links', array( 'title' => false, 'show_summary' => false, 'show_author' => false ) );
   700 }
   835 }
   701 
   836 
   702 function wp_dashboard_primary() {
   837 function wp_dashboard_primary() {
   703 	echo '<p class="widget-loading hide-if-no-js">' . __( 'Loading&#8230;' ) . '</p><p class="describe hide-if-js">' . __('This widget requires JavaScript.') . '</p>';
   838 	wp_dashboard_cached_rss_widget( 'dashboard_primary', 'wp_dashboard_rss_output' );
   704 }
   839 }
   705 
   840 
   706 function wp_dashboard_primary_control() {
   841 function wp_dashboard_primary_control() {
   707 	wp_dashboard_rss_control( 'dashboard_primary' );
   842 	wp_dashboard_rss_control( 'dashboard_primary' );
   708 }
   843 }
   709 
   844 
   710 /**
   845 /**
   711  * {@internal Missing Short Description}}
   846  * {@internal Missing Short Description}}
   712  *
   847  *
   713  * @since unknown
   848  * @since 2.5.0
   714  *
   849  *
   715  * @param int $widget_id
   850  * @param string $widget_id
   716  */
   851  */
   717 function wp_dashboard_rss_output( $widget_id ) {
   852 function wp_dashboard_rss_output( $widget_id ) {
   718 	$widgets = get_option( 'dashboard_widget_options' );
   853 	$widgets = get_option( 'dashboard_widget_options' );
   719 	echo '<div class="rss-widget">';
   854 	echo '<div class="rss-widget">';
   720 	wp_widget_rss_output( $widgets[$widget_id] );
   855 	wp_widget_rss_output( $widgets[$widget_id] );
   721 	echo "</div>";
   856 	echo "</div>";
   722 }
   857 }
   723 
   858 
   724 function wp_dashboard_secondary() {
   859 function wp_dashboard_secondary() {
   725 	echo '<p class="widget-loading hide-if-no-js">' . __( 'Loading&#8230;' ) . '</p><p class="describe hide-if-js">' . __('This widget requires JavaScript.') . '</p>';
   860 	wp_dashboard_cached_rss_widget( 'dashboard_secondary', 'wp_dashboard_secondary_output' );
   726 }
   861 }
   727 
   862 
   728 function wp_dashboard_secondary_control() {
   863 function wp_dashboard_secondary_control() {
   729 	wp_dashboard_rss_control( 'dashboard_secondary' );
   864 	wp_dashboard_rss_control( 'dashboard_secondary' );
   730 }
   865 }
   731 
   866 
   732 /**
   867 /**
   733  * Display secondary dashboard RSS widget feed.
   868  * Display secondary dashboard RSS widget feed.
   734  *
   869  *
   735  * @since unknown
   870  * @since 2.5.0
   736  *
   871  *
   737  * @return unknown
   872  * @return unknown
   738  */
   873  */
   739 function wp_dashboard_secondary_output() {
   874 function wp_dashboard_secondary_output() {
   740 	$widgets = get_option( 'dashboard_widget_options' );
   875 	$widgets = get_option( 'dashboard_widget_options' );
   746 			echo '<div class="rss-widget"><p>';
   881 			echo '<div class="rss-widget"><p>';
   747 			printf(__('<strong>RSS Error</strong>: %s'), $rss->get_error_message());
   882 			printf(__('<strong>RSS Error</strong>: %s'), $rss->get_error_message());
   748 			echo '</p></div>';
   883 			echo '</p></div>';
   749 		}
   884 		}
   750 	} elseif ( !$rss->get_item_quantity() ) {
   885 	} elseif ( !$rss->get_item_quantity() ) {
   751 		$rss->__destruct(); 
   886 		$rss->__destruct();
   752 		unset($rss);
   887 		unset($rss);
   753 		return false;
   888 		return false;
   754 	} else {
   889 	} else {
   755 		echo '<div class="rss-widget">';
   890 		echo '<div class="rss-widget">';
   756 		wp_widget_rss_output( $rss, $widgets['dashboard_secondary'] );
   891 		wp_widget_rss_output( $rss, $widgets['dashboard_secondary'] );
   757 		echo '</div>';
   892 		echo '</div>';
   758 		$rss->__destruct(); 
   893 		$rss->__destruct();
   759 		unset($rss);
   894 		unset($rss);
   760 	}
   895 	}
   761 }
   896 }
   762 
   897 
   763 function wp_dashboard_plugins() {
   898 function wp_dashboard_plugins() {
   764 	echo '<p class="widget-loading hide-if-no-js">' . __( 'Loading&#8230;' ) . '</p><p class="describe hide-if-js">' . __('This widget requires JavaScript.') . '</p>';
   899 	wp_dashboard_cached_rss_widget( 'dashboard_plugins', 'wp_dashboard_plugins_output', array(
       
   900 		'http://wordpress.org/extend/plugins/rss/browse/popular/',
       
   901 		'http://wordpress.org/extend/plugins/rss/browse/new/'
       
   902 	) );
   765 }
   903 }
   766 
   904 
   767 /**
   905 /**
   768  * Display plugins most popular, newest plugins, and recently updated widget text.
   906  * Display plugins most popular, newest plugins, and recently updated widget text.
   769  *
   907  *
   770  * @since unknown
   908  * @since 2.5.0
   771  */
   909  */
   772 function wp_dashboard_plugins_output() {
   910 function wp_dashboard_plugins_output() {
   773 	$popular = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/popular/' );
   911 	$popular = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/popular/' );
   774 	$new     = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/new/' );
   912 	$new     = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/new/' );
   775 	$updated = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/updated/' );
       
   776 
   913 
   777 	if ( false === $plugin_slugs = get_transient( 'plugin_slugs' ) ) {
   914 	if ( false === $plugin_slugs = get_transient( 'plugin_slugs' ) ) {
   778 		$plugin_slugs = array_keys( get_plugins() );
   915 		$plugin_slugs = array_keys( get_plugins() );
   779 		set_transient( 'plugin_slugs', $plugin_slugs, 86400 );
   916 		set_transient( 'plugin_slugs', $plugin_slugs, 86400 );
   780 	}
   917 	}
   781 
   918 
   782 	foreach ( array( 'popular' => __('Most Popular'), 'new' => __('Newest Plugins'), 'updated' => __('Recently Updated') ) as $feed => $label ) {
   919 	foreach ( array( 'popular' => __('Most Popular'), 'new' => __('Newest Plugins') ) as $feed => $label ) {
   783 		if ( is_wp_error($$feed) || !$$feed->get_item_quantity() )
   920 		if ( is_wp_error($$feed) || !$$feed->get_item_quantity() )
   784 			continue;
   921 			continue;
   785 
   922 
   786 		$items = $$feed->get_items(0, 5);
   923 		$items = $$feed->get_items(0, 5);
   787 
   924 
   837 							'&amp;TB_iframe=true&amp;width=600&amp;height=800';
   974 							'&amp;TB_iframe=true&amp;width=600&amp;height=800';
   838 
   975 
   839 		echo "<h4>$label</h4>\n";
   976 		echo "<h4>$label</h4>\n";
   840 		echo "<h5><a href='$link'>$title</a></h5>&nbsp;<span>(<a href='$ilink' class='thickbox' title='$title'>" . __( 'Install' ) . "</a>)</span>\n";
   977 		echo "<h5><a href='$link'>$title</a></h5>&nbsp;<span>(<a href='$ilink' class='thickbox' title='$title'>" . __( 'Install' ) . "</a>)</span>\n";
   841 		echo "<p>$description</p>\n";
   978 		echo "<p>$description</p>\n";
   842 		
   979 
   843 		$$feed->__destruct();
   980 		$$feed->__destruct();
   844 		unset($$feed);
   981 		unset($$feed);
   845 	}
   982 	}
   846 }
   983 }
   847 
   984 
   848 /**
   985 /**
   849  * Checks to see if all of the feed url in $check_urls are cached.
   986  * Checks to see if all of the feed url in $check_urls are cached.
   850  *
   987  *
   851  * If $check_urls is empty, look for the rss feed url found in the dashboard
   988  * If $check_urls is empty, look for the rss feed url found in the dashboard
   852  * widget optios of $widget_id. If cached, call $callback, a function that
   989  * widget options of $widget_id. If cached, call $callback, a function that
   853  * echoes out output for this widget. If not cache, echo a "Loading..." stub
   990  * echoes out output for this widget. If not cache, echo a "Loading..." stub
   854  * which is later replaced by AJAX call (see top of /wp-admin/index.php)
   991  * which is later replaced by AJAX call (see top of /wp-admin/index.php)
   855  *
   992  *
   856  * @since unknown
   993  * @since 2.5.0
   857  *
   994  *
   858  * @param int $widget_id
   995  * @param string $widget_id
   859  * @param callback $callback
   996  * @param callback $callback
   860  * @param array $check_urls RSS feeds
   997  * @param array $check_urls RSS feeds
   861  * @return bool False on failure. True on success.
   998  * @return bool False on failure. True on success.
   862  */
   999  */
   863 function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = array() ) {
  1000 function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = array() ) {
   864 	$loading = '<p class="widget-loading">' . __( 'Loading&#8230;' ) . '</p>';
  1001 	$loading = '<p class="widget-loading hide-if-no-js">' . __( 'Loading&#8230;' ) . '</p><p class="hide-if-js">' . __( 'This widget requires JavaScript.' ) . '</p>';
       
  1002 	$doing_ajax = ( defined('DOING_AJAX') && DOING_AJAX );
   865 
  1003 
   866 	if ( empty($check_urls) ) {
  1004 	if ( empty($check_urls) ) {
   867 		$widgets = get_option( 'dashboard_widget_options' );
  1005 		$widgets = get_option( 'dashboard_widget_options' );
   868 		if ( empty($widgets[$widget_id]['url']) ) {
  1006 		if ( empty($widgets[$widget_id]['url']) && ! $doing_ajax ) {
   869 			echo $loading;
  1007 			echo $loading;
   870 			return false;
  1008 			return false;
   871 		}
  1009 		}
   872 		$check_urls = array( $widgets[$widget_id]['url'] );
  1010 		$check_urls = array( $widgets[$widget_id]['url'] );
   873 	}
  1011 	}
   874 
  1012 
   875 	include_once ABSPATH . WPINC . '/class-feed.php';
  1013 	$cache_key = 'dash_' . md5( $widget_id );
   876 	foreach ( $check_urls as $check_url ) {
  1014 	if ( false !== ( $output = get_transient( $cache_key ) ) ) {
   877 		$cache = new WP_Feed_Cache_Transient('', md5($check_url), '');
  1015 		echo $output;
   878 		if ( ! $cache->load() ) {
  1016 		return true;
   879 			echo $loading;
  1017 	}
   880 			return false;
  1018 
   881 		}
  1019 	if ( ! $doing_ajax ) {
       
  1020 		echo $loading;
       
  1021 		return false;
   882 	}
  1022 	}
   883 
  1023 
   884 	if ( $callback && is_callable( $callback ) ) {
  1024 	if ( $callback && is_callable( $callback ) ) {
   885 		$args = array_slice( func_get_args(), 2 );
  1025 		$args = array_slice( func_get_args(), 2 );
   886 		array_unshift( $args, $widget_id );
  1026 		array_unshift( $args, $widget_id );
       
  1027 		ob_start();
   887 		call_user_func_array( $callback, $args );
  1028 		call_user_func_array( $callback, $args );
       
  1029 		set_transient( $cache_key, ob_get_flush(), 43200); // Default lifetime in cache of 12 hours (same as the feeds)
   888 	}
  1030 	}
   889 
  1031 
   890 	return true;
  1032 	return true;
   891 }
  1033 }
   892 
  1034 
   894 
  1036 
   895 // Calls widget_control callback
  1037 // Calls widget_control callback
   896 /**
  1038 /**
   897  * Calls widget control callback.
  1039  * Calls widget control callback.
   898  *
  1040  *
   899  * @since unknown
  1041  * @since 2.5.0
   900  *
  1042  *
   901  * @param int $widget_control_id Registered Widget ID.
  1043  * @param int $widget_control_id Registered Widget ID.
   902  */
  1044  */
   903 function wp_dashboard_trigger_widget_control( $widget_control_id = false ) {
  1045 function wp_dashboard_trigger_widget_control( $widget_control_id = false ) {
   904 	global $wp_dashboard_control_callbacks;
  1046 	global $wp_dashboard_control_callbacks;
   912  * The RSS dashboard widget control.
  1054  * The RSS dashboard widget control.
   913  *
  1055  *
   914  * Sets up $args to be used as input to wp_widget_rss_form(). Handles POST data
  1056  * Sets up $args to be used as input to wp_widget_rss_form(). Handles POST data
   915  * from RSS-type widgets.
  1057  * from RSS-type widgets.
   916  *
  1058  *
   917  * @since unknown
  1059  * @since 2.5.0
   918  *
  1060  *
   919  * @param string widget_id
  1061  * @param string $widget_id
   920  * @param array form_inputs
  1062  * @param array $form_inputs
   921  */
  1063  */
   922 function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) {
  1064 function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) {
   923 	if ( !$widget_options = get_option( 'dashboard_widget_options' ) )
  1065 	if ( !$widget_options = get_option( 'dashboard_widget_options' ) )
   924 		$widget_options = array();
  1066 		$widget_options = array();
   925 
  1067 
   930 	$widget_options[$widget_id]['number'] = $number;
  1072 	$widget_options[$widget_id]['number'] = $number;
   931 
  1073 
   932 	if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-rss'][$number]) ) {
  1074 	if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-rss'][$number]) ) {
   933 		$_POST['widget-rss'][$number] = stripslashes_deep( $_POST['widget-rss'][$number] );
  1075 		$_POST['widget-rss'][$number] = stripslashes_deep( $_POST['widget-rss'][$number] );
   934 		$widget_options[$widget_id] = wp_widget_rss_process( $_POST['widget-rss'][$number] );
  1076 		$widget_options[$widget_id] = wp_widget_rss_process( $_POST['widget-rss'][$number] );
   935 		// title is optional.  If black, fill it if possible
  1077 		// title is optional. If black, fill it if possible
   936 		if ( !$widget_options[$widget_id]['title'] && isset($_POST['widget-rss'][$number]['title']) ) {
  1078 		if ( !$widget_options[$widget_id]['title'] && isset($_POST['widget-rss'][$number]['title']) ) {
   937 			$rss = fetch_feed($widget_options[$widget_id]['url']);
  1079 			$rss = fetch_feed($widget_options[$widget_id]['url']);
   938 			if ( is_wp_error($rss) ) {
  1080 			if ( is_wp_error($rss) ) {
   939 				$widget_options[$widget_id]['title'] = htmlentities(__('Unknown Feed'));
  1081 				$widget_options[$widget_id]['title'] = htmlentities(__('Unknown Feed'));
   940 			} else {
  1082 			} else {
   941 				$widget_options[$widget_id]['title'] = htmlentities(strip_tags($rss->get_title()));	
  1083 				$widget_options[$widget_id]['title'] = htmlentities(strip_tags($rss->get_title()));
   942 				$rss->__destruct();
  1084 				$rss->__destruct();
   943 				unset($rss);				
  1085 				unset($rss);
   944 			}
  1086 			}
   945 		}
  1087 		}
   946 		update_option( 'dashboard_widget_options', $widget_options );
  1088 		update_option( 'dashboard_widget_options', $widget_options );
       
  1089 		$cache_key = 'dash_' . md5( $widget_id );
       
  1090 		delete_transient( $cache_key );
   947 	}
  1091 	}
   948 
  1092 
   949 	wp_widget_rss_form( $widget_options[$widget_id], $form_inputs );
  1093 	wp_widget_rss_form( $widget_options[$widget_id], $form_inputs );
   950 }
  1094 }
   951 
  1095 
       
  1096 // Display File upload quota on dashboard
       
  1097 function wp_dashboard_quota() {
       
  1098 	if ( !is_multisite() || !current_user_can('upload_files') || get_site_option( 'upload_space_check_disabled' ) )
       
  1099 		return true;
       
  1100 
       
  1101 	$quota = get_space_allowed();
       
  1102 	$used = get_dirsize( BLOGUPLOADDIR ) / 1024 / 1024;
       
  1103 
       
  1104 	if ( $used > $quota )
       
  1105 		$percentused = '100';
       
  1106 	else
       
  1107 		$percentused = ( $used / $quota ) * 100;
       
  1108 	$used_color = ( $percentused >= 70 ) ? ' spam' : '';
       
  1109 	$used = round( $used, 2 );
       
  1110 	$percentused = number_format( $percentused );
       
  1111 
       
  1112 	?>
       
  1113 	<p class="sub musub"><?php _e( 'Storage Space' ); ?></p>
       
  1114 	<div class="table table_content musubtable">
       
  1115 	<table>
       
  1116 		<tr class="first">
       
  1117 			<td class="first b b-posts"><?php printf( __( '<a href="%1$s" title="Manage Uploads" class="musublink">%2$sMB</a>' ), esc_url( admin_url( 'upload.php' ) ), $quota ); ?></td>
       
  1118 			<td class="t posts"><?php _e( 'Space Allowed' ); ?></td>
       
  1119 		</tr>
       
  1120 	</table>
       
  1121 	</div>
       
  1122 	<div class="table table_discussion musubtable">
       
  1123 	<table>
       
  1124 		<tr class="first">
       
  1125 			<td class="b b-comments"><?php printf( __( '<a href="%1$s" title="Manage Uploads" class="musublink">%2$sMB (%3$s%%)</a>' ), esc_url( admin_url( 'upload.php' ) ), $used, $percentused ); ?></td>
       
  1126 			<td class="last t comments<?php echo $used_color;?>"><?php _e( 'Space Used' );?></td>
       
  1127 		</tr>
       
  1128 	</table>
       
  1129 	</div>
       
  1130 	<br class="clear" />
       
  1131 	<?php
       
  1132 }
       
  1133 add_action( 'activity_box_end', 'wp_dashboard_quota' );
       
  1134 
       
  1135 // Display Browser Nag Meta Box
       
  1136 function wp_dashboard_browser_nag() {
       
  1137 	$notice = '';
       
  1138 	$response = wp_check_browser_version();
       
  1139 
       
  1140 	if ( $response ) {
       
  1141 		if ( $response['insecure'] ) {
       
  1142 			$msg = sprintf( __( "It looks like you're using an insecure version of <a href='%s'>%s</a>. Using an outdated browser makes your computer unsafe. For the best WordPress experience, please update your browser." ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ) );
       
  1143 		} else {
       
  1144 			$msg = sprintf( __( "It looks like you're using an old version of <a href='%s'>%s</a>. For the best WordPress experience, please update your browser." ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ) );
       
  1145 		}
       
  1146 
       
  1147 		$browser_nag_class = '';
       
  1148 		if ( !empty( $response['img_src'] ) ) {
       
  1149 			$img_src = ( is_ssl() && ! empty( $response['img_src_ssl'] ) )? $response['img_src_ssl'] : $response['img_src'];
       
  1150 
       
  1151 			$notice .= '<div class="alignright browser-icon"><a href="' . esc_attr($response['update_url']) . '"><img src="' . esc_attr( $img_src ) . '" alt="" /></a></div>';
       
  1152 			$browser_nag_class = ' has-browser-icon';
       
  1153 		}
       
  1154 		$notice .= "<p class='browser-update-nag{$browser_nag_class}'>{$msg}</p>";
       
  1155 
       
  1156 		$browsehappy = 'http://browsehappy.com/';
       
  1157 		$locale = get_locale();
       
  1158 		if ( 'en_US' !== $locale )
       
  1159 			$browsehappy = add_query_arg( 'locale', $locale, $browsehappy );
       
  1160 
       
  1161 		$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>';
       
  1162 		$notice .= '<p class="hide-if-no-js"><a href="" class="dismiss">' . __( 'Dismiss' ) . '</a></p>';
       
  1163 		$notice .= '<div class="clear"></div>';
       
  1164 	}
       
  1165 
       
  1166 	echo apply_filters( 'browse-happy-notice', $notice, $response );
       
  1167 }
       
  1168 
       
  1169 function dashboard_browser_nag_class( $classes ) {
       
  1170 	$response = wp_check_browser_version();
       
  1171 
       
  1172 	if ( $response && $response['insecure'] )
       
  1173 		$classes[] = 'browser-insecure';
       
  1174 
       
  1175 	return $classes;
       
  1176 }
       
  1177 
       
  1178 /**
       
  1179  * Check if the user needs a browser update
       
  1180  *
       
  1181  * @since 3.2.0
       
  1182  *
       
  1183  * @return array|bool False on failure, array of browser data on success.
       
  1184  */
       
  1185 function wp_check_browser_version() {
       
  1186 	if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
       
  1187 		return false;
       
  1188 
       
  1189 	$key = md5( $_SERVER['HTTP_USER_AGENT'] );
       
  1190 
       
  1191 	if ( false === ($response = get_site_transient('browser_' . $key) ) ) {
       
  1192 		global $wp_version;
       
  1193 
       
  1194 		$options = array(
       
  1195 			'body'			=> array( 'useragent' => $_SERVER['HTTP_USER_AGENT'] ),
       
  1196 			'user-agent'	=> 'WordPress/' . $wp_version . '; ' . home_url()
       
  1197 		);
       
  1198 
       
  1199 		$response = wp_remote_post( 'http://api.wordpress.org/core/browse-happy/1.0/', $options );
       
  1200 
       
  1201 		if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) )
       
  1202 			return false;
       
  1203 
       
  1204 		/**
       
  1205 		 * Response should be an array with:
       
  1206 		 *  'name' - string - A user friendly browser name
       
  1207 		 *  'version' - string - The most recent version of the browser
       
  1208 		 *  'current_version' - string - The version of the browser the user is using
       
  1209 		 *  'upgrade' - boolean - Whether the browser needs an upgrade
       
  1210 		 *  'insecure' - boolean - Whether the browser is deemed insecure
       
  1211 		 *  'upgrade_url' - string - The url to visit to upgrade
       
  1212 		 *  'img_src' - string - An image representing the browser
       
  1213 		 *  'img_src_ssl' - string - An image (over SSL) representing the browser
       
  1214 		 */
       
  1215 		$response = maybe_unserialize( wp_remote_retrieve_body( $response ) );
       
  1216 
       
  1217 		if ( ! is_array( $response ) )
       
  1218 			return false;
       
  1219 
       
  1220 		set_site_transient( 'browser_' . $key, $response, 604800 ); // cache for 1 week
       
  1221 	}
       
  1222 
       
  1223 	return $response;
       
  1224 }
       
  1225 
   952 /**
  1226 /**
   953  * Empty function usable by plugins to output empty dashboard widget (to be populated later by JS).
  1227  * Empty function usable by plugins to output empty dashboard widget (to be populated later by JS).
   954  */
  1228  */
   955 function wp_dashboard_empty() {}
  1229 function wp_dashboard_empty() {}
   956 
  1230 
   957 ?>
  1231 /**
       
  1232  * Displays a welcome panel to introduce users to WordPress.
       
  1233  *
       
  1234  * @since 3.3.0
       
  1235  */
       
  1236 function wp_welcome_panel() {
       
  1237 	global $wp_version;
       
  1238 
       
  1239 	if ( ! current_user_can( 'edit_theme_options' ) )
       
  1240 		return;
       
  1241 
       
  1242 	$classes = 'welcome-panel';
       
  1243 
       
  1244 	$option = get_user_meta( get_current_user_id(), 'show_welcome_panel', true );
       
  1245 	// 0 = hide, 1 = toggled to show or single site creator, 2 = multisite site owner
       
  1246 	$hide = 0 == $option || ( 2 == $option && wp_get_current_user()->user_email != get_option( 'admin_email' ) );
       
  1247 	if ( $hide )
       
  1248 		$classes .= ' hidden';
       
  1249 
       
  1250 	list( $display_version ) = explode( '-', $wp_version );
       
  1251 	?>
       
  1252 	<div id="welcome-panel" class="<?php echo esc_attr( $classes ); ?>">
       
  1253 	<?php wp_nonce_field( 'welcome-panel-nonce', 'welcomepanelnonce', false ); ?>
       
  1254 	<a class="welcome-panel-close" href="<?php echo esc_url( admin_url( '?welcome=0' ) ); ?>"><?php _e('Dismiss'); ?></a>
       
  1255 	<div class="wp-badge"><?php printf( __( 'Version %s' ), $display_version ); ?></div>
       
  1256 
       
  1257 	<div class="welcome-panel-content">
       
  1258 	<h3><?php _e( 'Welcome to your new WordPress site!' ); ?></h3>
       
  1259 	<p class="about-description"><?php _e( 'If you need help getting started, check out our documentation on <a href="http://codex.wordpress.org/First_Steps_With_WordPress">First Steps with WordPress</a>. If you&#8217;d rather dive right in, here are a few things most people do first when they set up a new WordPress site. If you need help, use the Help tabs in the upper right corner to get information on how to use your current screen and where to go for more assistance.' ); ?></p>
       
  1260 	<div class="welcome-panel-column-container">
       
  1261 	<div class="welcome-panel-column">
       
  1262 		<h4><span class="icon16 icon-settings"></span> <?php _e( 'Basic Settings' ); ?></h4>
       
  1263 		<p><?php _e( 'Here are a few easy things you can do to get your feet wet. Make sure to click Save on each Settings screen.' ); ?></p>
       
  1264 		<ul>
       
  1265 		<li><?php echo sprintf(	__( '<a href="%s">Choose your privacy setting</a>' ), esc_url( admin_url('options-privacy.php') ) ); ?></li>
       
  1266 		<li><?php echo sprintf( __( '<a href="%s">Select your tagline and time zone</a>' ), esc_url( admin_url('options-general.php') ) ); ?></li>
       
  1267 		<li><?php echo sprintf( __( '<a href="%s">Turn comments on or off</a>' ), esc_url( admin_url('options-discussion.php') ) ); ?></li>
       
  1268 		<li><?php echo sprintf( __( '<a href="%s">Fill in your profile</a>' ), esc_url( admin_url('profile.php') ) ); ?></li>
       
  1269 		</ul>
       
  1270 	</div>
       
  1271 	<div class="welcome-panel-column">
       
  1272 		<h4><span class="icon16 icon-page"></span> <?php _e( 'Add Real Content' ); ?></h4>
       
  1273 		<p><?php _e( 'Check out the sample page & post editors to see how it all works, then delete the default content and write your own!' ); ?></p>
       
  1274 		<ul>
       
  1275 		<li><?php echo sprintf( __( 'View the <a href="%1$s">sample page</a> and <a href="%2$s">post</a>' ), esc_url( get_permalink( 2 ) ), esc_url( get_permalink( 1 ) ) ); ?></li>
       
  1276 		<li><?php echo sprintf( __( 'Delete the <a href="%1$s">sample page</a> and <a href="%2$s">post</a>' ), esc_url( admin_url('edit.php?post_type=page') ), esc_url( admin_url('edit.php') ) ); ?></li>
       
  1277 		<li><?php echo sprintf( __( '<a href="%s">Create an About Me page</a>' ), esc_url( admin_url('edit.php?post_type=page') ) ); ?></li>
       
  1278 		<li><?php echo sprintf( __( '<a href="%s">Write your first post</a>' ), esc_url( admin_url('post-new.php') ) ); ?></li>
       
  1279 		</ul>
       
  1280 	</div>
       
  1281 	<div class="welcome-panel-column welcome-panel-last">
       
  1282 		<h4><span class="icon16 icon-appearance"></span> <?php _e( 'Customize Your Site' ); ?></h4>
       
  1283 		<?php
       
  1284 		$theme = wp_get_theme();
       
  1285 		if ( $theme->errors() ) :
       
  1286 			echo '<p>';
       
  1287 			printf( __( '<a href="%s">Install a theme</a> to get started customizing your site.' ), esc_url( admin_url( 'themes.php' ) ) );
       
  1288 			echo '</p>';
       
  1289 		else:
       
  1290 			$customize_links = array();
       
  1291 			if ( 'twentyeleven' == $theme->get_stylesheet() )
       
  1292 				$customize_links[] = sprintf( __( '<a href="%s">Choose light or dark</a>' ), esc_url( admin_url( 'themes.php?page=theme_options' ) ) );
       
  1293 
       
  1294 			if ( current_theme_supports( 'custom-background' ) )
       
  1295 				$customize_links[] = sprintf( __( '<a href="%s">Set a background color</a>' ), esc_url( admin_url( 'themes.php?page=custom-background' ) ) );
       
  1296 
       
  1297 			if ( current_theme_supports( 'custom-header' ) )
       
  1298 				$customize_links[] = sprintf( __( '<a href="%s">Select a new header image</a>' ), esc_url( admin_url( 'themes.php?page=custom-header' ) ) );
       
  1299 
       
  1300 			if ( current_theme_supports( 'widgets' ) )
       
  1301 				$customize_links[] = sprintf( __( '<a href="%s">Add some widgets</a>' ), esc_url( admin_url( 'widgets.php' ) ) );
       
  1302 
       
  1303 			if ( ! empty( $customize_links ) ) {
       
  1304 				echo '<p>';
       
  1305 				printf( __( 'Use the current theme &mdash; %1$s &mdash; or <a href="%2$s">choose a new one</a>. If you stick with %1$s, here are a few ways to make your site look unique.' ), $theme->display('Name'), esc_url( admin_url( 'themes.php' ) ) );
       
  1306 				echo '</p>';
       
  1307 			?>
       
  1308 			<ul>
       
  1309 				<?php foreach ( $customize_links as $customize_link ) : ?>
       
  1310 				<li><?php echo $customize_link ?></li>
       
  1311 				<?php endforeach; ?>
       
  1312 			</ul>
       
  1313 			<?php
       
  1314 			} else {
       
  1315 				echo '<p>';
       
  1316 				printf( __( 'Use the current theme &mdash; %1$s &mdash; or <a href="%2$s">choose a new one</a>.' ), $theme->display('Name'), esc_url( admin_url( 'themes.php' ) ) );
       
  1317 				echo '</p>';
       
  1318 			}
       
  1319 		endif; ?>
       
  1320 	</div>
       
  1321 	</div>
       
  1322 	<p class="welcome-panel-dismiss"><?php printf( __( 'Already know what you&#8217;re doing? <a href="%s">Dismiss this message</a>.' ), esc_url( admin_url( '?welcome=0' ) ) ); ?></p>
       
  1323 	</div>
       
  1324 	</div>
       
  1325 	<?php
       
  1326 }