$value ) { if ( is_array( $value ) ) { $value = $this->sanitize_array($value); } else { $value = sanitize_text_field( wp_unslash( $value ) ); } } } return $array; } public static function create_project($args){ global $wpdb,$current_user; $default_proj_status = get_option('wppm_default_project_status'); $values = array( 'created_by'=>$current_user->ID, 'project_name'=>$args['name'], 'description'=>isset($args['wppm_proj_description']) ? $args['wppm_proj_description']:"", 'start_date'=>isset($args['wppm_start_date']) ?$args['wppm_start_date']:"", 'end_date'=>isset($args['wppm_end_date'])? $args['wppm_end_date']:"", 'status'=>isset($args['status'])? $args['status']:$default_proj_status, 'cat_id'=>isset($args['wppm_create_project_category']) ? $args['wppm_create_project_category']:"", 'users'=>isset($args['user_names']) ? implode(",",$args['user_names']):"", 'date_created'=>isset($args['date_created'])? $args['date_created']:wp_date("Y-m-d h:i:sa"), 'project_auth_code'=> self::getRandomString(10) ); $wpdb->insert($wpdb->prefix .'wppm_project', $values); $project_id = $wpdb->insert_id; return $project_id; } public static function create_task($args){ global $wpdb,$current_user; $default_task_status = get_option('wppm_default_task_status'); $values = array( 'created_by'=>(isset($args['created_by'])) ? $args['created_by']: $current_user->ID, 'task_name'=>$args['name'], 'description'=>(isset($args['wppm_task_description']))?$args['wppm_task_description']:"", 'project'=>(isset($args['wppm_task_project']))?$args['wppm_task_project']:"", 'start_date'=>(isset($args['wppm_task_start_date']))?$args['wppm_task_start_date']:"", 'end_date'=>(isset($args['wppm_task_end_date']))?$args['wppm_task_end_date']:"", 'status'=>(isset($args['status']))?$args['status']:$default_task_status, 'priority'=>(isset($args['wppm_create_task_priority']))?$args['wppm_create_task_priority']:"", 'users'=>(!empty($args['user_names']))?implode(",",$args['user_names']):"", 'date_created'=>isset($args['date_created'])? $args['date_created']:wp_date("Y-m-d h:i:sa"), 'task_auth_code'=> self::getRandomString(10), 'active'=>1, 'parent_task_id'=>(isset($args['parent_task_id']))?absint($args['parent_task_id']):0 ); $wpdb->insert($wpdb->prefix .'wppm_task', $values); $task_id = $wpdb->insert_id; return $task_id; } public static function create_checklist($args){ global $wpdb,$current_user,$wppmfunction; $values = array( 'task_id'=>$args['task_id'], 'checklist_name' => $args['checklist_name'], 'created_by'=> $args['created_by'] ); $wpdb->insert($wpdb->prefix .'wppm_checklist', $values); $checklist_id = $wpdb->insert_id; return $checklist_id; } public static function create_checklist_item($args){ global $wpdb,$current_user,$wppmfunction; $chk_items_values = array( 'checklist_id' => $args['checklist_id'], 'item_name' => $args['item_name'], 'checked'=>$args['checked'], 'members'=>$args['members'], 'due_date'=> $args['due_date'] ); $wpdb->insert($wpdb->prefix .'wppm_checklist_items', $chk_items_values); $checklist_item_id = $wpdb->insert_id; return $checklist_item_id; } public static function wppm_submit_task_comment($args){ global $wpdb; $wpdb->insert($wpdb->prefix.'wppm_task_comment',$args); $comment_id = $wpdb->insert_id; return $comment_id; } public static function wppm_submit_task_comment_meta($args){ global $wpdb; $wpdb->insert($wpdb->prefix.'wppm_task_comment_meta',$args); $comment_meta_id = $wpdb->insert_id; return $comment_meta_id; } public static function wppm_submit_proj_comment($args){ global $wpdb; $wpdb->insert($wpdb->prefix.'wppm_project_comment',$args); $comment_id = $wpdb->insert_id; return $comment_id; } public static function wppm_submit_proj_comment_meta($args){ global $wpdb; $wpdb->insert($wpdb->prefix.'wppm_project_comment_meta',$args); $comment_meta_id = $wpdb->insert_id; return $comment_meta_id; } // Random string public static function getRandomString($length = 8) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $string = ''; for ($i = 0; $i < $length; $i++) { $string .= $characters[wp_rand(0, strlen($characters) - 1)]; } return $string; } public static function wppm_get_auth_code($id){ global $wpdb; $id = absint($id); $auth_code = $wpdb->get_var( $wpdb->prepare( "SELECT task_auth_code FROM {$wpdb->prefix}wppm_task WHERE id = %d", ($id) ) ); $auth_code = isset($auth_code) ? $auth_code : ""; return $auth_code; } public static function wppm_get_proj_auth_code($id){ global $wpdb; $id = absint($id); $auth_code = $wpdb->get_var( $wpdb->prepare( "SELECT project_auth_code FROM {$wpdb->prefix}wppm_project WHERE id = %d", ($id) ) ); $auth_code = isset($auth_code) ? $auth_code : ""; return $auth_code; } public static function get_task_fields($task_id,$select_field){ global $wpdb; $task_id = absint($task_id); $task_field_value = ''; $allowed_fields = array( 'id', 'created_by', 'task_name', 'description', 'project', 'start_date', 'end_date', 'status', 'priority', 'users', 'date_created', 'task_auth_code' ); // Validate column name if ( ! in_array( $select_field, $allowed_fields, true ) ) { return ''; } if (apply_filters('wppm_get_select_field',true,$task_id,$select_field)) { $get_task_field_value = $wpdb->get_var($wpdb->prepare("SELECT $select_field FROM {$wpdb->prefix}wppm_task WHERE id = %d", $task_id)); $task_field_value = $get_task_field_value ? $get_task_field_value : ''; } return stripslashes($task_field_value); } public static function get_project_fields($proj_id,$select_field){ global $wpdb; $proj_id = absint($proj_id); $project_field_value = ''; $allowed_fields = array( 'id', 'created_by', 'project_name', 'description', 'start_date', 'end_date', 'status', 'cat_id', 'users', 'date_created', 'project_auth_code' ); // Validate column name if ( ! in_array( $select_field, $allowed_fields, true ) ) { return ''; } if (apply_filters('wppm_get_select_proj_field',true,$proj_id,$select_field)) { $get_project_field_value = $wpdb->get_var($wpdb->prepare("SELECT $select_field FROM {$wpdb->prefix}wppm_project WHERE id = %d", $proj_id)); $project_field_value = $get_project_field_value ? $get_project_field_value : ''; } return stripslashes($project_field_value); } public function get_task($task_id){ global $wpdb; $task_data = array(); $task_id = absint($task_id); $task = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task WHERE id = %d", $task_id)); if( $task ){ $task_data = json_decode(wp_json_encode($task), true); } return $task_data; } public function get_checklist($task_id){ global $wpdb; $task_id = absint($task_id); $checklist_data = array(); $checklist = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist WHERE task_id = %d", $task_id)); if( $checklist ){ $checklist_data = json_decode(wp_json_encode($checklist), true); } return $checklist_data; } public function get_checklist_items($checklist_id){ global $wpdb; $checklist_items_data = array(); $checklist_id = absint($checklist_id); $checklist_items = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist_items WHERE checklist_id = %d", $checklist_id)); if( $checklist_items ){ $checklist_items_data = json_decode(wp_json_encode($checklist_items), true); } return $checklist_items_data; } public function get_subtasks($task_id){ global $wpdb; $task_id = absint($task_id); $subtasks_data = array(); $subtasks = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task WHERE parent_task_id = %d ORDER BY id ASC", $task_id)); if( $subtasks ){ $subtasks_data = json_decode(wp_json_encode($subtasks), true); } return $subtasks_data; } public function get_subtask_progress($task_id){ global $wpdb; $task_id = absint($task_id); $completed_status_id = 4; $total = (int) $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM {$wpdb->prefix}wppm_task WHERE parent_task_id = %d", $task_id)); $completed = (int) $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM {$wpdb->prefix}wppm_task WHERE parent_task_id = %d AND status = %d", $task_id, $completed_status_id)); return array('total'=>$total,'completed'=>$completed); } // Deletes a task along with its subtasks (and each one's checklists/comments/attachments). public static function delete_task_and_children($task_id){ global $wpdb; $task_id = absint($task_id); $child_ids = $wpdb->get_col($wpdb->prepare("SELECT id FROM {$wpdb->prefix}wppm_task WHERE parent_task_id = %d", $task_id)); foreach($child_ids as $child_id){ self::delete_task_and_children($child_id); } $thread_attachment_ids = $wpdb->get_results($wpdb->prepare("SELECT attachment_ids FROM {$wpdb->prefix}wppm_task_comment WHERE task_id = %d", $task_id)); if(!empty($thread_attachment_ids)){ foreach ($thread_attachment_ids as $thread_attachment_id){ $attachment_ids_temp = array(); if($thread_attachment_id->attachment_ids){ $attachment_ids_temp = explode(',', $thread_attachment_id->attachment_ids); } foreach ($attachment_ids_temp as $attachment_id){ $attachment_id = absint($attachment_id); $result = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_attachments WHERE id = %d", $attachment_id)); if(!empty($result)){ $attach_result = $wpdb->get_results($wpdb->prepare("SELECT file_path FROM {$wpdb->prefix}wppm_attachments WHERE file_path = %s", $result->file_path)); if(file_exists($result->file_path) && count($attach_result) < 2){ wp_delete_file($result->file_path); } $wpdb->delete($wpdb->prefix.'wppm_attachments', array('id' => $attachment_id)); } } } } $checklists = $wpdb->get_results($wpdb->prepare("SELECT id FROM {$wpdb->prefix}wppm_checklist WHERE task_id = %d", $task_id)); if(!empty($checklists)){ foreach($checklists as $checklist){ $checklist_id = absint($checklist->id); $wpdb->delete($wpdb->prefix.'wppm_checklist_items', array('checklist_id'=>$checklist_id)); $wpdb->delete($wpdb->prefix.'wppm_checklist', array('id'=>$checklist_id)); } } $wpdb->delete($wpdb->prefix.'wppm_task', array('id'=>$task_id)); $wpdb->delete($wpdb->prefix.'wppm_task_meta', array('task_id'=>$task_id)); $wpdb->delete($wpdb->prefix.'wppm_task_comment', array('task_id'=>$task_id)); $wpdb->delete($wpdb->prefix.'wppm_task_comment_meta', array('task_id'=>$task_id)); do_action('wppm_after_delete_task', $task_id); } public function get_project($project_id){ global $wpdb; $project_data = array(); $project_id = absint($project_id); $project = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project WHERE id = %d", $project_id)); if( $project ){ $project_data = json_decode(wp_json_encode($project), true); } return $project_data; } public function get_attachment($attachment_id){ global $wpdb; $attachment_data = array(); $attachment_id = absint($attachment_id); $attachment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_attachments WHERE id = %d", $attachment_id)); if( $attachment ){ $attachment_data = json_decode(wp_json_encode($attachment), true); } return $attachment_data; } public function has_permission($permission, $task_id){ global $current_user,$wppmfunction,$wpdb; $task_id = absint($task_id); $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true ); $wppm_edit_tasks_permission = get_option('wppm_default_edit_tasks_permission'); $wppm_allow_coworkers_add_checklist = get_option('wppm_allow_coworkers_add_checklist'); $wppm_allow_coworkers_create_task = get_option('wppm_allow_coworkers_create_task'); $wppm_allow_coworkers_change_status = get_option('wppm_allow_coworkers_change_status'); $wppm_allow_coworkers_assign_users = get_option('wppm_allow_coworkers_assign_users'); if(empty($comment_id)){ $comment_id = 0; } $comment_id = absint($comment_id); $task_data = $wppmfunction->get_task($task_id); $task_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE task_id = %d AND id = %d", $task_id, $comment_id)); if(!empty($task_data['project'])){ $project_id = $task_data['project']; $project_id = absint($project_id); $project_data = $wppmfunction->get_project($project_id); $cu_user_id = absint($current_user->ID); $project_user_role = $wpdb->get_var($wpdb->prepare("SELECT role_id FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $project_id, $cu_user_id)); $project_users = $wpdb->get_var($wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d", $project_id)); $project_users_arr = explode(',',(string)$project_users); } $response = false; $flag = false; if(!empty($task_data)){ $co_worker = $task_data['users']; $co_worker_array = explode(",",(string)$co_worker); } if((!empty($project_user_role)) && ($project_user_role == 1) && in_array($current_user->ID,$project_users_arr)){ $flag= true; } if($wppm_current_user_capability=='wppm_admin'){ $flag = true; } if(!empty($project_data) && $project_data['created_by']==$current_user->ID && $wppm_current_user_capability=='wppm_manager'){ $flag = true; } if($current_user->has_cap('manage_options')){ $flag = true; } if(!empty($project_id)){ $project_id = absint($project_id); $public_proj_meta = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta where project_id= %d AND meta_key='public_project'", $project_id)); }else{ $public_proj_meta =""; } switch ($permission) { case 'change_status': case 'view_task': case 'add_task_comment': ((!empty($co_worker_array)) && (in_array($current_user->ID,$co_worker_array )) )|| ($current_user->ID == $task_data['created_by']) || $public_proj_meta==1 || ($flag==true) || $current_user->has_cap('manage_options') ? $response = true: $response = false; break; case 'change_task_details': (($flag==true) || ($current_user->ID == $task_data['created_by']) || $wppm_edit_tasks_permission == 1) ? $response = true: $response = false; break; case 'add_new_task': (($flag==true) || $wppm_allow_coworkers_create_task == 1) ? $response = true: $response = false; break; case 'add_checklist': (($flag==true) || $wppm_allow_coworkers_add_checklist == 1) ? $response = true: $response = false; break; case 'change_task_status': (($flag==true) || $wppm_allow_coworkers_change_status == 1) ? $response = true: $response = false; break; case 'delete_task': case 'clone_task': (($flag==true) || ($current_user->ID == $task_data['created_by'])) ? $response = true: $response = false; break; case 'assign_task_users': (($flag==true) || $wppm_allow_coworkers_assign_users == 1) ? $response = true: $response = false; break; case 'change_raised_by': case 'edit_checklist': case 'delete_checklist': (($flag==true) ? $response = true: $response = false); break; } return apply_filters( 'wppm_has_permission', $response, $task_id, $permission ); } public function has_comment_permission($permission, $task_id,$comment_id){ global $current_user,$wppmfunction,$wpdb; $task_id = absint($task_id); $comment_id = absint($comment_id); $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true ); if(empty($comment_id)){ $comment_id = 0; } $task_data = $wppmfunction->get_task($task_id); $project_user = array(); $task_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE task_id = %d AND id = %d", $task_id, $comment_id)); if(isset($task_data['project'])){ $project_id = $task_data['project']; $project_id = absint($project_id); $cu_id = absint($current_user->ID); $project_data = $wppmfunction->get_project($project_id); $project_user = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $project_id, $cu_id)); $project_users = $wpdb->get_var($wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d", $project_id)); $project_users_arr = explode(',',(string)$project_users); } $response = false; $flag = false; if(!empty($task_data)){ $co_worker = $task_data['users']; $co_worker_array = explode(",",(string)$co_worker); } if((!empty($project_user)) && ($project_user->role_id == 1) && in_array($current_user->ID,$project_users_arr)){ $flag= true; } if($wppm_current_user_capability=='wppm_admin'){ $flag = true; } if(!empty($project_data) && $project_data['created_by']==$current_user->ID && $wppm_current_user_capability=='wppm_manager'){ $flag = true; } switch ($permission) { case 'delete_task_thread': case 'edit_task_comment': (($flag==true) || ($current_user->ID == $task_comment->created_by)) ? $response = true: $response = false; break; } return apply_filters( 'wppm_has_comment_permission', $response, $task_id, $comment_id, $permission ); } public function has_proj_comment_permission($permission, $proj_id,$comment_id){ global $current_user,$wppmfunction,$wpdb; $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true ); $proj_id = absint($proj_id); $comment_id = absint($comment_id); $cu_id = absint($current_user->ID); if(empty($comment_id)){ $comment_id = 0; } $project_user = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $proj_id, $cu_id)); $project_users = $wpdb->get_var($wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d", $proj_id)); $project_users_arr = explode(',',(string)$project_users); $proj_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_comment WHERE proj_id = %d AND id = %d", $proj_id, $comment_id)); $response = false; $flag = false; $project_data = $wppmfunction->get_project($proj_id); if((!empty($project_user)) && ($project_user->role_id == 1) && in_array($current_user->ID,$project_users_arr)){ $flag= true; } if($wppm_current_user_capability=='wppm_admin'){ $flag = true; } if(!empty($project_data) && $project_data['created_by']==$current_user->ID && $wppm_current_user_capability=='wppm_manager'){ $flag = true; } switch ($permission) { case 'delete_proj_thread': case 'edit_proj_comment': (($flag==true) || ($current_user->ID == $proj_comment->created_by)) ? $response = true: $response = false; break; } return apply_filters( 'wppm_has_proj_comment_permission', $response, $proj_id, $comment_id, $permission ); } public function has_project_permission($permission,$project_id){ global $current_user,$wppmfunction,$wpdb ; $project_data = $wppmfunction->get_project($project_id); $project_id = absint($project_id); $cu_id = absint($current_user->ID); $project_user = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $project_id, $cu_id)); $project_users = $wpdb->get_var($wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d", $project_id)); $project_users_arr = explode(',',(string)$project_users); $user = wp_get_current_user(); $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true ); if(!empty($project_data)){ $co_worker = $project_data['users']; $co_worker_array = explode(",",(string)$co_worker); } if(!empty($project_id)){ $public_proj_meta = $wpdb->get_var( $wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta where project_id= %d AND meta_key='public_project'", $project_id)); }else{ $public_proj_meta =""; } switch ($permission) { case 'view_project': ((!empty($co_worker_array)) && (in_array($current_user->ID,$co_worker_array )) )? $response = true: $response = false; break; case 'add_proj_comment': ( ((!empty($co_worker_array)) && (in_array($current_user->ID,$co_worker_array )) ) || ( $public_proj_meta == '1') || $current_user->has_cap('manage_options')|| $wppm_current_user_capability == 'wppm_admin' || $wppm_current_user_capability == 'wppm_manager')? $response = true: $response = false; break; case 'change_project_status': case 'assign_project_users': case 'change_project_raised_by': case 'change_project_details': case 'delete_project': $flag = false; if( (!empty($project_user)) && ($project_user->role_id == 1) && in_array($current_user->ID,$project_users_arr)){ $flag = true; } (((!empty($co_worker_array)) && (in_array($current_user->ID,$co_worker_array) && $flag==true) || $wppm_current_user_capability == 'wppm_admin')) ? $response = true: $response = false; break; } return apply_filters( 'wppm_has_project_permission', $response, $project_id, $permission ); } public function change_status($task_id, $status_id){ global $wpdb,$wppmfunction; $task_data = $wppmfunction->get_task($task_id); $prev_status = $task_data['status']; $values=array( 'status'=>esc_sql($status_id) ); $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id))); $old_task_status_meta = $wppmfunction->get_task_meta($task_id,'old_task_status',true); if(!empty($old_task_status_meta)){ $wppmfunction->delete_task_meta($task_id,'old_task_status'); } $wppmfunction->add_task_meta($task_id,'old_task_status',$prev_status); do_action('wppm_set_change_task_status', $task_id, $status_id, $prev_status); } public function change_raised_by($task_id, $user_id){ global $wpdb; $values=array( 'created_by'=>absint($user_id) ); $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id))); } public function change_task_label($task_id, $task_label){ global $wpdb; $values=array( 'task_name'=>stripslashes($task_label) ); $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id))); } public function change_task_project_label($task_id, $project_label){ global $wpdb; $values=array( 'project'=>absint($project_label) ); $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id))); } public function change_start_date($task_id, $task_start_date){ global $wpdb; $values=array( 'start_date'=>$task_start_date ); $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id))); } public function change_end_date($task_id, $task_end_date){ global $wpdb; $values=array( 'end_date'=>$task_end_date ); $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id))); } public function change_priority($task_id, $task_priority){ global $wpdb; $values=array( 'priority'=>absint($task_priority) ); $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id))); } public function change_description($task_id, $task_description){ global $wpdb; $task_description = !empty($task_description) ? wp_kses_post($task_description) : ''; $values=array( 'description'=>$task_description ); $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id))); } public function change_project($task_id,$proj_id){ global $wpdb,$wppmfunction; $task_data = $wppmfunction->get_task($task_id); $old_proj = $task_data['project']; $old_proj = absint( $old_proj); $proj_id = absint( $proj_id); $project_data = $wppmfunction->get_project($proj_id); $task_assign_users = $task_data['users']; $tusers_array = array(); if(!empty($task_data['users'])){ $task_users_array = explode(",",(string)$task_assign_users); } if(!empty($project_data['users'])){ $project_users = explode(",",(string)$project_data['users']); } if(!empty($project_users)){ if(!empty($task_users_array)){ foreach($task_users_array as $tuser){ if(!in_array($tuser,$project_users)){ $wpdb->delete( $wpdb->prefix.'wppm_project_users', array( 'proj_id' => "$proj_id",'user_id'=>"$tuser") ); } elseif(in_array($tuser,$project_users)){ $tusers_array[] = $tuser; $tuser = absint($tuser); $sql = $wpdb->prepare("SELECT role_id FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $old_proj, $tuser); $old_proj_user_role = $wpdb->get_var( $sql ); $sql = $wpdb->prepare("SELECT role_id FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d", $proj_id, $tuser); $proj_users_role = $wpdb->get_var( $sql ); if(!empty( $old_proj_user_role) && $old_proj_user_role!=$proj_users_role){ $value=array( 'role_id'=>absint($proj_users_role) ); $wpdb->update($wpdb->prefix.'wppm_project_users', $value, array('proj_id'=>"$proj_id", 'user_id'=>"$tuser")); } } } } } $tusers = implode(",",$tusers_array); $values=array( 'project'=>absint($proj_id), 'users'=>absint($tusers) ); $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>absint($task_id))); } public function get_task_comment($comment_id){ global $wpdb; $task_comment_data = array(); $comment_id = absint($comment_id); $task_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE id=%d", $comment_id)); if( $task_comment ){ $task_comment_data = json_decode(wp_json_encode($task_comment), true); } return $task_comment_data; } public function get_proj_comment($comment_id){ global $wpdb; $project_comment_data = array(); $comment_id = absint($comment_id); $project_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_comment WHERE id=%d", $comment_id)); if( $project_comment ){ $project_comment_data = json_decode(wp_json_encode($project_comment), true); } return $project_comment_data; } public function change_task_comment($comment_id,$comment_body){ global $wpdb; $comment_id = absint($comment_id); $comment_body = !empty($comment_body) ? wp_kses_post($comment_body) : ''; $values=array( 'body'=>$comment_body ); $wpdb->update($wpdb->prefix.'wppm_task_comment', $values, array('id'=>"$comment_id")); } public function change_proj_comment($comment_id,$comment_body){ global $wpdb; $comment_id = absint($comment_id); $comment_body = !empty($comment_body) ? wp_kses_post($comment_body) : ''; $values=array( 'body'=>$comment_body ); $wpdb->update($wpdb->prefix.'wppm_project_comment', $values, array('id'=>"$comment_id")); } public function change_project_label($project_id,$project_label){ global $wpdb; $project_id = absint($project_id); $values=array( 'project_name'=>esc_sql($project_label) ); $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id")); } public function change_project_start_date($project_id, $project_start_date){ global $wpdb; $project_id = absint($project_id); $project_start_date = esc_sql($project_start_date); $values=array( 'start_date'=>$project_start_date ); $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id")); } public function change_project_end_date($project_id, $project_end_date){ global $wpdb; $project_id = absint($project_id); $project_end_date = esc_sql($project_end_date); $values=array( 'end_date'=>$project_end_date ); $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>$project_id)); } public function change_category($project_id, $project_category){ global $wpdb; $project_id = absint($project_id); $project_category = absint($project_category); $values=array( 'cat_id'=>$project_category ); $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id")); } public function change_project_description($project_id, $project_description){ global $wpdb; $project_id = absint($project_id); $project_description = (string) ( $project_description ?? '' ); $values = array( 'description' => wp_kses_post( $project_description ) ); $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id")); } public function change_project_status($project_id,$status_id){ global $wpdb,$wppmfunction,$current_user; $change_status_value= array(); $proj_data = $wppmfunction->get_project($project_id); $prev_status = $proj_data['status']; $cu_id = absint($current_user->ID); $values=array( 'status'=>absint($status_id) ); $project_id = absint($project_id); $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>$project_id)); $old_project_status_meta = $wppmfunction->get_project_meta($project_id,'old_project_status',true); if(!empty($old_project_status_meta)){ $wppmfunction->delete_project_meta($project_id,'old_project_status'); } $change_status_value = array('prev_status'=>"$prev_status",'new_status'=>"$status_id"); $change_status_obj = serialize($change_status_value); $log_values = array('proj_id'=>"$project_id",'body'=>$change_status_obj,'attachment_ids'=>"",'create_time'=>wp_date("Y-m-d h:i:sa"),'created_by'=>"$cu_id" ); $wpdb->insert($wpdb->prefix . 'wppm_project_comment',$log_values); $log_id = absint($wpdb->insert_id); $proj_log_values = array('proj_id'=>"$project_id",'comment_id'=>"$log_id",'comment_type'=>'change_proj_status'); $wpdb->insert($wpdb->prefix . 'wppm_project_comment_meta',$proj_log_values); $wppmfunction->add_project_meta($project_id,'old_project_status',$prev_status); do_action('wppm_set_change_project_status', $project_id, $status_id, $prev_status); } public function change_project_raised_by($project_id, $user_id){ global $wpdb; $values=array( 'created_by'=>absint($user_id) ); $wpdb->update($wpdb->prefix.'wppm_project', $values, array('id'=>"$project_id")); } // Email Notification types public function get_email_notification_types(){ $notification_types = array( 'new_project'=>esc_html__('New Project','taskbuilder'), 'new_task'=>esc_html__('New Task','taskbuilder'), 'change_project_status' => esc_html__('Change Project Status','taskbuilder'), 'change_task_status' => esc_html__('Change Task Status','taskbuilder'), 'change_project_assign_users' => esc_html__('Change Project Assign Users','taskbuilder'), 'change_task_assign_users' => esc_html__('Change Task Assign Users','taskbuilder'), 'new_discussion' => esc_html__('New Comment','taskbuilder'), 'new_proj_discussion' =>esc_html__('New Project Comment','taskbuilder') ); return apply_filters('wppm_en_types',$notification_types); } public function check_rtl(){ $rtl_locale = array('ar','ary','ckb','haz','he_IL','fa_IR','ps','ur','ug_CN'); if(in_array(get_locale(),$rtl_locale)){ return 'rtl'; }else{ return 'ltr'; } } public function add_project_meta($proj_id,$meta_key,$meta_value){ global $wpdb; $wpdb->insert( $wpdb->prefix . 'wppm_project_meta', array( 'project_id' =>$proj_id, 'meta_key' => $meta_key, 'meta_value' =>$meta_value )); } public function add_task_meta($task_id,$meta_key,$meta_value){ global $wpdb; $wpdb->insert( $wpdb->prefix . 'wppm_task_meta', array( 'task_id' => $task_id, 'meta_key' => $meta_key, 'meta_value' =>$meta_value )); } public function get_project_meta($project_id,$meta_key,$flag = false){ global $wpdb,$wppmfunction; $project_id = absint($project_id); $meta_key = esc_sql($meta_key); if($flag){ $get_meta = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = %d AND meta_key = %s",$project_id,$meta_key)); $project_meta = isset($get_meta) ? stripslashes($get_meta) : ''; } else { $project_meta = array(); $results = $wpdb->get_results($wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = %d AND meta_key = %s",$project_id,$meta_key)); if( (!empty($results)) ){ foreach ($results as $result) { if(!empty($result)){ $project_meta[]= stripslashes($result->meta_value); } } } } return $project_meta; } public function get_task_meta($task_id,$meta_key,$flag = false){ global $wpdb,$wppmfunction; $task_id = absint($task_id); $meta_key = esc_sql($meta_key); if($flag){ $get_meta = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = %d AND meta_key = %s",$task_id,$meta_key)); $task_meta = isset($get_meta) ? stripslashes($get_meta) : ''; } else { $task_meta = array(); $results = $wpdb->get_results($wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = %d AND meta_key = %s",$task_id,$meta_key)); if( (!empty($results)) ){ foreach ($results as $result) { if(!empty($result)){ $task_meta[]= stripslashes($result->meta_value); } } } } return $task_meta; } public function get_previously_assigned_users($project_id){ global $wpdb,$wppmfunction; $prev_assigned_users = $wppmfunction->get_project_meta($project_id,'prev_assigned_users'); $user_emails = array(); if(!empty($prev_assigned_users)){ foreach ($prev_assigned_users as $user) { $userdata = get_userdata($user); $user_emails[] = $userdata->user_email; } } return apply_filters( 'wppm_get_prev_assigned_users_emails', $user_emails ,$project_id); } public function get_project_creator_email($project_id){ global $wpdb,$wppmfunction; $project_data = $wppmfunction->get_project($project_id,'created_by'); $userdata = get_userdata($project_data['created_by']); if(!empty( $userdata)){ $proj_creator_email[] = $userdata->user_email; } return apply_filters( 'wppm_get_project_creator_email', $proj_creator_email ,$project_id); } public function get_task_creator_email($task_id){ global $wpdb,$wppmfunction; $task_data = $wppmfunction->get_task($task_id,'created_by'); $userdata = get_userdata($task_data['created_by']); if(!empty( $userdata)){ $task_creator_email[] = $userdata->user_email; } return apply_filters( 'wppm_get_task_creator_email', $task_creator_email ,$task_id); } public function get_previously_assigned_task_users($task_id){ global $wpdb,$wppmfunction; $prev_assigned_task_users = $wppmfunction->get_task_meta($task_id,'prev_assigned_task_users'); $user_emails = array(); if(!empty($prev_assigned_task_users)){ foreach ($prev_assigned_task_users as $user) { if(!empty($user)){ $userdata = get_userdata($user); $user_emails[] = $userdata->user_email; } } } return apply_filters( 'wppm_get_prev_assigned_task_users_emails', $user_emails ,$task_id); } /** * Update project meta for project */ function update_project_meta($project_id ,$meta_key ,$meta_value){ global $wpdb; $project_id = absint($project_id); $meta_key = esc_sql($meta_key); $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = %d AND meta_key = %s",$project_id,$meta_key)); $wpdb->update($wpdb->prefix.'wppm_project_meta', $meta_value, array('project_id'=>$project_id,'meta_key' => "$meta_key")); } /** * Update task meta for task */ function update_task_meta($task_id ,$meta_key ,$meta_value){ global $wpdb; $task_id = absint($task_id); $meta_key = esc_sql($meta_key); $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = %d AND meta_key = %s",$task_id,$meta_key)); $wpdb->update($wpdb->prefix.'wppm_task_meta', $meta_value, array('task_id'=>$task_id,'meta_key' => "$meta_key")); } function delete_project_meta($project_id ,$meta_key){ global $wpdb; $project_id = absint($project_id); $meta_key = ($meta_key); $wpdb->delete( $wpdb->prefix.'wppm_project_meta', array( 'project_id' => "$project_id",'meta_key'=>"$meta_key") ); } function delete_task_meta($task_id ,$meta_key){ global $wpdb; $task_id = absint($task_id); $meta_key = ($meta_key); $wpdb->delete( $wpdb->prefix.'wppm_task_meta', array( 'task_id' => "$task_id",'meta_key'=>"$meta_key") ); } public function replace_macro($str,$project_id){ include WPPM_ABSPATH . 'includes/replace_macro.php'; return $str; } public function replace_task_macro($str,$task_id){ include WPPM_ABSPATH . 'includes/replace_task_macro.php'; return $str; } public function get_old_project_status_name($id){ global $wppmfunction, $wpdb; $old_project_status = $wppmfunction->get_project_meta($id,'old_project_status',true); $old_project_status = absint($old_project_status); $status_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_project_statuses WHERE id = %d",$old_project_status)); return $status_name; } public function get_new_project_status_name($status_id){ global $wpdb; $status_id = absint($status_id); $status_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_project_statuses WHERE id = %d",$status_id)); return $status_name; } public function get_old_task_status_name($task_id){ global $wppmfunction, $wpdb; $old_task_status = $wppmfunction->get_task_meta($task_id,'old_task_status',true); $old_task_status = absint($old_task_status); $status_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_task_statuses WHERE id = %d",$old_task_status)); return $status_name; } public function get_new_task_status_name($status_id){ global $wpdb; $status_id = absint($status_id); $status_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_task_statuses WHERE id = %d",$status_id)); return $status_name; } public function get_project_category_name($cat_id){ global $wpdb; $cat_id = absint($cat_id); if(!empty($cat_id)){ $cat_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_project_categories WHERE id = %d",$cat_id)); }else{ $cat_name = ""; } return $cat_name; } public function get_project_assigned_users_names($project_id){ global $wppmfunction; $wppm_project_data = $wppmfunction->get_project($project_id); if(!empty($wppm_project_data['users'])){ $wppm_project_assign_users_array = explode(",", $wppm_project_data['users']); }else{ $wppm_project_assign_users_array = array(); } $users_names = array(); if(!empty($wppm_project_assign_users_array)){ foreach ($wppm_project_assign_users_array as $user_id) { if(!empty($user_id)){ $userdata = get_userdata( $user_id ); if(!empty($userdata)){ $users_names[] = $userdata->display_name; } } } } return implode(', ', $users_names); } public function get_task_assigned_users_names($task_id){ global $wppmfunction; $wppm_task_data = $wppmfunction->get_task($task_id); $wppm_task_assign_users_array = explode(",", (string)$wppm_task_data['users']); $users_names = array(); if(!empty($wppm_task_assign_users_array)){ foreach ($wppm_task_assign_users_array as $user_id) { if(!empty($user_id)){ $userdata = get_userdata( $user_id ); if(!empty($userdata)){ $users_names[] = $userdata->display_name; } } } } return implode(', ', $users_names); } public function get_project_previously_assigned_users_names($project_id){ global $wppmfunction; $wppm_project_assign_users = $wppmfunction->get_project_meta($project_id,'prev_assigned_users'); $users_names = array(); if(!empty($wppm_project_assign_users)){ foreach ($wppm_project_assign_users as $user) { if(!empty($user)){ $userdata = get_userdata( $user ); $users_names[] = $userdata->display_name; } } } return implode(', ', $users_names); } public function get_task_previously_assigned_users_names($task_id){ global $wppmfunction; $wppm_task_assign_users = $wppmfunction->get_task_meta($task_id,'prev_assigned_task_users'); $users_names = array(); if(!empty($wppm_task_assign_users)){ foreach ($wppm_task_assign_users as $user) { if(!empty($user)){ $userdata = get_userdata( $user ); $users_names[] = $userdata->display_name; } } } return implode(', ', $users_names); } public function get_task_priority_name($priority){ global $wpdb; $priority = absint($priority); $priority_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}wppm_task_priorities WHERE id = %d",$priority)); return $priority_name; } public function get_last_comment_user_name($task_id){ global $wpdb; $task_id = absint($task_id); $task_comment_creator = $wpdb->get_var($wpdb->prepare("SELECT created_by FROM {$wpdb->prefix}wppm_task_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_task_comment) AND task_id = %d)",$task_id)); if(!empty($task_comment_creator)){ $user = get_userdata( $task_comment_creator ); return $user->display_name; } } public function get_last_comment_body($task_id){ global $wpdb; $task_id = absint($task_id); $task_comment = $wpdb->get_var($wpdb->prepare("SELECT body FROM {$wpdb->prefix}wppm_task_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_task_comment) AND task_id = %d)",$task_id)); return $task_comment; } public function create_duplicate_task($ptask_id, $project_id,$internal_code_flag=false){ include WPPM_ABSPATH . 'includes/admin/tasks/open_task/wppm_set_clone_task.php'; } public function get_last_comment_proj_user_name($project_id){ global $wpdb; $project_id = absint($project_id); $proj_comment_creator = $wpdb->get_var($wpdb->prepare("SELECT created_by FROM {$wpdb->prefix}wppm_project_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_project_comment) AND proj_id = %d)",$project_id)); if(!empty($proj_comment_creator)){ $user = get_userdata( $proj_comment_creator ); return $user->display_name; } } public function get_proj_comment_body($project_id){ global $wpdb; $project_id = absint($project_id); $proj_comment = $wpdb->get_var($wpdb->prepare("SELECT body FROM {$wpdb->prefix}wppm_project_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_project_comment) AND proj_id = %d)",$project_id)); return $proj_comment; } public function get_project_url($project_id, $view){ global $wpdb,$wppmfunction; $project_id = absint($project_id); $page_settings = get_option( 'wppm-page-settings' ); if ( $view == '0' ) { $url = admin_url( 'admin.php?page=wppm-projects§ion=project-list&id=' . $project_id ); } else { $url = get_permalink( $page_settings['project-url-page'] ); $auth_id = $wppmfunction->get_project_meta($project_id,'project_auth_code',true); $url = add_query_arg( array( 'project-id' => $project_id, 'auth-code' => $auth_id, ), $url ); } return $url; } public function get_task_url($task_id, $view){ global $wpdb,$wppmfunction; $task_id = absint($task_id); $page_settings = get_option( 'wppm-page-settings' ); if ( $view == '0' ) { $url = admin_url( 'admin.php?page=wppm-tasks§ion=task-list&id=' . $task_id ); } else{ $url = get_permalink( $page_settings['task-url-page'] ); $auth_id = $this->wppm_get_auth_code($task_id); $url = add_query_arg( array( 'task-id' => $task_id, 'auth-code' => $auth_id, ), $url ); } return $url; } public function wppm_user_role(){ $user_role = array( 'wppm_admin' => array( 'label' => esc_html__('WPPM Administrator','taskbuilder'), ), 'wppm_manager' => array( 'label' => esc_html__('WPPM Manager','taskbuilder'), ) ); return $user_role; } public static function wppm_toolbar_options_setting() { $toolbar = array( array( 'name' => esc_attr__( 'Bold', 'taskbuilder' ), 'value' => 'bold', ), array( 'name' => esc_attr__( 'Italic', 'taskbuilder' ), 'value' => 'italic', ), array( 'name' => esc_attr__( 'Underline', 'taskbuilder' ), 'value' => 'underline', ), array( 'name' => esc_attr__( 'Blockquote', 'taskbuilder' ), 'value' => 'blockquote', ), array( 'name' => esc_attr__( 'Align', 'taskbuilder' ), 'value' => 'align', ), array( 'name' => esc_attr__( 'Bulleted list', 'taskbuilder' ), 'value' => 'bullist', ), array( 'name' => esc_attr__( 'Numbered list', 'taskbuilder' ), 'value' => 'numlist', ), array( 'name' => esc_attr__( 'Right to left', 'taskbuilder' ), 'value' => 'rtl', ), array( 'name' => esc_attr__( 'Link', 'taskbuilder' ), 'value' => 'link', ), array( 'name' => esc_attr__( 'Image', 'taskbuilder' ), 'value' => 'wppm_insert_editor_img', ), array( 'name' => esc_attr__( 'Text Color', 'taskbuilder' ), 'value' => 'forecolor', ), array( 'name' => esc_attr__( 'Text Background Color', 'taskbuilder' ), 'value' => 'backcolor', ), array( 'name' => esc_attr__( 'Strikethrough', 'taskbuilder' ), 'value' => 'strikethrough', ), ); return $toolbar; } public static function wppm_load_setting_header_html() { ?>
taskbuilder Icon

