PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 4.0.6
Taskbuilder – Project Management & Task Management Tool With Kanban Board v4.0.6
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
← All changes | includes/admin/projects/projects_list.php +31 -53 5.0.64.0.6 View file →
@@ -6,9 +6,8 @@
6 6 $status = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_project_statuses" );
7 7 $categories = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_project_categories" );
8 8 $appearance_settings = get_option("wppm-ap-project-list");
9 9 $wppm_date_setting = get_option('wppm_date_setting');
10 -$wppm_deafault_time_duration_project = get_option('wppm_display_time_duration_project');
11 10 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
12 11 $proj_per_page = 20;
13 12 $page_no = (isset($_POST['page_no'])) ? intval(sanitize_text_field($_POST['page_no'])): '0';
14 13 $search_tag = isset($_POST['project_search']) ? sanitize_text_field($_POST['project_search']) : '';
@@ -14,9 +13,9 @@
14 13 $search_tag = isset($_POST['project_search']) ? sanitize_text_field($_POST['project_search']) : '';
15 14 $order = isset($_POST['order']) ? sanitize_text_field($_POST['order']) :"ASC";
16 15 $sort_by = isset($_POST['sort_by']) ? sanitize_text_field($_POST['sort_by']):"project_name";
17 16 $filter_by = isset($_POST['wppm_project_filter']) ? sanitize_text_field($_POST['wppm_project_filter']) : "all";
18 -$current_date = wp_date('Y-m-d');
17 +$current_date = date('Y-m-d');
19 18 $wppm_pl_filter = "1=1";
20 19 $wppm_hide_completed_status_proj = get_option('wppm_hide_completed_status_proj');
21 20 $cu_id = esc_sql($current_user->ID);
22 21 $wppm_hide_proj_statuses_from_frontend = get_option('wppm_hide_proj_statuses_from_frontend');
@@ -51,26 +50,23 @@
51 50 'search'=>$search_tag,
52 51 'filter'=>$filter_by
53 52 );
54 53 setcookie('wppm_proj_filters',wp_json_encode( $filters ),time() + 3600);
55 -
56 -$allowed_sort_by = [
57 - 'project_name' => 'project_name',
58 - 'status' => 'proj_statuses.name',
59 - 'category' => 'proj_categories.name',
60 - 'start_date' => 'start_date',
61 - 'end_date' => 'end_date',
62 - 'TIMESTAMPDIFF(SECOND, start_date, end_date)'=> 'TIMESTAMPDIFF(SECOND, start_date, end_date)'
63 -];
64 -// Resolve sort_by safely
65 -$sort_key = isset($pl_filters_arr['sort_by'])
66 - ? sanitize_text_field($pl_filters_arr['sort_by'])
67 - : 'project_name';
68 -
69 -$sort_by = $allowed_sort_by[$sort_key] ?? 'project_name';
70 -$order = ( isset($pl_filters_arr['order']) && strtoupper($pl_filters_arr['order']) === 'ASC' )
71 - ? 'ASC'
72 - : 'DESC';
54 +if($pl_filters_arr['sort_by']=='status'){
55 + $sort_by = 'proj_statuses.name';
56 +}
57 +if($pl_filters_arr['sort_by']=='category'){
58 + $sort_by = 'proj_categories.name';
59 +}
60 +if($pl_filters_arr['sort_by']=='start_date'){
61 + $sort_by = 'start_date';
62 +}
63 +if($pl_filters_arr['sort_by']=='end_date'){
64 + $sort_by = 'end_date';
65 +}
66 +if($sort_by=='category'){
67 + $sort_by = 'proj_categories.name';
68 +}
73 69 if($filter_by=='all'){
74 70 if($wppm_hide_completed_status_proj == 0){
75 71 $wppm_pl_filter = "status!='4'";
76 72 }
@@ -136,8 +132,10 @@
136 132 }
137 133 $no_of_rows = ( "SELECT count(*) FROM ($query");
138 134 $no_of_rows = apply_filters('wppm_project_list_no_of_rows',$no_of_rows,$wppm_pl_filter,$search_tag);
139 135 $where = apply_filters('wppm_project_list_query_where',$where, $wppm_pl_filter,$search_tag);
136 +$sort_by = esc_sql($sort_by);
137 +$order = esc_sql($order);
140 138 $query .= $where." Group by Project.id ORDER BY $sort_by $order";
141 139 $no_of_rows .= $where." Group by Project.id) AS Project";
142 140 $totalrows = $wpdb->get_var( $no_of_rows );
143 141 $query = apply_filters('wppm_project_list_query',$query);
@@ -197,12 +195,12 @@
197 195 <div class="wppm-filter-item">
198 196 <label for="wppm_project_filter"> <?php echo esc_html_e('Filter','taskbuilder');?></label>
199 197 <select id="wppm_project_filter" name="wppm_project_filter" onchange="wppm_apply_project_filter()">
200 198 <option value="all"<?php echo ($filter_by == "all")? 'selected':""?>><?php echo esc_html_e('All','taskbuilder');?></option>
201 - <option style="<?php echo esc_attr($new_style) ?>" value="1" <?php echo ($filter_by == "1")? 'selected':""?>><?php echo esc_html($new_status_name);?></option>
202 - <option style="<?php echo esc_attr($inp_status_style) ?>" value="2" <?php echo ($filter_by == "2")? 'selected':""?>><?php echo esc_html($inp_status_name);?></option>
203 - <option style="<?php echo esc_attr($hold_status_style) ?>" value="3" <?php echo ($filter_by == "3")? 'selected':""?>><?php echo esc_html($hold_status_name);?></option>
204 - <option style="<?php echo esc_attr($complete_status_style) ?>" value="4" <?php echo ($filter_by == "4")? 'selected':""?>><?php echo esc_html($completed_status_name);?></option>
199 + <option style="<?php echo $new_style ?>" value="1" <?php echo ($filter_by == "1")? 'selected':""?>><?php echo esc_html_e($new_status_name,'taskbuilder');?></option>
200 + <option style="<?php echo $inp_status_style ?>" value="2" <?php echo ($filter_by == "2")? 'selected':""?>><?php echo esc_html_e($inp_status_name,'taskbuilder');?></option>
201 + <option style="<?php echo $hold_status_style ?>" value="3" <?php echo ($filter_by == "3")? 'selected':""?>><?php echo esc_html_e($hold_status_name,'taskbuilder');?></option>
202 + <option style="<?php echo $complete_status_style ?>" value="4" <?php echo ($filter_by == "4")? 'selected':""?>><?php echo esc_html_e($completed_status_name,'taskbuilder');?></option>
205 203 <option value="mine" <?php echo ($filter_by == "mine")? 'selected':""?>><?php echo esc_html_e('Mine','taskbuilder');?></option>
206 204 <option value="unassigned" <?php echo ($filter_by == "unassigned")? 'selected':""?>><?php echo esc_html_e('Unassigned','taskbuilder');?></option>
207 205 <option value="overdue" <?php echo ($filter_by == "overdue")? 'selected':""?>><?php echo esc_html_e('Overdue','taskbuilder');?></option>
208 206 </select>
@@ -247,9 +245,9 @@
247 245 <span id="wppm_project_category_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Category','taskbuilder'); ?></span>
248 246 <img width="16" height="16" onclick="wppm_sort_up_project_list('category','ASC')" style = "<?php echo ($sort_by == 'proj_categories.name' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_up_project_cat_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
249 247 <img width="16" height="16" onclick="wppm_sort_up_project_list('category','DESC')" style = "<?php echo ($sort_by == 'proj_categories.name' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_down_project_cat_img" class="wppm_chevron_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
250 248 </th>
251 - <?php if($wppm_default_project_date==1 && $wppm_deafault_time_duration_project==0){ ?>
249 + <?php if($wppm_default_project_date==1){ ?>
252 250 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
253 251 <span id="wppm_project_start_date_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Start Date','taskbuilder'); ?></span>
254 252 <img width="16" height="16" onclick="wppm_sort_up_project_list('start_date','ASC')" style = "<?php echo ($sort_by == 'start_date' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_up_project_start_date_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
255 253 <img width="16" height="16" onclick="wppm_sort_up_project_list('start_date','DESC')" style = "<?php echo ($sort_by == 'start_date' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_down_project_start_date_img" class="wppm_chevron_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
@@ -258,16 +256,9 @@
258 256 <span id="wppm_project_end_date_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('End Date','taskbuilder'); ?></span>
259 257 <img width="16" height="16" onclick="wppm_sort_up_project_list('end_date','ASC')" style = "<?php echo ($sort_by == 'end_date' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_up_project_end_date_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
260 258 <img width="16" height="16" onclick="wppm_sort_up_project_list('end_date','DESC')" style = "<?php echo ($sort_by == 'end_date' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_down_project_end_date_img" class="wppm_chevron_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
261 259 </th>
262 - <?php }
263 - if( $wppm_deafault_time_duration_project==1){ ?>
264 - <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
265 - <span id="wppm_project_time_duration_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Duration','taskbuilder'); ?></span>
266 - <img width="16" height="16" onclick="wppm_sort_up_project_list('TIMESTAMPDIFF(SECOND, start_date, end_date)','ASC')" style = "<?php echo ($sort_by == 'TIMESTAMPDIFF(SECOND, start_date, end_date)' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_up_project_time_duration_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
267 - <img width="16" height="16" onclick="wppm_sort_up_project_list('TIMESTAMPDIFF(SECOND, start_date, end_date)','DESC')" style = "<?php echo ($sort_by == 'TIMESTAMPDIFF(SECOND, start_date, end_date)' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_down_project_time_duration_img" class="wppm_chevron_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
268 - </th>
269 - <?php }?>
260 + <?php } ?>
270 261 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>"><span style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('No. of tasks','taskbuilder'); ?></span></th>
271 262 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>"></th>
272 263 </tr>
273 264 <tbody>
@@ -277,9 +268,8 @@
277 268 if(!empty($wppm_fillter)){
278 269 foreach( $wppm_fillter as $project ){
279 270 $total_projects++;
280 271 $proejctdata = $wppmfunction->get_project($project->id);
281 - $wppm_proj_duration = $wppmfunction->wppm_get_duration($project->start_date,$project->end_date);
282 272 $pstatus= esc_sql($project->status);
283 273 $status = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id='$pstatus'" );
284 274 $users = explode(",",$project->users);
285 275 $pid= esc_sql($project->id);
@@ -399,10 +389,10 @@
399 389 <label for="wppm_bulk_select_<?php echo esc_attr($project->id) ?>"></label>
400 390 </div>
401 391 </div>
402 392 </td>
403 - <td onmouseover="link=true;"><?php echo esc_html($project->project_name) ?></td>
404 - <td onmouseover="link=true;"><span class="wppm_td_project_status" style="background-color:<?php echo esc_attr($status->bg_color);?>; color: <?php echo esc_attr($status->color); ?>"><?php echo esc_html($status->name) ?></span></td>
393 + <td onmouseover="link=true;"><?php echo esc_html_e($project->project_name,'taskbuilder') ?></td>
394 + <td onmouseover="link=true;"><span class="wppm_td_project_status" style="background-color:<?php echo esc_attr($status->bg_color);?>; color: <?php echo esc_attr($status->color); ?>"><?php echo esc_html_e($status->name,'taskbuilder') ?></span></td>
405 395 <td onmouseover="link=true;">
406 396 <?php
407 397 $i=0;
408 398 if(!empty(array_filter($users))){
@@ -411,9 +401,9 @@
411 401 if( $i <= 4 ){
412 402 $user_info = get_user_by('id', $user );
413 403 if(!empty($user_info)){
414 404 ?>
415 - <a href="#" title="<?php echo esc_html($user_info->display_name) ?>">
405 + <a href="#" title="<?php echo esc_html_e($user_info->display_name) ?>">
416 406 <?php echo get_avatar($user_info->ID, 25, "mysteryman");?>
417 407 </a> <?php
418 408 }
419 409 }
@@ -418,9 +408,9 @@
418 408 }
419 409 }
420 410 }
421 411 } else{
422 - esc_html_e('None','taskbuilder');
412 + _e('None','wp_projects');
423 413 }
424 414 if($i > 4){
425 415 ?>
426 416 <a href="#" class="wppm_avatar">
@@ -427,10 +417,11 @@
427 417 <span id="wppm_avatar" style="background-color:black;" class="avatar">+<?php echo esc_html($i-4) ?></span>
428 418 </a>
429 419 <?php } ?>
430 420 </td>
431 - <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($category) ? esc_html($category): "" ?></td>
432 - <?php if($wppm_default_project_date==1 && $wppm_deafault_time_duration_project==0){ ?>
421 + <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($category) ? esc_html_e($category,'taskbuilder'): "" ?></td>
422 + <?php if($wppm_default_project_date==1){
423 + ?>
433 424 <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($proj_start_date) ? esc_html($proj_start_date): "" ?></td>
434 425 <?php
435 426 if(!empty($proj_end_date) && $project->status!=4 && $proj_end_date < $current_date && ($proj_end_date != '0000-00-00 00:00:00' && $proj_end_date != '00-00-0000 00:00:00' && $proj_end_date != '00-00-0000' && $proj_end_date != '0000-00-00')) {
436 427 $style = "color:#FF0000";
@@ -438,17 +429,8 @@
438 429 $style = "color:#2C3E50";
439 430 } ?>
440 431 <td onmouseover="link=true;" class="wppm_table_td"><span style="<?php echo esc_attr($style); ?>"><?php echo isset($proj_end_date) ? esc_html($proj_end_date):"" ?></span></td>
441 432 <?php } ?>
442 - <?php if($wppm_deafault_time_duration_project==1){ ?>
443 - <?php
444 - if(!empty($proj_end_date) && $project->status!=4 && $proj_end_date < $current_date && ($proj_end_date != '0000-00-00 00:00:00' && $proj_end_date != '00-00-0000 00:00:00' && $proj_end_date != '00-00-0000' && $proj_end_date != '0000-00-00')) {
445 - $style = "color:#FF0000";
446 - } else {
447 - $style = "color:#2C3E50";
448 - } ?>
449 - <td onmouseover="link=true;" class="wppm_table_td"><span style="<?php echo esc_attr($style); ?>"><?php echo isset($wppm_proj_duration) ? esc_html($wppm_proj_duration):"" ?></span></td>
450 - <?php } ?>
451 433 <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($no_of_tasks) ? esc_html($no_of_tasks):"" ?></td>
452 434 <td onmouseover="link=true;" class="wppm_delete_action">
453 435 <?php $style = (($current_user->ID && $current_user->has_cap('manage_options')) || ($wppmfunction->has_project_permission('delete_project',esc_attr($project->id))) || $wppm_current_user_capability == 'wppm_admin' || ($proejctdata['created_by']==$current_user->ID && $wppm_current_user_capability == 'wppm_manager') )? "display:inline":"display:none"; ?>
454 436 <span style="<?php echo esc_attr($style); ?>" onclick="wppm_delete_project(<?php echo esc_attr($project->id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/trash.svg'); ?>" alt="delete"></span>
@@ -539,12 +521,8 @@
539 521 });
540 522 jQuery("#wppm_project_end_date_th").hover(function(){
541 523 jQuery('#wppm_chevron_sort_up_project_end_date_img').show();
542 524 jQuery('#wppm_chevron_sort_down_project_end_date_img').hide();
543 - });
544 - jQuery("#wppm_project_time_duration_th").hover(function(){
545 - jQuery('#wppm_chevron_sort_up_project_time_duration_img').show();
546 - jQuery('#wppm_chevron_sort_down_project_time_duration_img').hide();
547 525 });
548 526 jQuery(".wppm_delete_action").on("click", function(e){
549 527 e.preventDefault();
550 528 return false;