| @@ -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; |