taskbuilder Icon
taskbuilder Icon
taskbuilder Icon
0) $duration[] = $days . 'd'; if ($hours > 0) $duration[] = $hours . 'h'; if ($minutes > 0 || empty($duration)) $duration[] = $minutes . 'm'; return implode(' ', $duration); } public function wppm_highlight_user_mentions($content, $current_user_id) { return preg_replace_callback( '/]*class="wppm-mention"[^>]*data-user-id="(\d+)"[^>]*>(.*?)<\/span>/is', function($matches) use ($current_user_id) { $user_id = intval($matches[1]); $text = $matches[2]; // already processed → skip if (strpos($matches[0], 'wppm-mention-me') !== false) { return $matches[0]; } if ($user_id === $current_user_id) { return '' . $text . ''; } return '' . $text . ''; }, $content ); } function wppm_clean_mentions_html($content) { // Remove dropdown items $content = preg_replace('/]*class="mention-item"[^>]*>.*?<\/div>/is', '', $content); // Remove mention dropdown container $content = preg_replace('/]*id="wppm_mention_list"[^>]*>.*?<\/div>/is', '', $content); return $content; } function wppm_extract_mentions($comment) { preg_match_all('/data-user-id="(\d+)"/', $comment, $matches); return $matches[1]; } function wppm_get_users_from_mentions($user_ids) { $users = []; foreach ($user_ids as $user_id) { $user = get_user_by('id', intval($user_id)); if ($user) { $users[] = $user; } } return $users; } function wppm_send_mention_email($email_addresses, $comment, $task_id) { $page_setting = get_option('wppm-page-settings'); $from_name = get_option('wppm_en_from_name'); $from_email = get_option('wppm_en_from_email'); $view = $page_setting['task-url-page']; $subject = esc_html__("You were mentioned in a comment", "taskbuilder"); $to = isset($email_addresses[0]) ? $email_addresses[0] : ''; if (!$to) { return; } unset($email_addresses[0]); $headers = "From: {$from_name} <{$from_email}>\r\n"; foreach ($email_addresses as $email_address) { $headers .= "BCC: {$email_address}\r\n"; } $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $task_url = $this->get_task_url($task_id, $view); $message = esc_html__("Hello,", "taskbuilder"); $message .= "

"; $message .= esc_html__("You were mentioned in a comment:", "taskbuilder"); $message .= "

"; $message .= nl2br(esc_html(strip_tags($comment))); $message .= "

"; $message .= esc_html__("View Task:", "taskbuilder") . " "; $message .= '' . esc_html__("View Task", "taskbuilder") . ''; wp_mail($to, $subject, $message, $headers); do_action('wppm_after_sent_mention_mail', $email_addresses, $comment, $task_id); } function wppm_insert_notification($user_id, $message, $link,$is_read,$type) { global $wpdb; $wpdb->insert( $wpdb->prefix . 'wppm_notifications', [ 'user_id' => $user_id, 'message' => $message, 'link' => $link, 'is_read' => $is_read, 'notification_type'=>$type, 'created_at' => current_time('mysql') ] ); } } endif; $GLOBALS['wppmfunction'] = new WPPM_Functions();