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() { |
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’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> |
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 |
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&c={$comment->comment_ID}' title='" . __('Edit comment') . "'>". __('Edit') . '</a>'; |
662 $actions['edit'] = "<a href='comment.php?action=editcomment&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 ) { |
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…' ) . '</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…' ) . '</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…' ) . '</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 '&TB_iframe=true&width=600&height=800'; |
974 '&TB_iframe=true&width=600&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> <span>(<a href='$ilink' class='thickbox' title='$title'>" . __( 'Install' ) . "</a>)</span>\n"; |
977 echo "<h5><a href='$link'>$title</a></h5> <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…' ) . '</p>'; |
1001 $loading = '<p class="widget-loading hide-if-no-js">' . __( 'Loading…' ) . '</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 |
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’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 — %1$s — 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 — %1$s — 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’re doing? <a href="%s">Dismiss this message</a>.' ), esc_url( admin_url( '?welcome=0' ) ) ); ?></p> |
|
1323 </div> |
|
1324 </div> |
|
1325 <?php |
|
1326 } |