PluginProbe
Time Clock – A WordPress Employee & Volunteer Time Clock Plugin / 1.3
Time Clock – A WordPress Employee & Volunteer Time Clock Plugin v1.3
trunk 1.0 1.0.1 1.1 1.1.1 1.1.2 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2
time-clock / includes / admin / activity.php

activity.php in Time Clock – A WordPress Employee & Volunteer Time Clock Plugin 1.3, at includes/admin/activity.php

474 lines 13.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
4
5
6 // register meta boxs
7 function etimeclockwp_clock_register_meta_boxes() {
8 global $post;
9
10 add_meta_box('meta-box-id-activity', __('Day Details', 'time-clock'), 'etimeclockwp_callback_activity', 'etimeclockwp_clock','normal');
11 add_meta_box('meta-box-id-status', __( 'Details', 'time-clock' ), 'etimeclockwp_callback_status', 'etimeclockwp_clock','side');
12
13 }
14 add_action('add_meta_boxes', 'etimeclockwp_clock_register_meta_boxes');
15
16
17 // activity metabox
18 function etimeclockwp_callback_activity($post) {
19 global $meta_box, $post;
20
21
22 // see if new post
23 if ($post->post_status == 'auto-draft') {
24
25
26 echo "<table><tr><td>";
27 echo __('User: ', 'time-clock');
28 echo "</td><td>";
29
30 $users = get_posts(
31 array(
32 'posts_per_page' => -1,
33 'post_type' => 'etimeclockwp_users'
34 )
35 );
36
37 foreach($users as $post) {
38 $values[$post->post_title] = $post->ID;
39 }
40
41 echo "<select name='user_id'>";
42
43 if (isset($_GET['user'])) {
44 $current = $_GET['user'];
45 } else {
46 $current = '';
47 }
48
49 foreach ($values as $label => $value) {
50 echo "<option value='$value'"; if ($current == $value) { echo "SELECTED"; } echo ">$label</option>";
51 }
52 echo "</select>";
53
54 echo "</td></tr><tr><td>";
55
56 echo __('Date: ', 'time-clock');
57 echo "</td><td>";
58
59
60 $wp_date_format = etimeclockwp_get_option('date-format');
61 $date_now = date_i18n($wp_date_format);
62
63 echo "<input type='text' id='etimeclockwp-new-activity' class='etimeclockwp_cell_width' value='$date_now'><input type='hidden' id='etimeclockwp-new-activity-real' name='real-date' value=''>";
64
65 echo '<input type="hidden" name="etimeclockwp_MetaNonce" value="', wp_create_nonce(basename(__FILE__)), '" />';
66
67 echo '<input type="hidden" name="etimeclockwp_submit" value="1" />';
68
69 echo "</td></tr><tr><td></td><td><input id='publish' class='button-primary' type='submit' value='"; echo __('Save','time-clock'); echo "' accesskey='p' tabindex='5' name='save'>";
70
71 echo "</td></tr></table>";
72
73
74 // existing post
75 } else {
76
77 echo "<div class='etimeclockwp_meta_box'>";
78
79 echo "<style>#post-body-content { margin-bottom: 0px; }</style>";
80
81
82 // Use nonce for verification
83 echo '<input type="hidden" name="etimeclockwp_MetaNonce" value="', wp_create_nonce(basename(__FILE__)), '" />';
84
85 echo '<input type="hidden" name="etimeclockwp_submit_activity" value="1" />';
86
87 echo '<table>';
88
89 $metavalue = get_post_meta($post->ID);
90
91
92 $wp_date_format = etimeclockwp_get_option('date-format');
93 $wp_time_format = etimeclockwp_get_option('time-format');
94
95 $wp_date_format_timestamp = 'Y-m-d';
96 $wp_time_format_timestamp = 'H:i:s';
97
98 $timestamp_now = date_i18n($wp_date_format_timestamp.' '.$wp_time_format_timestamp);
99 $date_now = date_i18n($wp_date_format);
100 $time_now = date_i18n($wp_time_format);
101
102 // url nonnces
103 $nonce_edit = wp_create_nonce('etimeclockwp_edit');
104 $nonce_delete = wp_create_nonce('etimeclockwp_delete');
105 $nonce_add = wp_create_nonce('etimeclockwp_add');
106
107 $post_excerpt = $post->post_excerpt;
108
109 foreach($metavalue as $key => $val) {
110
111 if (substr($key, 0, 5) === "etime") {
112
113 $key_pure = $key;
114
115 $key = explode('_', $key);
116 $key = $key[0];
117
118 $key_action = $key;
119
120 $timestamp_array = explode('|', $val[0]);
121
122 $timestampdb = $timestamp_array[0];
123
124 if ($key == 'etimeclockwp-in') {
125 $key = etimeclockwp_get_option('clock-in');
126 $day = $timestampdb;
127 }
128
129 if ($key == 'etimeclockwp-out') {
130 $key = etimeclockwp_get_option('clock-out');
131 }
132
133 if ($key == 'etimeclockwp-breakon') {
134 $key = etimeclockwp_get_option('leave-on-break');
135 }
136
137 if ($key == 'etimeclockwp-breakoff') {
138 $key = etimeclockwp_get_option('return-from-break');
139 }
140
141 $datetime = date_i18n($wp_date_format.' '.$wp_time_format,$timestampdb);
142 $date = date_i18n($wp_date_format,$timestampdb);
143 $time = date_i18n($wp_time_format,$timestampdb);
144
145 $timestamp = date_i18n($wp_date_format_timestamp.' '.$wp_time_format_timestamp,$timestampdb);
146
147 if (isset($timestamp_array[1])) {
148 $order = $timestamp_array[1];
149 echo "<tr><td class='etimeclockwp_cell_title_width'>"; echo $key; echo ": </td><td>".$datetime."</td><td>&nbsp; <a href='#' class='etimeclockwp-entry-edit' data-nonce='$nonce_edit' data-timestamp='".$timestamp."' data-date='".$date."' data-time='".$time."' data-order='".$order."' data-action='".$key_action."' data-pure='".$key_pure."'>".__('Edit','time-clock')."</a> - <a href='#' class='etimeclockwp-entry-delete' data-nonce='$nonce_delete' data-date='".$date."' data-time='".$time."' data-pure='".$key_pure."'>".__('Delete','time-clock')."</a></td></tr>";
150 } else {
151 echo "<tr><td class='etimeclockwp_cell_title_width'>"; echo $key; echo ": </td><td>".$datetime."</td></tr>";
152 }
153 }
154
155 }
156
157 echo "</tr>";
158
159 echo '</table>';
160 echo "</div>";
161
162
163
164 // entry - delete
165 echo "<div class='etimeclockwp-holder'>";
166 echo "<div id='etimeclockwp-div-delete' class='etimeclockwp-div'>";
167
168 echo "<div class='etimeclockwp-menu'>";
169 echo __('Delete Entry','time-clock');
170 echo "</div><br />";
171
172 echo "<div id='etimeclockwp-date'></div>";
173 echo "<input type='hidden' id='etimeclockwp-datepure' value=''>";
174 echo "<input type='hidden' class='etimeclockwp-postid' value='".$post->ID."'>";
175 echo "<input type='hidden' id='etimeclockwp_delete_nonce' value=''>";
176
177 echo "<div class='etimeclockwp-entry'><br />";
178 echo "<input type='submit' class='button button-primary etimeclockwp-entry-button etimeclockwp-date-confirm-delete' value=' ". __('Confirm','time-clock')." '>";
179 echo "<input type='submit' class='button button-secondary etimeclockwp-entry-button etimeclockwp-cancel' value=' ". __('Cancel','time-clock')." '>";
180 echo "</div>";
181
182 echo "<br />";
183
184 echo "</div>";
185 echo "</div>";
186
187 // entry - edit
188 echo "<div class='etimeclockwp-holder'>";
189 echo "<div id='etimeclockwp-div-edit' class='etimeclockwp-div'>";
190
191 echo "<div class='etimeclockwp-menu'>";
192 echo __('Edit Entry','time-clock');
193 echo "</div><br />";
194
195 echo "<center>";
196 echo "<select id='etimeclockwp-entry-dropdown-edit'>";
197 echo "<option value='in'>".etimeclockwp_get_option('clock-in')."</option>";
198 echo "<option value='out'>".etimeclockwp_get_option('clock-out')."</option>";
199 echo "<option value='breakon'>".etimeclockwp_get_option('leave-on-break')."</option>";
200 echo "<option value='breakoff'>".etimeclockwp_get_option('return-from-break')."</option>";
201 echo "</select><br /><br />";
202
203 echo "<input type='text' id='etimeclockwp-date-edit' value=''></center>";
204 echo "<input type='hidden' class='etimeclockwp-postid' value='".$post->ID."'>";
205 echo "<input type='hidden' id='etimeclockwp-actualdate-edit' value=''>";
206 echo "<input type='hidden' id='etimeclockwp-puredate' value=''>";
207 echo "<input type='hidden' id='etimeclockwp-order' value=''>";
208 echo "<input type='hidden' id='etimeclockwp_edit_nonce' value=''>";
209
210 echo "<div class='etimeclockwp-entry'><br />";
211 echo "<input type='submit' class='button button-primary etimeclockwp-entry-button etimeclockwp-date-confirm-edit' value=' ". __('Confirm','time-clock')." '>";
212 echo "<input type='submit' class='button button-secondary etimeclockwp-entry-button etimeclockwp-cancel' value=' ". __('Cancel','time-clock')." '>";
213 echo "</div>";
214
215 echo "<br />";
216
217 echo "</div>";
218 echo "</div>";
219
220 // entry - new
221 echo "<div class='etimeclockwp-holder'>";
222 echo "<div id='etimeclockwp-div-new' class='etimeclockwp-div'>";
223
224 echo "<div class='etimeclockwp-menu'>";
225 echo __('New Entry','time-clock');
226 echo "</div><br />";
227
228 echo "<center>";
229 echo "<select id='etimeclockwp-entry-dropdown-new'>";
230 echo "<option value='in'>".etimeclockwp_get_option('clock-in')."</option>";
231 echo "<option value='out'>".etimeclockwp_get_option('clock-out')."</option>";
232 echo "<option value='breakon'>".etimeclockwp_get_option('leave-on-break')."</option>";
233 echo "<option value='breakoff'>".etimeclockwp_get_option('return-from-break')."</option>";
234 echo "</select><br /><br />";
235
236 echo "<input type='text' id='etimeclockwp-date-new' class='etimeclockwp_cell_width' value=''></center>";
237 echo "<input type='hidden' class='etimeclockwp-postid' value='".$post->ID."'>";
238 echo "<input type='hidden' id='etimeclockwp-actualdate-new' value=''>";
239 echo "<input type='hidden' id='etimeclockwp_new_nonce' value=''>";
240
241 echo "<div class='etimeclockwp-entry'><br />";
242 echo "<input type='submit' class='button button-primary etimeclockwp-entry-button etimeclockwp-date-confirm-new' value=' ". __('Confirm','time-clock')." '>";
243 echo "<input type='submit' class='button button-secondary etimeclockwp-entry-button etimeclockwp-cancel' value=' ". __('Cancel','time-clock')." '>";
244 echo "</div>";
245
246 echo "<br />";
247
248 echo "</div>";
249 echo "</div>";
250
251 }
252 }
253
254
255 // status metabox
256 function etimeclockwp_callback_status($post) {
257 global $meta_box, $post;
258
259 echo "<div class='etimeclockwp_meta_box'>";
260
261 echo '<table width="100%">';
262
263 echo "<tr><td>";
264
265 echo "<br />";
266
267 echo __('User','time-clock');
268 echo ":";
269 echo "</td><td align='right'><br />";
270 echo get_the_title($post->post_title);
271 echo "</td></tr>";
272
273 echo "</tr><tr><td><br />";
274 echo __('Date Worked','time-clock');
275 echo ":";
276 echo "</td><td align='right'><br />";
277 echo get_the_date(etimeclockwp_get_option('date-format'),$post->ID);
278 echo "</td></tr>";
279
280 echo "</tr><tr><td><br />";
281 echo __('Total Time Worked','time-clock');
282 echo ":";
283 echo "</td><td align='right'><br />";
284 echo etimeclockwp_get_time_worked($post);
285 echo "</td></tr>";
286
287 echo "</td></tr></table><br />";
288
289 echo "</div>";
290 }
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311 // user table - fill table columns with data
312 function etimeclockwp_manage_activity_columns( $column, $post_id ) {
313 global $post;
314
315 switch( $column ) {
316
317 case 'name' :
318 echo $id = "<a href='post.php?post=$post_id&action=edit'><b>"; echo get_the_title($post->post_title); echo "</b></a>";
319 break;
320
321 case 'date_work' :
322 echo get_the_date(etimeclockwp_get_option('date-format'),$post_id);
323 break;
324
325 case 'time_worked' :
326 echo etimeclockwp_get_time_worked($post);
327 break;
328
329
330 default :
331 break;
332 }
333 }
334 add_action( 'manage_etimeclockwp_clock_posts_custom_column', 'etimeclockwp_manage_activity_columns', 10, 2 );
335
336
337 // titles for admin button table
338 function etimeclockwp_clock_columns($columns) {
339
340 $columns = array(
341 'cb' => '<input type="checkbox" />',
342 'name' => __( 'User Name','time-clock'),
343 'date_work' => __( 'Work Date','time-clock'),
344 'time_worked' => __( 'Time Worked','time-clock'),
345 );
346
347 return $columns;
348 }
349 add_filter('manage_edit-etimeclockwp_clock_columns','etimeclockwp_clock_columns');
350
351
352 // set default column for orders & customers table
353 function etimeclockwp_clock_list_table_primary_column( $column, $screen ) {
354
355 if ('edit-etimeclockwp_clock' === $screen) {
356 $column = 'name';
357 }
358 return $column;
359 }
360 add_filter( 'list_table_primary_column', 'etimeclockwp_clock_list_table_primary_column', 10, 2 );
361
362
363 // users table - remove quick links
364 function etimeclockwp_activity_quick_links($actions, $post) {
365
366 if ($post->post_type =="etimeclockwp_clock") {
367 unset($actions['inline hide-if-no-js']);
368 unset($actions['edit']);
369 }
370 return $actions;
371 }
372 add_filter('post_row_actions','etimeclockwp_activity_quick_links', 10, 2);
373
374
375 // users table - update message
376 add_filter('post_updated_messages', 'codex_etimeclockwp_clock_updated_messages');
377 function codex_etimeclockwp_clock_updated_messages( $messages ) {
378 global $post, $post_ID;
379
380 $messages['etimeclockwp_clock'] = array(
381 1 => __('User Activity updated.', 'time-clock'),
382 );
383
384 return $messages;
385 }
386
387
388 // users table - remove subsubsub menu links
389 function etimeclockwp_clock_table_sub_menu_links( $views ) {
390
391 unset($views['private']);
392 unset($views['mine']);
393 unset($views['publish']);
394
395 return $views;
396 }
397 add_filter('views_edit-etimeclockwp_clock','etimeclockwp_clock_table_sub_menu_links');
398
399
400
401
402
403
404
405
406
407
408
409 // display user dropdown menu
410 function etimeclockwp_admin_posts_filter_activity(){
411
412 // get current post type
413 if (isset($_GET['post_type'])) {
414 $type = $_GET['post_type'];
415 } else {
416 $type = '';
417 }
418
419 //only add filter to post type you want
420 if ('etimeclockwp_clock' == $type) {
421
422 $users = get_posts(
423 array(
424 'posts_per_page' => -1,
425 'post_type' => 'etimeclockwp_users'
426 )
427 );
428
429 foreach($users as $post) {
430 $values[$post->post_title] = $post->ID;
431 }
432 ?>
433
434 <select name="user">
435 <option value=""><?php echo __('All users', 'time-clock'); ?></option>
436
437 <?php
438 if (isset($_GET['user'])) {
439 $current = $_GET['user'];
440 } else {
441 $current = '';
442 }
443
444 if (isset($values)) {
445 foreach ($values as $label => $value) {
446 echo "<option value='$value'"; if ($current == $value) { echo "SELECTED"; } echo ">$label</option>";
447 }
448 }
449 ?>
450 </select>
451
452 <?php
453 }
454 }
455 add_action( 'restrict_manage_posts', 'etimeclockwp_admin_posts_filter_activity' );
456
457
458 // add filter to query for dropdown menu
459 function etimeclockwp_posts_filter_activity( $query ) {
460 global $pagenow;
461
462 // get current post type
463 if (isset($_GET['post_type'])) {
464 $type = sanitize_text_field($_GET['post_type']);
465 } else {
466 $type = '';
467 }
468
469 if ( 'etimeclockwp_clock' == $type && is_admin() && $pagenow =='edit.php' && isset($_GET['user']) && $_GET['user'] != '' && $query->is_main_query() ) {
470 $query->query_vars['title'] = sanitize_text_field($_GET['user']);
471 }
472
473 }
474 add_filter( 'parse_query', 'etimeclockwp_posts_filter_activity' );