PluginProbe
Edit Flow / 0.8.2
Edit Flow v0.8.2
0.11.1 0.11.0 0.7.2 0.7.3 0.7.4 0.7.5 0.7.6 0.8 0.8.1 0.8.2 0.9 0.9.1 0.9.2 0.9.3 0.9.4 0.9.5 0.9.6 0.9.7 0.9.8 0.9.9 trunk 0.1.5 0.10.0 0.10.1 0.10.2 All 44 releases
edit-flow / modules / dashboard / dashboard.php

dashboard.php in Edit Flow 0.8.2, at modules/dashboard/dashboard.php

333 lines 11.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * class EF_Dashboard
4 * All of the code for the dashboard widgets from Edit Flow
5 *
6 * Dashboard widgets currently:
7 * - Post Status Widget - Shows numbers for all (custom|post) statuses
8 * - Posts I'm Following Widget - Show the headlines with edit links for posts I'm following
9 *
10 * @todo for 0.7
11 * - Update the Posts I'm Following widget to use new activity class
12 */
13
14 if ( !class_exists('EF_Dashboard') ) {
15
16 class EF_Dashboard extends EF_Module {
17
18 public $widgets;
19
20 /**
21 * Load the EF_Dashboard class as an Edit Flow module
22 */
23 function __construct() {
24
25 // Register the module with Edit Flow
26 $this->module_url = $this->get_module_url( __FILE__ );
27 $args = array(
28 'title' => __( 'Dashboard Widgets', 'edit-flow' ),
29 'short_description' => __( 'Track your content from the WordPress dashboard.', 'edit-flow' ),
30 'extended_description' => __( 'Enable dashboard widgets to quickly get an overview of what state your content is in.', 'edit-flow' ),
31 'module_url' => $this->module_url,
32 'img_url' => $this->module_url . 'lib/dashboard_s128.png',
33 'slug' => 'dashboard',
34 'post_type_support' => 'ef_dashboard',
35 'default_options' => array(
36 'enabled' => 'on',
37 'post_status_widget' => 'on',
38 'my_posts_widget' => 'on',
39 'notepad_widget' => 'on',
40 ),
41 'configure_page_cb' => 'print_configure_view',
42 'configure_link_text' => __( 'Widget Options', 'edit-flow' ),
43 );
44 $this->module = EditFlow()->register_module( 'dashboard', $args );
45 }
46
47 /**
48 * Initialize all of the class' functionality if its enabled
49 */
50 function init() {
51
52 $this->widgets = new stdClass;
53
54 if ( 'on' == $this->module->options->notepad_widget ) {
55 require_once dirname( __FILE__ ) . '/widgets/dashboard-notepad.php';
56 $this->widgets->notepad_widget = new EF_Dashboard_Notepad_Widget;
57 $this->widgets->notepad_widget->init();
58 }
59
60 // Add the widgets to the dashboard
61 add_action( 'wp_dashboard_setup', array( $this, 'add_dashboard_widgets') );
62
63 // Register our settings
64 add_action( 'admin_init', array( $this, 'register_settings' ) );
65 }
66
67 /**
68 * Upgrade our data in case we need to
69 *
70 * @since 0.7
71 */
72 function upgrade( $previous_version ) {
73 global $edit_flow;
74
75 // Upgrade path to v0.7
76 if ( version_compare( $previous_version, '0.7' , '<' ) ) {
77 // Migrate whether dashboard widgets were enabled or not
78 if ( $enabled = get_option( 'edit_flow_dashboard_widgets_enabled' ) )
79 $enabled = 'on';
80 else
81 $enabled = 'off';
82 $edit_flow->update_module_option( $this->module->name, 'enabled', $enabled );
83 delete_option( 'edit_flow_dashboard_widgets_enabled' );
84 // Migrate whether the post status widget was on
85 if ( $post_status_widget = get_option( 'edit_flow_post_status_widget_enabled' ) )
86 $post_status_widget = 'on';
87 else
88 $post_status_widget = 'off';
89 $edit_flow->update_module_option( $this->module->name, 'post_status_widget', $post_status_widget );
90 delete_option( 'edit_flow_post_status_widget_enabled' );
91 // Migrate whether the my posts widget was on
92 if ( $my_posts_widget = get_option( 'edit_flow_myposts_widget_enabled' ) )
93 $my_posts_widget = 'on';
94 else
95 $my_posts_widget = 'off';
96 $edit_flow->update_module_option( $this->module->name, 'post_status_widget', $my_posts_widget );
97 delete_option( 'edit_flow_myposts_widget_enabled' );
98 // Delete legacy option
99 delete_option( 'edit_flow_quickpitch_widget_enabled' );
100
101 // Technically we've run this code before so we don't want to auto-install new data
102 $edit_flow->update_module_option( $this->module->name, 'loaded_once', true );
103 }
104
105 }
106
107 /**
108 * Add Edit Flow dashboard widgets to the WordPress admin dashboard
109 */
110 function add_dashboard_widgets() {
111
112 // Only show dashboard widgets for Contributor or higher
113 if ( !current_user_can('edit_posts') )
114 return;
115
116 wp_enqueue_style( 'edit-flow-dashboard-css', $this->module_url . 'lib/dashboard.css', false, EDIT_FLOW_VERSION, 'all' );
117
118 // Set up Post Status widget but, first, check to see if it's enabled
119 if ( $this->module->options->post_status_widget == 'on')
120 wp_add_dashboard_widget( 'post_status_widget', __( 'Unpublished Content', 'edit-flow' ), array( $this, 'post_status_widget' ) );
121
122 // Set up the Notepad widget if it's enabled
123 if ( 'on' == $this->module->options->notepad_widget )
124 wp_add_dashboard_widget( 'notepad_widget', __( 'Notepad', 'edit-flow' ), array( $this->widgets->notepad_widget, 'notepad_widget' ) );
125
126 // Add the MyPosts widget, if enabled
127 if ( $this->module->options->my_posts_widget == 'on' && $this->module_enabled( 'notifications' ) )
128 wp_add_dashboard_widget( 'myposts_widget', __( 'Posts I\'m Following', 'edit-flow' ), array( $this, 'myposts_widget' ) );
129
130 }
131
132 /**
133 * Creates Post Status widget
134 * Display an at-a-glance view of post counts for all (post|custom) statuses in the system
135 *
136 * @todo Support custom post types
137 */
138 function post_status_widget () {
139 global $edit_flow;
140
141 $statuses = $this->get_post_statuses();
142 $statuses[] = (object)array(
143 'name' => __( 'Scheduled', 'edit-flow' ),
144 'description' => '',
145 'slug' => 'future',
146 );
147 $statuses = apply_filters( 'ef_dashboard_post_status_widget_statuses', $statuses );
148 // If custom statuses are enabled, we'll output a link to edit the terms just below the post counts
149 if ( $this->module_enabled( 'custom_status' ) )
150 $edit_custom_status_url = add_query_arg( 'page', 'ef-custom-status-settings', get_admin_url( null, 'admin.php' ) );
151
152 ?>
153 <p class="sub"><?php _e('Posts at a Glance', 'edit-flow') ?></p>
154
155 <div class="table">
156 <table>
157 <tbody>
158 <?php $post_count = wp_count_posts( 'post' ); ?>
159 <?php foreach($statuses as $status) : ?>
160 <?php $filter_link = $this->filter_posts_link( $status->slug ); ?>
161 <tr>
162 <td class="b">
163 <a href="<?php echo esc_url( $filter_link ); ?>">
164 <?php
165 $slug = $status->slug;
166 echo esc_html( $post_count->$slug ); ?>
167 </a>
168 </td>
169 <td>
170 <a href="<?php echo esc_url( $filter_link ); ?>"><?php echo esc_html( $status->name ); ?></a>
171 </td>
172 </tr>
173
174 <?php endforeach; ?>
175 </tbody>
176 </table>
177 <?php if ( isset( $edit_custom_status_url ) ) : ?>
178 <span class="small"><a href="<?php echo esc_url( $edit_custom_status_url ); ?>"><?php _e( 'Edit Custom Statuses', 'edit-flow' ); ?></a></span>
179 <?php endif; ?>
180 </div>
181 <?php
182 }
183
184 /**
185 * Creates My Posts widget
186 * Shows a list of the "posts you're following" sorted by most recent activity.
187 */
188 function myposts_widget() {
189 global $edit_flow;
190
191 $myposts = $edit_flow->notifications->get_user_following_posts();
192
193 ?>
194 <div class="ef-myposts">
195 <?php if( !empty($myposts) ) : ?>
196
197 <?php foreach( $myposts as $post ) : ?>
198 <?php
199 $url = esc_url(get_edit_post_link( $post->ID ));
200 $title = esc_html($post->post_title);
201 ?>
202 <li>
203 <h4><a href="<?php echo $url ?>" title="<?php _e('Edit this post', 'edit-flow') ?>"><?php echo $title; ?></a></h4>
204 <span class="ef-myposts-timestamp"><?php _e('This post was last updated on', 'edit-flow') ?> <?php echo get_the_time('F j, Y \\a\\t g:i a', $post) ?></span>
205 </li>
206 <?php endforeach; ?>
207 <?php else : ?>
208 <p><?php _e('Sorry! You\'re not subscribed to any posts!', 'edit-flow') ?></p>
209 <?php endif; ?>
210 </div>
211 <?php
212 }
213
214 /**
215 * Register settings for notifications so we can partially use the Settings API
216 * (We use the Settings API for form generation, but not saving)
217 *
218 * @since 0.7
219 */
220 function register_settings() {
221
222 add_settings_section( $this->module->options_group_name . '_general', false, '__return_false', $this->module->options_group_name );
223 add_settings_field( 'post_status_widget', __( 'Post Status Widget', 'edit-flow' ), array( $this, 'settings_post_status_widget_option' ), $this->module->options_group_name, $this->module->options_group_name . '_general' );
224 add_settings_field( 'my_posts_widget',__( 'Posts I\'m Following', 'edit-flow' ), array( $this, 'settings_my_posts_widget_option' ), $this->module->options_group_name, $this->module->options_group_name . '_general' );
225 add_settings_field( 'notepad_widget',__( 'Notepad', 'edit-flow' ), array( $this, 'settings_notepad_widget_option' ), $this->module->options_group_name, $this->module->options_group_name . '_general' );
226
227 }
228
229 /**
230 * Enable or disable the Post Status Widget for the WP dashboard
231 *
232 * @since 0.7
233 */
234 function settings_post_status_widget_option() {
235 $options = array(
236 'off' => __( 'Disabled', 'edit-flow' ),
237 'on' => __( 'Enabled', 'edit-flow' ),
238 );
239 echo '<select id="post_status_widget" name="' . $this->module->options_group_name . '[post_status_widget]">';
240 foreach ( $options as $value => $label ) {
241 echo '<option value="' . esc_attr( $value ) . '"';
242 echo selected( $this->module->options->post_status_widget, $value );
243 echo '>' . esc_html( $label ) . '</option>';
244 }
245 echo '</select>';
246 }
247
248 /**
249 * Enable or disable the Posts I'm Following Widget for the WP dashboard
250 *
251 * @since 0.7
252 */
253 function settings_my_posts_widget_option() {
254 global $edit_flow;
255 $options = array(
256 'off' => __( 'Disabled', 'edit-flow' ),
257 'on' => __( 'Enabled', 'edit-flow' ),
258 );
259 echo '<select id="my_posts_widget" name="' . $this->module->options_group_name . '[my_posts_widget]"';
260 // Notifications module has to be enabled for the My Posts widget to work
261 if ( !$this->module_enabled('notifications') ) {
262 echo ' disabled="disabled"';
263 $this->module->options->my_posts_widget = 'off';
264 }
265 echo '>';
266 foreach ( $options as $value => $label ) {
267 echo '<option value="' . esc_attr( $value ) . '"';
268 echo selected( $this->module->options->my_posts_widget, $value );
269 echo '>' . esc_html( $label ) . '</option>';
270 }
271 echo '</select>';
272 if ( !$this->module_enabled('notifications') ) {
273 echo '&nbsp;&nbsp;&nbsp;<span class="description">' . __( 'The notifications module will need to be enabled for this widget to display.', 'edit-flow' );
274 }
275 }
276
277 /**
278 * Enable or disable the Notepad widget for the dashboard
279 *
280 * @since 0.8
281 */
282 function settings_notepad_widget_option() {
283 $options = array(
284 'off' => __( 'Disabled', 'edit-flow' ),
285 'on' => __( 'Enabled', 'edit-flow' ),
286 );
287 echo '<select id="notepad_widget" name="' . $this->module->options_group_name . '[notepad_widget]">';
288 foreach ( $options as $value => $label ) {
289 echo '<option value="' . esc_attr( $value ) . '"';
290 echo selected( $this->module->options->notepad_widget, $value );
291 echo '>' . esc_html( $label ) . '</option>';
292 }
293 echo '</select>';
294 }
295
296 /**
297 * Validate the field submitted by the user
298 *
299 * @since 0.7
300 */
301 function settings_validate( $new_options ) {
302
303 // Follow whitelist validation for modules
304 if ( array_key_exists( 'post_status_widget', $new_options ) && $new_options['post_status_widget'] != 'on' )
305 $new_options['post_status_widget'] = 'off';
306
307 if ( array_key_exists( 'my_posts_widget', $new_options ) && $new_options['my_posts_widget'] != 'on' )
308 $new_options['my_posts_widget'] = 'off';
309
310 return $new_options;
311 }
312
313 /**
314 * Settings page for the dashboard
315 *
316 * @since 0.7
317 */
318 function print_configure_view() {
319 ?>
320 <form class="basic-settings" action="<?php echo esc_url( menu_page_url( $this->module->settings_slug, false ) ); ?>" method="post">
321 <?php settings_fields( $this->module->options_group_name ); ?>
322 <?php do_settings_sections( $this->module->options_group_name ); ?>
323 <?php
324 echo '<input id="edit_flow_module_name" name="edit_flow_module_name" type="hidden" value="' . esc_attr( $this->module->name ) . '" />';
325 ?>
326 <p class="submit"><?php submit_button( null, 'primary', 'submit', false ); ?><a class="cancel-settings-link" href="<?php echo EDIT_FLOW_SETTINGS_PAGE; ?>"><?php _e( 'Back to Edit Flow', 'edit-flow' ); ?></a></p>
327 </form>
328 <?php
329 }
330 }
331
332 } // END - !class_exists('EF_Dashboard')
333