PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 4.0.7
Taskbuilder – Project Management & Task Management Tool With Kanban Board v4.0.7
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 4.0.7, at includes/class-wppm-functions.php

1,132 lines 51.9 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( $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']: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']: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[mt_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 = esc_sql($id);
130 $auth_code = $wpdb->get_var( "SELECT task_auth_code FROM {$wpdb->prefix}wppm_task where id='$id'" );
131 $auth_code = isset($auth_code) ? $auth_code : "";
132 return $auth_code;
133 }
134
135 public static function get_task_fields($task_id,$select_field){
136 global $wpdb;
137 $task_id = esc_sql($task_id);
138 $task_field_value = '';
139 if (apply_filters('wppm_get_select_field',true,$task_id,$select_field)) {
140 $get_task_field_value = $wpdb->get_var(" SELECT $select_field FROM {$wpdb->prefix}wppm_task WHERE id='$task_id' ");
141 $task_field_value = $get_task_field_value ? $get_task_field_value : '';
142 }
143 return stripslashes($task_field_value);
144 }
145
146 public static function get_project_fields($proj_id,$select_field){
147 global $wpdb;
148 $proj_id = esc_sql($proj_id);
149 $project_field_value = '';
150 if (apply_filters('wppm_get_select_proj_field',true,$proj_id,$select_field)) {
151 $get_project_field_value = $wpdb->get_var(" SELECT $select_field FROM {$wpdb->prefix}wppm_project WHERE id='$proj_id' ");
152 $project_field_value = $get_project_field_value ? $get_project_field_value : '';
153 }
154 return stripslashes($project_field_value);
155 }
156
157 public function get_task($task_id){
158 global $wpdb;
159 $task_data = array();
160 $task_id = esc_sql($task_id);
161 $task = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_task WHERE id='$task_id' ");
162 if( $task ){
163 $task_data = json_decode(json_encode($task), true);
164 }
165 return $task_data;
166 }
167
168 public function get_checklist($task_id){
169 global $wpdb;
170 $task_id = esc_sql($task_id);
171 $checklist_data = array();
172 $checklist = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_checklist WHERE task_id='$task_id' ");
173 if( $checklist ){
174 $checklist_data = json_decode(json_encode($checklist), true);
175 }
176 return $checklist_data;
177 }
178
179 public function get_checklist_items($checklist_id){
180 global $wpdb;
181 $checklist_items_data = array();
182 $checklist_id = esc_sql($checklist_id);
183 $checklist_items = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_checklist_items WHERE checklist_id='$checklist_id' ");
184 if( $checklist_items ){
185 $checklist_items_data = json_decode(json_encode($checklist_items), true);
186 }
187 return $checklist_items_data;
188 }
189
190 public function get_project($project_id){
191 global $wpdb;
192 $project_data = array();
193 $project_id = esc_sql($project_id);
194 $project = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project WHERE id='$project_id' ");
195 if( $project ){
196 $project_data = json_decode(json_encode($project), true);
197 }
198 return $project_data;
199 }
200
201 public function get_attachment($attachment_id){
202 global $wpdb;
203 $attachment_data = array();
204 $attachment_id = esc_sql($attachment_id);
205 $attachment = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_attachments WHERE id='$attachment_id' ");
206 if( $attachment ){
207 $attachment_data = json_decode(json_encode($attachment), true);
208 }
209 return $attachment_data;
210 }
211
212 public function has_permission($permission, $task_id){
213 global $current_user,$wppmfunction,$wpdb;
214 $task_id = esc_sql($task_id);
215 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
216 $wppm_edit_tasks_permission = get_option('wppm_default_edit_tasks_permission');
217 $wppm_allow_coworkers_add_checklist = get_option('wppm_allow_coworkers_add_checklist');
218 $wppm_allow_coworkers_create_task = get_option('wppm_allow_coworkers_create_task');
219 $wppm_allow_coworkers_change_status = get_option('wppm_allow_coworkers_change_status');
220 $wppm_allow_coworkers_assign_users = get_option('wppm_allow_coworkers_assign_users');
221 if(empty($comment_id)){
222 $comment_id = 0;
223 }
224 $comment_id = esc_sql($comment_id);
225 $task_data = $wppmfunction->get_task($task_id);
226 $task_comment = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE task_id = '$task_id' AND id = '$comment_id'");
227
228 if(!empty($task_data['project'])){
229 $project_id = $task_data['project'];
230 $project_id = esc_sql($project_id);
231 $project_data = $wppmfunction->get_project($project_id);
232 $cu_user_id = esc_sql($current_user->ID);
233 $project_user_role = $wpdb->get_var("SELECT role_id FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = '$project_id' AND user_id = ' $cu_user_id'");
234 $project_users = $wpdb->get_var("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = '$project_id'");
235 $project_users_arr = explode(',',(string)$project_users);
236 }
237 $response = false;
238 $flag = false;
239 if(!empty($task_data)){
240 $co_worker = $task_data['users'];
241 $co_worker_array = explode(",",(string)$co_worker);
242 }
243 if((!empty($project_user_role)) && ($project_user_role == 1) && in_array($current_user->ID,$project_users_arr)){
244 $flag= true;
245 }
246 if($wppm_current_user_capability=='wppm_admin'){
247 $flag = true;
248 }
249 if(!empty($project_data) && $project_data['created_by']==$current_user->ID && $wppm_current_user_capability=='wppm_manager'){
250 $flag = true;
251 }
252 if(!empty($project_id)){
253 $project_id = esc_sql($project_id);
254 $public_proj_meta = $wpdb->get_var( "SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta where project_id= '$project_id' AND meta_key='public_project'");
255 }else{
256 $public_proj_meta ="";
257 }
258 switch ($permission) {
259 case 'change_status':
260 case 'view_task':
261 ((!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) ? $response = true: $response = false;
262 break;
263 case 'change_task_details':
264 (($flag==true) || ($current_user->ID == $task_data['created_by']) || $wppm_edit_tasks_permission == 1) ? $response = true: $response = false;
265 break;
266 case 'add_new_task':
267 (($flag==true) || $wppm_allow_coworkers_create_task == 1) ? $response = true: $response = false;
268 break;
269 case 'add_checklist':
270 (($flag==true) || $wppm_allow_coworkers_add_checklist == 1) ? $response = true: $response = false;
271 break;
272 case 'change_task_status':
273 (($flag==true) || $wppm_allow_coworkers_change_status == 1) ? $response = true: $response = false;
274 break;
275 case 'delete_task':
276 case 'clone_task':
277 (($flag==true) || ($current_user->ID == $task_data['created_by'])) ? $response = true: $response = false;
278 break;
279 case 'assign_task_users':
280 (($flag==true) || $wppm_allow_coworkers_assign_users == 1) ? $response = true: $response = false;
281 break;
282 case 'change_raised_by':
283 case 'edit_checklist':
284 case 'delete_checklist':
285 (($flag==true) ? $response = true: $response = false);
286 break;
287 }
288 return apply_filters( 'wppm_has_permission', $response, $task_id, $permission );
289 }
290
291 public function has_comment_permission($permission, $task_id,$comment_id){
292 global $current_user,$wppmfunction,$wpdb;
293 $task_id = esc_sql($task_id);
294 $comment_id = esc_sql( $comment_id );
295 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
296 if(empty($comment_id)){
297 $comment_id = 0;
298 }
299 $task_data = $wppmfunction->get_task($task_id);
300 $project_user = array();
301 $task_comment = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE task_id = '$task_id' AND id = '$comment_id'");
302
303 if(isset($task_data['project'])){
304 $project_id = $task_data['project'];
305 $project_id = esc_sql($project_id);
306 $cu_id = esc_sql($current_user->ID);
307 $project_data = $wppmfunction->get_project($project_id);
308 $project_user = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = '$project_id' AND user_id = '$cu_id'");
309 $project_users = $wpdb->get_var("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = '$project_id'");
310 $project_users_arr = explode(',',(string)$project_users);
311 }
312 $response = false;
313 $flag = false;
314 if(!empty($task_data)){
315 $co_worker = $task_data['users'];
316 $co_worker_array = explode(",",(string)$co_worker);
317 }
318 if((!empty($project_user)) && ($project_user->role_id == 1) && in_array($current_user->ID,$project_users_arr)){
319 $flag= true;
320 }
321 if($wppm_current_user_capability=='wppm_admin'){
322 $flag = true;
323 }
324
325 if(!empty($project_data) && $project_data['created_by']==$current_user->ID && $wppm_current_user_capability=='wppm_manager'){
326 $flag = true;
327 }
328
329 switch ($permission) {
330 case 'delete_task_thread':
331 case 'edit_task_comment':
332 (($flag==true) || ($current_user->ID == $task_comment->created_by)) ? $response = true: $response = false;
333 break;
334 }
335 return apply_filters( 'wppm_has_comment_permission', $response, $task_id, $comment_id, $permission );
336 }
337
338 public function has_proj_comment_permission($permission, $proj_id,$comment_id){
339 global $current_user,$wppmfunction,$wpdb;
340 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
341 $proj_id = esc_sql($proj_id);
342 $comment_id = esc_sql($comment_id);
343 $cu_id = esc_sql($current_user->ID);
344 if(empty($comment_id)){
345 $comment_id = 0;
346 }
347 $project_user = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = '$proj_id' AND user_id = ' $cu_id '");
348 $project_users = $wpdb->get_var("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = '$proj_id'");
349 $project_users_arr = explode(',',(string)$project_users);
350 $proj_comment = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_comment WHERE proj_id = '$proj_id' AND id = '$comment_id'");
351 $response = false;
352 $flag = false;
353 $project_data = $wppmfunction->get_project($proj_id);
354 if((!empty($project_user)) && ($project_user->role_id == 1) && in_array($current_user->ID,$project_users_arr)){
355 $flag= true;
356 }
357 if($wppm_current_user_capability=='wppm_admin'){
358 $flag = true;
359 }
360 if(!empty($project_data) && $project_data['created_by']==$current_user->ID && $wppm_current_user_capability=='wppm_manager'){
361 $flag = true;
362 }
363 switch ($permission) {
364 case 'delete_proj_thread':
365 case 'edit_proj_comment':
366 (($flag==true) || ($current_user->ID == $proj_comment->created_by)) ? $response = true: $response = false;
367 break;
368 }
369 return apply_filters( 'wppm_has_proj_comment_permission', $response, $proj_id, $comment_id, $permission );
370 }
371
372 public function has_project_permission($permission,$project_id){
373 global $current_user,$wppmfunction,$wpdb ;
374 $project_data = $wppmfunction->get_project($project_id);
375 $project_id = esc_sql($project_id);
376 $cu_id = esc_sql($current_user->ID);
377 $project_user = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = ".esc_sql($project_id)." AND user_id = ".esc_sql($cu_id)."");
378 $project_users = $wpdb->get_var("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = '$project_id'");
379 $project_users_arr = explode(',',(string)$project_users);
380 $user = wp_get_current_user();
381 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
382 if(!empty($project_data)){
383 $co_worker = $project_data['users'];
384 $co_worker_array = explode(",",(string)$co_worker);
385 }
386 switch ($permission) {
387 case 'view_project':
388 ((!empty($co_worker_array)) && (in_array($current_user->ID,$co_worker_array )) )? $response = true: $response = false;
389 break;
390 case 'change_project_status':
391 case 'assign_project_users':
392 case 'change_project_raised_by':
393 case 'change_project_details':
394 case 'delete_project':
395 $flag = false;
396 if( (!empty($project_user)) && ($project_user->role_id == 1) && in_array($current_user->ID,$project_users_arr)){
397 $flag = true;
398 }
399
400 (((!empty($co_worker_array)) && (in_array($current_user->ID,$co_worker_array) && $flag==true) || $wppm_current_user_capability == 'wppm_admin')) ? $response = true: $response = false;
401 break;
402 }
403 return apply_filters( 'wppm_has_project_permission', $response, $project_id, $permission );
404 }
405
406 public function change_status($task_id, $status_id){
407 global $wpdb,$wppmfunction;
408 $task_data = $wppmfunction->get_task($task_id);
409 $prev_status = $task_data['status'];
410 $values=array(
411 'status'=>esc_sql($status_id)
412 );
413 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
414 $old_task_status_meta = $wppmfunction->get_task_meta($task_id,'old_task_status',true);
415 if(!empty($old_task_status_meta)){
416 $wppmfunction->delete_task_meta($task_id,'old_task_status');
417 }
418 $wppmfunction->add_task_meta($task_id,'old_task_status',$prev_status);
419
420 do_action('wppm_set_change_task_status', $task_id, $status_id, $prev_status);
421 }
422
423 public function change_raised_by($task_id, $user_id){
424 global $wpdb;
425 $values=array(
426 'created_by'=>esc_sql($user_id)
427 );
428 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
429 }
430
431 public function change_task_label($task_id, $task_label){
432 global $wpdb;
433 $values=array(
434 'task_name'=>stripslashes($task_label)
435 );
436 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
437 }
438
439 public function change_task_project_label($task_id, $project_label){
440 global $wpdb;
441 $values=array(
442 'project'=>esc_sql($project_label)
443 );
444 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
445 }
446
447 public function change_start_date($task_id, $task_start_date){
448 global $wpdb;
449 $values=array(
450 'start_date'=>esc_sql($task_start_date)
451 );
452 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
453 }
454
455 public function change_end_date($task_id, $task_end_date){
456 global $wpdb;
457 $values=array(
458 'end_date'=>esc_sql($task_end_date)
459 );
460 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
461 }
462
463 public function change_priority($task_id, $task_priority){
464 global $wpdb;
465 $values=array(
466 'priority'=>esc_sql($task_priority)
467 );
468 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
469 }
470
471 public function change_description($task_id, $task_description){
472 global $wpdb;
473 $task_description = wp_kses_post($task_description);
474 $values=array(
475 'description'=>$task_description
476 );
477 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
478 }
479
480 public function change_project($task_id,$proj_id){
481 global $wpdb,$wppmfunction;
482 $task_data = $wppmfunction->get_task($task_id);
483 $old_proj = $task_data['project'];
484 $old_proj = esc_sql( $old_proj);
485 $proj_id = esc_sql( $proj_id);
486 $project_data = $wppmfunction->get_project($proj_id);
487 $task_assign_users = $task_data['users'];
488 $tusers_array = array();
489 if(!empty($task_data['users'])){
490 $task_users_array = explode(",",(string)$task_assign_users);
491 }
492 if(!empty($project_data['users'])){
493 $project_users = explode(",",(string)$project_data['users']);
494 }
495 if(!empty($project_users)){
496 if(!empty($task_users_array)){
497 foreach($task_users_array as $tuser){
498 if(!in_array($tuser,$project_users)){
499 $wpdb->delete( $wpdb->prefix.'wppm_project_users', array( 'proj_id' => "$proj_id",'user_id'=>"$tuser") );
500 }
501 elseif(in_array($tuser,$project_users)){
502 $tusers_array[] = $tuser;
503 $tuser = esc_sql($tuser);
504 $sql = 'SELECT role_id FROM ' . $wpdb->prefix . 'wppm_project_users WHERE proj_id = ' . $old_proj .' AND user_id = '."$tuser";
505 $old_proj_user_role = $wpdb->get_var( $sql );
506 $sql = 'SELECT role_id FROM ' . $wpdb->prefix . 'wppm_project_users WHERE proj_id = ' . $proj_id .' AND user_id = '."$tuser";
507 $proj_users_role = $wpdb->get_var( $sql );
508 if(!empty( $old_proj_user_role) && $old_proj_user_role!=$proj_users_role){
509 $value=array(
510 'role_id'=>esc_sql($proj_users_role)
511 );
512 $wpdb->update($wpdb->prefix.'wppm_project_users', $value, array('proj_id'=>"$proj_id", 'user_id'=>"$tuser"));
513 }
514 }
515 }
516 }
517 }
518 $tusers = implode(",",$tusers_array);
519 $values=array(
520 'project'=>esc_sql($proj_id),
521 'users'=>esc_sql($tusers)
522 );
523 $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
524 }
525
526 public function get_task_comment($comment_id){
527 global $wpdb;
528 $task_comment_data = array();
529 $comment_id = esc_sql($comment_id);
530 $task_comment = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE id='$comment_id' ");
531 if( $task_comment ){
532 $task_comment_data = json_decode(json_encode($task_comment), true);
533 }
534 return $task_comment_data;
535 }
536
537 public function get_proj_comment($comment_id){
538 global $wpdb;
539 $project_comment_data = array();
540 $comment_id = esc_sql($comment_id);
541 $project_comment = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_comment WHERE id='$comment_id' ");
542 if( $project_comment ){
543 $project_comment_data = json_decode(json_encode($project_comment), true);
544 }
545 return $project_comment_data;
546 }
547
548 public function change_task_comment($comment_id,$comment_body){
549 global $wpdb;
550 $comment_id = esc_sql($comment_id);
551 $comment_body = wp_kses_post($comment_body);
552 $values=array(
553 'body'=>$comment_body
554 );
555 $wpdb->update($wpdb->prefix.'wppm_task_comment', $values, array('id'=>"$comment_id"));
556 }
557
558 public function change_proj_comment($comment_id,$comment_body){
559 global $wpdb;
560 $comment_id = esc_sql($comment_id);
561 $comment_body = wp_kses_post($comment_body);
562 $values=array(
563 'body'=>$comment_body
564 );
565 $wpdb->update($wpdb->prefix.'wppm_project_comment', $values, array('id'=>"$comment_id"));
566 }
567
568 public function change_project_label($project_id,$project_label){
569 global $wpdb;
570 $project_id = esc_sql($project_id);
571 $values=array(
572 'project_name'=>esc_sql($project_label)
573 );
574 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id"));
575 }
576
577 public function change_project_start_date($project_id, $project_start_date){
578 global $wpdb;
579 $project_id = esc_sql($project_id);
580 $project_start_date = esc_sql($project_start_date);
581 $values=array(
582 'start_date'=>$project_start_date
583 );
584 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id"));
585 }
586
587 public function change_project_end_date($project_id, $project_end_date){
588 global $wpdb;
589 $project_id = esc_sql($project_id);
590 $project_end_date = esc_sql($project_end_date);
591 $values=array(
592 'end_date'=>$project_end_date
593 );
594 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>$project_id));
595 }
596
597 public function change_category($project_id, $project_category){
598 global $wpdb;
599 $project_id = esc_sql($project_id);
600 $project_category = esc_sql($project_category);
601 $values=array(
602 'cat_id'=>$project_category
603 );
604 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id"));
605 }
606
607 public function change_project_description($project_id, $project_description){
608 global $wpdb;
609 $project_id = esc_sql($project_id);
610 $values=array(
611 'description'=>wp_kses_post($project_description)
612 );
613 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id"));
614 }
615
616 public function change_project_status($project_id,$status_id){
617 global $wpdb,$wppmfunction,$current_user;
618 $change_status_value= array();
619 $proj_data = $wppmfunction->get_project($project_id);
620 $prev_status = $proj_data['status'];
621 $cu_id = esc_sql($current_user->ID);
622 $values=array(
623 'status'=>esc_sql($status_id)
624 );
625 $project_id = esc_sql($project_id);
626 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id"));
627 $old_project_status_meta = $wppmfunction->get_project_meta($project_id,'old_project_status',true);
628 if(!empty($old_project_status_meta)){
629 $wppmfunction->delete_project_meta($project_id,'old_project_status');
630 }
631 $change_status_value = array('prev_status'=>"$prev_status",'new_status'=>"$status_id");
632 $change_status_obj = serialize($change_status_value);
633 $log_values = array('proj_id'=>"$project_id",'body'=>$change_status_obj,'attachment_ids'=>"",'create_time'=>date("Y-m-d h:i:sa"),'created_by'=>"$cu_id" );
634 $wpdb->insert($wpdb->prefix . 'wppm_project_comment',$log_values);
635 $log_id = esc_sql($wpdb->insert_id);
636 $proj_log_values = array('proj_id'=>"$project_id",'comment_id'=>"$log_id",'comment_type'=>'change_proj_status');
637 $wpdb->insert($wpdb->prefix . 'wppm_project_comment_meta',$proj_log_values);
638 $wppmfunction->add_project_meta($project_id,'old_project_status',$prev_status);
639 do_action('wppm_set_change_project_status', $project_id, $status_id, $prev_status);
640 }
641
642 public function change_project_raised_by($project_id, $user_id){
643 global $wpdb;
644 $values=array(
645 'created_by'=>esc_sql($user_id)
646 );
647 $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id"));
648 }
649
650 // Email Notification types
651 public function get_email_notification_types(){
652 $notification_types = array(
653 'new_project'=>__('New Project','taskbuilder'),
654 'new_task'=>__('New Task','taskbuilder'),
655 'change_project_status' => __('Change Project Status','taskbuilder'),
656 'change_task_status' => __('Change Task Status','taskbuilder'),
657 'change_project_assign_users' => __('Change Project Assign Users','taskbuilder'),
658 'change_task_assign_users' => __('Change Task Assign Users','taskbuilder'),
659 'new_discussion' => __('New Comment','taskbuilder'),
660 'new_proj_discussion' =>__('New Project Comment','taskbuilder')
661 );
662 return apply_filters('wppm_en_types',$notification_types);
663 }
664
665 public function check_rtl(){
666 $rtl_locale = array('ar','ary','ckb','haz','he_IL','fa_IR','ps','ur','ug_CN');
667 if(in_array(get_locale(),$rtl_locale)){
668 return 'rtl';
669 }else{
670 return 'ltr';
671 }
672 }
673
674 public function add_project_meta($proj_id,$meta_key,$meta_value){
675 global $wpdb;
676 $wpdb->insert(
677 $wpdb->prefix . 'wppm_project_meta',
678 array(
679 'project_id' =>$proj_id,
680 'meta_key' => $meta_key,
681 'meta_value' =>$meta_value
682 ));
683 }
684
685 public function add_task_meta($task_id,$meta_key,$meta_value){
686 global $wpdb;
687 $wpdb->insert(
688 $wpdb->prefix . 'wppm_task_meta',
689 array(
690 'task_id' => $task_id,
691 'meta_key' => $meta_key,
692 'meta_value' =>$meta_value
693 ));
694 }
695
696 public function get_project_meta($project_id,$meta_key,$flag = false){
697 global $wpdb,$wppmfunction;
698 $project_id = esc_sql($project_id);
699 $meta_key = esc_sql($meta_key);
700 if($flag){
701 $get_meta = $wpdb->get_var("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = '$project_id' AND meta_key = '$meta_key' ");
702 $project_meta = isset($get_meta) ? stripslashes($get_meta) : '';
703
704 } else {
705 $project_meta = array();
706 $results = $wpdb->get_results("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = '$project_id' AND meta_key = '$meta_key'");
707 if( (!empty($results)) ){
708 foreach ($results as $result) {
709 if(!empty($result)){
710 $project_meta[]= stripslashes($result->meta_value);
711 }
712 }
713 }
714 }
715 return $project_meta;
716 }
717
718 public function get_task_meta($task_id,$meta_key,$flag = false){
719 global $wpdb,$wppmfunction;
720 $task_id = esc_sql($task_id);
721 $meta_key = esc_sql($meta_key);
722 if($flag){
723 $get_meta = $wpdb->get_var("SELECT meta_value FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = '$task_id' AND meta_key = '$meta_key' ");
724 $task_meta = isset($get_meta) ? stripslashes($get_meta) : '';
725
726 } else {
727 $task_meta = array();
728 $results = $wpdb->get_results("SELECT meta_value FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = '$task_id' AND meta_key = '$meta_key'");
729 if( (!empty($results)) ){
730 foreach ($results as $result) {
731 if(!empty($result)){
732 $task_meta[]= stripslashes($result->meta_value);
733 }
734 }
735 }
736 }
737 return $task_meta;
738 }
739
740 public function get_previously_assigned_users($project_id){
741 global $wpdb,$wppmfunction;
742 $prev_assigned_users = $wppmfunction->get_project_meta($project_id,'prev_assigned_users');
743 $user_emails = array();
744 if(!empty($prev_assigned_users)){
745 foreach ($prev_assigned_users as $user) {
746 $userdata = get_userdata($user);
747 $user_emails[] = $userdata->user_email;
748
749 }
750 }
751 return apply_filters( 'wppm_get_prev_assigned_users_emails', $user_emails ,$project_id);
752 }
753
754 public function get_project_creator_email($project_id){
755 global $wpdb,$wppmfunction;
756 $project_data = $wppmfunction->get_project($project_id,'created_by');
757 $userdata = get_userdata($project_data['created_by']);
758 if(!empty( $userdata)){
759 $proj_creator_email[] = $userdata->user_email;
760 }
761 return apply_filters( 'wppm_get_project_creator_email', $proj_creator_email ,$project_id);
762 }
763
764 public function get_task_creator_email($task_id){
765 global $wpdb,$wppmfunction;
766 $task_data = $wppmfunction->get_task($task_id,'created_by');
767 $userdata = get_userdata($task_data['created_by']);
768 if(!empty( $userdata)){
769 $task_creator_email[] = $userdata->user_email;
770 }
771 return apply_filters( 'wppm_get_task_creator_email', $task_creator_email ,$task_id);
772 }
773
774 public function get_previously_assigned_task_users($task_id){
775 global $wpdb,$wppmfunction;
776 $prev_assigned_task_users = $wppmfunction->get_task_meta($task_id,'prev_assigned_task_users');
777 $user_emails = array();
778 if(!empty($prev_assigned_task_users)){
779 foreach ($prev_assigned_task_users as $user) {
780 if(!empty($user)){
781 $userdata = get_userdata($user);
782 $user_emails[] = $userdata->user_email;
783 }
784 }
785 }
786 return apply_filters( 'wppm_get_prev_assigned_task_users_emails', $user_emails ,$task_id);
787 }
788 /**
789 * Update project meta for project
790 */
791 function update_project_meta($project_id ,$meta_key ,$meta_value){
792 global $wpdb;
793 $project_id = esc_sql($project_id);
794 $meta_key = esc_sql($meta_key);
795 $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = '$project_id' AND meta_key = '$meta_key'");
796 $wpdb->update($wpdb->prefix.'wppm_project_meta', $meta_value, array('project_id'=>$project_id,'meta_key' => "$meta_key"));
797 }
798
799 /**
800 * Update task meta for task
801 */
802 function update_task_meta($task_id ,$meta_key ,$meta_value){
803 global $wpdb;
804 $task_id = esc_sql($task_id);
805 $meta_key = esc_sql($meta_key);
806 $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = '$task_id' AND meta_key = '$meta_key'");
807 $wpdb->update($wpdb->prefix.'wppm_task_meta', $meta_value, array('task_id'=>"$task_id",'meta_key' => "$meta_key"));
808 }
809
810 function delete_project_meta($project_id ,$meta_key){
811 global $wpdb;
812 $project_id = esc_sql($project_id);
813 $meta_key = esc_sql($meta_key);
814 $wpdb->delete( $wpdb->prefix.'wppm_project_meta', array( 'project_id' => "$project_id",'meta_key'=>"$meta_key") );
815 }
816
817 function delete_task_meta($task_id ,$meta_key){
818 global $wpdb;
819 $task_id = esc_sql($task_id);
820 $meta_key = esc_sql($meta_key);
821 $wpdb->delete( $wpdb->prefix.'wppm_task_meta', array( 'task_id' => "$task_id",'meta_key'=>"$meta_key") );
822 }
823
824 public function replace_macro($str,$project_id){
825 include WPPM_ABSPATH . 'includes/replace_macro.php';
826 return $str;
827 }
828
829 public function replace_task_macro($str,$task_id){
830 include WPPM_ABSPATH . 'includes/replace_task_macro.php';
831 return $str;
832 }
833
834 public function get_old_project_status_name($id){
835 global $wppmfunction, $wpdb;
836 $old_project_status = $wppmfunction->get_project_meta($id,'old_project_status',true);
837 $old_project_status = esc_sql($old_project_status);
838 $status_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_project_statuses WHERE id ='$old_project_status'");
839 return $status_name;
840 }
841
842 public function get_new_project_status_name($status_id){
843 global $wpdb;
844 $status_id = esc_sql($status_id);
845 $status_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_project_statuses WHERE id ='$status_id'");
846 return $status_name;
847 }
848
849 public function get_old_task_status_name($task_id){
850 global $wppmfunction, $wpdb;
851 $old_task_status = $wppmfunction->get_task_meta($task_id,'old_task_status',true);
852 $old_task_status = esc_sql($old_task_status);
853 $status_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_task_statuses WHERE id ='$old_task_status'");
854 return $status_name;
855 }
856
857 public function get_new_task_status_name($status_id){
858 global $wpdb;
859 $status_id = esc_sql($status_id);
860 $status_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_task_statuses WHERE id ='$status_id'");
861 return $status_name;
862 }
863
864 public function get_project_category_name($cat_id){
865 global $wpdb;
866 $cat_id = esc_sql($cat_id);
867 if(!empty($cat_id)){
868 $cat_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_project_categories WHERE id ='$cat_id'");
869 }else{
870 $cat_name = "";
871 }
872 return $cat_name;
873 }
874
875 public function get_project_assigned_users_names($project_id){
876 global $wppmfunction;
877 $wppm_project_data = $wppmfunction->get_project($project_id);
878 if(!empty($wppm_project_data['users'])){
879 $wppm_project_assign_users_array = explode(",", $wppm_project_data['users']);
880 }else{
881 $wppm_project_assign_users_array = array();
882 }
883 $users_names = array();
884 if(!empty($wppm_project_assign_users_array)){
885 foreach ($wppm_project_assign_users_array as $user_id) {
886 if(!empty($user_id)){
887 $userdata = get_userdata( $user_id );
888 if(!empty($userdata)){
889 $users_names[] = $userdata->display_name;
890 }
891 }
892 }
893 }
894 return implode(', ', $users_names);
895 }
896
897 public function get_task_assigned_users_names($task_id){
898 global $wppmfunction;
899 $wppm_task_data = $wppmfunction->get_task($task_id);
900 $wppm_task_assign_users_array = explode(",", (string)$wppm_task_data['users']);
901 $users_names = array();
902 if(!empty($wppm_task_assign_users_array)){
903 foreach ($wppm_task_assign_users_array as $user_id) {
904 if(!empty($user_id)){
905 $userdata = get_userdata( $user_id );
906 if(!empty($userdata)){
907 $users_names[] = $userdata->display_name;
908 }
909 }
910 }
911 }
912 return implode(', ', $users_names);
913 }
914
915 public function get_project_previously_assigned_users_names($project_id){
916 global $wppmfunction;
917 $wppm_project_assign_users = $wppmfunction->get_project_meta($project_id,'prev_assigned_users');
918 $users_names = array();
919 if(!empty($wppm_project_assign_users)){
920 foreach ($wppm_project_assign_users as $user) {
921 if(!empty($user)){
922 $userdata = get_userdata( $user );
923 $users_names[] = $userdata->display_name;
924 }
925 }
926 }
927 return implode(', ', $users_names);
928 }
929
930 public function get_task_previously_assigned_users_names($task_id){
931 global $wppmfunction;
932 $wppm_task_assign_users = $wppmfunction->get_task_meta($task_id,'prev_assigned_task_users');
933 $users_names = array();
934 if(!empty($wppm_task_assign_users)){
935 foreach ($wppm_task_assign_users as $user) {
936 if(!empty($user)){
937 $userdata = get_userdata( $user );
938 $users_names[] = $userdata->display_name;
939 }
940 }
941 }
942 return implode(', ', $users_names);
943 }
944
945 public function get_task_priority_name($priority){
946 global $wpdb;
947 $priority = esc_sql($priority);
948 $priority_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_task_priorities WHERE id ='$priority'");
949 return $priority_name;
950 }
951
952 public function get_last_comment_user_name($task_id){
953 global $wpdb;
954 $task_id = esc_sql($task_id);
955 $task_comment_creator = $wpdb->get_var("SELECT created_by FROM {$wpdb->prefix}wppm_task_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_task_comment) AND task_id = '$task_id')");
956 if(!empty($task_comment_creator)){
957 $user = get_userdata( $task_comment_creator );
958 return $user->display_name;
959 }
960 }
961
962 public function get_last_comment_body($task_id){
963 global $wpdb;
964 $task_id = esc_sql($task_id);
965 $task_comment = $wpdb->get_var("SELECT body FROM {$wpdb->prefix}wppm_task_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_task_comment) AND task_id = '$task_id')");
966 return $task_comment;
967 }
968
969 public function create_duplicate_task($ptask_id, $project_id,$ajax_nonce){
970 include WPPM_ABSPATH . 'includes/admin/tasks/open_task/wppm_set_clone_task.php';
971 }
972
973 public function get_last_comment_proj_user_name($project_id){
974 global $wpdb;
975 $project_id = esc_sql($project_id);
976 $proj_comment_creator = $wpdb->get_var("SELECT created_by FROM {$wpdb->prefix}wppm_project_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_project_comment) AND proj_id = '$project_id')");
977 if(!empty($proj_comment_creator)){
978 $user = get_userdata( $proj_comment_creator );
979 return $user->display_name;
980 }
981 }
982
983 public function get_proj_comment_body($project_id){
984 global $wpdb;
985 $project_id = esc_sql($project_id);
986 $proj_comment = $wpdb->get_var("SELECT body FROM {$wpdb->prefix}wppm_project_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_project_comment) AND proj_id = '$project_id')");
987 return $proj_comment;
988 }
989
990 public function get_project_url($project_id, $view){
991 global $wpdb,$wppmfunction;
992 $project_id = esc_sql($project_id);
993 $page_settings = get_option( 'wppm-page-settings' );
994 if ( $view == '0' ) {
995 $url = admin_url( 'admin.php?page=wppm-projects&section=project-list&id=' . $project_id );
996 } else {
997 $url = get_permalink( $page_settings['project-url-page'] );
998 $auth_id = $wppmfunction->get_project_meta($project_id,'project_auth_code',true);
999
1000 $url = add_query_arg(
1001 array(
1002 'project-id' => $project_id,
1003 'auth-code' => $auth_id,
1004
1005 ),
1006 $url
1007 );
1008 }
1009
1010 return $url;
1011 }
1012
1013 public function get_task_url($task_id, $view){
1014 global $wpdb,$wppmfunction;
1015 $task_id = esc_sql($task_id);
1016 $page_settings = get_option( 'wppm-page-settings' );
1017 if ( $view == '0' ) {
1018 $url = admin_url( 'admin.php?page=wppm-tasks&section=task-list&id=' . $task_id );
1019 } else{
1020 $url = get_permalink( $page_settings['task-url-page'] );
1021 $auth_id = $this->wppm_get_auth_code($task_id);
1022 $url = add_query_arg(
1023 array(
1024 'task-id' => $task_id,
1025 'auth-code' => $auth_id,
1026 ),
1027 $url
1028 );
1029
1030 }
1031
1032 return $url;
1033 }
1034
1035 public function wppm_user_role(){
1036 $user_role = array(
1037 'wppm_admin' => array(
1038 'label' => __('WPPM Administrator','taskbuilder'),
1039 ),
1040 'wppm_manager' => array(
1041 'label' => __('WPPM Manager','taskbuilder'),
1042 )
1043 );
1044 return $user_role;
1045 }
1046
1047 public static function wppm_toolbar_options_setting() {
1048 $toolbar = array(
1049 array(
1050 'name' => esc_attr__( 'Bold', 'taskbuilder' ),
1051 'value' => 'bold',
1052 ),
1053 array(
1054 'name' => esc_attr__( 'Italic', 'taskbuilder' ),
1055 'value' => 'italic',
1056 ),
1057 array(
1058 'name' => esc_attr__( 'Underline', 'taskbuilder' ),
1059 'value' => 'underline',
1060 ),
1061 array(
1062 'name' => esc_attr__( 'Blockquote', 'taskbuilder' ),
1063 'value' => 'blockquote',
1064 ),
1065 array(
1066 'name' => esc_attr__( 'Align', 'taskbuilder' ),
1067 'value' => 'align',
1068 ),
1069 array(
1070 'name' => esc_attr__( 'Bulleted list', 'taskbuilder' ),
1071 'value' => 'bullist',
1072 ),
1073 array(
1074 'name' => esc_attr__( 'Numbered list', 'taskbuilder' ),
1075 'value' => 'numlist',
1076 ),
1077 array(
1078 'name' => esc_attr__( 'Right to left', 'taskbuilder' ),
1079 'value' => 'rtl',
1080 ),
1081 array(
1082 'name' => esc_attr__( 'Link', 'taskbuilder' ),
1083 'value' => 'link',
1084 ),
1085 array(
1086 'name' => esc_attr__( 'Image', 'taskbuilder' ),
1087 'value' => 'wppm_insert_editor_img',
1088 ),
1089 array(
1090 'name' => esc_attr__( 'Text Color', 'taskbuilder' ),
1091 'value' => 'forecolor',
1092 ),
1093 array(
1094 'name' => esc_attr__( 'Text Background Color', 'taskbuilder' ),
1095 'value' => 'backcolor',
1096 ),
1097 array(
1098 'name' => esc_attr__( 'Strikethrough', 'taskbuilder' ),
1099 'value' => 'strikethrough',
1100 ),
1101 );
1102 return $toolbar;
1103 }
1104
1105 public static function wppm_load_setting_header_html() {
1106 ?>
1107 <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; ">
1108 <div class="wppm-header-title" style="display: flex; align-items: center; gap: 3px;">
1109 <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;"/>
1110 <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>
1111 </div>
1112 <div class="wppm-header-button" style="display: flex; justify-content: flex-end; gap: 3px;">
1113 <div class="wppm-btn
1114 " 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);">
1115 <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;"/>
1116 <a href="https://taskbuilder.net/help/" target="__blank" style="color:#fff"><?php esc_html_e( 'Help', 'taskbuilder' )?></a>
1117 </div>
1118 <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);">
1119 <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;"/>
1120 <a href="https://taskbuilder.net/support/?wpsc-section=ticket-list" target="__blank" style="color:#fff"><?php esc_html_e( 'Support', 'taskbuilder' )?></a>
1121 </div>
1122 <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);">
1123 <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;"/>
1124 <a href="https://taskbuilder.net/pricing/" target="__blank" style="color:#fff"><?php esc_html_e( 'Get pro', 'taskbuilder' )?></a>
1125 </div>
1126 </div>
1127 </div>
1128 <?php
1129 }
1130 }
1131 endif;
1132 $GLOBALS['wppmfunction'] = new WPPM_Functions();