PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 4.0.9
Taskbuilder – Project Management & Task Management Tool With Kanban Board v4.0.9
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 4.0.9, at includes/admin/projects/open_project/wppm_view_project_tasks.php

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