PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 5.0.8
Taskbuilder – Project Management & Task Management Tool With Kanban Board v5.0.8
6.0.5 6.0.2 6.0.3 6.0.4 6.0.1 6.0.0 5.0.8 5.0.9 4.0.9 5.0.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 All 57 releases
taskbuilder / includes / class-wppm-functions.php

class-wppm-functions.php in Taskbuilder – Project Management & Task Management Tool With Kanban Board 5.0.8, at includes/class-wppm-functions.php

1,217 lines 56.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 exit; // Exit if accessed directly
4 }
5 if ( ! class_exists( 'WPPM_Functions' ) ) :
6 final class WPPM_Functions {
7 // Array sanitization
8 public static function sanitize_array($array) {
9 if(!empty($array)){
10 foreach ( $array as $key => $value ) {
11 if ( is_array( $value ) ) {
12 $value = $this->sanitize_array($value);
13 }
14 else {
15 $value = sanitize_text_field( wp_unslash( $value ) );
16 }
17 }
18 }
19 return $array;
20 }
21
22 public static function create_project($args){
23 global $wpdb,$current_user;
24 $default_proj_status = get_option('wppm_default_project_status');
25 $values = array(
26 'created_by'=>$current_user->ID,
27 'project_name'=>$args['name'],
28 'description'=>isset($args['wppm_proj_description']) ? $args['wppm_proj_description']:"",
29 'start_date'=>isset($args['wppm_start_date']) ?$args['wppm_start_date']:"",
30 'end_date'=>isset($args['wppm_end_date'])? $args['wppm_end_date']:"",
31 'status'=>isset($args['status'])? $args['status']:$default_proj_status,
32 'cat_id'=>isset($args['wppm_create_project_category']) ? $args['wppm_create_project_category']:"",
33 'users'=>isset($args['user_names']) ? implode(",",$args['user_names']):"",
34 'date_created'=>isset($args['date_created'])? $args['date_created']:wp_date("Y-m-d h:i:sa"),
35 );
36 $wpdb->insert($wpdb->prefix .'wppm_project', $values);
37 $project_id = $wpdb->insert_id;
38 return $project_id;
39 }
40
41 public static function create_task($args){
42 global $wpdb,$current_user,$wppmfunction;
43 $default_task_status = get_option('wppm_default_task_status');
44 $values = array(
45 'created_by'=>(isset($args['created_by'])) ? $args['created_by']: $current_user->ID,
46 'task_name'=>$args['name'],
47 'description'=>(isset($args['wppm_task_description']))?$args['wppm_task_description']:"",
48 'project'=>(isset($args['wppm_task_project']))?$args['wppm_task_project']:"",
49 'start_date'=>(isset($args['wppm_task_start_date']))?$args['wppm_task_start_date']:"",
50 'end_date'=>(isset($args['wppm_task_end_date']))?$args['wppm_task_end_date']:"",
51 'status'=>(isset($args['status']))?$args['status']:$default_task_status,
52 'priority'=>(isset($args['wppm_create_task_priority']))?$args['wppm_create_task_priority']:"",
53 'users'=>(!empty($args['user_names']))?implode(",",$args['user_names']):"",
54 'date_created'=>isset($args['date_created'])? $args['date_created']:wp_date("Y-m-d h:i:sa"),
55 'task_auth_code'=> $wppmfunction->getRandomString(10),
56 'active'=>1
57 );
58 $wpdb->insert($wpdb->prefix .'wppm_task', $values);
59 $task_id = $wpdb->insert_id;
60 return $task_id;
61 }
62
63 public static function create_checklist($args){
64 global $wpdb,$current_user,$wppmfunction;
65 $values = array(
66 'task_id'=>$args['task_id'],
67 'checklist_name' => $args['checklist_name'],
68 'created_by'=> $args['created_by']
69 );
70 $wpdb->insert($wpdb->prefix .'wppm_checklist', $values);
71 $checklist_id = $wpdb->insert_id;
72 return $checklist_id;
73 }
74
75 public static function create_checklist_item($args){
76 global $wpdb,$current_user,$wppmfunction;
77 $chk_items_values = array(
78 'checklist_id' => $args['checklist_id'],
79 'item_name' => $args['item_name'],
80 'checked'=>$args['checked'],
81 'members'=>$args['members'],
82 'due_date'=> $args['due_date']
83 );
84 $wpdb->insert($wpdb->prefix .'wppm_checklist_items', $chk_items_values);
85 $checklist_item_id = $wpdb->insert_id;
86 return $checklist_item_id;
87 }
88
89 public static function wppm_submit_task_comment($args){
90 global $wpdb;
91 $wpdb->insert($wpdb->prefix.'wppm_task_comment',$args);
92 $comment_id = $wpdb->insert_id;
93 return $comment_id;
94 }
95
96 public static function wppm_submit_task_comment_meta($args){
97 global $wpdb;
98 $wpdb->insert($wpdb->prefix.'wppm_task_comment_meta',$args);
99 $comment_meta_id = $wpdb->insert_id;
100 return $comment_meta_id;
101 }
102
103 public static function wppm_submit_proj_comment($args){
104 global $wpdb;
105 $wpdb->insert($wpdb->prefix.'wppm_project_comment',$args);
106 $comment_id = $wpdb->insert_id;
107 return $comment_id;
108 }
109
110 public static function wppm_submit_proj_comment_meta($args){
111 global $wpdb;
112 $wpdb->insert($wpdb->prefix.'wppm_project_comment_meta',$args);
113 $comment_meta_id = $wpdb->insert_id;
114 return $comment_meta_id;
115 }
116
117 // Random string
118 public static function getRandomString($length = 8) {
119 $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
120 $string = '';
121 for ($i = 0; $i < $length; $i++) {
122 $string .= $characters[wp_rand(0, strlen($characters) - 1)];
123 }
124 return $string;
125 }
126
127 public static function wppm_get_auth_code($id){
128 global $wpdb;
129 $id = absint($id);
130 $auth_code = $wpdb->get_var(
131 $wpdb->prepare(
132 "SELECT task_auth_code
133 FROM {$wpdb->prefix}wppm_task
134 WHERE id = %d",
135 ($id)
136 )
137 );
138 $auth_code = isset($auth_code) ? $auth_code : "";
139 return $auth_code;
140 }
141
142 public static function get_task_fields($task_id,$select_field){
143 global $wpdb;
144 $task_id = absint($task_id);
145 $task_field_value = '';
146 $allowed_fields = array(
147 'id',
148 'created_by',
149 'task_name',
150 'description',
151 'project',
152 'start_date',
153 'end_date',
154 'status',
155 'priority',
156 'users',
157 'date_created',
158 'task_auth_code'
159 );
160
161 // Validate column name
162 if ( ! in_array( $select_field, $allowed_fields, true ) ) {
163 return '';
164 }
165 if (apply_filters('wppm_get_select_field',true,$task_id,$select_field)) {
166 $get_task_field_value = $wpdb->get_var($wpdb->prepare("SELECT $select_field FROM {$wpdb->prefix}wppm_task WHERE id = %d", $task_id));
167 $task_field_value = $get_task_field_value ? $get_task_field_value : '';
168 }
169 return stripslashes($task_field_value);
170 }
171
172 public static function get_project_fields($proj_id,$select_field){
173 global $wpdb;
174 $proj_id = absint($proj_id);
175 $project_field_value = '';
176 $allowed_fields = array(
177 'id',
178 'created_by',
179 'project_name',
180 'description',
181 'start_date',
182 'end_date',
183 'status',
184 'cat_id',
185 'users',
186 'date_created'
187 );
188
189 // Validate column name
190 if ( ! in_array( $select_field, $allowed_fields, true ) ) {
191 return '';
192 }
193 if (apply_filters('wppm_get_select_proj_field',true,$proj_id,$select_field)) {
194 $get_project_field_value = $wpdb->get_var($wpdb->prepare("SELECT $select_field FROM {$wpdb->prefix}wppm_project WHERE id = %d", $proj_id));
195 $project_field_value = $get_project_field_value ? $get_project_field_value : '';
196 }
197 return stripslashes($project_field_value);
198 }
199
200 public function get_task($task_id){
201 global $wpdb;
202 $task_data = array();
203 $task_id = absint($task_id);
204 $task = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task WHERE id = %d", $task_id));
205 if( $task ){
206 $task_data = json_decode(wp_json_encode($task), true);
207 }
208 return $task_data;
209 }
210
211 public function get_checklist($task_id){
212 global $wpdb;
213 $task_id = absint($task_id);
214 $checklist_data = array();
215 $checklist = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist WHERE task_id = %d", $task_id));
216 if( $checklist ){
217 $checklist_data = json_decode(wp_json_encode($checklist), true);
218 }
219 return $checklist_data;
220 }
221
222 public function get_checklist_items($checklist_id){
223 global $wpdb;
224 $checklist_items_data = array();
225 $checklist_id = absint($checklist_id);
226 $checklist_items = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist_items WHERE checklist_id = %d", $checklist_id));
227 if( $checklist_items ){
228 $checklist_items_data = json_decode(wp_json_encode($checklist_items), true);
229 }
230 return $checklist_items_data;
231 }
232
233 public function get_project($project_id){
234 global $wpdb;
235 $project_data = array();
236 $project_id = absint($project_id);
237 $project = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project WHERE id = %d", $project_id));
238 if( $project ){
239 $project_data = json_decode(wp_json_encode($project), true);
240 }
241 return $project_data;
242 }
243
244 public function get_attachment($attachment_id){
245 global $wpdb;
246 $attachment_data = array();
247 $attachment_id = absint($attachment_id);
248 $attachment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_attachments WHERE id = %d", $attachment_id));
249 if( $attachment ){
250 $attachment_data = json_decode(wp_json_encode($attachment), true);
251 }
252 return $attachment_data;
253 }
254
255 public function has_permission($permission, $task_id){
256 global $current_user,$wppmfunction,$wpdb;
257 $task_id = absint($task_id);
258 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
259 $wppm_edit_tasks_permission = get_option('wppm_default_edit_tasks_permission');
260 $wppm_allow_coworkers_add_checklist = get_option('wppm_allow_coworkers_add_checklist');
261 $wppm_allow_coworkers_create_task = get_option('wppm_allow_coworkers_create_task');
262 $wppm_allow_coworkers_change_status = get_option('wppm_allow_coworkers_change_status');
263 $wppm_allow_coworkers_assign_users = get_option('wppm_allow_coworkers_assign_users');
264 if(empty($comment_id)){
265 $comment_id = 0;
266 }
267 $comment_id = absint($comment_id);
268 $task_data = $wppmfunction->get_task($task_id);
269 $task_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE task_id = %d AND id = %d", $task_id, $comment_id));
270
271 if(!empty($task_data['project'])){
272 $project_id = $task_data['project'];
273 $project_id = absint($project_id);
274 $project_data = $wppmfunction->get_project($project_id);
275 $cu_user_id = absint($current_user->ID);
276 $project_user_role = $wpdb->get_var($wpdb->prepare("SELECT role_id FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $project_id, $cu_user_id));
277 $project_users = $wpdb->get_var($wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d", $project_id));
278 $project_users_arr = explode(',',(string)$project_users);
279 }
280 $response = false;
281 $flag = false;
282 if(!empty($task_data)){
283 $co_worker = $task_data['users'];
284 $co_worker_array = explode(",",(string)$co_worker);
285 }
286 if((!empty($project_user_role)) && ($project_user_role == 1) && in_array($current_user->ID,$project_users_arr)){
287 $flag= true;
288 }
289 if($wppm_current_user_capability=='wppm_admin'){
290 $flag = true;
291 }
292 if(!empty($project_data) && $project_data['created_by']==$current_user->ID && $wppm_current_user_capability=='wppm_manager'){
293 $flag = true;
294 }
295 if($current_user->has_cap('manage_options')){
296 $flag = true;
297 }
298 if(!empty($project_id)){
299 $project_id = absint($project_id);
300 $public_proj_meta = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta where project_id= %d AND meta_key='public_project'", $project_id));
301 }else{
302 $public_proj_meta ="";
303 }
304 switch ($permission) {
305 case 'change_status':
306 case 'view_task':
307 case 'add_task_comment':
308 ((!empty($co_worker_array)) && (in_array($current_user->ID,$co_worker_array )) )|| ($current_user->ID == $task_data['created_by']) || $public_proj_meta==1 || ($flag==true) || $current_user->has_cap('manage_options') ? $response = true: $response = false;
309 break;
310 case 'change_task_details':
311 (($flag==true) || ($current_user->ID == $task_data['created_by']) || $wppm_edit_tasks_permission == 1) ? $response = true: $response = false;
312 break;
313 case 'add_new_task':
314 (($flag==true) || $wppm_allow_coworkers_create_task == 1) ? $response = true: $response = false;
315 break;
316 case 'add_checklist':
317 (($flag==true) || $wppm_allow_coworkers_add_checklist == 1) ? $response = true: $response = false;
318 break;
319 case 'change_task_status':
320 (($flag==true) || $wppm_allow_coworkers_change_status == 1) ? $response = true: $response = false;
321 break;
322 case 'delete_task':
323 case 'clone_task':
324 (($flag==true) || ($current_user->ID == $task_data['created_by'])) ? $response = true: $response = false;
325 break;
326 case 'assign_task_users':
327 (($flag==true) || $wppm_allow_coworkers_assign_users == 1) ? $response = true: $response = false;
328 break;
329 case 'change_raised_by':
330 case 'edit_checklist':
331 case 'delete_checklist':
332 (($flag==true) ? $response = true: $response = false);
333 break;
334 }
335 return apply_filters( 'wppm_has_permission', $response, $task_id, $permission );
336 }
337
338 public function has_comment_permission($permission, $task_id,$comment_id){
339 global $current_user,$wppmfunction,$wpdb;
340 $task_id = absint($task_id);
341 $comment_id = absint($comment_id);
342 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
343 if(empty($comment_id)){
344 $comment_id = 0;
345 }
346 $task_data = $wppmfunction->get_task($task_id);
347 $project_user = array();
348 $task_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE task_id = %d AND id = %d", $task_id, $comment_id));
349
350 if(isset($task_data['project'])){
351 $project_id = $task_data['project'];
352 $project_id = absint($project_id);
353 $cu_id = absint($current_user->ID);
354 $project_data = $wppmfunction->get_project($project_id);
355 $project_user = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $project_id, $cu_id));
356 $project_users = $wpdb->get_var($wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d", $project_id));
357 $project_users_arr = explode(',',(string)$project_users);
358 }
359 $response = false;
360 $flag = false;
361 if(!empty($task_data)){
362 $co_worker = $task_data['users'];
363 $co_worker_array = explode(",",(string)$co_worker);
364 }
365 if((!empty($project_user)) && ($project_user->role_id == 1) && in_array($current_user->ID,$project_users_arr)){
366 $flag= true;
367 }
368 if($wppm_current_user_capability=='wppm_admin'){
369 $flag = true;
370 }
371
372 if(!empty($project_data) && $project_data['created_by']==$current_user->ID && $wppm_current_user_capability=='wppm_manager'){
373 $flag = true;
374 }
375
376 switch ($permission) {
377 case 'delete_task_thread':
378 case 'edit_task_comment':
379 (($flag==true) || ($current_user->ID == $task_comment->created_by)) ? $response = true: $response = false;
380 break;
381 }
382 return apply_filters( 'wppm_has_comment_permission', $response, $task_id, $comment_id, $permission );
383 }
384
385 public function has_proj_comment_permission($permission, $proj_id,$comment_id){
386 global $current_user,$wppmfunction,$wpdb;
387 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
388 $proj_id = absint($proj_id);
389 $comment_id = absint($comment_id);
390 $cu_id = absint($current_user->ID);
391 if(empty($comment_id)){
392 $comment_id = 0;
393 }
394 $project_user = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $proj_id, $cu_id));
395 $project_users = $wpdb->get_var($wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d", $proj_id));
396 $project_users_arr = explode(',',(string)$project_users);
397 $proj_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_comment WHERE proj_id = %d AND id = %d", $proj_id, $comment_id));
398 $response = false;
399 $flag = false;
400 $project_data = $wppmfunction->get_project($proj_id);
401 if((!empty($project_user)) && ($project_user->role_id == 1) && in_array($current_user->ID,$project_users_arr)){
402 $flag= true;
403 }
404 if($wppm_current_user_capability=='wppm_admin'){
405 $flag = true;
406 }
407 if(!empty($project_data) && $project_data['created_by']==$current_user->ID && $wppm_current_user_capability=='wppm_manager'){
408 $flag = true;
409 }
410 switch ($permission) {
411 case 'delete_proj_thread':
412 case 'edit_proj_comment':
413 (($flag==true) || ($current_user->ID == $proj_comment->created_by)) ? $response = true: $response = false;
414 break;
415 }
416 return apply_filters( 'wppm_has_proj_comment_permission', $response, $proj_id, $comment_id, $permission );
417 }
418
419 public function has_project_permission($permission,$project_id){
420 global $current_user,$wppmfunction,$wpdb ;
421 $project_data = $wppmfunction->get_project($project_id);
422 $project_id = absint($project_id);
423 $cu_id = absint($current_user->ID);
424 $project_user = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $project_id, $cu_id));
425 $project_users = $wpdb->get_var($wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d", $project_id));
426 $project_users_arr = explode(',',(string)$project_users);
427 $user = wp_get_current_user();
428 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
429 if(!empty($project_data)){
430 $co_worker = $project_data['users'];
431 $co_worker_array = explode(",",(string)$co_worker);
432 }
433 if(!empty($project_id)){
434 $public_proj_meta = $wpdb->get_var( $wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta where project_id= %d AND meta_key='public_project'", $project_id));
435 }else{
436 $public_proj_meta ="";
437 }
438
439 switch ($permission) {
440 case 'view_project':
441 ((!empty($co_worker_array)) && (in_array($current_user->ID,$co_worker_array )) )? $response = true: $response = false;
442 break;
443 case 'add_proj_comment':
444 ( ((!empty($co_worker_array)) && (in_array($current_user->ID,$co_worker_array )) ) || ( $public_proj_meta == '1') || $current_user->has_cap('manage_options')|| $wppm_current_user_capability == 'wppm_admin' || $wppm_current_user_capability == 'wppm_manager')? $response = true: $response = false;
445 break;
446 case 'change_project_status':
447 case 'assign_project_users':
448 case 'change_project_raised_by':
449 case 'change_project_details':
450 case 'delete_project':
451 $flag = false;
452 if( (!empty($project_user)) && ($project_user->role_id == 1) && in_array($current_user->ID,$project_users_arr)){
453 $flag = true;
454 }
455
456 (((!empty($co_worker_array)) && (in_array($current_user->ID,$co_worker_array) && $flag==true) || $wppm_current_user_capability == 'wppm_admin')) ? $response = true: $response = false;
457 break;
458 }
459 return apply_filters( 'wppm_has_project_permission', $response, $project_id, $permission );
460 }
461
462 public function change_status($task_id, $status_id){
463 global $wpdb,$wppmfunction;
464 $task_data = $wppmfunction->get_task($task_id);
465 $prev_status = $task_data['status'];
466 $values=array(
467 'status'=>esc_sql($status_id)
468 );
469 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
470 $old_task_status_meta = $wppmfunction->get_task_meta($task_id,'old_task_status',true);
471 if(!empty($old_task_status_meta)){
472 $wppmfunction->delete_task_meta($task_id,'old_task_status');
473 }
474 $wppmfunction->add_task_meta($task_id,'old_task_status',$prev_status);
475
476 do_action('wppm_set_change_task_status', $task_id, $status_id, $prev_status);
477 }
478
479 public function change_raised_by($task_id, $user_id){
480 global $wpdb;
481 $values=array(
482 'created_by'=>absint($user_id)
483 );
484 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id)));
485 }
486
487 public function change_task_label($task_id, $task_label){
488 global $wpdb;
489 $values=array(
490 'task_name'=>stripslashes($task_label)
491 );
492 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id)));
493 }
494
495 public function change_task_project_label($task_id, $project_label){
496 global $wpdb;
497 $values=array(
498 'project'=>absint($project_label)
499 );
500 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id)));
501 }
502
503 public function change_start_date($task_id, $task_start_date){
504 global $wpdb;
505 $values=array(
506 'start_date'=>$task_start_date
507 );
508 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id)));
509 }
510
511 public function change_end_date($task_id, $task_end_date){
512 global $wpdb;
513 $values=array(
514 'end_date'=>$task_end_date
515 );
516 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id)));
517 }
518
519 public function change_priority($task_id, $task_priority){
520 global $wpdb;
521 $values=array(
522 'priority'=>absint($task_priority)
523 );
524 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id)));
525 }
526
527 public function change_description($task_id, $task_description){
528 global $wpdb;
529 $task_description = !empty($task_description) ? wp_kses_post($task_description) : '';
530 $values=array(
531 'description'=>$task_description
532 );
533 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id)));
534 }
535
536 public function change_project($task_id,$proj_id){
537 global $wpdb,$wppmfunction;
538 $task_data = $wppmfunction->get_task($task_id);
539 $old_proj = $task_data['project'];
540 $old_proj = absint( $old_proj);
541 $proj_id = absint( $proj_id);
542 $project_data = $wppmfunction->get_project($proj_id);
543 $task_assign_users = $task_data['users'];
544 $tusers_array = array();
545 if(!empty($task_data['users'])){
546 $task_users_array = explode(",",(string)$task_assign_users);
547 }
548 if(!empty($project_data['users'])){
549 $project_users = explode(",",(string)$project_data['users']);
550 }
551 if(!empty($project_users)){
552 if(!empty($task_users_array)){
553 foreach($task_users_array as $tuser){
554 if(!in_array($tuser,$project_users)){
555 $wpdb->delete( $wpdb->prefix.'wppm_project_users', array( 'proj_id' => "$proj_id",'user_id'=>"$tuser") );
556 }
557 elseif(in_array($tuser,$project_users)){
558 $tusers_array[] = $tuser;
559 $tuser = absint($tuser);
560 $sql = $wpdb->prepare("SELECT role_id FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $old_proj, $tuser);
561 $old_proj_user_role = $wpdb->get_var( $sql );
562 $sql = $wpdb->prepare("SELECT role_id FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $proj_id, $tuser);
563 $proj_users_role = $wpdb->get_var( $sql );
564 if(!empty( $old_proj_user_role) && $old_proj_user_role!=$proj_users_role){
565 $value=array(
566 'role_id'=>absint($proj_users_role)
567 );
568 $wpdb->update($wpdb->prefix.'wppm_project_users', $value, array('proj_id'=>"$proj_id", 'user_id'=>"$tuser"));
569 }
570 }
571 }
572 }
573 }
574 $tusers = implode(",",$tusers_array);
575 $values=array(
576 'project'=>absint($proj_id),
577 'users'=>absint($tusers)
578 );
579 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id)));
580 }
581
582 public function get_task_comment($comment_id){
583 global $wpdb;
584 $task_comment_data = array();
585 $comment_id = absint($comment_id);
586 $task_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE id=%d", $comment_id));
587 if( $task_comment ){
588 $task_comment_data = json_decode(wp_json_encode($task_comment), true);
589 }
590 return $task_comment_data;
591 }
592
593 public function get_proj_comment($comment_id){
594 global $wpdb;
595 $project_comment_data = array();
596 $comment_id = absint($comment_id);
597 $project_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_comment WHERE id=%d", $comment_id));
598 if( $project_comment ){
599 $project_comment_data = json_decode(wp_json_encode($project_comment), true);
600 }
601 return $project_comment_data;
602 }
603
604 public function change_task_comment($comment_id,$comment_body){
605 global $wpdb;
606 $comment_id = absint($comment_id);
607 $comment_body = !empty($comment_body) ? wp_kses_post($comment_body) : '';
608 $values=array(
609 'body'=>$comment_body
610 );
611 $wpdb->update($wpdb->prefix.'wppm_task_comment', $values, array('id'=>"$comment_id"));
612 }
613
614 public function change_proj_comment($comment_id,$comment_body){
615 global $wpdb;
616 $comment_id = absint($comment_id);
617 $comment_body = !empty($comment_body) ? wp_kses_post($comment_body) : '';
618 $values=array(
619 'body'=>$comment_body
620 );
621 $wpdb->update($wpdb->prefix.'wppm_project_comment', $values, array('id'=>"$comment_id"));
622 }
623
624 public function change_project_label($project_id,$project_label){
625 global $wpdb;
626 $project_id = absint($project_id);
627 $values=array(
628 'project_name'=>esc_sql($project_label)
629 );
630 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id"));
631 }
632
633 public function change_project_start_date($project_id, $project_start_date){
634 global $wpdb;
635 $project_id = absint($project_id);
636 $project_start_date = esc_sql($project_start_date);
637 $values=array(
638 'start_date'=>$project_start_date
639 );
640 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id"));
641 }
642
643 public function change_project_end_date($project_id, $project_end_date){
644 global $wpdb;
645 $project_id = absint($project_id);
646 $project_end_date = esc_sql($project_end_date);
647 $values=array(
648 'end_date'=>$project_end_date
649 );
650 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>$project_id));
651 }
652
653 public function change_category($project_id, $project_category){
654 global $wpdb;
655 $project_id = absint($project_id);
656 $project_category = absint($project_category);
657 $values=array(
658 'cat_id'=>$project_category
659 );
660 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id"));
661 }
662
663 public function change_project_description($project_id, $project_description){
664 global $wpdb;
665 $project_id = absint($project_id);
666 $project_description = (string) ( $project_description ?? '' );
667 $values = array(
668 'description' => wp_kses_post( $project_description )
669 );
670 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id"));
671 }
672
673 public function change_project_status($project_id,$status_id){
674 global $wpdb,$wppmfunction,$current_user;
675 $change_status_value= array();
676 $proj_data = $wppmfunction->get_project($project_id);
677 $prev_status = $proj_data['status'];
678 $cu_id = absint($current_user->ID);
679 $values=array(
680 'status'=>absint($status_id)
681 );
682 $project_id = absint($project_id);
683 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>$project_id));
684 $old_project_status_meta = $wppmfunction->get_project_meta($project_id,'old_project_status',true);
685 if(!empty($old_project_status_meta)){
686 $wppmfunction->delete_project_meta($project_id,'old_project_status');
687 }
688 $change_status_value = array('prev_status'=>"$prev_status",'new_status'=>"$status_id");
689 $change_status_obj = serialize($change_status_value);
690 $log_values = array('proj_id'=>"$project_id",'body'=>$change_status_obj,'attachment_ids'=>"",'create_time'=>wp_date("Y-m-d h:i:sa"),'created_by'=>"$cu_id" );
691 $wpdb->insert($wpdb->prefix . 'wppm_project_comment',$log_values);
692 $log_id = absint($wpdb->insert_id);
693 $proj_log_values = array('proj_id'=>"$project_id",'comment_id'=>"$log_id",'comment_type'=>'change_proj_status');
694 $wpdb->insert($wpdb->prefix . 'wppm_project_comment_meta',$proj_log_values);
695 $wppmfunction->add_project_meta($project_id,'old_project_status',$prev_status);
696 do_action('wppm_set_change_project_status', $project_id, $status_id, $prev_status);
697 }
698
699 public function change_project_raised_by($project_id, $user_id){
700 global $wpdb;
701 $values=array(
702 'created_by'=>absint($user_id)
703 );
704 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id"));
705 }
706
707 // Email Notification types
708 public function get_email_notification_types(){
709 $notification_types = array(
710 'new_project'=>esc_html__('New Project','taskbuilder'),
711 'new_task'=>esc_html__('New Task','taskbuilder'),
712 'change_project_status' => esc_html__('Change Project Status','taskbuilder'),
713 'change_task_status' => esc_html__('Change Task Status','taskbuilder'),
714 'change_project_assign_users' => esc_html__('Change Project Assign Users','taskbuilder'),
715 'change_task_assign_users' => esc_html__('Change Task Assign Users','taskbuilder'),
716 'new_discussion' => esc_html__('New Comment','taskbuilder'),
717 'new_proj_discussion' =>esc_html__('New Project Comment','taskbuilder')
718 );
719 return apply_filters('wppm_en_types',$notification_types);
720 }
721
722 public function check_rtl(){
723 $rtl_locale = array('ar','ary','ckb','haz','he_IL','fa_IR','ps','ur','ug_CN');
724 if(in_array(get_locale(),$rtl_locale)){
725 return 'rtl';
726 }else{
727 return 'ltr';
728 }
729 }
730
731 public function add_project_meta($proj_id,$meta_key,$meta_value){
732 global $wpdb;
733 $wpdb->insert(
734 $wpdb->prefix . 'wppm_project_meta',
735 array(
736 'project_id' =>$proj_id,
737 'meta_key' => $meta_key,
738 'meta_value' =>$meta_value
739 ));
740 }
741
742 public function add_task_meta($task_id,$meta_key,$meta_value){
743 global $wpdb;
744 $wpdb->insert(
745 $wpdb->prefix . 'wppm_task_meta',
746 array(
747 'task_id' => $task_id,
748 'meta_key' => $meta_key,
749 'meta_value' =>$meta_value
750 ));
751 }
752
753 public function get_project_meta($project_id,$meta_key,$flag = false){
754 global $wpdb,$wppmfunction;
755 $project_id = absint($project_id);
756 $meta_key = esc_sql($meta_key);
757 if($flag){
758 $get_meta = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = %d AND meta_key = %s",$project_id,$meta_key));
759 $project_meta = isset($get_meta) ? stripslashes($get_meta) : '';
760
761 } else {
762 $project_meta = array();
763 $results = $wpdb->get_results($wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = %d AND meta_key = %s",$project_id,$meta_key));
764 if( (!empty($results)) ){
765 foreach ($results as $result) {
766 if(!empty($result)){
767 $project_meta[]= stripslashes($result->meta_value);
768 }
769 }
770 }
771 }
772 return $project_meta;
773 }
774
775 public function get_task_meta($task_id,$meta_key,$flag = false){
776 global $wpdb,$wppmfunction;
777 $task_id = absint($task_id);
778 $meta_key = esc_sql($meta_key);
779 if($flag){
780 $get_meta = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = %d AND meta_key = %s",$task_id,$meta_key));
781 $task_meta = isset($get_meta) ? stripslashes($get_meta) : '';
782
783 } else {
784 $task_meta = array();
785 $results = $wpdb->get_results($wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = %d AND meta_key = %s",$task_id,$meta_key));
786 if( (!empty($results)) ){
787 foreach ($results as $result) {
788 if(!empty($result)){
789 $task_meta[]= stripslashes($result->meta_value);
790 }
791 }
792 }
793 }
794 return $task_meta;
795 }
796
797 public function get_previously_assigned_users($project_id){
798 global $wpdb,$wppmfunction;
799 $prev_assigned_users = $wppmfunction->get_project_meta($project_id,'prev_assigned_users');
800 $user_emails = array();
801 if(!empty($prev_assigned_users)){
802 foreach ($prev_assigned_users as $user) {
803 $userdata = get_userdata($user);
804 $user_emails[] = $userdata->user_email;
805
806 }
807 }
808 return apply_filters( 'wppm_get_prev_assigned_users_emails', $user_emails ,$project_id);
809 }
810
811 public function get_project_creator_email($project_id){
812 global $wpdb,$wppmfunction;
813 $project_data = $wppmfunction->get_project($project_id,'created_by');
814 $userdata = get_userdata($project_data['created_by']);
815 if(!empty( $userdata)){
816 $proj_creator_email[] = $userdata->user_email;
817 }
818 return apply_filters( 'wppm_get_project_creator_email', $proj_creator_email ,$project_id);
819 }
820
821 public function get_task_creator_email($task_id){
822 global $wpdb,$wppmfunction;
823 $task_data = $wppmfunction->get_task($task_id,'created_by');
824 $userdata = get_userdata($task_data['created_by']);
825 if(!empty( $userdata)){
826 $task_creator_email[] = $userdata->user_email;
827 }
828 return apply_filters( 'wppm_get_task_creator_email', $task_creator_email ,$task_id);
829 }
830
831 public function get_previously_assigned_task_users($task_id){
832 global $wpdb,$wppmfunction;
833 $prev_assigned_task_users = $wppmfunction->get_task_meta($task_id,'prev_assigned_task_users');
834 $user_emails = array();
835 if(!empty($prev_assigned_task_users)){
836 foreach ($prev_assigned_task_users as $user) {
837 if(!empty($user)){
838 $userdata = get_userdata($user);
839 $user_emails[] = $userdata->user_email;
840 }
841 }
842 }
843 return apply_filters( 'wppm_get_prev_assigned_task_users_emails', $user_emails ,$task_id);
844 }
845 /**
846 * Update project meta for project
847 */
848 function update_project_meta($project_id ,$meta_key ,$meta_value){
849 global $wpdb;
850 $project_id = absint($project_id);
851 $meta_key = esc_sql($meta_key);
852 $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = %d AND meta_key = %s",$project_id,$meta_key));
853 $wpdb->update($wpdb->prefix.'wppm_project_meta', $meta_value, array('project_id'=>$project_id,'meta_key' => "$meta_key"));
854 }
855
856 /**
857 * Update task meta for task
858 */
859 function update_task_meta($task_id ,$meta_key ,$meta_value){
860 global $wpdb;
861 $task_id = absint($task_id);
862 $meta_key = esc_sql($meta_key);
863 $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = %d AND meta_key = %s",$task_id,$meta_key));
864 $wpdb->update($wpdb->prefix.'wppm_task_meta', $meta_value, array('task_id'=>$task_id,'meta_key' => "$meta_key"));
865 }
866
867 function delete_project_meta($project_id ,$meta_key){
868 global $wpdb;
869 $project_id = absint($project_id);
870 $meta_key = ($meta_key);
871 $wpdb->delete( $wpdb->prefix.'wppm_project_meta', array( 'project_id' => "$project_id",'meta_key'=>"$meta_key") );
872 }
873
874 function delete_task_meta($task_id ,$meta_key){
875 global $wpdb;
876 $task_id = absint($task_id);
877 $meta_key = ($meta_key);
878 $wpdb->delete( $wpdb->prefix.'wppm_task_meta', array( 'task_id' => "$task_id",'meta_key'=>"$meta_key") );
879 }
880
881 public function replace_macro($str,$project_id){
882 include WPPM_ABSPATH . 'includes/replace_macro.php';
883 return $str;
884 }
885
886 public function replace_task_macro($str,$task_id){
887 include WPPM_ABSPATH . 'includes/replace_task_macro.php';
888 return $str;
889 }
890
891 public function get_old_project_status_name($id){
892 global $wppmfunction, $wpdb;
893 $old_project_status = $wppmfunction->get_project_meta($id,'old_project_status',true);
894 $old_project_status = absint($old_project_status);
895 $status_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_project_statuses WHERE id = %d",$old_project_status));
896 return $status_name;
897 }
898
899 public function get_new_project_status_name($status_id){
900 global $wpdb;
901 $status_id = absint($status_id);
902 $status_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_project_statuses WHERE id = %d",$status_id));
903 return $status_name;
904 }
905
906 public function get_old_task_status_name($task_id){
907 global $wppmfunction, $wpdb;
908 $old_task_status = $wppmfunction->get_task_meta($task_id,'old_task_status',true);
909 $old_task_status = absint($old_task_status);
910 $status_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_task_statuses WHERE id = %d",$old_task_status));
911 return $status_name;
912 }
913
914 public function get_new_task_status_name($status_id){
915 global $wpdb;
916 $status_id = absint($status_id);
917 $status_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_task_statuses WHERE id = %d",$status_id));
918 return $status_name;
919 }
920
921 public function get_project_category_name($cat_id){
922 global $wpdb;
923 $cat_id = absint($cat_id);
924 if(!empty($cat_id)){
925 $cat_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_project_categories WHERE id = %d",$cat_id));
926 }else{
927 $cat_name = "";
928 }
929 return $cat_name;
930 }
931
932 public function get_project_assigned_users_names($project_id){
933 global $wppmfunction;
934 $wppm_project_data = $wppmfunction->get_project($project_id);
935 if(!empty($wppm_project_data['users'])){
936 $wppm_project_assign_users_array = explode(",", $wppm_project_data['users']);
937 }else{
938 $wppm_project_assign_users_array = array();
939 }
940 $users_names = array();
941 if(!empty($wppm_project_assign_users_array)){
942 foreach ($wppm_project_assign_users_array as $user_id) {
943 if(!empty($user_id)){
944 $userdata = get_userdata( $user_id );
945 if(!empty($userdata)){
946 $users_names[] = $userdata->display_name;
947 }
948 }
949 }
950 }
951 return implode(', ', $users_names);
952 }
953
954 public function get_task_assigned_users_names($task_id){
955 global $wppmfunction;
956 $wppm_task_data = $wppmfunction->get_task($task_id);
957 $wppm_task_assign_users_array = explode(",", (string)$wppm_task_data['users']);
958 $users_names = array();
959 if(!empty($wppm_task_assign_users_array)){
960 foreach ($wppm_task_assign_users_array as $user_id) {
961 if(!empty($user_id)){
962 $userdata = get_userdata( $user_id );
963 if(!empty($userdata)){
964 $users_names[] = $userdata->display_name;
965 }
966 }
967 }
968 }
969 return implode(', ', $users_names);
970 }
971
972 public function get_project_previously_assigned_users_names($project_id){
973 global $wppmfunction;
974 $wppm_project_assign_users = $wppmfunction->get_project_meta($project_id,'prev_assigned_users');
975 $users_names = array();
976 if(!empty($wppm_project_assign_users)){
977 foreach ($wppm_project_assign_users as $user) {
978 if(!empty($user)){
979 $userdata = get_userdata( $user );
980 $users_names[] = $userdata->display_name;
981 }
982 }
983 }
984 return implode(', ', $users_names);
985 }
986
987 public function get_task_previously_assigned_users_names($task_id){
988 global $wppmfunction;
989 $wppm_task_assign_users = $wppmfunction->get_task_meta($task_id,'prev_assigned_task_users');
990 $users_names = array();
991 if(!empty($wppm_task_assign_users)){
992 foreach ($wppm_task_assign_users as $user) {
993 if(!empty($user)){
994 $userdata = get_userdata( $user );
995 $users_names[] = $userdata->display_name;
996 }
997 }
998 }
999 return implode(', ', $users_names);
1000 }
1001
1002 public function get_task_priority_name($priority){
1003 global $wpdb;
1004 $priority = absint($priority);
1005 $priority_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_task_priorities WHERE id = %d",$priority));
1006 return $priority_name;
1007 }
1008
1009 public function get_last_comment_user_name($task_id){
1010 global $wpdb;
1011 $task_id = absint($task_id);
1012 $task_comment_creator = $wpdb->get_var($wpdb->prepare("SELECT created_by FROM {$wpdb->prefix}wppm_task_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_task_comment) AND task_id = %d)",$task_id));
1013 if(!empty($task_comment_creator)){
1014 $user = get_userdata( $task_comment_creator );
1015 return $user->display_name;
1016 }
1017 }
1018
1019 public function get_last_comment_body($task_id){
1020 global $wpdb;
1021 $task_id = absint($task_id);
1022 $task_comment = $wpdb->get_var($wpdb->prepare("SELECT body FROM {$wpdb->prefix}wppm_task_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_task_comment) AND task_id = %d)",$task_id));
1023 return $task_comment;
1024 }
1025
1026 public function create_duplicate_task($ptask_id, $project_id,$ajax_nonce){
1027 include WPPM_ABSPATH . 'includes/admin/tasks/open_task/wppm_set_clone_task.php';
1028 }
1029
1030 public function get_last_comment_proj_user_name($project_id){
1031 global $wpdb;
1032 $project_id = absint($project_id);
1033 $proj_comment_creator = $wpdb->get_var($wpdb->prepare("SELECT created_by FROM {$wpdb->prefix}wppm_project_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_project_comment) AND proj_id = %d)",$project_id));
1034 if(!empty($proj_comment_creator)){
1035 $user = get_userdata( $proj_comment_creator );
1036 return $user->display_name;
1037 }
1038 }
1039
1040 public function get_proj_comment_body($project_id){
1041 global $wpdb;
1042 $project_id = absint($project_id);
1043 $proj_comment = $wpdb->get_var($wpdb->prepare("SELECT body FROM {$wpdb->prefix}wppm_project_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_project_comment) AND proj_id = %d)",$project_id));
1044 return $proj_comment;
1045 }
1046
1047 public function get_project_url($project_id, $view){
1048 global $wpdb,$wppmfunction;
1049 $project_id = absint($project_id);
1050 $page_settings = get_option( 'wppm-page-settings' );
1051 if ( $view == '0' ) {
1052 $url = admin_url( 'admin.php?page=wppm-projects&section=project-list&id=' . $project_id );
1053 } else {
1054 $url = get_permalink( $page_settings['project-url-page'] );
1055 $auth_id = $wppmfunction->get_project_meta($project_id,'project_auth_code',true);
1056
1057 $url = add_query_arg(
1058 array(
1059 'project-id' => $project_id,
1060 'auth-code' => $auth_id,
1061
1062 ),
1063 $url
1064 );
1065 }
1066
1067 return $url;
1068 }
1069
1070 public function get_task_url($task_id, $view){
1071 global $wpdb,$wppmfunction;
1072 $task_id = absint($task_id);
1073 $page_settings = get_option( 'wppm-page-settings' );
1074 if ( $view == '0' ) {
1075 $url = admin_url( 'admin.php?page=wppm-tasks&section=task-list&id=' . $task_id );
1076 } else{
1077 $url = get_permalink( $page_settings['task-url-page'] );
1078 $auth_id = $this->wppm_get_auth_code($task_id);
1079 $url = add_query_arg(
1080 array(
1081 'task-id' => $task_id,
1082 'auth-code' => $auth_id,
1083 ),
1084 $url
1085 );
1086
1087 }
1088
1089 return $url;
1090 }
1091
1092 public function wppm_user_role(){
1093 $user_role = array(
1094 'wppm_admin' => array(
1095 'label' => esc_html__('WPPM Administrator','taskbuilder'),
1096 ),
1097 'wppm_manager' => array(
1098 'label' => esc_html__('WPPM Manager','taskbuilder'),
1099 )
1100 );
1101 return $user_role;
1102 }
1103
1104 public static function wppm_toolbar_options_setting() {
1105 $toolbar = array(
1106 array(
1107 'name' => esc_attr__( 'Bold', 'taskbuilder' ),
1108 'value' => 'bold',
1109 ),
1110 array(
1111 'name' => esc_attr__( 'Italic', 'taskbuilder' ),
1112 'value' => 'italic',
1113 ),
1114 array(
1115 'name' => esc_attr__( 'Underline', 'taskbuilder' ),
1116 'value' => 'underline',
1117 ),
1118 array(
1119 'name' => esc_attr__( 'Blockquote', 'taskbuilder' ),
1120 'value' => 'blockquote',
1121 ),
1122 array(
1123 'name' => esc_attr__( 'Align', 'taskbuilder' ),
1124 'value' => 'align',
1125 ),
1126 array(
1127 'name' => esc_attr__( 'Bulleted list', 'taskbuilder' ),
1128 'value' => 'bullist',
1129 ),
1130 array(
1131 'name' => esc_attr__( 'Numbered list', 'taskbuilder' ),
1132 'value' => 'numlist',
1133 ),
1134 array(
1135 'name' => esc_attr__( 'Right to left', 'taskbuilder' ),
1136 'value' => 'rtl',
1137 ),
1138 array(
1139 'name' => esc_attr__( 'Link', 'taskbuilder' ),
1140 'value' => 'link',
1141 ),
1142 array(
1143 'name' => esc_attr__( 'Image', 'taskbuilder' ),
1144 'value' => 'wppm_insert_editor_img',
1145 ),
1146 array(
1147 'name' => esc_attr__( 'Text Color', 'taskbuilder' ),
1148 'value' => 'forecolor',
1149 ),
1150 array(
1151 'name' => esc_attr__( 'Text Background Color', 'taskbuilder' ),
1152 'value' => 'backcolor',
1153 ),
1154 array(
1155 'name' => esc_attr__( 'Strikethrough', 'taskbuilder' ),
1156 'value' => 'strikethrough',
1157 ),
1158 );
1159 return $toolbar;
1160 }
1161
1162 public static function wppm_load_setting_header_html() {
1163 ?>
1164 <div class="wppm-header" style="padding-left:20px;margin:10px 0 10px 0;display: flex; justify-content: space-between; align-items: center; position: sticky;top: 0;background: #fff !important;z-index: 9999;width:99%; left: 0; ">
1165 <div class="wppm-header-title" style="display: flex; align-items: center; gap: 3px;">
1166 <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/taskbuilder_logo.png'); ?>" class="wppm-header-icon" alt="taskbuilder Icon" style="width: 33px; height: 33px;margin-right:10px !important;"/>
1167 <h2 style="font-size: 30px; font-weight: 600; color: #333; margin: 0; font: 22px OpenSans-Light, Helvetica, Arial, sans-serif;"><?php esc_html_e( 'Taskbuilder', 'taskbuilder' )?></h2>
1168 </div>
1169 <div class="wppm-header-button" style="display: flex; justify-content: flex-end; gap: 3px;">
1170 <div class="wppm-btn
1171 " style="background-color: #0052CC; color: #fff; padding: 8px 10px;margin: 35px 0px 14px 0px;text-decoration: none;border-radius: 5px;transition: background 0.3s ease;box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);">
1172 <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/help.svg'); ?>" class="wppm-header-icon" alt="taskbuilder Icon" style="width: 20px; height: 19px;margin-bottom: -5px;"/>
1173 <a href="https://taskbuilder.net/help/" target="__blank" style="color:#fff"><?php esc_html_e( 'Help', 'taskbuilder' )?></a>
1174 </div>
1175 <div class="wppm-btn" style="background-color: #0052CC; color: #fff; padding: 8px 10px;margin: 35px 0px 14px 0px;text-decoration: none;border-radius: 5px;transition: background 0.3s ease;box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);">
1176 <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/support.svg'); ?>" class="wppm-header-icon" alt="taskbuilder Icon" style="width: 15px; height: 19px;margin-bottom: -5px;"/>
1177 <a href="https://taskbuilder.net/support/?wpsc-section=ticket-list" target="__blank" style="color:#fff"><?php esc_html_e( 'Support', 'taskbuilder' )?></a>
1178 </div>
1179 <div class="wppm-btn" style="background-color: #0052CC; color: #fff; padding: 8px 10px;margin: 35px 10px 14px 0px;text-decoration: none;border-radius: 5px;transition: background 0.3s ease;box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);">
1180 <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/pro_features.svg'); ?>" class="wppm-header-icon" alt="taskbuilder Icon" style="width: 15px; height: 19px;margin-bottom: -5px;"/>
1181 <a href="https://taskbuilder.net/pricing/" target="__blank" style="color:#fff"><?php esc_html_e( 'Get pro', 'taskbuilder' )?></a>
1182 </div>
1183 </div>
1184 </div>
1185 <?php
1186 }
1187
1188 public function wppm_get_duration($start_date, $end_date){
1189 if ( empty($start_date) || empty($end_date) || $start_date=='0000-00-00 00:00:00' || $end_date =='0000-00-00 00:00:00') {
1190 return '';
1191 }
1192
1193 $start_ts = strtotime($start_date);
1194 $end_ts = strtotime($end_date);
1195
1196 if ( $end_ts <= $start_ts ) {
1197 return '0 min';
1198 }
1199
1200 $diff = $end_ts - $start_ts;
1201
1202 $days = floor($diff / 86400);
1203 $hours = floor(($diff % 86400) / 3600);
1204 $minutes = floor(($diff % 3600) / 60);
1205
1206 $duration = [];
1207
1208 if ($days > 0) $duration[] = $days . 'd';
1209 if ($hours > 0) $duration[] = $hours . 'h';
1210 if ($minutes > 0 || empty($duration)) $duration[] = $minutes . 'm';
1211
1212 return implode(' ', $duration);
1213
1214 }
1215 }
1216 endif;
1217 $GLOBALS['wppmfunction'] = new WPPM_Functions();