get_results("SELECT id,name,bg_color FROM {$wpdb->prefix}wppm_task_statuses"); $wppm_project_statuses = $wpdb->get_results("SELECT id,name,bg_color FROM {$wpdb->prefix}wppm_project_statuses"); $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true ); $is_admin = ( $wppm_current_user_capability === 'wppm_admin' || current_user_can('manage_options') ) ? 1 : 0; $query = $wpdb->prepare( "SELECT COUNT(DISTINCT p.id) FROM {$wpdb->prefix}wppm_project p LEFT JOIN {$wpdb->prefix}wppm_project_users pu ON p.id = pu.proj_id LEFT JOIN {$wpdb->prefix}wppm_project_meta pm ON p.id = pm.project_id AND pm.meta_key = 'public_project' WHERE ( FIND_IN_SET(%d, p.users) OR p.created_by = %d OR %d = 1 OR pm.meta_value = '1' ) AND p.status != %d", $current_user_id, $current_user_id, $is_admin, 4 ); $active_projects = $wpdb->get_var($query); $query = $wpdb->prepare( "SELECT DISTINCT Task.* FROM {$wpdb->prefix}wppm_task AS Task WHERE ( FIND_IN_SET(%d, Task.users) OR Task.created_by = %d ) AND Task.status != %d AND Task.active = 1 AND Task.is_archived = 0 LIMIT 5", $current_user_id, // for JOIN pu $current_user_id, // role_id 4 // status ); $tasks = $wpdb->get_results($query); $query = $wpdb->prepare( "SELECT DISTINCT Task.* FROM {$wpdb->prefix}wppm_task AS Task LEFT JOIN {$wpdb->prefix}wppm_project p ON Task.project = p.id LEFT JOIN {$wpdb->prefix}wppm_project_users pu ON p.id = pu.proj_id AND pu.user_id = %d LEFT JOIN {$wpdb->prefix}wppm_project_meta pm ON p.id = pm.project_id AND pm.meta_key = 'public_project' WHERE ( %d = 1 OR FIND_IN_SET(%d, Task.users) OR Task.created_by = %d OR p.created_by = %d OR (FIND_IN_SET(%d, p.users) AND pu.role_id = %d) OR pm.meta_value = '1' ) AND Task.status = %d AND Task.active = 1 AND Task.is_archived = 0 LIMIT 5", $current_user_id, // 1 → pu.user_id $is_admin, // 2 $current_user_id, // 3 $current_user_id, // 4 $current_user_id, // 5 $current_user_id, // 6 2, // 7 → role_id 4 // 8 → status ); $completed_tasks = $wpdb->get_results($query); $query = $wpdb->prepare( "SELECT COUNT(DISTINCT Task.id) FROM {$wpdb->prefix}wppm_task AS Task LEFT JOIN {$wpdb->prefix}wppm_project p ON Task.project = p.id LEFT JOIN {$wpdb->prefix}wppm_project_users pu ON p.id = pu.proj_id AND pu.user_id = %d LEFT JOIN {$wpdb->prefix}wppm_project_meta pm ON p.id = pm.project_id AND pm.meta_key = 'public_project' WHERE ( %d = 1 OR FIND_IN_SET(%d, Task.users) OR Task.created_by = %d OR p.created_by = %d OR (FIND_IN_SET(%d, p.users) AND pu.role_id = %d) OR pm.meta_value = '1' ) AND Task.status = %d AND Task.active = 1 AND Task.is_archived = 0", $current_user_id, // pu.user_id $is_admin, $current_user_id, $current_user_id, $current_user_id, $current_user_id, 2, // role_id ✅ FIXED 4 // status ); $completed_task_count = $wpdb->get_var($query); $query = $wpdb->prepare( "SELECT DISTINCT count(*) AS task_count FROM {$wpdb->prefix}wppm_task AS Task WHERE ( FIND_IN_SET(%d, Task.users) OR Task.created_by = %d ) AND Task.status != %d AND Task.active = 1 AND Task.is_archived = 0 LIMIT 5", $current_user_id, // for JOIN pu $current_user_id, // role_id 4 // status ); $task_count = $wpdb->get_var($query); $query = $wpdb->prepare( "SELECT DISTINCT Task.*,p.project_name FROM {$wpdb->prefix}wppm_task AS Task LEFT JOIN {$wpdb->prefix}wppm_project p ON Task.project = p.id LEFT JOIN {$wpdb->prefix}wppm_project_users pu ON p.id = pu.proj_id AND pu.user_id = %d LEFT JOIN {$wpdb->prefix}wppm_project_meta pm ON p.id = pm.project_id AND pm.meta_key = 'public_project' WHERE ( %d = 1 OR FIND_IN_SET(%d, Task.users) OR Task.created_by = %d OR p.created_by = %d OR (FIND_IN_SET(%d, p.users) AND pu.role_id = %d) OR pm.meta_value = '1' ) AND DATE(Task.end_date) = CURDATE() AND Task.status != %d AND Task.active = 1 AND Task.is_archived = 0 LIMIT 5", $current_user_id, // for JOIN pu $is_admin, $current_user_id, $current_user_id, $current_user_id, $current_user_id, 2, // role_id 4 // status ); $todays_tasks = $wpdb->get_results($query); $status_counts = []; $task_bg_color = []; $project_status_counts = []; $project_bg_color = []; if(!empty($wppm_task_statuses)){ foreach($wppm_task_statuses as $key => $status){ $count = $wpdb->get_var($wpdb->prepare( "SELECT DISTINCT COUNT(DISTINCT Task.id) FROM {$wpdb->prefix}wppm_task AS Task LEFT JOIN {$wpdb->prefix}wppm_project p ON Task.project = p.id LEFT JOIN {$wpdb->prefix}wppm_project_users pu ON p.id = pu.proj_id AND pu.user_id = %d LEFT JOIN {$wpdb->prefix}wppm_project_meta pm ON p.id = pm.project_id AND pm.meta_key = 'public_project' WHERE ( %d = 1 OR FIND_IN_SET(%d, Task.users) OR Task.created_by = %d OR p.created_by = %d OR (FIND_IN_SET(%d, p.users) AND pu.role_id = %d) OR pm.meta_value = '1' ) AND Task.status = %d AND Task.active = 1 AND Task.is_archived = 0 LIMIT 5", $current_user_id, // for JOIN pu $is_admin, $current_user_id, $current_user_id, $current_user_id, $current_user_id, 2, // role_id $status->id // status ) ); $status_counts[$status->name] = $count; $task_bg_color[$status->name] = $status->bg_color; } } if(!empty($wppm_project_statuses)){ foreach($wppm_project_statuses as $key => $status){ $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT p.id) FROM {$wpdb->prefix}wppm_project p LEFT JOIN {$wpdb->prefix}wppm_project_meta pm ON p.id = pm.project_id AND pm.meta_key = 'public_project' WHERE ( FIND_IN_SET(%d, p.users) OR p.created_by = %d OR %d = 1 OR pm.meta_value = '1' ) AND p.status = %d", $current_user_id, $current_user_id, $is_admin, $status->id ) ); $project_status_counts[$status->name] = $count; $project_bg_color[$status->name] = $status->bg_color; } } $overdue = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT t.id) FROM {$wpdb->prefix}wppm_task t LEFT JOIN {$wpdb->prefix}wppm_project p ON t.project = p.id LEFT JOIN {$wpdb->prefix}wppm_project_users pu ON p.id = pu.proj_id AND pu.user_id = %d LEFT JOIN {$wpdb->prefix}wppm_project_meta pm ON p.id = pm.project_id AND pm.meta_key = 'public_project' WHERE t.end_date < CURDATE() AND t.status != 4 AND t.active = 1 AND t.is_archived = 0 AND ( %d = 1 OR FIND_IN_SET(%d, t.users) OR t.created_by = %d OR p.created_by = %d OR pu.role_id = %d OR pm.meta_value = '1' )", $current_user_id, // pu.user_id $is_admin, $current_user_id, $current_user_id, $current_user_id, 2 // role_id ) ); $labels = array_keys($status_counts); $data = array_values($status_counts); $task_bg_colors = array_values($task_bg_color); $project_overdue = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT p.id) FROM {$wpdb->prefix}wppm_project p LEFT JOIN {$wpdb->prefix}wppm_project_meta pm ON p.id = pm.project_id AND pm.meta_key = 'public_project' WHERE ( FIND_IN_SET(%d, p.users) OR p.created_by = %d OR %d = 1 OR pm.meta_value = '1' ) AND p.status != %d AND p.end_date < CURDATE()", $current_user_id, $current_user_id, $is_admin, 4 ) ); $project_labels = array_keys($project_status_counts); $project_data = array_values($project_status_counts); $project_bg_colors = array_values($project_bg_color); $labels[] = 'Overdue'; $data[] = $overdue; $task_bg_colors [] = '#e74c3c'; $project_labels[] = 'Overdue'; $project_data[] = $project_overdue; $project_bg_colors[] = '#e74c3c'; ?>
📁

📝

get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}wppm_task_statuses WHERE id = %d", (int) $task->status ) ); $users = array(); if($task->users != null){ $users = explode(",",$task->users); } if(!empty($task->project)){ $project = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}wppm_project WHERE id = %d",(int) $task->project)); } if($wppm_task_time == 1){ $task_end_date = $task->end_date; } elseif($wppm_task_time == 0){ $teDate = new DateTime($task->end_date); $task_end_date = $teDate->format('Y-m-d'); } $priority_color = $wpdb->get_var( $wpdb->prepare( "SELECT bg_color FROM {$wpdb->prefix}wppm_task_priorities WHERE id = %d", (int) $task->priority ) ); // fallback color if not found if(empty($priority_color)){ $priority_color = '#cccccc'; } ?>
task_name); ?> ; color: color))? esc_attr($status->color):""; ?>">name))? esc_html($status->name):"" ?> project_name); ?> get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist where task_id = %d",$task->id) ); $row = $wpdb->get_row( $wpdb->prepare( "SELECT COUNT(Items.id) as total, SUM(CASE WHEN Items.checked = 1 THEN 1 ELSE 0 END) as completed FROM {$wpdb->prefix}wppm_checklist_items AS Items LEFT JOIN {$wpdb->prefix}wppm_checklist checklist ON Items.checklist_id = checklist.id WHERE checklist.task_id = %d", $task->id ) ); $total = $row->total; $total_checked_items = intval($row->completed); $progress = ($total > 0) ? round(($total_checked_items / $total) * 100) : 0; $color = '#ef4444'; // red if($progress >= 50){ $color = '#f59e0b'; // orange } if($progress >= 80){ $color = '#22c55e'; // green } ?>
%

