PluginProbe
Edit Flow / 0.7.3
Edit Flow v0.7.3
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.7.3, at modules/dashboard/dashboard.php

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