PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 5.0.2
Taskbuilder – Project Management & Task Management Tool With Kanban Board v5.0.2
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 / projects / open_project / wppm_view_project_tasks.php

wppm_view_project_tasks.php in Taskbuilder – Project Management & Task Management Tool With Kanban Board 5.0.2, at includes/admin/projects/open_project/wppm_view_project_tasks.php

581 lines 31.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 exit; // Exit if accessed directly
4 }
5 global $wpdb,$current_user, $wppmfunction;
6 $task_per_page = 20;
7 $total_no_of_rows = 0;
8 $totalrows_tasks = 0;
9 $appearance_settings = get_option("wppm-ap-grid-view");
10 $cu_id = esc_sql($current_user->ID);
11 $page_no = isset($_POST['page_no']) ? intval(sanitize_text_field($_POST['page_no'])) : '0';
12 $orderby_sql = esc_sql(sanitize_sql_orderby( "load_order ASC" ));
13 $task_status = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_task_statuses ORDER BY $orderby_sql " );
14 $wppm_task_time = get_option('wppm_task_time');
15 $page = isset($_POST['page']) ? sanitize_text_field($_POST['page']) : '';
16 $wppm_date_setting = get_option('wppm_date_setting');
17 $search_tag = isset($_POST['task_search']) ? sanitize_text_field($_POST['task_search']) : '';
18 $filter_by = isset($_POST['wppm_task_filter']) ? sanitize_text_field($_POST['wppm_task_filter']) : "all";
19 $proj_filter = isset($_POST['wppm_proj_filter']) ? sanitize_text_field($_POST['wppm_proj_filter']) : "0";
20 $public_projects = isset($_POST['public_projects']) ? sanitize_text_field($_POST['public_projects']):"0";
21 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
22 $wppm_hide_completed_status_task = get_option('wppm_hide_completed_status_task');
23 $wppm_hide_task_statuses_from_frontend = get_option('wppm_hide_task_statuses_from_frontend');
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 $filters = array(
30 'search' => $search_tag,
31 'filter'=>$filter_by,
32 'proj_filter'=>$proj_filter
33 );
34 $grid_view_filter = $filters ;
35 $tl_filters = isset( $_COOKIE['wppm_grid_view_filters'] ) ? sanitize_text_field( wp_unslash( $_COOKIE['wppm_grid_view_filters'] ) ) : $grid_view_filter;
36 $current_date = date('Y-m-d');
37 $proj_attr = isset($_POST['wppm_project_attr']) ? sanitize_text_field($_POST['wppm_project_attr']):"";
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 if(!empty($proj_attr )){
46 $proj_attr = esc_sql($proj_attr);
47 $wppm_proj_attr = ' AND (proj.project_name = "'.$proj_attr.'")';
48 }else{
49 $wppm_proj_attr = '';
50 }
51 $query = ("SELECT proj.*
52 FROM {$wpdb->prefix}wppm_project AS proj
53 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON proj.id = proj_meta.project_id");
54 $santitize_order_by = esc_sql(sanitize_sql_orderby( "project_name ASC" ));
55 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
56 if(!empty($proj_attr )){
57 $proj_attr = esc_sql($proj_attr);
58 $where = " where project_name = '".$proj_attr."' Group by proj.id ORDER BY '$santitize_order_by'";
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 Group by proj.id ORDER BY '$santitize_order_by'";
62 }else{
63 $where = " Group by proj.id ORDER BY '$santitize_order_by'";
64 }
65 }
66 }else{
67 if(!empty($public_projects)){
68 $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 '$santitize_order_by'";
69 } else{
70 $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 '$santitize_order_by'";
71 }
72 }
73 $where = apply_filters('wppm_project_filter_in_task_list_grid_view_where',$where);
74 $query.= $where;
75 $projects = $wpdb->get_results($query);
76 $wppm_tl_filter = "1=1";
77 if(!is_array($tl_filters)){
78 $tl_filters = json_decode($tl_filters);
79 $tl_filters_arr = (array) $tl_filters;
80 } else{
81 $tl_filters_arr = $filters;
82 }
83 $search_tag = isset($_POST['task_search']) ? sanitize_text_field($_POST['task_search']) : $tl_filters_arr['search'];
84 $filter_by = isset($_POST['wppm_task_filter']) ? sanitize_text_field($_POST['wppm_task_filter']) : $tl_filters_arr['filter'];
85 $proj_filter = isset($_POST['wppm_proj_filter']) ? sanitize_text_field($_POST['wppm_proj_filter']) : $tl_filters_arr['proj_filter'];
86 $filters = array(
87 'search'=>$search_tag,
88 'filter'=>$filter_by,
89 'proj_filter' =>$proj_filter
90 );
91 setcookie('wppm_grid_view_filters',wp_json_encode( $filters ),time() + 3600);
92 if($filter_by=='all'){
93 if($wppm_hide_completed_status_task == 0){
94 $wppm_tl_filter = "Task.status!='4'";
95 }
96 }
97 if($filter_by=='4'){
98 $wppm_tl_filter = "Task.status='4'";
99 }elseif($filter_by=='overdue'){
100 $wppm_tl_filter = "Task.status!='4' AND (CAST(Task.end_date AS DATE)) < '$current_date'";
101 }elseif($filter_by == 'unassigned'){
102 $wppm_tl_filter = "Task.users=''";
103 }elseif($filter_by == '1'){
104 $wppm_tl_filter = "Task.status='1'";
105 }elseif($filter_by == '2'){
106 $wppm_tl_filter = "Task.status='2'";
107 }elseif($filter_by == '3'){
108 $wppm_tl_filter = "Task.status='3'";
109 }elseif($filter_by == 'mine'){
110 $wppm_tl_filter = "(FIND_IN_SET('$current_user->ID',Task.users)>0)";
111 }elseif($filter_by == 'archived'){
112 $wppm_tl_filter = "Task.is_archived = 1";
113 }
114
115 if(!empty($wppm_hide_task_statuses_from_frontend) && is_array($wppm_hide_task_statuses_from_frontend) && (isset($_POST['is_frontend']) && sanitize_text_field($_POST['is_frontend'])==1)){
116 foreach($wppm_hide_task_statuses_from_frontend as $status){
117 $wppm_tl_filter .= " AND Task.status != '$status'";
118 }
119 }
120
121 if($proj_filter!=0){
122 $wppm_task_by_proj_filter = "Task.project = ".esc_sql($proj_filter)."";
123 }else{
124 $wppm_task_by_proj_filter ="1=1";
125 }
126 if(!empty($task_status)){
127 foreach($task_status as $status) {
128 $status_id = esc_sql($status->id);
129 if(!empty($search_tag)){
130 $search_tag_text = '%'.$wpdb->esc_like($search_tag).'%';
131 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
132 $query = ("SELECT Task.*
133 FROM {$wpdb->prefix}wppm_task AS Task
134 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
135 Left join {$wpdb->prefix}wppm_task_statuses task_statuses ON Task.status = task_statuses.id
136 Left join {$wpdb->prefix}wppm_task_priorities task_priorities ON Task.priority = task_priorities.id
137 Left join {$wpdb->base_prefix}users user ON (FIND_IN_SET(user.id,Task.users)>0) AND user.display_name LIKE '$search_tag_text'
138 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id
139 ");
140 $no_of_rows = ( "SELECT count(*) FROM ($query");
141 if(!empty($public_projects)){
142 $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') AND Task.status='$status_id' ";
143 }else{
144 $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') AND Task.status='$status_id' ";
145 }
146 } else{
147 $query = ("SELECT Task.*
148 FROM {$wpdb->prefix}wppm_task AS Task
149 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
150 Left join {$wpdb->prefix}wppm_task_statuses task_statuses ON Task.status = task_statuses.id
151 Left join {$wpdb->prefix}wppm_task_priorities task_priorities ON Task.priority = task_priorities.id
152 Left join {$wpdb->prefix}wppm_project_users proj_users ON Task.project = proj_users.proj_id
153 Left join {$wpdb->base_prefix}users user ON (FIND_IN_SET(user.id,Task.users)>0) AND user.display_name LIKE '$search_tag_text'
154 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id
155 ");
156 $no_of_rows = ( "SELECT count(*) FROM ($query");
157 if(!empty($public_projects)){
158 $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')) AND Task.status= '$status_id'";
159 }else{
160 $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 (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')) AND Task.status= '$status_id'";
161 }
162 }
163 }else{
164 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
165 $query = ( "SELECT Task.* FROM {$wpdb->prefix}wppm_task AS Task
166 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
167 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id
168 ");
169 $no_of_rows = ( "SELECT count(*) FROM ($query");
170 if(!empty($public_projects)){
171 $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.status= '$status_id'";
172 }else{
173 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND Task.status= '$status_id'";
174 }
175 }else{
176 $query = ( "SELECT Task.*
177 FROM {$wpdb->prefix}wppm_task AS Task
178 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
179 Left join {$wpdb->prefix}wppm_project_users proj_users ON Task.project = proj_users.proj_id
180 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Task.project = proj_meta.project_id
181 ");
182 $no_of_rows = ( "SELECT count(*) FROM ($query");
183 if(!empty($public_projects)){
184 $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.status= '$status_id'";
185 } else{
186 $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 Task.status= '$status_id'";
187 }
188 }
189 }
190 $query = apply_filters('wppm_query_for_grid_view',$query);
191 $no_of_rows = apply_filters('wppm_number_of_rows_query_for_grid_view',$no_of_rows);
192 $where.= $wppm_proj_attr;
193 if($filter_by != 'archived'){
194 $where .= $archived_where;
195 }
196 $where = apply_filters('wppm_task_list_where_for_grid_view',$where,$wppm_tl_filter,$search_tag);
197 $no_of_rows .= $where;
198 $no_of_rows .= " Group by Task.id) AS Task";
199 $no_of_rows = apply_filters('wppm_task_list_no_of_rows_for_grid_view',$no_of_rows);
200 $totalrows = $wpdb->get_var($no_of_rows);
201 $totalrows_tasks +=$totalrows;
202 if($total_no_of_rows > $totalrows){
203 $totalrows = $total_no_of_rows;
204 }else{
205 $total_no_of_rows = $totalrows;
206 }
207 $limit_start=$page_no*$task_per_page;
208 $limit="\n LIMIT ".$limit_start.",".$task_per_page." ";
209 $current_page=$page_no+1;
210 $query = apply_filters('wppm_tasks_grid_view_query',$query,$search_tag);
211 $where .= " Group by Task.id";
212 $query .= $where;
213 $query = apply_filters('wppm_task_list_grid_view_query',$query);
214 $query = $query.$limit;
215 $wppm_task_fillter[] = $wpdb->get_results($query);
216 }
217 $total_pages=ceil($total_no_of_rows/$task_per_page);
218 $prev_page_no=$current_page-1;
219 $prev_class=(!$prev_page_no)?'disabled':'';
220 $next_page_no=($total_pages==$current_page)? $current_page-1:$current_page;
221 $next_class=($total_pages==$current_page)?'disabled':'';
222 $flag = false;
223 if(!empty($wppm_task_fillter)){
224 foreach($wppm_task_fillter as $key_filter=>$val_filter){
225 foreach($val_filter as $key=>$val){
226 $val_array = (array) $val;
227 $tusers = $val_array['users'];
228 $tusers_arr = explode(',',$tusers);
229 $tproject_id = esc_sql($val_array['project']);
230 if(!empty($tusers) && in_array($current_user->ID,$tusers_arr)){
231 $project_user_role = $wpdb->get_var("SELECT role_id FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = '$tproject_id' AND user_id = '$cu_id'");
232 $project_users = $wpdb->get_var("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = '$tproject_id'");
233 $project_users_arr = explode(',',(string)$project_users);
234 if((!empty($project_user_role)) && ($project_user_role == 1) && in_array($current_user->ID,$project_users_arr)){
235 $flag = true;
236 break;
237 }
238 }
239 }
240 }
241 }
242 }
243 $todo_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(1)."'" );
244 $inp_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(2)."'" );
245 $hold_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(3)."'" );
246 $completed_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_task_statuses where id='".esc_sql(4)."'" );
247 $todo_status_style = (!empty($todo_status_name))? "display:inline" :"display:none;";
248 $inp_status_style = (!empty($inp_status_name))? "display:inline" :"display:none;";
249 $hold_status_style = (!empty($hold_status_name))? "display:inline" :"display:none;";
250 $completed_status_style = (!empty($completed_status_name))? "display:inline" :"display:none;";
251 if( isset($page) && $page === 'wppm-tasks'){
252 $arch_filter_style = "display:inline;";
253 }else{
254 $arch_filter_style = "display:none;";
255 }
256
257 if ( isset($page) && $page === 'wppm-archived-tasks' ) {
258 $ar_filter_style = "display:none;";
259 } else {
260 $ar_filter_style = "display:flex;";
261 }
262 ?>
263 <form name="wppm_view_project_task" id="wppm_view_project_task">
264 <div class="row">
265 <div class="col-sm-12">
266 <?php
267 if(($current_user->has_cap('manage_options') || $wppmfunction->has_permission('add_new_task',0) || $wppm_current_user_capability=='wppm_manager'|| ($flag==true)) && (isset($page) && $page != 'wppm-archived-tasks' )){
268 $style = "display:inline;";
269 }else{
270 $style = "display:none;";
271 }
272 $style = apply_filters('wppm_add_new_task_btn_style_grid_view',$style);
273 ?>
274 <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>
275 <span class="wppm-add-new-btn btn-primary" onclick="wppm_add_new_task()" style="background-color:<?php echo esc_attr($appearance_settings['menu-button-bg-color'])?>;color:<?php echo esc_attr($appearance_settings['menu-button-text-color'])?>;<?php echo esc_attr($style) ?>;"><img class="wppm_add_new_task_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/plus_icon.svg'); ?>" alt="add"><?php echo esc_html_e('Add New','taskbuilder');?></span>
276 <span class="wppm-add-new-btn btn-primary" style="background-color:<?php echo esc_attr($appearance_settings['menu-button-bg-color'])?>; id="wppm_task_list" onclick="wppm_get_task_list()" ><span><img class="wppm_task_list_image" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/list-symbol.svg'); ?>" alt="list"></span><span style="color:<?php echo esc_attr($appearance_settings['menu-button-text-color'])?>"><?php echo esc_html_e('Task List','taskbuilder');?></span></span>
277 </div>
278 </div>
279 <div style="display:flex;justify-content:space-between;margin-top: 20px;flex-wrap: wrap;">
280 <div style="display:flex;flex-wrap: wrap;">
281 <div id="wppm_task_filter_container">
282 <div class="wppm-filter-item">
283 <label for="wppm_task_filter"> <?php echo esc_html_e('Filter','taskbuilder');?></label>
284 <select id="wppm_task_filter" name="wppm_task_filter" onchange="wppm_apply_task_filter_grid_view('<?php echo esc_attr($page)?>')" class="form-control">
285 <option value="all"<?php echo ($filter_by == "all")? 'selected':""?>><?php echo esc_html_e('All','taskbuilder');?></option>
286 <option value="1" style="<?php echo $todo_status_style ?>" <?php echo ($filter_by == "1")? 'selected':""?>><?php echo esc_html_e($todo_status_name,'taskbuilder');?></option>
287 <option value="2" style="<?php echo $inp_status_style ?>" <?php echo ($filter_by == "2")? 'selected':""?>><?php echo esc_html_e($inp_status_name,'taskbuilder');?></option>
288 <option value="3" style="<?php echo $hold_status_style ?>" <?php echo ($filter_by == "3")? 'selected':""?>><?php echo esc_html_e($hold_status_name,'taskbuilder');?></option>
289 <option value="4" style="<?php echo $completed_status_style ?>" <?php echo ($filter_by == "4")? 'selected':""?>><?php echo esc_html_e($completed_status_name,'taskbuilder');?></option>
290 <option value="mine" <?php echo ($filter_by == "mine")? 'selected':""?>><?php echo esc_html_e('Mine','taskbuilder');?></option>
291 <option value="unassigned" <?php echo ($filter_by == "unassigned")? 'selected':""?>><?php echo esc_html_e('Unassigned','taskbuilder');?></option>
292 <option value="overdue" <?php echo ($filter_by == "overdue")? 'selected':""?>><?php echo esc_html_e('Overdue','taskbuilder');?></option>
293 <option value="archived" style="<?php echo $arch_filter_style ?>" <?php echo ($filter_by == "archived")? 'selected':""?>><?php echo esc_html_e('Archived','taskbuilder');?></option>
294 </select>
295 </div>
296 <div class="wppm-filter-item wppm_project_autocomplete_container">
297 <label for="wppm_task_list_proj_filter">
298 <?php echo esc_html_e('Project','taskbuilder');?>
299 </label><br>
300 <select searchable="search here" onchange="wppm_tasks_by_select_project_grid_view('<?php echo esc_attr($page)?>')" class="form-control" size="40" name="wppm_task_list_proj_filter" id="wppm_task_list_proj_filter">
301 <option value="0" <?php echo ($proj_filter == 0)? 'selected':""?>><?php echo esc_html_e('All','taskbuilder');?></option>
302 <?php
303 if(!empty($projects)){
304 foreach($projects as $proj) {
305 ?>
306 <option value="<?php echo esc_attr($proj->id)?>" <?php echo ($proj_filter == $proj->id)? 'selected':""?>><?php echo esc_html_e($proj->project_name,'taskbuilder');?></option>
307 <?php }
308 } ?>
309 </select>
310 </div>
311 <div class="wppm_display_submit">
312 <div class="wppm-filter-actions">
313 <span class="wppm-link" onclick="wppm_tl_reset_grid_view_filter('<?php echo esc_attr($page)?>')"> <?php echo esc_html_e('Reset','taskbuilder');?></span>
314 </div>
315 </div>
316 </div>
317 </div>
318 <div id="wppm_task_search" style="display:flex;justify-content:flex-end;">
319 <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">
320 <input type="search" id="wppm_view_task_search_filter" style="margin-right:10px;" name="wppm_view_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) : "" ?>">
321 </div>
322 </div>
323 <div style="display:flex;justify-content:flex-end;margin-right:10px;">
324 <span id="wppm_list_view_btn" style="margin: 0 0 -30px 0;" onclick="wppm_get_task_list()"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/listv.svg'); ?>" alt="list"><span style="margin-left:5px;"><?php echo esc_html_e('List view','taskbuilder');?></span></span>
325 </div>
326 <div class="wppm_task_container" id="wppm_task_container" style="display:flex;">
327 <?php
328 if(!empty($task_status)){
329 foreach($task_status as $status) {
330 ?>
331 <div class="wppm_task_list" id="wppm_task_list_<?php echo esc_attr($status->id)?>" style="display:flex;justify-content:space-between;flex-direction: column;flex-basis: 20%;">
332 <div>
333 <div style="background-color:<?php echo esc_attr($status->bg_color)?>;color:<?php echo esc_attr($status->color);?>;padding:5px;">
334 <span class="wppm_status_name"><?php echo esc_html_e($status->name,'taskbuilder');?></span>
335 <span class="wppm_add_new_icon" onclick="wppm_add_new_task()"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/add_new1.svg'); ?>" alt="add"></span>
336 </div>
337 </div>
338 <div id="wppm_card_body_container_<?php echo esc_attr($status->id) ?>" style="height:100%;">
339 <?php
340 $total_checklist_items=0;
341 $total_checked_items=0;
342 $task_per_status = false;
343 $total_tasks = 0;
344 if(!empty($wppm_task_fillter)){
345 foreach($wppm_task_fillter as $key=>$tasks){
346 foreach($tasks as $task){
347 $total_tasks++;
348 if((!empty($task)) && $task->status==$status->id){
349 $task_per_status = true;
350 if(isset($task->priority)){
351 $tpriority = esc_sql($task->priority);
352 $task_priority = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_task_priorities where id = '$tpriority'" );
353 }
354 if($wppm_task_time == 1){
355 $task_end_date = $task->end_date;
356 $teDate = new DateTime($task->end_date);
357 if($task->end_date=='0000-00-00 00:00:00'){
358 if($wppm_date_setting=='Y-m-d H:i:s'){
359 $task_end_date = '0000-00-00 00:00:00';
360 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
361 $task_end_date = '00-00-0000 00:00:00';
362 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
363 $task_end_date = '00-00-0000 00:00:00';
364 }else{
365 $task_end_date = '0000-00-00 00:00:00';
366 }
367 }else{
368 $task_end_date = $teDate->format($wppm_date_setting);
369 }
370 }elseif($wppm_task_time == 0){
371 $teDate = new DateTime($task->end_date);
372 $task_end_date = $teDate->format('Y-m-d');
373 if($task->end_date=='0000-00-00 00:00:00'){
374 if($wppm_date_setting=='Y-m-d H:i:s'){
375 $task_end_date = '0000-00-00';
376 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
377 $task_end_date = '00-00-0000';
378 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
379 $task_end_date = '00-00-0000';
380 }else{
381 $task_end_date = '0000-00-00';
382 }
383 }else{
384 if($wppm_date_setting=='Y-m-d H:i:s'){
385 $task_end_date = $teDate->format('Y-m-d');
386 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
387 $task_end_date = $teDate->format('d-m-Y');
388 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
389 $task_end_date = $teDate->format('m-d-Y');
390 }else{
391 $task_end_date = $teDate->format('Y-m-d');
392 }
393 }
394 }
395 if(!empty($task->id)){
396 $tid = esc_sql( $task->id);
397 $checklists = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_checklist where task_id = '$tid'" );
398 $total=$wpdb->get_var("SELECT COUNT(Items.id) AS check_id
399 FROM {$wpdb->prefix}wppm_checklist_items AS Items
400 Left join {$wpdb->prefix}wppm_checklist checklist ON Items.checklist_id = checklist.id
401 WHERE checklist.task_id = '$tid'");
402 $total_checked_items=$wpdb->get_var("SELECT COUNT(Items.id) AS check_id
403 FROM {$wpdb->prefix}wppm_checklist_items AS Items
404 Left join {$wpdb->prefix}wppm_checklist checklist ON Items.checklist_id = checklist.id
405 WHERE checklist.task_id = '$tid' AND Items.checked=1");
406 $project_data = $wppmfunction->get_project($task->project);
407 ?>
408 <div class="wppm_card_body" style="background-color:<?php echo esc_attr($appearance_settings['grid-background-color'])?>!important;color:<?php echo esc_attr($appearance_settings['grid-header-text-color'])?>!important;" onclick="wppm_open_task(<?php echo esc_attr($task->id)?>)" id="wppm_draggable_card_<?php echo esc_attr($task->id)?>">
409 <div>
410 <div>
411 <span class="wppm_td_task_priority" style="background-color:<?php echo (!empty($task_priority->bg_color))? esc_attr($task_priority->bg_color):"";?>;color:<?php echo (!empty($task_priority->color))? esc_attr($task_priority->color):"";?>"><?php echo (!empty($task_priority->name))? esc_html($task_priority->name):"" ?></span>
412 </div>
413 <div class="wppm_card_task_action">
414 <span class="wppm_checklist_total_checked_item"><?php echo esc_html($total_checked_items.'/'.$total)?></span><span class="wppm_total_checked_item"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/checked.svg'); ?>" alt="checked"></span>
415 <span class="wppm_show_dropdown_menu" onclick="wppm_show_dropdown_menu(<?php echo esc_attr($task->id);?>)" data-popover="wppm-dropdown-menu-<?php echo esc_attr($task->id);?>" id="wppm_task_action_<?php echo esc_attr($task->id);?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/vertical_dot.svg'); ?>" alt="vertical_dot"></span>
416 <div class="gpopover" id="wppm-dropdown-menu-<?php echo esc_attr($task->id);?>">
417 <a class="dropdown-item" href="#"><?php echo esc_html_e('Edit','taskbuilder');?></a>
418 <a class="dropdown-item" href="#"><?php echo esc_html_e('Delete','taskbuilder');?></a>
419 </div>
420 </div>
421 </div>
422 <div>
423 <div>
424 <span class="wppm_task_name_grid_view" style="margin-left: 5px;"><?php echo esc_html_e($task->task_name,'taskbuilder');?></span>
425 <span class="wppm_proj_name_grid_view">(<?php echo isset($project_data['project_name']) ? esc_html_e($project_data['project_name'],'taskbuilder'):"";?>)</span>
426 </div>
427 </div>
428 <div>
429 <div class="wppm_task_due_date_grid_view" style="margin-left: 5px;">
430 <?php $style = ($task->status!=4 && $task->end_date < $current_date) ? "color:#FF0000":"color:#2C3E50"; ?>
431 <small style="<?php echo esc_attr($style); ?>"><?php echo (isset($task_end_date))? esc_html_e($task_end_date,'taskbuilder') :"" ?></small>
432 </div>
433 <div class="wppm_card_task_users" style="text-align:right;">
434 <?php
435 $task_users = explode(',',$task->users);
436 $i=0;
437 if(!empty($project_data['users'])){
438 $proj_users = explode(',',$project_data['users']);
439 }
440 if(!empty($task_users)){
441 foreach($task_users as $user){
442 if( (!empty($proj_users)) && (in_array($user,$proj_users))){
443 $i++;
444 if( $i <= 4 ){
445 if(!empty($user)){
446 $userdata = get_userdata( $user );
447 ?>
448 <a href="#" title="<?php echo esc_attr($userdata->display_name)?>">
449 <?php echo get_avatar($user, 25, "mysteryman");?>
450 </a>
451 <?php }
452 }
453 }
454 }
455 }
456 if($i > 4){
457 ?>
458 <a href="#" class="wppm_avatar">
459 <span id="wppm_avatar" style="background-color:black;" class="avatar">+<?php echo esc_html($i-4) ?></span>
460 </a>
461 <?php } ?>
462 </div>
463 </div>
464 </div>
465 <?php
466 }
467 }
468 }
469 }
470 }
471 if($task_per_status==false){
472 ?>
473 <div>
474 <div style="margin-left:5px;font-family: 'OpenSans-Semibold', 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 14px;">
475 <?php echo esc_html_e('Empty','taskbuilder'); ?>
476 </div>
477 </div>
478 <?php
479 }
480 ?>
481 </div>
482 </div>
483 <?php }
484 }
485 ?>
486 <input type="hidden" action="wppm_drag_and_drop_card">
487 <input type="hidden" name="wppm_drag_and_drop_card_ajax_nonce" id="wppm_drag_and_drop_card_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_drag_and_drop_card' ) ); ?>">
488 </div>
489 <div class="row wppm_task_pagination_container">
490 <div class="col-sm-4">
491 <?php echo esc_html_e('Total:','taskbuilder'); ?>&nbsp;<?php echo esc_html($total_tasks); ?>&nbsp;<?php echo esc_html_e( 'of','taskbuilder') ?>&nbsp;<?php echo esc_html($totalrows_tasks) ?>&nbsp;<?php echo esc_html_e('Tasks','taskbuilder')?>
492 </div>
493 <div class="wppm_task_pagination col-sm-4" style="<?php echo (esc_attr($total_pages)==0)? "display:none;":"display:flex;"?>">
494 <span class="wppm-pagination-txt">
495 <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>
496 </span>
497 <span <?php echo esc_attr($prev_class) ?>
498 style="<?php echo (isset($prev_class) && esc_attr($prev_class) == 'disabled') ? 'display:none;':'display:block;'?>cursor:pointer;">
499 <a class="wppm_pagination_prev" onclick="return wppm_load_prev_task_page_card_view(<?php echo esc_attr($prev_page_no) ?>,<?php echo esc_attr($page_no)?>);"><?php echo esc_html_e('PREV','taskbuilder');?></a>
500 </span>
501 <span <?php echo esc_attr($next_class) ?>
502 style="<?php echo (isset($next_class) && esc_attr($next_class) == 'disabled')?'display:none;':'display:block;'?>cursor:pointer;">
503 <a class="wppm_pagination_next" onclick="return wppm_load_next_task_page_card_view(<?php echo esc_attr($next_page_no) ?>,<?php echo esc_attr($page_no) ?>);"><?php echo esc_html_e('NEXT','taskbuilder');?></a>
504 </span>
505 </div>
506 </div>
507 </form>
508 <style>
509 .select2-selection--single {
510 height: 30px!important;
511 }
512 .select2-dropdown:hover {
513 color: #23527c!important;;
514 }
515 .select2-results__options{
516 font:15px "Helvetica Neue",Arial,Helvetica,sans-serif !important;
517 margin: 0!important;
518 line-height: inherit!important;
519 }
520 .select2-selection__rendered{
521 font:15px "Helvetica Neue",Arial,Helvetica,sans-serif !important;
522 margin-top: 5px!important;
523 }
524 .select2-selection__rendered:hover{
525 color: #2271b1 !important;
526 }
527 .select2-container--default .select2-results__option--highlighted.select2-results__option--selectable{
528 background-color: #e85f08!important;
529 color: white !important;
530 }
531 .select2-container {
532 max-width: 150px !important;
533 min-width: 150px !important;
534 }
535 #wppm_task_filter{
536 min-height: 30px !important;
537 max-height: 35px !important;
538 }
539 #wppm_view_project_task .wppm-add-new-btn:hover{
540 background-color: <?php echo esc_attr($appearance_settings['menu-button-hover-color'])?>!important;
541 }
542 </style>
543 <script type="text/javascript">
544 jQuery( document ).ready( function( jQuery ) {
545 dragula([
546 <?php foreach($task_status as $status) { ?>
547 document.getElementById("wppm_card_body_container_<?php echo esc_attr($status->id) ?>"),
548 <?php } ?>
549 ], {removeOnSpill: false})
550 .on('drop', function (el,target,source) {
551 wppm_drag_drop_card(el,target,source);
552 });
553
554 jQuery("input[name='wppm_view_task_search_filter']").keypress(function(e) {
555 //Enter key
556 if (e.which == 13) {
557 e.preventDefault();
558 wppm_display_grid_view('<?php echo esc_js($page) ?>');
559 }
560 });
561 })
562 function wppm_show_dropdown_menu(task_id){
563 jQuery("#wppm_task_action_"+task_id).gpopover({width: 50});
564 }
565
566 function wppm_drag_drop_card(el,target,source){
567 var data = {
568 action: 'wppm_drag_and_drop_card',
569 el:el.id,
570 target: target.id,
571 source:source.id,
572 _ajax_nonce:jQuery("#wppm_drag_and_drop_card_ajax_nonce").val()
573 };
574 jQuery.post(wppm_admin.ajax_url, data, function(response) {
575 wppm_display_grid_view('<?php echo esc_js($page) ?>');
576 });
577 }
578 jQuery('#wppm_task_list_proj_filter').select2({ dropdownAutoWidth: true, width: 'auto' });
579 jQuery('#wppm_task_list_proj_filter').val(<?php echo esc_attr($proj_filter) ?>);
580
581 </script>