prepare( "SELECT t.*, p.project_name FROM {$wpdb->prefix}wppm_task t LEFT JOIN {$wpdb->prefix}wppm_project p ON t.project = p.id LEFT JOIN {$wpdb->prefix}wppm_project_meta pm ON p.id = pm.project_id AND pm.meta_key = 'public_project' WHERE ( FIND_IN_SET(%d, t.users) OR t.created_by = %d OR %d = 1 OR pm.meta_value = '1' OR t.project IN ( SELECT id FROM {$wpdb->prefix}wppm_project WHERE created_by = %d OR FIND_IN_SET(%d, users) ) ) AND DATE(t.end_date) BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY) AND t.status != 4 AND t.active = 1 AND t.is_archived = 0 ORDER BY t.end_date ASC LIMIT 5", $current_user_id, $current_user_id, $is_admin, $current_user_id, $current_user_id ); $upcoming_tasks = $wpdb->get_results($query);?>
get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}wppm_task_statuses WHERE id = %d", (int) $task->status ) ); $users = array(); if($task->users != null){ $users = explode(",",$task->users); } if(!empty($task->project)){ $project = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}wppm_project WHERE id = %d",(int) $task->project)); } if($wppm_task_time == 1){ $task_end_date = $task->end_date; } elseif($wppm_task_time == 0){ $teDate = new DateTime($task->end_date); $task_end_date = $teDate->format('Y-m-d'); } $priority_color = $wpdb->get_var( $wpdb->prepare( "SELECT bg_color FROM {$wpdb->prefix}wppm_task_priorities WHERE id = %d", (int) $task->priority ) ); // fallback color if not found if(empty($priority_color)){ $priority_color = '#cccccc'; } ?>
task_name); ?> ; color: color))? esc_attr($status->color):""; ?>">name))? esc_html($status->name):"" ?> project_name); ?> get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist where task_id = %d",$task->id) ); $row = $wpdb->get_row( $wpdb->prepare( "SELECT COUNT(Items.id) as total, SUM(CASE WHEN Items.checked = 1 THEN 1 ELSE 0 END) as completed FROM {$wpdb->prefix}wppm_checklist_items AS Items LEFT JOIN {$wpdb->prefix}wppm_checklist checklist ON Items.checklist_id = checklist.id WHERE checklist.task_id = %d", $task->id ) ); $total = $row->total; $total_checked_items = intval($row->completed); $progress = ($total > 0) ? round(($total_checked_items / $total) * 100) : 0; $color = '#ef4444'; // red if($progress >= 50){ $color = '#f59e0b'; // orange } if($progress >= 80){ $color = '#22c55e'; // green } ?>
%

