# taskbuilder/3.0.8/includes/class-wppm-functions.php

Taskbuilder – Project Management &amp; Task Management Tool With Kanban Board, version 3.0.8. 1,005 lines.

- Page: https://pluginprobe.com/plugins/taskbuilder/3.0.8/code/includes/class-wppm-functions.php
- Raw: https://pluginprobe.com/plugins/taskbuilder/3.0.8/raw/includes/class-wppm-functions.php
- Modified: 2024-12-19T12:34:10+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/taskbuilder/3.0.8/code/includes/class-wppm-functions.php#L10-L20`.

```php
<?php
if ( ! defined( 'ABSPATH' ) ) {
  exit; // Exit if accessed directly
}
if ( ! class_exists( 'WPPM_Functions' ) ) :
    final class WPPM_Functions {
        // Array sanitization
        public static function sanitize_array($array) {
            if(!empty($array)){
                foreach ( $array as $key => $value ) {
                    if ( is_array( $value ) ) {
                        $value = $this->sanitize_array($value);
                    }
                    else {
                        $value = sanitize_text_field( $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']:date("Y-m-d h:i:sa"),
            );
            $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,$wppmfunction;
            $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']:date("Y-m-d h:i:sa"),
                'task_auth_code'=> $wppmfunction->getRandomString(10),
                'active'=>1
            );
            $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[mt_rand(0, strlen($characters) - 1)];
            }
            return $string;
        }

        public static function wppm_get_auth_code($id){
            global $wpdb;
            $id = esc_sql($id);
            $auth_code = $wpdb->get_var( "SELECT task_auth_code FROM {$wpdb->prefix}wppm_task where id='$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 = esc_sql($task_id);
            $task_field_value = '';
            if (apply_filters('wppm_get_select_field',true,$task_id,$select_field)) {
              $get_task_field_value = $wpdb->get_var(" SELECT $select_field FROM {$wpdb->prefix}wppm_task WHERE id='$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 = esc_sql($proj_id);
            $project_field_value = '';
            if (apply_filters('wppm_get_select_proj_field',true,$proj_id,$select_field)) {
              $get_project_field_value = $wpdb->get_var(" SELECT $select_field FROM {$wpdb->prefix}wppm_project WHERE id='$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 = esc_sql($task_id);
            $task = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_task WHERE id='$task_id' ");
            if( $task ){
                $task_data = json_decode(json_encode($task), true);
            }
            return $task_data;
        }

        public function get_checklist($task_id){
            global $wpdb;
            $task_id = esc_sql($task_id);
            $checklist_data = array();
            $checklist = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_checklist WHERE task_id='$task_id' ");
            if( $checklist ){
                $checklist_data = json_decode(json_encode($checklist), true);
            }
            return $checklist_data;
        }

        public function get_checklist_items($checklist_id){
            global $wpdb;
            $checklist_items_data = array();
            $checklist_id = esc_sql($checklist_id);
            $checklist_items = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_checklist_items WHERE checklist_id='$checklist_id' ");
            if( $checklist_items ){
                $checklist_items_data = json_decode(json_encode($checklist_items), true);
            }
            return $checklist_items_data;
        }

        public function get_project($project_id){
            global $wpdb;
            $project_data = array();
            $project_id = esc_sql($project_id);
            $project = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project WHERE id='$project_id' ");
            if( $project ){
                $project_data = json_decode(json_encode($project), true);
            }
            return $project_data;
        }

        public function get_attachment($attachment_id){
            global $wpdb;
            $attachment_data = array();
            $attachment_id = esc_sql($attachment_id);
            $attachment = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_attachments WHERE id='$attachment_id' ");
            if( $attachment ){
                $attachment_data = json_decode(json_encode($attachment), true);
            }
            return $attachment_data;
        }

        public function has_permission($permission, $task_id){
            global $current_user,$wppmfunction,$wpdb;
            $task_id = esc_sql($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 = esc_sql($comment_id);
            $task_data = $wppmfunction->get_task($task_id);
            $task_comment = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE task_id = '$task_id' AND id = '$comment_id'");
            
            if(!empty($task_data['project'])){
                $project_id = $task_data['project'];
                $project_id = esc_sql($project_id);
                $project_data = $wppmfunction->get_project($project_id);
                $cu_user_id = esc_sql($current_user->ID);
                $project_user_role = $wpdb->get_var("SELECT role_id FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = '$project_id' AND user_id = ' $cu_user_id'");
                $project_users = $wpdb->get_var("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = '$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(!empty($project_id)){
                $project_id = esc_sql($project_id);
                $public_proj_meta = $wpdb->get_var( "SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta where project_id= '$project_id' AND meta_key='public_project'");
            }else{
                $public_proj_meta ="";
            }
            switch ($permission) {
                case 'change_status':
                case 'view_task':
                    ((!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) ? $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 = esc_sql($task_id);
            $comment_id = esc_sql( $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("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE task_id = '$task_id' AND id = '$comment_id'");
            
            if(isset($task_data['project'])){
                $project_id = $task_data['project'];
                $project_id = esc_sql($project_id);
                $cu_id = esc_sql($current_user->ID);
                $project_data = $wppmfunction->get_project($project_id);
                $project_user = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = '$project_id' AND user_id = '$cu_id'");
                $project_users = $wpdb->get_var("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = '$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 = esc_sql($proj_id);
            $comment_id = esc_sql($comment_id);
            $cu_id = esc_sql($current_user->ID);
            if(empty($comment_id)){
                $comment_id = 0;
            }
            $project_user = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = '$proj_id' AND user_id = ' $cu_id '");
            $project_users = $wpdb->get_var("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = '$proj_id'");
            $project_users_arr = explode(',',(string)$project_users);
            $proj_comment = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_comment WHERE proj_id = '$proj_id' AND 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 = esc_sql($project_id);
            $cu_id = esc_sql($current_user->ID);
            $project_user = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = ".esc_sql($project_id)." AND user_id = ".esc_sql($cu_id)."");
            $project_users = $wpdb->get_var("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = '$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);
            }
            switch ($permission) {
                case 'view_project':
                ((!empty($co_worker_array)) && (in_array($current_user->ID,$co_worker_array )) )? $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'=>esc_sql($user_id)
            );
            $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($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'=>esc_sql($task_id)));
        }

        public function change_task_project_label($task_id, $project_label){
            global $wpdb;
            $values=array(
                'project'=>esc_sql($project_label)
            );
            $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
        }

        public function change_start_date($task_id, $task_start_date){
            global $wpdb;
            $values=array(
                'start_date'=>esc_sql($task_start_date)
            );
            $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
        }

        public function change_end_date($task_id, $task_end_date){
            global $wpdb;
            $values=array(
                'end_date'=>esc_sql($task_end_date)
            );
            $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
        }

        public function change_priority($task_id, $task_priority){
            global $wpdb;
            $values=array(
                'priority'=>esc_sql($task_priority)
            );
            $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
        }

        public function change_description($task_id, $task_description){
            global $wpdb;
            $task_description = wp_kses_post($task_description);
            $values=array(
                'description'=>$task_description
            );
            $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($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 = esc_sql( $old_proj);
            $proj_id = esc_sql( $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 = esc_sql($tuser);
                            $sql = 'SELECT role_id FROM ' . $wpdb->prefix . 'wppm_project_users WHERE proj_id = ' . $old_proj .' AND user_id = '."$tuser";
                            $old_proj_user_role =  $wpdb->get_var( $sql );
                            $sql = 'SELECT role_id FROM ' . $wpdb->prefix . 'wppm_project_users WHERE proj_id = ' . $proj_id .' AND user_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'=>esc_sql($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'=>esc_sql($proj_id),
                'users'=>esc_sql($tusers)
            );
            $wpdb->update($wpdb->prefix.'wppm_task', $values, array('id'=>esc_sql($task_id)));
        }

        public function get_task_comment($comment_id){
            global $wpdb;
            $task_comment_data = array();
            $comment_id = esc_sql($comment_id);
            $task_comment = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_task_comment WHERE id='$comment_id' ");
            if( $task_comment ){
                $task_comment_data = json_decode(json_encode($task_comment), true);
            }
            return $task_comment_data;
        }

        public function get_proj_comment($comment_id){
            global $wpdb;
            $project_comment_data = array();
            $comment_id = esc_sql($comment_id);
            $project_comment = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_comment WHERE id='$comment_id' ");
            if( $project_comment ){
                $project_comment_data = json_decode(json_encode($project_comment), true);
            }
            return $project_comment_data;
        }

        public function change_task_comment($comment_id,$comment_body){
            global $wpdb;
            $comment_id = esc_sql($comment_id);
            $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 = esc_sql($comment_id);
            $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 = esc_sql($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 = esc_sql($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 = esc_sql($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 = esc_sql($project_id);
            $project_category = esc_sql($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 = esc_sql($project_id);
            $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 = esc_sql($current_user->ID);
            $values=array(
                'status'=>esc_sql($status_id)
            );
            $project_id = esc_sql($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'=>date("Y-m-d h:i:sa"),'created_by'=>"$cu_id" );
            $wpdb->insert($wpdb->prefix . 'wppm_project_comment',$log_values);
            $log_id = esc_sql($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'=>esc_sql($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'=>__('New Project','taskbuilder'),
            'new_task'=>__('New Task','taskbuilder'),
            'change_project_status'       => __('Change Project Status','taskbuilder'),
            'change_task_status'    => __('Change Task Status','taskbuilder'),
            'change_project_assign_users' => __('Change Project Assign Users','taskbuilder'),
            'change_task_assign_users'    => __('Change Task Assign Users','taskbuilder'),
            'new_discussion'     => __('New Comment','taskbuilder'),
            'new_proj_discussion'  =>__('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 = esc_sql($project_id);
            $meta_key = esc_sql($meta_key);
            if($flag){
                $get_meta = $wpdb->get_var("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = '$project_id' AND meta_key = '$meta_key' ");
                $project_meta = isset($get_meta) ? stripslashes($get_meta) : '';
                
            } else {
                $project_meta = array();
                $results = $wpdb->get_results("SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = '$project_id' AND meta_key = '$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 = esc_sql($task_id);
            $meta_key = esc_sql($meta_key);
            if($flag){
                $get_meta = $wpdb->get_var("SELECT meta_value FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = '$task_id' AND meta_key = '$meta_key' ");
                $task_meta = isset($get_meta) ? stripslashes($get_meta) : '';
                
            } else {
                $task_meta = array();
                $results = $wpdb->get_results("SELECT meta_value FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = '$task_id' AND meta_key = '$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 = esc_sql($project_id);
            $meta_key = esc_sql($meta_key);
            $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_project_meta WHERE project_id = '$project_id' AND meta_key = '$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 = esc_sql($task_id);
            $meta_key = esc_sql($meta_key);
            $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_task_meta WHERE task_id = '$task_id' AND meta_key = '$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 = esc_sql($project_id);
            $meta_key = esc_sql($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 = esc_sql($task_id);
            $meta_key = esc_sql($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 = esc_sql($old_project_status);
            $status_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_project_statuses WHERE id ='$old_project_status'");
            return $status_name;
        }

        public function get_new_project_status_name($status_id){
            global $wpdb;
            $status_id = esc_sql($status_id);
            $status_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_project_statuses WHERE id ='$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 = esc_sql($old_task_status);
            $status_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_task_statuses WHERE id ='$old_task_status'");
            return $status_name;
        }

        public function get_new_task_status_name($status_id){
            global $wpdb;
            $status_id = esc_sql($status_id);
            $status_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_task_statuses WHERE id ='$status_id'");
            return $status_name;
        }

        public function get_project_category_name($cat_id){
            global $wpdb;
            $cat_id = esc_sql($cat_id);
            if(!empty($cat_id)){
                $cat_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_project_categories WHERE id ='$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 = esc_sql($priority);
            $priority_name = $wpdb->get_var("SELECT name FROM {$wpdb->prefix}wppm_task_priorities WHERE id ='$priority'");
            return $priority_name;
        }

        public function get_last_comment_user_name($task_id){
            global $wpdb;
            $task_id = esc_sql($task_id);
            $task_comment_creator = $wpdb->get_var("SELECT created_by FROM {$wpdb->prefix}wppm_task_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_task_comment) AND task_id = '$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 = esc_sql($task_id);
            $task_comment = $wpdb->get_var("SELECT body FROM {$wpdb->prefix}wppm_task_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_task_comment) AND task_id = '$task_id')");
            return $task_comment;
        }
        
        public function create_duplicate_task($ptask_id, $project_id,$ajax_nonce){
            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 = esc_sql($project_id);
            $proj_comment_creator = $wpdb->get_var("SELECT created_by FROM {$wpdb->prefix}wppm_project_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_project_comment) AND proj_id = '$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 = esc_sql($project_id);
            $proj_comment = $wpdb->get_var("SELECT body FROM {$wpdb->prefix}wppm_project_comment WHERE (id=(select MAX(id) from {$wpdb->prefix}wppm_project_comment) AND proj_id = '$project_id')");
            return $proj_comment;
        }

        public function wppm_user_role(){
            $user_role = array(
                'wppm_admin' => array(
                    'label' => __('WPPM Administrator','taskbuilder'),
                ),
                'wppm_manager' => array(
                    'label' => __('WPPM Manager','taskbuilder'),
                )
			);
            return $user_role;
        }
    }


endif;
$GLOBALS['wppmfunction'] =  new WPPM_Functions();
```
