PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 5.0.4
Taskbuilder – Project Management & Task Management Tool With Kanban Board v5.0.4
6.0.6 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 All 58 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.4, at includes/admin/tasks/wppm_tasks_list.php

810 lines 53.6 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 $search_tag = isset($_POST['task_search']) ? sanitize_text_field(wp_unslash($_POST['task_search'])) : '';
9 $order = isset($_POST['order']) ? sanitize_text_field(wp_unslash($_POST['order'])) :"ASC";
10 $sort_by = isset($_POST['sort_by']) ? sanitize_text_field(wp_unslash($_POST['sort_by'])):"task_name";
11 $filter_by = isset($_POST['wppm_task_filter']) ? sanitize_text_field(wp_unslash($_POST['wppm_task_filter'])) : "all";
12 $proj_filter = isset($_POST['wppm_proj_filter']) ? sanitize_text_field(wp_unslash($_POST['wppm_proj_filter'])) : "0";
13 $proj_attr = isset($_POST['wppm_project_attr']) ? sanitize_text_field(wp_unslash($_POST['wppm_project_attr'])):"";
14 $public_projects = isset($_POST['public_projects']) ? sanitize_text_field(wp_unslash($_POST['public_projects'])):"0";
15 $page = isset($_POST['page']) ? sanitize_text_field(wp_unslash($_POST['page'])):"";
16 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
17 $wppm_create_tasks_coworkers_permission = get_option('wppm_allow_coworkers_create_task');
18 $orderby_proj_sql = esc_sql(sanitize_sql_orderby( "project_name" ));
19 $wppm_date_setting = get_option('wppm_date_setting');
20 $wppm_hide_completed_status_task = get_option('wppm_hide_completed_status_task');
21 $wppm_hide_task_statuses_from_frontend = get_option('wppm_hide_task_statuses_from_frontend');
22 $wppm_deafault_time_duration_task = get_option('wppm_display_time_duration_task');
23 if(!empty($wppm_hide_task_statuses_from_frontend)){
24 $wppm_hide_task_statuses_from_frontend = explode(",",$wppm_hide_task_statuses_from_frontend);
25 } else {
26 $wppm_hide_task_statuses_from_frontend = '';
27 }
28 $proj_attr = esc_sql($proj_attr);
29 $is_frontend = 0;
30 if(!empty($proj_attr )){
31 $wppm_proj_attr = ' AND (proj.project_name = "'.$proj_attr.'")';
32 }else{
33 $wppm_proj_attr = '';
34 }
35 $current_date = wp_date('Y-m-d');
36 $current_date = esc_sql($current_date );
37 $cu_id = esc_sql($current_user->ID);
38 $archived_where = "";
39 if ( isset($page) && $page === 'wppm-archived-tasks' ) {
40 $archived_where = " AND is_archived = 1";
41 }
42 if( isset($page) && $page === 'wppm-tasks'){
43 $archived_where = " AND is_archived = 0";
44 }
45 $wppm_task_time = get_option('wppm_task_time');
46 $query = ("SELECT proj.*
47 FROM {$wpdb->prefix}wppm_project AS proj
48 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON proj.id = proj_meta.project_id");
49 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
50 if(!empty($proj_attr )){
51 $where = " where project_name = '".$proj_attr."' Group by proj.id ORDER BY ".$orderby_proj_sql;
52 }else{
53 if(!empty($public_projects)){
54 $where = " where proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1 Group by proj.id ORDER BY ".$orderby_proj_sql;
55 }else{
56 $where = " Group by proj.id ORDER BY ".$orderby_proj_sql;
57 }
58 }
59 }else{
60 if(!empty($public_projects)){
61 $where = " where (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) $wppm_proj_attr Group by proj.id ORDER BY $orderby_proj_sql";
62 }
63 else{
64 $where = " where ((FIND_IN_SET('$current_user->ID',proj.users)) OR (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR ( proj.created_by='$cu_id')) $wppm_proj_attr Group by proj.id ORDER BY $orderby_proj_sql";
65 }
66 }
67 $where = apply_filters('wppm_project_filter_in_task_list_where',$where);
68 $query.= $where;
69 $projects = $wpdb->get_results($query);
70 $appearance_settings = get_option("wppm-ap-task-list");
71 $filters = array(
72 'sort_by' => $sort_by,
73 'order' => $order,
74 'search' => $search_tag,
75 'filter'=>$filter_by,
76 'proj_filter' =>$proj_filter
77 );
78 $tl_filters = isset( $_COOKIE['wppm_filters'] ) ? sanitize_text_field( wp_unslash( $_COOKIE['wppm_filters'] ) ) : $filters;
79 if(!is_array($tl_filters)){
80 $tl_filters = json_decode($tl_filters);
81 $tl_filters_arr = (array) $tl_filters;
82 } else{
83 $tl_filters_arr = $filters;
84 }
85 $wppm_tl_filter = "1=1";
86 $order = isset($_POST['order']) ? sanitize_text_field(wp_unslash($_POST['order'])) :$tl_filters_arr['order'];
87 $sort_by = isset($_POST['sort_by']) ? sanitize_text_field(wp_unslash($_POST['sort_by'])):$tl_filters_arr['sort_by'];
88 $search_tag = isset($_POST['task_search']) ? sanitize_text_field(wp_unslash($_POST['task_search'])) : $tl_filters_arr['search'];
89 $filter_by = isset($_POST['wppm_task_filter']) ? sanitize_text_field(wp_unslash($_POST['wppm_task_filter'])) : $tl_filters_arr['filter'];
90 $proj_filter = isset($_POST['wppm_proj_filter']) ? sanitize_text_field(wp_unslash($_POST['wppm_proj_filter'])) : $tl_filters_arr['proj_filter'];
91 $proj_filter = esc_sql($proj_filter);
92 if($sort_by == ""){
93 $sort_by = 'task_name';
94 }
95 $filters = array(
96 'sort_by' => $sort_by,
97 'order' => $order,
98 'search'=>$search_tag,
99 'filter'=>$filter_by,
100 'proj_filter'=>$proj_filter
101 );
102 setcookie('wppm_filters',wp_json_encode( $filters ),time() + 3600);
103
104 // Allowed sort columns
105 $allowed_sort_by = [
106 'project' => 'proj.project_name',
107 'status' => 'task_statuses.name',
108 'priority' => 'task_priorities.name',
109 'start_date' => 'Task.start_date',
110 'end_date' => 'Task.end_date',
111 'TIMESTAMPDIFF(SECOND, Task.start_date, Task.end_date)' => 'TIMESTAMPDIFF(SECOND, Task.start_date, Task.end_date)',
112 ];
113
114 // Resolve sort_by safely
115 $sort_key = isset($_POST['sort_by'])
116 ? sanitize_text_field(wp_unslash($_POST['sort_by']))
117 : ($tl_filters_arr['sort_by'] ?? 'task_name');
118
119 $sort_by = $allowed_sort_by[$sort_key] ?? 'task_name';
120
121 // Resolve order safely
122 $order = (isset($_POST['order']) && strtoupper(wp_unslash($_POST['order'])) === 'ASC')
123 ? 'ASC'
124 : 'DESC';
125
126 if($filter_by=='all'){
127 if($wppm_hide_completed_status_task == 0){
128 $wppm_tl_filter = "Task.status!='4'";
129 }
130 }
131 if($filter_by=='4'){
132 $wppm_tl_filter = "Task.status='4'";
133 }elseif($filter_by=='overdue'){
134 $wppm_tl_filter = "Task.status!='4' AND (CAST(Task.end_date AS DATE)) < '$current_date'";
135 }elseif($filter_by == 'unassigned'){
136 $wppm_tl_filter = "Task.users=''";
137 }elseif($filter_by == '1'){
138 $wppm_tl_filter = "Task.status='1'";
139 }elseif($filter_by == '2'){
140 $wppm_tl_filter = "Task.status='2'";
141 }elseif($filter_by == '3'){
142 $wppm_tl_filter = "Task.status='3'";
143 }elseif($filter_by == 'mine'){
144 $wppm_tl_filter = "(FIND_IN_SET('$current_user->ID',Task.users)>0)";
145 }elseif($filter_by == 'archived'){
146 $wppm_tl_filter = "Task.is_archived = 1";
147 }
148
149 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))){
150 foreach($wppm_hide_task_statuses_from_frontend as $status){
151 $wppm_tl_filter .= " AND Task.status != '$status'";
152 }
153 }
154 if($proj_filter!=0){
155 $wppm_task_by_proj_filter = "Task.project = '$proj_filter'";
156 }else{
157 $wppm_task_by_proj_filter ="1=1";
158 }
159 $wppm_default_task_date = get_option('wppm_default_task_date');
160 $search_tag_text = '%'.$wpdb->esc_like($search_tag).'%';
161 if(!empty($search_tag)){
162 $search_tag_text = '%'.$wpdb->esc_like($search_tag).'%';
163 $query = ("SELECT Task.*
164 FROM {$wpdb->prefix}wppm_task AS Task
165 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
166 Left join {$wpdb->prefix}wppm_task_statuses task_statuses ON Task.status = task_statuses.id
167 Left join {$wpdb->prefix}wppm_task_priorities task_priorities ON Task.priority = task_priorities.id
168 Left join {$wpdb->prefix}wppm_project_users proj_users ON Task.project = proj_users.proj_id
169 Left join {$wpdb->base_prefix}users user ON (FIND_IN_SET(user.id,Task.users)>0) AND user.display_name LIKE '$search_tag_text'
170 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id");
171 }
172 else{
173 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
174 if($sort_by=='task_name'|| $sort_by=='start_date' || $sort_by=='end_date'){
175 $query = ( "SELECT Task.* FROM {$wpdb->prefix}wppm_task AS Task
176 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
177 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id
178 ");
179 } else{
180 $query = ( "SELECT Task.* FROM {$wpdb->prefix}wppm_task AS Task
181 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
182 Left join {$wpdb->prefix}wppm_task_statuses task_statuses ON Task.status = task_statuses.id
183 Left join {$wpdb->prefix}wppm_task_priorities task_priorities ON Task.priority = task_priorities.id
184 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id
185 ");
186 }
187 }else{
188 $query = ( "SELECT Task.*
189 FROM {$wpdb->prefix}wppm_task AS Task
190 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
191 Left join {$wpdb->prefix}wppm_project_users proj_users ON Task.project = proj_users.proj_id
192 Left join {$wpdb->prefix}wppm_task_statuses task_statuses ON Task.status = task_statuses.id
193 Left join {$wpdb->prefix}wppm_task_priorities task_priorities ON Task.priority = task_priorities.id
194 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id
195 ");
196 }
197 }
198 $no_of_rows = ( "SELECT count(*) FROM ($query");
199 if(!empty($search_tag )){
200 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
201 if(!empty($public_projects)){
202 $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 ";
203 }else{
204 $where = " where $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 ";
205 }
206 } else{
207 if(!empty($public_projects)){
208 $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 (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) 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";
209 }else{
210 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) 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";
211 }
212 }
213 }else{
214 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
215 if(!empty($public_projects)){
216 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr";
217 }else{
218 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr";
219 }
220 } else{
221 if(!empty($public_projects)){
222 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr";
223 }else{
224 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND ((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) $wppm_proj_attr";
225 }
226 }
227 }
228 $query = apply_filters('wppm_task_list_list_view_query',$query,$search_tag_text);
229 $no_of_rows= apply_filters('wppm_task_list_number_of_rows_query',$no_of_rows,$search_tag_text);
230 $where = apply_filters('wppm_task_list_query_where',$where, $wppm_tl_filter,$search_tag_text);
231 if($filter_by != 'archived'){
232 $where .= $archived_where;
233 }
234 $no_of_rows_where = $where." Group by Task.id) AS Task";
235 $no_of_rows .= $no_of_rows_where;
236 $no_of_rows = apply_filters('wppm_task_list_no_of_rows',$no_of_rows,$wppm_tl_filter,$search_tag_text);
237 $totalrows = $wpdb->get_var($no_of_rows);
238 $query .= $where." Group by Task.id ORDER BY ".$sort_by." ".$order."";
239 $query = apply_filters('wppm_task_list_query',$query);
240 $limit_start=$page_no*$task_per_page;
241 $limit="\n LIMIT ".$limit_start.",".$task_per_page." ";
242 $task_id_array = array();
243 $query = $query.$limit;
244 $wppm_task_fillter = $wpdb->get_results($query);
245 $flag = false;
246 $project_creator = $wpdb->get_var($wpdb->prepare("SELECT created_by FROM {$wpdb->prefix}wppm_project WHERE created_by = %d",$cu_id));
247 if(!empty($wppm_task_fillter)){
248 foreach($wppm_task_fillter as $key_filter=>$val_filter){
249 $val_array = (array) $val_filter;
250 $tusers = $val_array['users'];
251 $tusers_arr = explode(',',$tusers);
252 $tproject_id = esc_sql($val_array['project']);
253 if(!empty($tusers) && in_array($current_user->ID,$tusers_arr)){
254 $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));
255 $project_users = $wpdb->get_var($wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d",$tproject_id));
256 $project_users_arr = explode(',',(string)$project_users);
257 if(((!empty($project_user_role)) && ($project_user_role == 1) && in_array($current_user->ID,$project_users_arr))){
258 $flag= true;
259 break;
260 }
261 }
262 }
263 }
264 if(($current_user->has_cap('manage_options') || $wppmfunction->has_permission('add_new_task',0) || ($flag==true) || ($project_creator!="")) && (isset($page) && $page != 'wppm-archived-tasks' )){
265 $style = "display:inline;";
266 }else{
267 $style = "display:none;";
268 }
269 $style = apply_filters('wppm_tl_add_new_task_btn_style',$style);
270 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == ('wppm_admin') || ($flag==true) || ($wppmfunction->has_permission('change_task_status',0))!="" || ($project_creator!="")){
271 $cs_style = "display:flex;";
272 }else{
273 $cs_style = "display:none;";
274 }
275 if ( isset($page) && $page === 'wppm-archived-tasks' ) {
276 $ar_filter_style = "display:none;";
277 } else {
278 $ar_filter_style = "display:flex;";
279 }
280 $todo_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(1)."'" );
281 $inp_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(2)."'" );
282 $hold_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(3)."'" );
283 $completed_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(4)."'" );
284 $todo_status_style = (!empty($todo_status_name))? "display:inline" :"display:none;";
285 $inp_status_style = (!empty($inp_status_name))? "display:inline" :"display:none;";
286 $hold_status_style = (!empty($hold_status_name))? "display:inline" :"display:none;";
287 $completed_status_style = (!empty($completed_status_name))? "display:inline" :"display:none;";
288 if( isset($page) && $page === 'wppm-tasks'){
289 $arch_filter_style = "display:inline;";
290 }else{
291 $arch_filter_style = "display:none;";
292 }
293 ?>
294 <form id="wppm_task_list_frm">
295 <div id="wppm_task_list_container" class="wppm_bootstrap">
296 <div class="row">
297 <div class="col-sm-12" id="wppm_heading_inline">
298 <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>
299 <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>
300 </div>
301 </div>
302 <div style="display:flex;justify-content:space-between;margin-top:20px;flex-wrap: wrap;">
303 <div style="display:flex;flex-wrap: wrap;min-width: 0; max-width: 100%; ">
304 <div id="wppm_task_filter_container">
305 <div class="wppm-bulk-actions"style="margin-left: -14px !important;">
306 <button
307 id="wppm-task-bulk-actions-btn"
308 class="wppm-button small secondary"
309 type="button"
310 style="display:none;margin: 14px -20px 0px 22px; padding:14px;font: 13px Helvetica Neue, Arial, Helvetica, sans-serif !important;"
311 data-popover="wppm-task-bulk-actions">
312 <?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">
313 </button>
314 <div id="wppm-task-bulk-actions" class="gpopover wppm-popover-menu wppm-proj-bulk-actions">
315 <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' ) ); ?>');">
316 <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>
317 </div>
318 <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' ) ); ?>');">
319 <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>
320 </div>
321 <div class="wppm-popover-menu-item" onclick="wppm_bulk_delete_task('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_delete_task' ) ); ?>');">
322 <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>
323 </div>
324 </div>
325 <div class="wppm-filter-item">
326 <label for="wppm_task_filter" style="margin-left:20px;"> <?php echo esc_html_e('Filter','taskbuilder');?></label>
327 <select id="wppm_task_filter" name="wppm_task_filter" onchange="wppm_apply_task_filter('<?php echo esc_attr($page); ?>')" style="margin-left:20px;">
328 <option value="all"<?php echo ($filter_by == "all")? 'selected':""?>><?php echo esc_html_e('All','taskbuilder');?></option>
329 <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>
330 <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>
331 <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>
332 <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>
333 <option value="mine" <?php echo ($filter_by == "mine")? 'selected':""?>><?php echo esc_html_e('Mine','taskbuilder');?></option>
334 <option value="unassigned" <?php echo ($filter_by == "unassigned")? 'selected':""?>><?php echo esc_html_e('Unassigned','taskbuilder');?></option>
335 <option value="overdue" <?php echo ($filter_by == "overdue")? 'selected':""?>><?php echo esc_html_e('Overdue','taskbuilder');?></option>
336 <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>
337 </select>
338 </div>
339 </div>
340 </div>
341 <div class="wppm-filter-item wppm_project_autocomplete_container" style="margin: 0 0 0 28px;">
342 <label for="wppm_task_list_proj_filter">
343 <?php echo esc_html_e('Project','taskbuilder');?>
344 </label><br>
345 <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;">
346 <option value="0" <?php echo ($proj_filter == 0)? 'selected':""?>><?php echo esc_html_e('All','taskbuilder');?></option>
347 <?php
348 if(!empty($projects)){
349 foreach($projects as $proj) {
350 ?>
351 <option value="<?php echo esc_attr($proj->id)?>" <?php echo ($proj_filter == $proj->id)? 'selected':""?>><?php echo esc_html($proj->project_name,'taskbuilder');?></option>
352 <?php }
353 } ?>
354 </select>
355 </div>
356 <div class="wppm_display_submit" style="margin: 0 0 -5px 10px;">
357 <div class="wppm-filter-actions">
358 <span class="wppm-link" onclick="wppm_tl_reset_filter('<?php echo esc_attr($page); ?>')"> <?php echo esc_html_e('Reset','taskbuilder');?></span>
359 </div>
360 </div>
361 </div>
362 <div id="wppm_task_search" style="display:flex;justify-content:flex-end;">
363 <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">
364 <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) : "" ?>">
365 </div>
366 </div>
367 </div>
368 <div style="display:flex;justify-content:flex-end;margin-right: 10px;">
369 <span id="wppm_grid_view_btn" onclick="wppm_view_task_search_filter(<?php echo esc_attr($page_no)?>,'<?php echo esc_attr($page)?>')"><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>
370 </div>
371 </div>
372 <script>
373 jQuery('#wppm-more-actions-btn, #wppm-task-bulk-actions-btn').gpopover({width: 200});
374 </script>
375 <div id="wppm_task_table_container" class="wppm_task_table_container table-responsive" style="padding: 0 15px 15px 15px;">
376 <table id="wppm_task_table" class="wppm_table table">
377 <thead>
378 <tr>
379 <th style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>" onchange="wppm_task_bulk_select_change()">
380 <div class="checkbox-container">
381 <input id="wppm_task_bulk_select_option" class="wppm-bulk-selector" type="checkbox" onchange="wppm_task_bulk_select_change();"/>
382 <label for="wppm_task_bulk_select_option"></label>
383 </div>
384 </th>
385 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
386 <div id="wppm_task_name_container">
387 <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>
388 <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">
389 <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">
390 </div>
391 </th>
392 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
393 <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>
394 <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">
395 <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">
396 </th>
397 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
398 <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>
399 <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">
400 <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">
401 </th>
402 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
403 <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>
404 <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">
405 <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">
406 </th>
407 <?php if($wppm_default_task_date == 1 && $wppm_deafault_time_duration_task==0) { ?>
408 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
409 <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>
410 <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">
411 <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">
412 </th>
413 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
414 <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>
415 <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">
416 <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">
417 </th>
418 <?php }
419 if( $wppm_deafault_time_duration_task==1){ ?>
420 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
421 <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>
422 <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">
423 <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">
424 </th>
425 <?php }?>
426 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
427 <span style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Assign To','taskbuilder'); ?></span>
428 </th>
429 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
430 <span style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Progress','taskbuilder'); ?></span>
431 </th>
432 <?php do_action('wppm_table_header');?>
433 </tr>
434 </thead>
435 <tbody>
436 <?php
437 $task_index = 0;
438 if(!empty($wppm_task_fillter)){
439 foreach($wppm_task_fillter as $task) {
440 $task_id = absint($task->id);
441 $wppm_task_duration = $wppmfunction->wppm_get_duration($task->start_date,$task->end_date);
442 $checklists = $wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist where task_id = %d",$task_id) );
443 if(!empty($task)){
444 $taskdata = $wppmfunction->get_task($task->id);
445 $project_data = $wppmfunction->get_project($task->project);
446 $task_index++;
447 $total=$wpdb->get_var("SELECT COUNT(Items.id) AS check_id
448 FROM {$wpdb->prefix}wppm_checklist_items AS Items
449 Left join {$wpdb->prefix}wppm_checklist checklist ON Items.checklist_id = checklist.id
450 WHERE checklist.task_id = '$task_id'");
451 $total_checked_items=$wpdb->get_var("SELECT COUNT(Items.id) AS check_id
452 FROM {$wpdb->prefix}wppm_checklist_items AS Items
453 Left join {$wpdb->prefix}wppm_checklist checklist ON Items.checklist_id = checklist.id
454 WHERE checklist.task_id = '$task_id' AND Items.checked=1");
455
456 if(isset($task->status)){
457 $tstatus = absint($task->status);
458 $status = $wpdb->get_row( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_statuses where id = %d",$tstatus) );
459 }
460 if(!empty($task->priority)){
461 $tpriority = absint($task->priority);
462 $priority = $wpdb->get_row( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_priorities where id = %d",$tpriority) );
463 }
464 if(isset($task->project)){
465 $tproj = absint($task->project);
466 $project = $wpdb->get_row( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project where id = %d",$tproj) );
467 }
468 if($wppm_task_time == 1){
469 $tsDate = new DateTime($task->start_date);
470 $teDate = new DateTime($task->end_date);
471 if($task->start_date=='0000-00-00 00:00:00'){
472 if($wppm_date_setting=='Y-m-d H:i:s'){
473 $task_start_date = '0000-00-00 00:00:00';
474 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
475 $task_start_date = '00-00-0000 00:00:00';
476 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
477 $task_start_date = '00-00-0000 00:00:00';
478 }else{
479 $task_start_date = '0000-00-00 00:00:00';
480 }
481 }if($task->end_date=='0000-00-00 00:00:00'){
482 if($wppm_date_setting=='Y-m-d H:i:s'){
483 $task_end_date = '0000-00-00 00:00:00';
484 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
485 $task_end_date = '00-00-0000 00:00:00';
486 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
487 $task_end_date = '00-00-0000 00:00:00';
488 }else{
489 $task_end_date = '0000-00-00 00:00:00';
490 }
491 }if($task->start_date!='0000-00-00 00:00:00'){
492 if(!empty($wppm_date_setting)){
493 $task_start_date = $tsDate->format($wppm_date_setting);
494 } else {
495 $task_start_date = isset($task->start_date)? $task->start_date:"";
496 }
497 }if($task->end_date!='0000-00-00 00:00:00'){
498 if(!empty($wppm_date_setting)){
499 $task_end_date = $teDate->format($wppm_date_setting);
500 }else{
501 $task_end_date = isset($task->end_date) ? $task->end_date: "" ;
502 }
503
504 }
505 } elseif($wppm_task_time == 0){
506 $tsDate = new DateTime($task->start_date);
507 $teDate = new DateTime($task->end_date);
508 $task_start_date = $tsDate->format('Y-m-d');
509 $task_end_date = $teDate->format('Y-m-d');
510 if($task->start_date=='0000-00-00 00:00:00'){
511 if($wppm_date_setting=='Y-m-d H:i:s'){
512 $task_start_date = '0000-00-00';
513 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
514 $task_start_date = '00-00-0000';
515 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
516 $task_start_date = '00-00-0000';
517 }else{
518 $task_start_date = '0000-00-00';
519 }
520 }
521 if($task->end_date=='0000-00-00 00:00:00'){
522 if($wppm_date_setting=='Y-m-d H:i:s'){
523 $task_end_date = '0000-00-00';
524 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
525 $task_end_date = '00-00-0000';
526 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
527 $task_end_date = '00-00-0000';
528 }else{
529 $task_end_date = '0000-00-00';
530 }
531 }
532 if($task->start_date!='0000-00-00 00:00:00'){
533 if($wppm_date_setting=='Y-m-d H:i:s'){
534 $task_start_date = $tsDate->format('Y-m-d');
535 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
536 $task_start_date = $tsDate->format('d-m-Y');
537 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
538 $task_start_date = $tsDate->format('m-d-Y');
539 }else{
540 $task_start_date = $tsDate->format('Y-m-d');
541 }
542 }
543 if($task->end_date!='0000-00-00 00:00:00'){
544 if($wppm_date_setting=='Y-m-d H:i:s'){
545 $task_end_date = $teDate->format('Y-m-d');
546 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
547 $task_end_date = $teDate->format('d-m-Y');
548 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
549 $task_end_date = $teDate->format('m-d-Y');
550 }else{
551 $task_end_date = $teDate->format('Y-m-d');
552 }
553 }
554 }
555 $url = $wppmfunction->get_task_url( $task->id, $is_frontend );
556 ?>
557 <tr onclick= "if(link)wppm_tl_handle_click(event, <?php echo esc_attr($task->id) ?>, '<?php echo esc_url( $url ); ?>')" >
558 <td class="bulk-selector" onmouseover="link=false;" onmouseout="link=true;">
559 <div class="wppm-pl-item-selector">
560 <div class="checkbox-container">
561 <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 ); ?>"/>
562 <label for="wppm_bulk_select_<?php echo esc_attr($task->id) ?>"></label>
563 </div>
564 </div>
565 </td>
566 <td onmouseover="link=true;">
567 <?php echo esc_html($task->task_name) ?>
568 </td>
569 <td onmouseover="link=true;">
570 <?php if(!empty($project->project_name)){
571 echo esc_html($project->project_name);
572 }
573 ?>
574 </td>
575 <td onmouseover="link=true;">
576 <?php if(!empty($task->status)){ ?>
577 <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>
578 <?php } ?>
579 </td>
580 <td onmouseover="link=true;">
581 <?php if(!empty($task->priority)){ ?>
582 <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>
583 <?php } ?>
584 </td>
585 <?php if($wppm_default_task_date == 1 && $wppm_deafault_time_duration_task==0) { ?>
586 <td onmouseover="link=true;">
587 <?php if(!empty($task_start_date)){ ?>
588 <?php echo esc_html($task_start_date);
589 } ?>
590 </td>
591 <td onmouseover="link=true;">
592 <?php 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')){
593 $style = "color:#FF0000";
594 } else{
595 $style = "color:#2C3E50";
596 }?>
597 <span style="<?php echo esc_attr($style); ?>"><?php echo esc_html($task_end_date);?></span>
598 </td>
599 <?php } ?>
600 <?php if($wppm_deafault_time_duration_task==1){ ?>
601 <?php
602 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')){
603 $style = "color:#FF2222";
604 } else {
605 $style = "color:#2C3E50";
606 } ?>
607 <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>
608 <?php } ?>
609 </td>
610 <td onmouseover="link=true;" style="text-align:center;">
611 <?php
612 $i=0;
613 if(!empty($project_data['users'])){
614 $proj_users = explode(',',$project_data['users']);
615 }
616 if(!empty($task->users)){
617 $users = explode(",",$task->users);
618 foreach($users as $user){
619 if( (!empty($proj_users)) && (in_array($user,$proj_users))){
620 $i++;
621 if( $i <= 4 ){
622 $userdata = get_userdata( $user );
623 if(!empty($userdata)){
624 ?>
625 <a href="#" title="<?php echo esc_attr($userdata->display_name); ?>">
626 <?php echo get_avatar($userdata->ID, 25, "mysteryman")?>
627 </a> <?php
628 }
629 }
630 }
631 }
632 }
633 if($i > 4){
634 ?>
635 <a href="#" class="wppm_avatar">
636 <span id="wppm_avatar" style="background-color:black;" class="avatar">+<?php echo esc_html($i-4) ?></span>
637 </a>
638 <?php } ?>
639 <?php
640 if($i==0){
641 echo esc_html_e('None','taskbuilder');
642 } ?>
643 </td>
644 <td onmouseover="link=true;">
645 <?php
646 $completion = 0;
647 if ($total != 0 && $total != NULL) {
648 $completion = intval($total_checked_items/$total*100);
649 }
650 echo esc_html($completion).'%';
651 ?>
652 </td>
653 <?php do_action('wppm_table_column');?>
654 </tr>
655 <?php }
656 }
657 }
658 ?>
659 </tbody>
660 </table>
661 <script>
662 function wppm_tl_handle_click(event, id, url) {
663 if ( ( event.ctrlKey || event.metaKey ) && url ) {
664 window.open(url, '_blank');
665 } else {
666 wppm_open_task(id);
667 }
668 }
669 </script>
670 <?php
671 $current_page=$page_no+1;
672 $total_pages=ceil($totalrows/$task_per_page);
673 $prev_page_no=$current_page-1;
674 $prev_class=($prev_page_no==0)?'disabled':'';
675 $next_page_no=($total_pages==$current_page)? $current_page-1:$current_page;
676 $next_class=($total_pages==$current_page)?'disabled':'';
677 ?>
678 <div class="row" style="background-color:#ffffff;">
679 <div class="col-sm-12">
680 <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>
681 <hr style="<?php echo esc_attr($total_pages==0)? '':'display: none;';?>">
682 </div>
683 <div>
684 </div>
685 </div>
686 <div class="row wppm_task_pagination_container">
687 <div class="col-sm-4">
688 <?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')?>
689 </div>
690 <div class="wppm_task_pagination col-sm-4" style="<?php echo esc_attr($total_pages==0)? "display:none;":"display:flex;"?>">
691 <span class="wppm-pagination-txt">
692 <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>
693 </span>
694 <span <?php echo esc_attr($prev_class) ?>
695 style="<?php echo (isset($prev_class) && esc_attr($prev_class)== 'disabled') ? 'display:none;':'display:block;'?>cursor:pointer;">
696 <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>
697 </span>
698 <span <?php echo esc_attr($next_class) ?>
699 style="<?php echo (isset($next_class) && esc_attr($next_class) == 'disabled')?'display:none;':'display:block;'?>cursor:pointer;">
700 <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>
701 </span>
702 </div>
703 </div>
704 </form>
705 <style>
706 .select2-selection--single {
707 height: 30px!important;
708 }
709 .select2-dropdown:hover {
710 color: #23527c!important;;
711 }
712 .select2-results__options{
713 font:15px "Helvetica Neue",Arial,Helvetica,sans-serif !important;
714 margin: 0!important;
715 line-height: inherit!important;
716 }
717 .select2-selection__rendered{
718 font:15px "Helvetica Neue",Arial,Helvetica,sans-serif !important;
719 margin-top: 5px!important;
720 }
721 .select2-selection__rendered:hover{
722 color: #2271b1 !important;
723 }
724 .select2-container--default .select2-results__option--highlighted.select2-results__option--selectable{
725 background-color: #e85f08!important;
726 color: white !important;
727 }
728 .select2-container {
729 max-width: 150px !important;
730 min-width: 150px !important;
731 }
732 #wppm_task_filter{
733 min-height: 30px !important;
734 max-height: 35px !important;
735 }
736 #wppm_task_table tr:nth-child(even) td{
737 background-color:<?php echo esc_attr($appearance_settings['list-item-even-background-color'])?>;
738 color:<?php echo esc_attr($appearance_settings['list-item-even-text-color'])?>;
739 }
740 #wppm_task_table tr:nth-child(odd) td{
741 background-color:<?php echo esc_attr($appearance_settings['list-item-odd-background-color'])?>;
742 color:<?php echo esc_attr($appearance_settings['list-item-odd-text-color'])?>;
743 }
744 #wppm_task_table tr:hover td{
745 background-color:<?php echo esc_attr($appearance_settings['list-item-hover-background-color'])?>;
746 }
747 #wppm_task_table tr:hover td{
748 color: <?php echo esc_attr($appearance_settings['list-item-hover-text-color'])?>;
749 }
750 #wppm_add_new_task_btn_tl:hover{
751 background-color:<?php echo esc_attr($appearance_settings['list-header-button-hover-color'])?>!important;
752 }
753 </style>
754 <script type="text/javascript">
755 var link = true;
756 jQuery( document ).ready( function( jQuery ) {
757 jQuery("input[name='wppm_task_search_filter']").keypress(function(e) {
758 //Enter key
759 if (e.which == 13) {
760 wppm_task_search_filter('<?php echo esc_attr($page); ?>');
761 }
762 });
763 jQuery("#wppm_task_name_th").hover(function(){
764 jQuery('#wppm_chevron_sort_up_task_name_img').show();
765 jQuery('#wppm_chevron_sort_down_task_name_img').hide();
766 });
767 jQuery("#wppm_project_name_th").hover(function(){
768 jQuery('#wppm_chevron_sort_up_project_list_img').show();
769 jQuery('#wppm_chevron_sort_down_project_list_img').hide();
770 });
771 jQuery("#wppm_status_th").hover(function(){
772 jQuery('#wppm_chevron_sort_up_status_img').show();
773 jQuery('#wppm_chevron_sort_down_status_img').hide();
774 });
775 jQuery("#wppm_priority_th").hover(function(){
776 jQuery('#wppm_chevron_sort_up_priority_img').show();
777 jQuery('#wppm_chevron_sort_down_priority_img').hide();
778 });
779 jQuery("#wppm_start_date_th").hover(function(){
780 jQuery('#wppm_chevron_sort_up_start_date_img').show();
781 jQuery('#wppm_chevron_sort_down_start_date_img').hide();
782 });
783 jQuery("#wppm_end_date_th").hover(function(){
784 jQuery('#wppm_chevron_sort_up_end_date_img').show();
785 jQuery('#wppm_chevron_sort_down_end_date_img').hide();
786 });
787 jQuery("#wppm_task_duration_th").hover(function(){
788 jQuery('#wppm_chevron_sort_up_task_duration_img').show();
789 jQuery('#wppm_chevron_sort_down_task_duration_img').hide();
790 });
791
792 })
793 jQuery('#wppm_task_list_proj_filter').select2({ dropdownAutoWidth: true, width: 'auto' });
794 jQuery('#wppm_task_list_proj_filter').val(<?php echo esc_attr($proj_filter) ?>);
795 /**
796 * Bulk item selector change
797 */
798 function wppm_bulk_task_item_select_change() {
799 jQuery("#wppm-task-bulk-actions-btn").show();
800 var items = jQuery(".wppm-task-bulk-select:checked");
801 var checked = items.length === 0 ? false : true;
802 if(checked){
803 jQuery(".wppm-bulk-selector").prop("checked", checked);
804 }else{
805 jQuery("#wppm-task-bulk-actions-btn").hide();
806 jQuery(".wppm-bulk-selector").prop("checked", false);
807 }
808 }
809 </script>
810