get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}wppm_task_statuses WHERE id = %d", (int) $task->status ) ); $users = array(); if($task->users != null){ $users = explode(",",$task->users); } if(!empty($task->project)){ $project = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}wppm_project WHERE id = %d",(int) $task->project)); } if($wppm_task_time == 1){ $task_end_date = $task->end_date; } elseif($wppm_task_time == 0){ $teDate = new DateTime($task->end_date); $task_end_date = $teDate->format('Y-m-d'); } $priority_color = $wpdb->get_var( $wpdb->prepare( "SELECT bg_color FROM {$wpdb->prefix}wppm_task_priorities WHERE id = %d", (int) $task->priority ) ); // fallback color if not found if(empty($priority_color)){ $priority_color = '#cccccc'; } ?>
task_name); ?> ; color: color))? esc_attr($status->color):""; ?>">name))? esc_html($status->name):"" ?> project_name); ?> get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist where task_id = %d",$task->id) ); $row = $wpdb->get_row( $wpdb->prepare( "SELECT COUNT(Items.id) as total, SUM(CASE WHEN Items.checked = 1 THEN 1 ELSE 0 END) as completed FROM {$wpdb->prefix}wppm_checklist_items AS Items LEFT JOIN {$wpdb->prefix}wppm_checklist checklist ON Items.checklist_id = checklist.id WHERE checklist.task_id = %d", $task->id ) ); $total = $row->total; $total_checked_items = intval($row->completed); $progress = ($total > 0) ? round(($total_checked_items / $total) * 100) : 0; $color = '#ef4444'; // red if($progress >= 50){ $color = '#f59e0b'; // orange } if($progress >= 80){ $color = '#22c55e'; // green } ?>
%

