PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 5.0.9
Taskbuilder – Project Management & Task Management Tool With Kanban Board v5.0.9
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 / admin / tasks / wppm_tasks_list.php

wppm_tasks_list.php in Taskbuilder – Project Management & Task Management Tool With Kanban Board 5.0.9, at includes/admin/tasks/wppm_tasks_list.php

1,056 lines 60.0 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 global $current_user,$wpdb,$wppmfunction;
6 $task_per_page = 20;
7 $page_no = isset($_POST['page_no']) ? intval(sanitize_text_field(wp_unslash($_POST['page_no']))) : '0';
8 $project_id = isset($_POST['project_id']) ? intval(sanitize_text_field(wp_unslash($_POST['project_id']))) : "0";
9 $search_tag = isset($_POST['task_search']) ? sanitize_text_field(wp_unslash($_POST['task_search'])) : '';
10 $order = isset($_POST['order']) ? sanitize_text_field(wp_unslash($_POST['order'])) :"ASC";
11 $sort_by = isset($_POST['sort_by']) ? sanitize_text_field(wp_unslash($_POST['sort_by'])):"task_name";
12 $filter_by = isset($_POST['wppm_task_filter']) ? sanitize_text_field(wp_unslash($_POST['wppm_task_filter'])) : "all";
13 $proj_filter = isset($_POST['wppm_proj_filter']) ? sanitize_text_field(wp_unslash($_POST['wppm_proj_filter'])) : "0";
14 $proj_attr = isset($_POST['wppm_project_attr']) ? sanitize_text_field(wp_unslash($_POST['wppm_project_attr'])):"";
15 $public_projects = isset($_POST['public_projects']) ? sanitize_text_field(wp_unslash($_POST['public_projects'])):"0";
16 $page = isset($_POST['page']) ? sanitize_text_field(wp_unslash($_POST['page'])):"";
17 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
18 $wppm_create_tasks_coworkers_permission = get_option('wppm_allow_coworkers_create_task');
19 $orderby_proj_sql = esc_sql(sanitize_sql_orderby( "project_name" ));
20 $wppm_date_setting = get_option('wppm_date_setting');
21 $wppm_hide_completed_status_task = get_option('wppm_hide_completed_status_task');
22 $wppm_hide_task_statuses_from_frontend = get_option('wppm_hide_task_statuses_from_frontend');
23 $wppm_deafault_time_duration_task = get_option('wppm_display_time_duration_task');
24 if(!empty($wppm_hide_task_statuses_from_frontend)){
25 $wppm_hide_task_statuses_from_frontend = explode(",",$wppm_hide_task_statuses_from_frontend);
26 } else {
27 $wppm_hide_task_statuses_from_frontend = '';
28 }
29 $proj_attr = esc_sql($proj_attr);
30 $is_frontend = 0;
31 if ( ! empty( $proj_attr ) ) {
32 $wppm_proj_attr = $wpdb->prepare(
33 ' AND (proj.project_name = %s)',
34 $proj_attr
35 );
36 } else {
37 $wppm_proj_attr = '';
38 }
39 $current_date = wp_date('Y-m-d');
40 $cu_id = absint($current_user->ID);
41 $archived_where = '';
42 if ( isset( $page ) && $page === 'wppm-archived-tasks' ) {
43 $archived_where = ' AND Task.is_archived = 1';
44 } elseif ( isset( $page ) && $page === 'wppm-tasks' ) {
45 $archived_where = ' AND Task.is_archived = 0';
46 }
47 $wppm_task_time = get_option('wppm_task_time');
48 $query = "SELECT proj.*
49 FROM {$wpdb->prefix}wppm_project AS proj
50 LEFT JOIN {$wpdb->prefix}wppm_project_meta AS proj_meta ON proj.id = proj_meta.project_id";
51 if ( $current_user->has_cap( 'manage_options' ) || $wppm_current_user_capability === 'wppm_admin' ) {
52 if ( ! empty( $proj_attr ) ) {
53 $where = $wpdb->prepare(
54 " WHERE proj.project_name = %s
55 GROUP BY proj.id
56 ORDER BY $orderby_proj_sql",
57 $proj_attr
58 );
59 } else {
60 if ( ! empty( $public_projects ) ) {
61 $where = $wpdb->prepare(
62 " WHERE proj_meta.meta_key = %s
63 AND proj_meta.meta_value = %d
64 GROUP BY proj.id
65 ORDER BY $orderby_proj_sql",
66 'public_project',
67 1
68 );
69 } else {
70 $where = " GROUP BY proj.id ORDER BY $orderby_proj_sql";
71 }
72 }
73 } else {
74 if ( ! empty( $public_projects ) ) {
75 $where = $wpdb->prepare(
76 " WHERE (
77 proj_meta.meta_key = %s
78 AND proj_meta.meta_value = %d
79 )
80 $wppm_proj_attr
81 GROUP BY proj.id
82 ORDER BY $orderby_proj_sql",
83 'public_project',
84 1
85 );
86
87 } else {
88 $where = $wpdb->prepare(
89 " WHERE (
90 FIND_IN_SET(%d, proj.users)
91 OR (
92 proj_meta.meta_key = %s
93 AND proj_meta.meta_value = %d
94 )
95 OR proj.created_by = %d
96 )
97 $wppm_proj_attr
98 GROUP BY proj.id
99 ORDER BY $orderby_proj_sql",
100 $current_user->ID,
101 'public_project',
102 1,
103 $cu_id
104 );
105 }
106 }
107 $where = apply_filters('wppm_project_filter_in_task_list_where',$where);
108 $query.= $where;
109 $projects = $wpdb->get_results($query);
110 $appearance_settings = get_option("wppm-ap-task-list");
111 $filters = array(
112 'sort_by' => $sort_by,
113 'order' => $order,
114 'search' => $search_tag,
115 'filter'=>$filter_by,
116 'proj_filter' =>$proj_filter
117 );
118 $tl_filters = isset( $_COOKIE['wppm_filters'] ) ? sanitize_text_field( wp_unslash( $_COOKIE['wppm_filters'] ) ) : $filters;
119 if(!is_array($tl_filters)){
120 $tl_filters = json_decode($tl_filters);
121 $tl_filters_arr = (array) $tl_filters;
122 } else{
123 $tl_filters_arr = $filters;
124 }
125 $wppm_tl_filter = "1=1";
126 $order = isset($_POST['order']) ? sanitize_text_field(wp_unslash($_POST['order'])) :$tl_filters_arr['order'];
127 $sort_by = isset($_POST['sort_by']) ? sanitize_text_field(wp_unslash($_POST['sort_by'])):$tl_filters_arr['sort_by'];
128 $search_tag = isset($_POST['task_search']) ? sanitize_text_field(wp_unslash($_POST['task_search'])) : $tl_filters_arr['search'];
129 $filter_by = isset($_POST['wppm_task_filter']) ? sanitize_text_field(wp_unslash($_POST['wppm_task_filter'])) : $tl_filters_arr['filter'];
130 $proj_filter = isset($_POST['wppm_proj_filter']) ? sanitize_text_field(wp_unslash($_POST['wppm_proj_filter'])) : $tl_filters_arr['proj_filter'];
131 $proj_filter = esc_sql($proj_filter);
132 if($sort_by == ""){
133 $sort_by = 'task_name';
134 }
135 $filters = array(
136 'sort_by' => $sort_by,
137 'order' => $order,
138 'search'=>$search_tag,
139 'filter'=>$filter_by,
140 'proj_filter'=>$proj_filter
141 );
142 setcookie('wppm_filters',wp_json_encode( $filters ),time() + 3600);
143
144 // Allowed sort columns
145 $allowed_sort_by = [
146 'project' => 'proj.project_name',
147 'status' => 'task_statuses.name',
148 'priority' => 'task_priorities.name',
149 'start_date' => 'Task.start_date',
150 'end_date' => 'Task.end_date',
151 'TIMESTAMPDIFF(SECOND, Task.start_date, Task.end_date)' => 'TIMESTAMPDIFF(SECOND, Task.start_date, Task.end_date)',
152 ];
153
154 // Resolve sort_by safely
155 $sort_key = isset($_POST['sort_by'])
156 ? sanitize_text_field(wp_unslash($_POST['sort_by']))
157 : ($tl_filters_arr['sort_by'] ?? 'task_name');
158
159 $sort_by = $allowed_sort_by[$sort_key] ?? 'Task.task_name';
160 // Resolve order safely
161 $order = (isset($_POST['order']) && strtoupper(wp_unslash($_POST['order'])) === 'ASC')
162 ? 'ASC'
163 : 'DESC';
164
165 if($filter_by=='all'){
166 if($wppm_hide_completed_status_task == 0){
167 $wppm_tl_filter = "Task.status!='4'";
168 }
169 }
170 if($filter_by=='4'){
171 $wppm_tl_filter = "Task.status='4'";
172 }elseif($filter_by=='overdue'){
173 $wppm_tl_filter = "Task.status!='4' AND (CAST(Task.end_date AS DATE)) < '$current_date'";
174 }elseif($filter_by == 'unassigned'){
175 $wppm_tl_filter = "Task.users=''";
176 }elseif($filter_by == '1'){
177 $wppm_tl_filter = "Task.status='1'";
178 }elseif($filter_by == '2'){
179 $wppm_tl_filter = "Task.status='2'";
180 }elseif($filter_by == '3'){
181 $wppm_tl_filter = "Task.status='3'";
182 }elseif($filter_by == 'mine'){
183 $wppm_tl_filter = "(FIND_IN_SET('$current_user->ID',Task.users)>0)";
184 }elseif($filter_by == 'archived'){
185 $wppm_tl_filter = "Task.is_archived = 1";
186 }
187
188 if(!empty($wppm_hide_task_statuses_from_frontend) && is_array($wppm_hide_task_statuses_from_frontend) && ((isset($_POST['is_frontend'])) && (sanitize_text_field(wp_unslash($_POST['is_frontend']))==1))){
189 foreach($wppm_hide_task_statuses_from_frontend as $status){
190 $wppm_tl_filter .= " AND Task.status != '$status'";
191 }
192 }
193 if ( $proj_filter != 0 || $project_id != 0 ) {
194 if ( $project_id != 0 ) {
195 $proj_filter = $project_id;
196 }
197 $proj_filter = absint( $proj_filter );
198 $wppm_task_by_proj_filter = $wpdb->prepare(
199 "Task.project = %d",
200 $proj_filter
201 );
202 } else {
203 $wppm_task_by_proj_filter = "1=1";
204 }
205 $wppm_default_task_date = get_option('wppm_default_task_date');
206 $search_tag_text = "";
207 if(!empty($search_tag)){
208 $search_tag_text = '%'.$wpdb->esc_like($search_tag).'%';
209 $query = ("SELECT Task.*
210 FROM {$wpdb->prefix}wppm_task AS Task
211 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
212 Left join {$wpdb->prefix}wppm_task_statuses task_statuses ON Task.status = task_statuses.id
213 Left join {$wpdb->prefix}wppm_task_priorities task_priorities ON Task.priority = task_priorities.id
214 Left join {$wpdb->prefix}wppm_project_users proj_users ON Task.project = proj_users.proj_id
215 Left join {$wpdb->base_prefix}users user ON (FIND_IN_SET(user.ID,Task.users)>0)
216 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id");
217 }
218 else{
219 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
220 if($sort_by=='task_name'|| $sort_by=='start_date' || $sort_by=='end_date'){
221 $query = ( "SELECT Task.* FROM {$wpdb->prefix}wppm_task AS Task
222 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
223 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id
224 ");
225 } else{
226 $query = ( "SELECT Task.* FROM {$wpdb->prefix}wppm_task AS Task
227 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
228 Left join {$wpdb->prefix}wppm_task_statuses task_statuses ON Task.status = task_statuses.id
229 Left join {$wpdb->prefix}wppm_task_priorities task_priorities ON Task.priority = task_priorities.id
230 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id
231 ");
232 }
233 }else{
234 $query = ( "SELECT Task.*
235 FROM {$wpdb->prefix}wppm_task AS Task
236 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
237 Left join {$wpdb->prefix}wppm_project_users proj_users ON Task.project = proj_users.proj_id
238 Left join {$wpdb->prefix}wppm_task_statuses task_statuses ON Task.status = task_statuses.id
239 Left join {$wpdb->prefix}wppm_task_priorities task_priorities ON Task.priority = task_priorities.id
240 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id
241 ");
242 }
243 }
244 $no_of_rows = ( "SELECT count(*) FROM ($query");
245 if(!empty($search_tag )){
246 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
247 if(!empty($public_projects)){
248 //$where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') $wppm_proj_attr ";
249 $where = $wpdb->prepare( " WHERE (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter
250 AND (
251 Task.task_name LIKE %s
252 OR proj.project_name LIKE %s
253 OR task_statuses.name LIKE %s
254 OR task_priorities.name LIKE %s
255 OR user.display_name LIKE %s
256 ) $wppm_proj_attr",
257 $search_tag_text,
258 $search_tag_text,
259 $search_tag_text,
260 $search_tag_text,
261 $search_tag_text
262 );
263 }else{
264 $where = $wpdb->prepare(
265 " WHERE $wppm_tl_filter
266 AND $wppm_task_by_proj_filter
267 AND (
268 Task.task_name LIKE %s
269 OR proj.project_name LIKE %s
270 OR task_statuses.name LIKE %s
271 OR task_priorities.name LIKE %s
272 OR user.display_name LIKE %s
273 )
274 $wppm_proj_attr",
275 $search_tag_text,
276 $search_tag_text,
277 $search_tag_text,
278 $search_tag_text,
279 $search_tag_text
280 );
281 }
282 } else{
283 if(!empty($public_projects)){
284 $where = $wpdb->prepare(
285 " WHERE
286 (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1)
287 AND $wppm_tl_filter
288 AND $wppm_task_by_proj_filter
289 AND (
290 (
291 FIND_IN_SET(%d, Task.users) > 0
292 OR Task.created_by = %d
293 OR (
294 proj_users.user_id = %d
295 AND proj_users.role_id = 1
296 AND FIND_IN_SET(%d, proj.users) > 0
297 )
298 OR (
299 Task.project = proj_meta.project_id
300 AND proj_meta.meta_key='public_project'
301 AND proj_meta.meta_value=1
302 )
303 OR (
304 proj.created_by = %d
305 AND FIND_IN_SET(%d, proj.users) > 0
306 )
307 )
308 AND (
309 Task.task_name LIKE %s
310 OR proj.project_name LIKE %s
311 OR task_statuses.name LIKE %s
312 OR task_priorities.name LIKE %s
313 OR user.display_name LIKE %s
314 )
315 )
316 $wppm_proj_attr",
317 $current_user->ID,
318 $cu_id,
319 $cu_id,
320 $current_user->ID,
321 $cu_id,
322 $current_user->ID,
323 $search_tag_text,
324 $search_tag_text,
325 $search_tag_text,
326 $search_tag_text,
327 $search_tag_text
328 );
329 }else{
330 $where = $wpdb->prepare(
331 " WHERE
332 $wppm_tl_filter
333 AND $wppm_task_by_proj_filter
334 AND (
335 (
336 FIND_IN_SET(%d, Task.users) > 0
337 OR Task.created_by = %d
338 OR (
339 proj_users.user_id = %d
340 AND proj_users.role_id = 1
341 AND FIND_IN_SET(%d, proj.users) > 0
342 )
343 OR (
344 Task.project = proj_meta.project_id
345 AND proj_meta.meta_key='public_project'
346 AND proj_meta.meta_value=1
347 )
348 OR (
349 proj.created_by = %d
350 AND FIND_IN_SET(%d, proj.users) > 0
351 )
352 )
353 AND (
354 Task.task_name LIKE %s
355 OR proj.project_name LIKE %s
356 OR task_statuses.name LIKE %s
357 OR task_priorities.name LIKE %s
358 OR user.display_name LIKE %s
359 )
360 )
361 $wppm_proj_attr",
362 $current_user->ID,
363 $cu_id,
364 $cu_id,
365 $current_user->ID,
366 $cu_id,
367 $current_user->ID,
368 $search_tag_text,
369 $search_tag_text,
370 $search_tag_text,
371 $search_tag_text,
372 $search_tag_text
373 );
374 }
375 }
376 }else{
377 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
378 if(!empty($public_projects)){
379 $where = $wpdb->prepare(
380 " WHERE
381 (proj_meta.meta_key = %s AND proj_meta.meta_value = %d)
382 AND $wppm_tl_filter
383 AND $wppm_task_by_proj_filter
384 $wppm_proj_attr",
385 'public_project',
386 1
387 );
388 }else{
389 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr";
390 }
391 } else{
392 if(!empty($public_projects)){
393 $where = $wpdb->prepare(
394 " WHERE
395 (
396 proj_meta.meta_key = %s
397 AND proj_meta.meta_value = %d
398 )
399 AND $wppm_tl_filter
400 AND $wppm_task_by_proj_filter
401 $wppm_proj_attr",
402 'public_project',
403 1
404 );
405 }else{
406 $where = $wpdb->prepare(
407 " WHERE
408 $wppm_tl_filter
409 AND $wppm_task_by_proj_filter
410 AND (
411 (
412 FIND_IN_SET(%d, Task.users) > 0
413 )
414 OR (
415 Task.created_by = %d
416 )
417 OR (
418 proj_users.user_id = %d
419 AND proj_users.role_id = %d
420 AND FIND_IN_SET(%d, proj.users) > 0
421 )
422 OR (
423 Task.project = proj_meta.project_id
424 AND proj_meta.meta_key = %s
425 AND proj_meta.meta_value = %d
426 )
427 OR (
428 proj.created_by = %d
429 AND FIND_IN_SET(%d, proj.users) > 0
430 )
431 )
432 $wppm_proj_attr",
433 $current_user->ID,
434 $cu_id,
435 $cu_id,
436 1,
437 $current_user->ID,
438 'public_project',
439 1,
440 $cu_id,
441 $current_user->ID
442 );
443 }
444 }
445 }
446 $query = apply_filters('wppm_task_list_list_view_query',$query,$search_tag_text);
447 $no_of_rows= apply_filters('wppm_task_list_number_of_rows_query',$no_of_rows,$search_tag_text);
448 $where = apply_filters('wppm_task_list_query_where',$where, $wppm_tl_filter,$search_tag_text);
449 if($filter_by != 'archived'){
450 $where .= $archived_where;
451 }
452 $no_of_rows_where = $where." Group by Task.id) AS Task";
453 $no_of_rows .= $no_of_rows_where;
454 $no_of_rows = apply_filters('wppm_task_list_no_of_rows',$no_of_rows,$wppm_tl_filter,$search_tag_text);
455 $totalrows = $wpdb->get_var($no_of_rows);
456 $query .= $where." Group by Task.id ORDER BY ".$sort_by." ".$order."";
457 $query = apply_filters('wppm_task_list_query',$query);
458 $limit_start=$page_no*$task_per_page;
459 $limit="\n LIMIT ".$limit_start.",".$task_per_page." ";
460 $task_id_array = array();
461 $query = $query.$limit;
462 $wppm_task_fillter = $wpdb->get_results($query);
463 $flag = false;
464 $project_creator = $wpdb->get_var($wpdb->prepare("SELECT created_by FROM {$wpdb->prefix}wppm_project WHERE created_by = %d",$cu_id));
465 if(!empty($wppm_task_fillter)){
466 foreach($wppm_task_fillter as $key_filter=>$val_filter){
467 $val_array = (array) $val_filter;
468 $tusers = $val_array['users'];
469 $tusers_arr = explode(',',$tusers);
470 $tproject_id = esc_sql($val_array['project']);
471 if(!empty($tusers) && in_array($current_user->ID,$tusers_arr)){
472 $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",$tproject_id,$cu_id));
473 $project_users = $wpdb->get_var($wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d",$tproject_id));
474 $project_users_arr = explode(',',(string)$project_users);
475 if(((!empty($project_user_role)) && ($project_user_role == 1) && in_array($current_user->ID,$project_users_arr))){
476 $flag= true;
477 break;
478 }
479 }
480 }
481 }
482 if(($current_user->has_cap('manage_options') || $wppmfunction->has_permission('add_new_task',0) || ($flag==true) || ($project_creator!="")) && (isset($page) && $page != 'wppm-archived-tasks' )){
483 $style = "display:inline;";
484 }else{
485 $style = "display:none;";
486 }
487 $style = apply_filters('wppm_tl_add_new_task_btn_style',$style);
488 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == ('wppm_admin') || ($flag==true) || ($wppmfunction->has_permission('change_task_status',0))!="" || ($project_creator!="")){
489 $cs_style = "display:flex;";
490 }else{
491 $cs_style = "display:none;";
492 }
493 if ( isset($page) && $page === 'wppm-archived-tasks' ) {
494 $ar_filter_style = "display:none;";
495 } else {
496 $ar_filter_style = "display:flex;";
497 }
498 $todo_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(1)."'" );
499 $inp_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(2)."'" );
500 $hold_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(3)."'" );
501 $completed_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(4)."'" );
502 $todo_status_style = (!empty($todo_status_name))? "display:inline" :"display:none;";
503 $inp_status_style = (!empty($inp_status_name))? "display:inline" :"display:none;";
504 $hold_status_style = (!empty($hold_status_name))? "display:inline" :"display:none;";
505 $completed_status_style = (!empty($completed_status_name))? "display:inline" :"display:none;";
506 if( isset($page) && $page === 'wppm-tasks'){
507 $arch_filter_style = "display:inline;";
508 }else{
509 $arch_filter_style = "display:none;";
510 }
511 ?>
512 <form id="wppm_task_list_frm">
513 <div id="wppm_task_list_container" class="wppm_bootstrap">
514 <div class="row">
515 <div class="col-sm-12" id="wppm_heading_inline">
516 <span class="wppm-heading-inline"><?php echo (isset($page) && $page === 'wppm-archived-tasks' ) ? esc_html_e('Archived Tasks','taskbuilder'): esc_html_e('Tasks','taskbuilder');?> </span>
517 <span class="wppm-add-new-btn btn-primary" id="wppm_add_new_task_btn_tl" style="background-color:<?php echo esc_attr($appearance_settings['list-header-button-background-color'])?>;color:<?php echo esc_attr($appearance_settings['list-header-button-text-color'])?>;<?php echo esc_attr($style)?>;" onclick="wppm_add_new_task()"><img class="wppm_add_new_task_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/plus_icon.svg'); ?>" alt="add_icon"><?php echo esc_html_e('Add New','taskbuilder');?></span>
518 <!-- Dashboard Button -->
519 <a class="wppm-add-new-btn btn-primary" style="background-color:<?php echo esc_attr($appearance_settings['list-header-button-background-color'])?>;color:<?php echo esc_attr($appearance_settings['list-header-button-text-color'])?>;<?php echo esc_attr($style)?>;" href="<?php echo esc_url( admin_url('admin.php?page=wppm-dashboard') ); ?>"
520 style="margin-right:10px;">
521 <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/dashboard.svg'); ?>" alt="dashboard_icon">
522 <?php esc_html_e('Dashboard','taskbuilder'); ?>
523 </a>
524 </div>
525 </div>
526 <div style="display:flex;justify-content:space-between;margin-top:20px;flex-wrap: wrap;">
527 <div style="display:flex;flex-wrap: wrap;min-width: 0; max-width: 100%; ">
528 <div id="wppm_task_filter_container">
529 <div class="wppm-bulk-actions"style="margin-left: -14px !important;">
530 <button
531 id="wppm-task-bulk-actions-btn"
532 class="wppm-button small secondary"
533 type="button"
534 style="display:none;margin: 14px -20px 0px 22px; padding:14px;font: 13px Helvetica Neue, Arial, Helvetica, sans-serif !important;"
535 data-popover="wppm-task-bulk-actions">
536 <?php esc_attr_e( 'Bulk Actions ', 'taskbuilder' ); ?><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/wppm_chevron_down_icon.svg'); ?>" alt="chevron_down">
537 </button>
538 <div id="wppm-task-bulk-actions" class="gpopover wppm-popover-menu wppm-proj-bulk-actions">
539 <div class="wppm-popover-menu-item" style="<?php echo esc_attr($cs_style);?><?php echo esc_attr($ar_filter_style);?>" onclick="wppm_bulk_change_task_status('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_change_task_status' ) ); ?>');">
540 <span><img style="margin-right:5px;" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/gps-navigation.svg'); ?>" alt="task_status"><?php echo esc_html_e('Change Status','taskbuilder'); ?></span>
541 </div>
542 <div class="wppm-popover-menu-item" style="<?php echo esc_attr($ar_filter_style);?>" onclick="wppm_bulk_change_task_priority('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_change_task_priority' ) ); ?>');">
543 <span><img style="margin-right:5px;" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/priority_up_icon.svg'); ?>" alt="priority"><?php echo esc_html_e('Change Priority','taskbuilder'); ?></span>
544 </div>
545 <div class="wppm-popover-menu-item" onclick="wppm_bulk_delete_task('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_delete_task' ) ); ?>');">
546 <span><img style="margin-right:5px;" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/trash-alt-solid.svg'); ?>" alt="delete"><?php echo esc_html_e('Delete Tasks','taskbuilder'); ?></span>
547 </div>
548 </div>
549 <div class="wppm-filter-item">
550 <label for="wppm_task_filter" style="margin-left:20px;"> <?php echo esc_html_e('Filter','taskbuilder');?></label>
551 <select id="wppm_task_filter" name="wppm_task_filter" onchange="wppm_apply_task_filter('<?php echo esc_attr($page); ?>')" style="margin-left:20px;">
552 <option value="all"<?php echo ($filter_by == "all")? 'selected':""?>><?php echo esc_html_e('All','taskbuilder');?></option>
553 <option value="1" style="<?php echo esc_attr($todo_status_style); ?>" <?php echo ($filter_by == "1")? 'selected':""?>><?php echo esc_html($todo_status_name);?></option>
554 <option value="2" style="<?php echo esc_attr($inp_status_style); ?>" <?php echo ($filter_by == "2")? 'selected':""?>><?php echo esc_html($inp_status_name);?></option>
555 <option value="3" style="<?php echo esc_attr($hold_status_style); ?>" <?php echo ($filter_by == "3")? 'selected':""?>><?php echo esc_html($hold_status_name);?></option>
556 <option value="4" style="<?php echo esc_attr($completed_status_style); ?>" <?php echo ($filter_by == "4")? 'selected':""?>><?php echo esc_html($completed_status_name);?></option>
557 <option value="mine" <?php echo ($filter_by == "mine")? 'selected':""?>><?php echo esc_html_e('Mine','taskbuilder');?></option>
558 <option value="unassigned" <?php echo ($filter_by == "unassigned")? 'selected':""?>><?php echo esc_html_e('Unassigned','taskbuilder');?></option>
559 <option value="overdue" <?php echo ($filter_by == "overdue")? 'selected':""?>><?php echo esc_html_e('Overdue','taskbuilder');?></option>
560 <option value="archived" style="<?php echo esc_attr($arch_filter_style); ?>" <?php echo ($filter_by == "archived")? 'selected':""?>><?php echo esc_html_e('Archived','taskbuilder');?></option>
561 </select>
562 </div>
563 </div>
564 </div>
565 <div class="wppm-filter-item wppm_project_autocomplete_container" style="margin: 0 0 0 28px;">
566 <label for="wppm_task_list_proj_filter">
567 <?php echo esc_html_e('Project','taskbuilder');?>
568 </label><br>
569 <select searchable="search here" onchange="wppm_tasks_by_select_project('<?php echo esc_attr($page); ?>')" class="form-control" size="40" name="wppm_task_list_proj_filter" id="wppm_task_list_proj_filter" data-width="100%" style="width: 100%!important;">
570 <option value="0" <?php echo ($proj_filter == 0)? 'selected':""?>><?php echo esc_html_e('All','taskbuilder');?></option>
571 <?php
572 if(!empty($projects)){
573 foreach($projects as $proj) {
574 ?>
575 <option value="<?php echo esc_attr($proj->id)?>" <?php echo ($proj_filter == $proj->id)? 'selected':""?>><?php echo esc_html($proj->project_name,'taskbuilder');?></option>
576 <?php }
577 } ?>
578 </select>
579 </div>
580 <div class="wppm_display_submit" style="margin: 0 0 -5px 10px;">
581 <div class="wppm-filter-actions">
582 <span class="wppm-link" onclick="wppm_tl_reset_filter('<?php echo esc_attr($page); ?>')"> <?php echo esc_html_e('Reset','taskbuilder');?></span>
583 </div>
584 </div>
585 </div>
586 <div id="wppm_task_search" style="display:flex;justify-content:flex-end;">
587 <img width="25px" height="15" class="wppm_task_search_filter_img" style="position: relative;top: 10px;left: 30px;" height="15px" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/search.svg'); ?>" alt="search">
588 <input type="search" id="wppm_task_search_filter" style="margin-right:10px;" name="wppm_task_search_filter" class="form-control form-control-sm" aria-controls="selection-datatable" placeholder="<?php echo esc_attr__('Search','taskbuilder');?>" value="<?php echo (!empty($search_tag)) ? esc_attr($search_tag) : "" ?>">
589 </div>
590 </div>
591 </div>
592 <div style="display:flex;justify-content:flex-end;margin-right: 10px;">
593 <span id="wppm_grid_view_btn" onclick="wppm_view_task_search_filter('<?php echo esc_attr($page_no)?>','<?php echo esc_attr($page)?>','<?php echo esc_attr($project_id)?>')"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/grid_view.svg'); ?>" alt="grid_view"><span><?php echo esc_html_e('Grid view','taskbuilder');?></span></span>
594 </div>
595 </div>
596 <script>
597 jQuery('#wppm-more-actions-btn, #wppm-task-bulk-actions-btn').gpopover({width: 200});
598 </script>
599 <div id="wppm_task_table_container" class="wppm_task_table_container table-responsive" style="padding: 0 15px 15px 15px;">
600 <table id="wppm_task_table" class="wppm_table table">
601 <thead>
602 <tr>
603 <th style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>" onchange="wppm_task_bulk_select_change()">
604 <div class="checkbox-container">
605 <input id="wppm_task_bulk_select_option" class="wppm-bulk-selector" type="checkbox" onchange="wppm_task_bulk_select_change();"/>
606 <label for="wppm_task_bulk_select_option"></label>
607 </div>
608 </th>
609 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
610 <div id="wppm_task_name_container">
611 <span id="wppm_task_name_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Task name','taskbuilder'); ?></span>
612 <img width="16" height="16" style = "<?php echo ($sort_by == 'task_name' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('task_name','ASC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_up_task_name_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
613 <img width="16" height="16" style = "<?php echo ($sort_by == 'task_name' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('task_name','DESC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_down_task_name_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
614 </div>
615 </th>
616 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
617 <span id="wppm_project_name_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Project','taskbuilder'); ?></span>
618 <img width="16" height="16" style = "<?php echo ($sort_by == 'proj.project_name' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('project','ASC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_up_project_list_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
619 <img width="16" height="16" style = "<?php echo ($sort_by == 'proj.project_name' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('project','DESC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_down_project_list_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
620 </th>
621 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
622 <span id="wppm_status_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Status','taskbuilder'); ?></span>
623 <img width="16" height="16" style = "<?php echo ($sort_by == 'task_statuses.name' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('status','ASC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_up_status_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
624 <img width="16" height="16" style = "<?php echo ($sort_by == 'task_statuses.name' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('status','DESC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_down_status_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
625 </th>
626 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
627 <span id="wppm_priority_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Priority','taskbuilder'); ?></span>
628 <img width="16" height="16" style = "<?php echo ($sort_by == ('task_priorities.name') && $order == 'DESC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('priority','ASC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_up_priority_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
629 <img width="16" height="16" style = "<?php echo ($sort_by == ('task_priorities.name') && $order == 'ASC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('priority','DESC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_down_priority_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
630 </th>
631 <?php if($wppm_default_task_date == 1 && $wppm_deafault_time_duration_task==0) { ?>
632 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
633 <span id="wppm_start_date_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Start date','taskbuilder'); ?></span>
634 <img width="16" height="16" style = "<?php echo ($sort_by == 'Task.start_date' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('start_date','ASC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_up_start_date_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
635 <img width="16" height="16" style = "<?php echo ($sort_by == 'Task.start_date' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('start_date','DESC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_down_start_date_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
636 </th>
637 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
638 <span id="wppm_end_date_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('End date','taskbuilder'); ?></span>
639 <img width="16" height="16" style = "<?php echo ($sort_by == 'Task.end_date' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('end_date','ASC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_up_end_date_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
640 <img width="16" height="16" style = "<?php echo ($sort_by == 'Task.end_date' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('end_date','DESC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_down_end_date_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
641 </th>
642 <?php }
643 if( $wppm_deafault_time_duration_task==1){ ?>
644 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
645 <span id="wppm_task_duration_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Duration','taskbuilder'); ?></span>
646 <img width="16" height="16" style = "<?php echo ($sort_by == 'TIMESTAMPDIFF(SECOND, Task.start_date, Task.end_date)' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('TIMESTAMPDIFF(SECOND, Task.start_date, Task.end_date)','ASC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_up_task_duration_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
647 <img width="16" height="16" style = "<?php echo ($sort_by == 'TIMESTAMPDIFF(SECOND, Task.start_date, Task.end_date)' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" onclick="wppm_sort_up_task_list('TIMESTAMPDIFF(SECOND, Task.start_date, Task.end_date)','DESC','<?php echo esc_attr($page); ?>')" class="wppm_chevron_img" id="wppm_chevron_sort_down_task_duration_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
648 </th>
649 <?php }?>
650 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
651 <span style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Assign To','taskbuilder'); ?></span>
652 </th>
653 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
654 <span style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Progress','taskbuilder'); ?></span>
655 </th>
656 <?php do_action('wppm_table_header');?>
657 </tr>
658 </thead>
659 <tbody>
660 <?php
661 $task_index = 0;
662 $statuses = $wpdb->get_results(
663 "SELECT * FROM {$wpdb->prefix}wppm_task_statuses",
664 OBJECT_K
665 );
666
667 $priorities = $wpdb->get_results(
668 "SELECT * FROM {$wpdb->prefix}wppm_task_priorities",
669 OBJECT_K
670 );
671 $projects = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_project", OBJECT_K) ;
672 $task_ids = wp_list_pluck($wppm_task_fillter, 'id');
673 $checklist_counts = [];
674 if (!empty($task_ids)) {
675 $task_ids_sql = implode(',', array_map('absint', $task_ids));
676 $checklist_results = $wpdb->get_results(" SELECT checklist.task_id,
677 COUNT(Items.id) AS total_items,
678 SUM(CASE WHEN Items.checked = 1 THEN 1 ELSE 0 END) AS checked_items
679 FROM {$wpdb->prefix}wppm_checklist_items AS Items
680 LEFT JOIN {$wpdb->prefix}wppm_checklist AS checklist
681 ON Items.checklist_id = checklist.id
682 WHERE checklist.task_id IN ($task_ids_sql)
683 GROUP BY checklist.task_id"
684 );
685 foreach ($checklist_results as $row) {
686 $checklist_counts[$row->task_id] = [
687 'total' => (int) $row->total_items,
688 'checked' => (int) $row->checked_items,
689 ];
690 }
691 }
692 if(!empty($wppm_task_fillter)){
693 foreach($wppm_task_fillter as $task) {
694 $task_id = absint($task->id);
695 $wppm_task_duration = $wppmfunction->wppm_get_duration($task->start_date,$task->end_date);
696 $checklists = $wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist where task_id = %d",$task_id) );
697 if(!empty($task)){
698 $taskdata = $wppmfunction->get_task($task->id);
699 $project_data = $wppmfunction->get_project($task->project);
700 $task_index++;
701 $total = $checklist_counts[$task_id]['total'] ?? 0;
702 $total_checked_items = $checklist_counts[$task_id]['checked'] ?? 0;
703 if(isset($task->status)){
704 $tstatus = absint($task->status);
705 $status = $statuses[$task->status] ?? null;
706 }
707 if(!empty($task->priority)){
708 $tpriority = absint($task->priority);
709 $priority = $priorities[$task->priority] ?? null;
710 }
711 if(isset($task->project)){
712 $tproj = absint($task->project);
713 $project = $projects[$task->project] ?? null;
714 }
715 if($wppm_task_time == 1){
716 $tsDate = new DateTime($task->start_date);
717 $teDate = new DateTime($task->end_date);
718 if($task->start_date=='0000-00-00 00:00:00'){
719 if($wppm_date_setting=='Y-m-d H:i:s'){
720 $task_start_date = '0000-00-00 00:00:00';
721 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
722 $task_start_date = '00-00-0000 00:00:00';
723 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
724 $task_start_date = '00-00-0000 00:00:00';
725 }else{
726 $task_start_date = '0000-00-00 00:00:00';
727 }
728 }if($task->end_date=='0000-00-00 00:00:00'){
729 if($wppm_date_setting=='Y-m-d H:i:s'){
730 $task_end_date = '0000-00-00 00:00:00';
731 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
732 $task_end_date = '00-00-0000 00:00:00';
733 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
734 $task_end_date = '00-00-0000 00:00:00';
735 }else{
736 $task_end_date = '0000-00-00 00:00:00';
737 }
738 }if($task->start_date!='0000-00-00 00:00:00'){
739 if(!empty($wppm_date_setting)){
740 $task_start_date = $tsDate->format($wppm_date_setting);
741 } else {
742 $task_start_date = isset($task->start_date)? $task->start_date:"";
743 }
744 }if($task->end_date!='0000-00-00 00:00:00'){
745 if(!empty($wppm_date_setting)){
746 $task_end_date = $teDate->format($wppm_date_setting);
747 }else{
748 $task_end_date = isset($task->end_date) ? $task->end_date: "" ;
749 }
750 }
751 } elseif($wppm_task_time == 0){
752 $tsDate = new DateTime($task->start_date);
753 $teDate = new DateTime($task->end_date);
754 $task_start_date = $tsDate->format('Y-m-d');
755 $task_end_date = $teDate->format('Y-m-d');
756 if($task->start_date=='0000-00-00 00:00:00'){
757 if($wppm_date_setting=='Y-m-d H:i:s'){
758 $task_start_date = '0000-00-00';
759 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
760 $task_start_date = '00-00-0000';
761 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
762 $task_start_date = '00-00-0000';
763 }else{
764 $task_start_date = '0000-00-00';
765 }
766 }
767 if($task->end_date=='0000-00-00 00:00:00'){
768 if($wppm_date_setting=='Y-m-d H:i:s'){
769 $task_end_date = '0000-00-00';
770 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
771 $task_end_date = '00-00-0000';
772 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
773 $task_end_date = '00-00-0000';
774 }else{
775 $task_end_date = '0000-00-00';
776 }
777 }
778 if($task->start_date!='0000-00-00 00:00:00'){
779 if($wppm_date_setting=='Y-m-d H:i:s'){
780 $task_start_date = $tsDate->format('Y-m-d');
781 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
782 $task_start_date = $tsDate->format('d-m-Y');
783 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
784 $task_start_date = $tsDate->format('m-d-Y');
785 }else{
786 $task_start_date = $tsDate->format('Y-m-d');
787 }
788 }
789 if($task->end_date!='0000-00-00 00:00:00'){
790 if($wppm_date_setting=='Y-m-d H:i:s'){
791 $task_end_date = $teDate->format('Y-m-d');
792 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
793 $task_end_date = $teDate->format('d-m-Y');
794 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
795 $task_end_date = $teDate->format('m-d-Y');
796 }else{
797 $task_end_date = $teDate->format('Y-m-d');
798 }
799 }
800 }
801 $url = $wppmfunction->get_task_url( $task->id, $is_frontend );
802 ?>
803 <tr onclick= "if(link)wppm_tl_handle_click(event, <?php echo esc_attr($task->id) ?>, '<?php echo esc_url( $url ); ?>',<?php echo esc_attr($project_id) ?>)" >
804 <td class="bulk-selector" onmouseover="link=false;" onmouseout="link=true;">
805 <div class="wppm-pl-item-selector">
806 <div class="checkbox-container">
807 <input id="wppm_bulk_select_<?php echo esc_attr($task->id) ?>" class="wppm-task-bulk-select" type="checkbox" onchange="wppm_bulk_task_item_select_change();" value="<?php echo esc_attr( $task->id ); ?>"/>
808 <label for="wppm_bulk_select_<?php echo esc_attr($task->id) ?>"></label>
809 </div>
810 </div>
811 </td>
812 <td onmouseover="link=true;">
813 <?php echo esc_html($task->task_name) ?>
814 </td>
815 <td onmouseover="link=true;">
816 <?php if(!empty($project->project_name)){
817 echo esc_html($project->project_name);
818 }
819 ?>
820 </td>
821 <td onmouseover="link=true;">
822 <?php if(!empty($task->status)){ ?>
823 <span class="wppm_td_task_status" style="background-color:<?php echo (isset($status->bg_color))? esc_attr($status->bg_color):"";?>; color: <?php echo (isset($status->color))? esc_attr($status->color):""; ?>"><?php echo (isset($status->name))? esc_html($status->name):"" ?></span>
824 <?php } ?>
825 </td>
826 <td onmouseover="link=true;">
827 <?php if(!empty($task->priority)){ ?>
828 <span class ="wppm_td_task_priority" style="background-color:<?php echo (isset($priority->bg_color))? esc_attr($priority->bg_color):"" ;?>; color: <?php echo (isset($priority->color))? esc_attr($priority->color):""; ?>"><?php echo (isset($priority->name))? esc_html($priority->name):"" ?></span>
829 <?php } ?>
830 </td>
831 <?php if($wppm_default_task_date == 1 && $wppm_deafault_time_duration_task==0) { ?>
832 <td onmouseover="link=true;">
833 <?php if(!empty($task_start_date)){ ?>
834 <?php echo esc_html($task_start_date);
835 } ?>
836 </td>
837 <td onmouseover="link=true;"><?php
838 if(!empty($task_end_date) && ($task->status!=4 && $task_end_date < $current_date && $task_end_date != '0000-00-00 00:00:00' && $task_end_date != '00-00-0000 00:00:00' && $task_end_date != '00-00-0000' && $task_end_date != '0000-00-00')){
839 $style = "color:#FF0000";
840 } else{
841 $style = "color:#2C3E50";
842 }?>
843 <span style="<?php echo esc_attr($style); ?>"><?php echo esc_html($task_end_date);?></span>
844 </td>
845 <?php } ?>
846 <?php if($wppm_deafault_time_duration_task==1){ ?>
847 <?php
848 if(!empty($task_end_date) && ($task->status!=4 && $task_end_date < $current_date && $task_end_date != '0000-00-00 00:00:00' && $task_end_date != '00-00-0000 00:00:00' && $task_end_date != '00-00-0000' && $task_end_date != '0000-00-00')){
849 $style = "color:#FF2222";
850 } else {
851 $style = "color:#2C3E50";
852 } ?>
853 <td onmouseover="link=true;" class="wppm_table_td"><span style="<?php echo esc_attr($style); ?>"><?php echo isset($wppm_task_duration) ? esc_html($wppm_task_duration):"" ?></span></td>
854 <?php } ?>
855 </td>
856 <td onmouseover="link=true;" style="text-align:center;">
857 <?php
858 $i=0;
859 if(!empty($project_data['users'])){
860 $proj_users = explode(',',$project_data['users']);
861 }
862 if(!empty($task->users)){
863 $users = explode(",",$task->users);
864 foreach($users as $user){
865 if( (!empty($proj_users)) && (in_array($user,$proj_users))){
866 $i++;
867 if( $i <= 4 ){
868 $userdata = get_userdata( $user );
869 if(!empty($userdata)){
870 ?>
871 <a href="#" title="<?php echo esc_attr($userdata->display_name); ?>">
872 <?php echo get_avatar($userdata->ID, 25, "mysteryman")?>
873 </a> <?php
874 }
875 }
876 }
877 }
878 }
879 if($i > 4){
880 ?>
881 <a href="#" class="wppm_avatar">
882 <span id="wppm_avatar" style="background-color:black;" class="avatar">+<?php echo esc_html($i-4) ?></span>
883 </a>
884 <?php } ?>
885 <?php
886 if($i==0){
887 echo esc_html_e('None','taskbuilder');
888 } ?>
889 </td>
890 <td onmouseover="link=true;">
891 <?php
892 $completion = 0;
893 if ($total != 0 && $total != NULL) {
894 $completion = intval($total_checked_items/$total*100);
895 }
896 echo esc_html($completion).'%';
897 ?>
898 </td>
899 <?php do_action('wppm_table_column');?>
900 </tr>
901 <?php }
902 }
903 }
904 ?>
905 </tbody>
906 </table>
907 <script>
908 function wppm_tl_handle_click(event, id, url,project_id) {
909 if ( ( event.ctrlKey || event.metaKey ) && url ) {
910 window.open(url, '_blank');
911 } else {
912 wppm_open_task(id,project_id);
913 }
914 }
915 </script>
916 <?php
917 $current_page=$page_no+1;
918 $total_pages=ceil($totalrows/$task_per_page);
919 $prev_page_no=$current_page-1;
920 $prev_class=($prev_page_no==0)?'disabled':'';
921 $next_page_no=($total_pages==$current_page)? $current_page-1:$current_page;
922 $next_class=($total_pages==$current_page)?'disabled':'';
923 ?>
924 <div class="row" style="background-color:#ffffff;">
925 <div class="col-sm-12">
926 <div class="wppm_task_result" style="<?php echo esc_attr($total_pages==0)? '':'display: none;';?>"><?php esc_html_e('Your search request returned no results.','taskbuilder');?></div>
927 <hr style="<?php echo esc_attr($total_pages==0)? '':'display: none;';?>">
928 </div>
929 <div>
930 </div>
931 </div>
932 <div class="row wppm_task_pagination_container">
933 <div class="col-sm-4">
934 <?php echo esc_html_e('Total:','taskbuilder'); ?>&nbsp;<?php echo esc_attr($task_index) ?>&nbsp;<?php echo esc_html_e('of','taskbuilder') ?>&nbsp;<?php echo esc_html($totalrows) ?>&nbsp;<?php echo esc_html_e('Tasks','taskbuilder')?>
935 </div>
936 <div class="wppm_task_pagination col-sm-4" style="<?php echo esc_attr($total_pages==0)? "display:none;":"display:flex;"?>">
937 <span class="wppm-pagination-txt">
938 <span><?php echo esc_html($current_page)?>&nbsp;<?php echo esc_html_e('of','taskbuilder');?>&nbsp;<?php echo esc_html($total_pages); ?>&nbsp;<?php echo esc_html_e('Page','taskbuilder'); ?></span>
939 </span>
940 <span <?php echo esc_attr($prev_class) ?>
941 style="<?php echo (isset($prev_class) && esc_attr($prev_class)== 'disabled') ? 'display:none;':'display:block;'?>cursor:pointer;">
942 <a class="wppm_pagination_prev" onclick="return wppm_load_prev_task_page(<?php echo esc_attr($prev_page_no) ?>,<?php echo esc_attr($page_no) ?>,'<?php echo esc_attr($sort_by)?>','<?php echo esc_attr($order) ?>');"><?php echo esc_html_e('PREV','taskbuilder');?></a>
943 </span>
944 <span <?php echo esc_attr($next_class) ?>
945 style="<?php echo (isset($next_class) && esc_attr($next_class) == 'disabled')?'display:none;':'display:block;'?>cursor:pointer;">
946 <a class="wppm_pagination_next" onclick="return wppm_load_next_task_page(<?php echo esc_attr($next_page_no) ?>,<?php echo esc_attr($page_no) ?>,'<?php echo esc_attr($sort_by)?>','<?php echo esc_attr($order) ?>');"><?php echo esc_html_e('NEXT','taskbuilder');?></a>
947 </span>
948 </div>
949 </div>
950 </form>
951 <style>
952 .select2-selection--single {
953 height: 30px!important;
954 }
955 .select2-dropdown:hover {
956 color: #23527c!important;;
957 }
958 .select2-results__options{
959 font:15px "Helvetica Neue",Arial,Helvetica,sans-serif !important;
960 margin: 0!important;
961 line-height: inherit!important;
962 }
963 .select2-selection__rendered{
964 font:15px "Helvetica Neue",Arial,Helvetica,sans-serif !important;
965 margin-top: 5px!important;
966 }
967 .select2-selection__rendered:hover{
968 color: #2271b1 !important;
969 }
970 .select2-container--default .select2-results__option--highlighted.select2-results__option--selectable{
971 background-color: #e85f08!important;
972 color: white !important;
973 }
974 .select2-container {
975 max-width: 150px !important;
976 min-width: 150px !important;
977 }
978 #wppm_task_filter{
979 min-height: 30px !important;
980 max-height: 35px !important;
981 }
982 #wppm_task_table tr:nth-child(even) td{
983 background-color:<?php echo esc_attr($appearance_settings['list-item-even-background-color'])?>;
984 color:<?php echo esc_attr($appearance_settings['list-item-even-text-color'])?>;
985 }
986 #wppm_task_table tr:nth-child(odd) td{
987 background-color:<?php echo esc_attr($appearance_settings['list-item-odd-background-color'])?>;
988 color:<?php echo esc_attr($appearance_settings['list-item-odd-text-color'])?>;
989 }
990 #wppm_task_table tr:hover td{
991 background-color:<?php echo esc_attr($appearance_settings['list-item-hover-background-color'])?>;
992 }
993 #wppm_task_table tr:hover td{
994 color: <?php echo esc_attr($appearance_settings['list-item-hover-text-color'])?>;
995 }
996 #wppm_add_new_task_btn_tl:hover{
997 background-color:<?php echo esc_attr($appearance_settings['list-header-button-hover-color'])?>!important;
998 }
999 </style>
1000 <script type="text/javascript">
1001 var link = true;
1002 jQuery( document ).ready( function( jQuery ) {
1003 jQuery("input[name='wppm_task_search_filter']").keypress(function(e) {
1004 //Enter key
1005 if (e.which == 13) {
1006 wppm_task_search_filter('<?php echo esc_attr($page); ?>');
1007 }
1008 });
1009 jQuery("#wppm_task_name_th").hover(function(){
1010 jQuery('#wppm_chevron_sort_up_task_name_img').show();
1011 jQuery('#wppm_chevron_sort_down_task_name_img').hide();
1012 });
1013 jQuery("#wppm_project_name_th").hover(function(){
1014 jQuery('#wppm_chevron_sort_up_project_list_img').show();
1015 jQuery('#wppm_chevron_sort_down_project_list_img').hide();
1016 });
1017 jQuery("#wppm_status_th").hover(function(){
1018 jQuery('#wppm_chevron_sort_up_status_img').show();
1019 jQuery('#wppm_chevron_sort_down_status_img').hide();
1020 });
1021 jQuery("#wppm_priority_th").hover(function(){
1022 jQuery('#wppm_chevron_sort_up_priority_img').show();
1023 jQuery('#wppm_chevron_sort_down_priority_img').hide();
1024 });
1025 jQuery("#wppm_start_date_th").hover(function(){
1026 jQuery('#wppm_chevron_sort_up_start_date_img').show();
1027 jQuery('#wppm_chevron_sort_down_start_date_img').hide();
1028 });
1029 jQuery("#wppm_end_date_th").hover(function(){
1030 jQuery('#wppm_chevron_sort_up_end_date_img').show();
1031 jQuery('#wppm_chevron_sort_down_end_date_img').hide();
1032 });
1033 jQuery("#wppm_task_duration_th").hover(function(){
1034 jQuery('#wppm_chevron_sort_up_task_duration_img').show();
1035 jQuery('#wppm_chevron_sort_down_task_duration_img').hide();
1036 });
1037
1038 })
1039 jQuery('#wppm_task_list_proj_filter').select2({ dropdownAutoWidth: true, width: 'auto' });
1040 jQuery('#wppm_task_list_proj_filter').val(<?php echo esc_attr($proj_filter) ?>);
1041 /**
1042 * Bulk item selector change
1043 */
1044 function wppm_bulk_task_item_select_change() {
1045 jQuery("#wppm-task-bulk-actions-btn").show();
1046 var items = jQuery(".wppm-task-bulk-select:checked");
1047 var checked = items.length === 0 ? false : true;
1048 if(checked){
1049 jQuery(".wppm-bulk-selector").prop("checked", checked);
1050 }else{
1051 jQuery("#wppm-task-bulk-actions-btn").hide();
1052 jQuery(".wppm-bulk-selector").prop("checked", false);
1053 }
1054 }
1055 </script>
1056