prepare( "SELECT p.id, p.project_name AS name, ps.name AS status_name, ps.bg_color AS status_color, ps.color AS status_text_color, p.end_date, COUNT(t.id) AS total_tasks, SUM(CASE WHEN t.status = '4' THEN 1 ELSE 0 END) AS completed_tasks FROM {$wpdb->prefix}wppm_project p LEFT JOIN {$wpdb->prefix}wppm_project_statuses ps ON p.status = ps.id LEFT JOIN {$wpdb->prefix}wppm_project_users pu ON p.id = pu.proj_id LEFT JOIN {$wpdb->prefix}wppm_task t ON p.id = t.project LEFT JOIN {$wpdb->prefix}wppm_project_meta pm ON p.id = pm.project_id AND pm.meta_key = 'public_project' WHERE (FIND_IN_SET(%d, p.users) OR p.created_by = %d OR %d = 1 OR pm.meta_value = 1) AND p.status != %d GROUP BY p.id ORDER BY p.end_date ASC LIMIT 5", $current_user_id, $current_user_id, $is_admin, 4 ); $projects = $wpdb->get_results($query); ?>
end_date; } elseif($wppm_project_time == 0){ $peDate = new DateTime($project->end_date); $project_end_date = $peDate->format('Y-m-d'); } ?>
name); ?> ; color: status_text_color))? esc_attr($project->status_text_color):""; ?>">status_name))? esc_html($project->status_name):"" ?> total_tasks; $completed = $project->completed_tasks; if($total > 0){ $proj_progress = round(($completed / $total) * 100); }else{ $proj_progress = 0; } $color = '#ef4444'; // red if($proj_progress >= 50){ $color = '#f59e0b'; // orange } if($proj_progress >= 80){ $color = '#22c55e'; // green } ?>
%

prepare( "SELECT u.ID, u.display_name, COUNT(DISTINCT t.id) AS total_tasks FROM {$wpdb->users} u INNER JOIN {$wpdb->prefix}wppm_project_users pu ON u.ID = pu.user_id INNER JOIN {$wpdb->prefix}wppm_task t ON FIND_IN_SET(u.ID, t.users) AND t.project = pu.proj_id AND pu.role_id!=3 WHERE t.status != 4 AND t.active = 1 AND t.is_archived = 0 AND ( %d = 1 OR EXISTS ( SELECT 1 FROM {$wpdb->prefix}wppm_project_users current_pu LEFT JOIN {$wpdb->prefix}wppm_project p ON current_pu.proj_id = p.id WHERE (current_pu.proj_id = pu.proj_id AND current_pu.user_id = %d AND current_pu.role_id != 3 OR p.created_by = %d ) ) ) GROUP BY u.ID HAVING total_tasks > 0 ORDER BY total_tasks DESC LIMIT 5", $is_admin, $current_user_id, $current_user_id ); $workloads = $wpdb->get_results($query); // Get max task count $max_tasks = 0; if(!empty($workloads)){ foreach($workloads as $w){ if($w->total_tasks > $max_tasks){ $max_tasks = $w->total_tasks; } } } ?>
    0){ $percent = ($workload->total_tasks / $max_tasks) * 100; } $color = '#4CAF50'; if($percent > 80){ $color = '#ff4d4d'; }elseif($percent > 50){ $color = '#ffa500'; }?>
  • display_name); ?>
    total_tasks); ?>