← All changes
|
includes/admin/tasks/open_task/wppm_open_task.php
+1538
-1119
5.0.9
→
6.0.6
View file →
| @@ -1,1119 +1,1538 @@ | ||
| 1 | -<?php | |
| 2 | -if ( ! defined( 'ABSPATH' ) ) { | |
| 3 | - exit; // Exit if accessed directly | |
| 4 | -} | |
| 5 | - | |
| 6 | -global $current_user,$wpdb,$wppmfunction; | |
| 7 | -$id = isset($_POST) && isset($_POST['id']) ? intval(sanitize_text_field(wp_unslash($_POST['id']))) : "0"; | |
| 8 | -$page = isset($_POST) && isset($_POST['page']) ? sanitize_text_field(wp_unslash($_POST['page'])) : ''; | |
| 9 | -$task_list_view = get_option('wppm_default_task_list_view'); | |
| 10 | -$project_id = isset($_POST) && isset($_POST['project_id']) ? intval(sanitize_text_field($_POST['project_id'])) : "0"; | |
| 11 | -$wppm_default_task_date = get_option('wppm_default_task_date'); | |
| 12 | -$wppm_task_time = get_option('wppm_task_time'); | |
| 13 | -$appearance_settings = get_option("wppm-ap-individual-task"); | |
| 14 | -$wppm_tinymce_visibility_open_task = get_option('wppm_tinymce_visibility_open_task'); | |
| 15 | -$settings = get_option("wppm-ap-modal"); | |
| 16 | -$wppm_rich_text_editor = get_option('wppm_rich_text_editor'); | |
| 17 | -$wppm_toolbar_actions = get_option('wppm_toolbar_actions'); | |
| 18 | -$wppm_date_setting = get_option('wppm_date_setting'); | |
| 19 | -$wppm_task_hide_comment_section = get_option('wppm_task_hide_comment_section'); | |
| 20 | -$wppm_deafault_time_duration_task = get_option('wppm_display_time_duration_task'); | |
| 21 | -$url_auth = false; | |
| 22 | -$auth_id = $wppmfunction->wppm_get_auth_code($id); | |
| 23 | -$auth_id = sanitize_text_field($auth_id); | |
| 24 | -// url authentication. | |
| 25 | -$auth_code = isset( $_POST['auth-code'] ) ? sanitize_text_field( wp_unslash($_POST['auth-code'] ) ) : ''; // phpcs:ignore | |
| 26 | -if ( ! $auth_code ) { | |
| 27 | - $auth_code = isset( $_POST['auth_code'] ) ? sanitize_text_field( wp_unslash($_POST['auth_code'] ) ) : ''; // phpcs:ignore | |
| 28 | -} | |
| 29 | - | |
| 30 | -if ( $auth_code && $auth_id == $auth_code ) { | |
| 31 | - $url_auth = true; | |
| 32 | -} | |
| 33 | -if (!(($current_user->ID && $current_user->has_cap('manage_options')) || ($wppmfunction->has_permission('view_task',$id)) || ($url_auth==true))) { ?> | |
| 34 | - <div style="align-item:center;" ><h6><?php esc_attr_e( 'Unauthorized access!', 'taskbuilder' ); ?></h6></div> | |
| 35 | - <?php | |
| 36 | - wp_die(); | |
| 37 | -} | |
| 38 | -$proj_id = isset($_POST) && isset($_POST['proj_id']) ? intval(sanitize_text_field(wp_unslash($_POST['proj_id']))) : 0; | |
| 39 | -$current_date = wp_date('Y-m-d'); | |
| 40 | -$wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true ); | |
| 41 | -$cu_id = absint($current_user->ID); | |
| 42 | -if(!empty($id)){ | |
| 43 | - $task = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task where id=%d",$id)); | |
| 44 | - $project_data = $wppmfunction->get_project($task->project); | |
| 45 | - $task_comment = $wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_comment where task_id=%d ORDER BY create_time DESC",$id)); | |
| 46 | - $orderby_proj_sql = (sanitize_sql_orderby( "create_time DESC" )); | |
| 47 | - $task_comment = $wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_comment where task_id=%d ORDER BY ". $orderby_proj_sql,$id)); | |
| 48 | - $task_proj = isset($task->project) ? absint($task->project) :""; | |
| 49 | - $task_id = isset($task->id) ? absint($task->id):""; | |
| 50 | -} | |
| 51 | -$user_role = $wpdb->get_var( $wpdb->prepare("SELECT role_id FROM {$wpdb->prefix}wppm_project_users where proj_id = %d AND user_id = %d",$task_proj,$cu_id)); | |
| 52 | -if(!empty($task_proj)){ | |
| 53 | - $project_name = $wpdb->get_var( $wpdb->prepare("SELECT project_name FROM {$wpdb->prefix}wppm_project where id= %d",$task_proj)); | |
| 54 | -} | |
| 55 | -$wppm_checklist=$wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist where task_id=%d",$task_id)); | |
| 56 | -if(!empty($task->status)){ | |
| 57 | - $task_status_var = absint($task->status); | |
| 58 | - $task_status = $wpdb->get_row( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_statuses where id=%d",$task_status_var)); | |
| 59 | -} | |
| 60 | -if(!empty($task->priority)){ | |
| 61 | - $task_priority_var = absint($task->priority); | |
| 62 | - $task_priority = $wpdb->get_row( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_priorities where id=%d",$task_priority_var)); | |
| 63 | -} | |
| 64 | -if(!empty($task->users)){ | |
| 65 | - $users = explode(",",$task->users); | |
| 66 | -} | |
| 67 | - | |
| 68 | -if(!empty($task->description)){ | |
| 69 | - $task_description = !empty($task->description) ? wp_kses_post(wpautop($task->description)) : ''; | |
| 70 | -} | |
| 71 | - | |
| 72 | -if($wppm_task_time == 1){ | |
| 73 | - $tsDate = new DateTime($task->start_date); | |
| 74 | - $teDate = new DateTime($task->end_date); | |
| 75 | - if($task->start_date=='0000-00-00 00:00:00'){ | |
| 76 | - if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 77 | - $task_start_date = '0000-00-00 00:00:00'; | |
| 78 | - }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 79 | - $task_start_date = '00-00-0000 00:00:00'; | |
| 80 | - }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 81 | - $task_start_date = '00-00-0000 00:00:00'; | |
| 82 | - }else{ | |
| 83 | - $task_start_date = '0000-00-00 00:00:00'; | |
| 84 | - } | |
| 85 | - }if($task->end_date=='0000-00-00 00:00:00'){ | |
| 86 | - if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 87 | - $task_end_date = '0000-00-00 00:00:00'; | |
| 88 | - }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 89 | - $task_end_date = '00-00-0000 00:00:00'; | |
| 90 | - }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 91 | - $task_end_date = '00-00-0000 00:00:00'; | |
| 92 | - }else{ | |
| 93 | - $task_end_date = '0000-00-00 00:00:00'; | |
| 94 | - } | |
| 95 | - }if($task->start_date!='0000-00-00 00:00:00'){ | |
| 96 | - if(!empty($wppm_date_setting)){ | |
| 97 | - $task_start_date = $tsDate->format($wppm_date_setting); | |
| 98 | - }else{ | |
| 99 | - $task_start_date = isset($task->start_date)? $task->start_date:""; | |
| 100 | - } | |
| 101 | - } | |
| 102 | - if($task->end_date!='0000-00-00 00:00:00'){ | |
| 103 | - if(!empty($wppm_date_setting)){ | |
| 104 | - $task_end_date = $teDate->format($wppm_date_setting); | |
| 105 | - }else{ | |
| 106 | - $task_end_date = isset($task->end_date) ? $task->end_date: "" ; | |
| 107 | - } | |
| 108 | - } | |
| 109 | -} elseif($wppm_task_time == 0){ | |
| 110 | - $tsDate = isset($task->start_date) ? new DateTime($task->start_date): ""; | |
| 111 | - $teDate = isset($task->end_date) ? new DateTime($task->end_date):""; | |
| 112 | - $task_start_date = !empty($tsDate) ? $tsDate->format( $wppm_date_setting):""; | |
| 113 | - $task_end_date = !empty($teDate) ? $teDate->format( $wppm_date_setting):""; | |
| 114 | - if($task->start_date=='0000-00-00 00:00:00'){ | |
| 115 | - if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 116 | - $task_start_date = '0000-00-00'; | |
| 117 | - }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 118 | - $task_start_date = '00-00-0000'; | |
| 119 | - }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 120 | - $task_start_date = '00-00-0000'; | |
| 121 | - }else{ | |
| 122 | - $task_start_date = '0000-00-00'; | |
| 123 | - } | |
| 124 | - } | |
| 125 | - if($task->end_date=='0000-00-00 00:00:00'){ | |
| 126 | - if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 127 | - $task_end_date = '0000-00-00'; | |
| 128 | - }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 129 | - $task_end_date = '00-00-0000'; | |
| 130 | - }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 131 | - $task_end_date = '00-00-0000'; | |
| 132 | - } | |
| 133 | - else{ | |
| 134 | - $task_end_date = '0000-00-00'; | |
| 135 | - } | |
| 136 | - }if($task->start_date!='0000-00-00 00:00:00'){ | |
| 137 | - if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 138 | - $task_start_date = $tsDate->format('Y-m-d'); | |
| 139 | - }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 140 | - $task_start_date = $tsDate->format('d-m-Y'); | |
| 141 | - }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 142 | - $task_start_date = $tsDate->format('m-d-Y'); | |
| 143 | - }else{ | |
| 144 | - $task_start_date = $tsDate->format('Y-m-d'); | |
| 145 | - } | |
| 146 | - }if($task->end_date!='0000-00-00 00:00:00'){ | |
| 147 | - if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 148 | - $task_end_date = $teDate->format('Y-m-d'); | |
| 149 | - }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 150 | - $task_end_date = $teDate->format('d-m-Y'); | |
| 151 | - }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 152 | - $task_end_date = $teDate->format('m-d-Y'); | |
| 153 | - }else{ | |
| 154 | - $task_end_date = $teDate->format('Y-m-d'); | |
| 155 | - } | |
| 156 | - } | |
| 157 | -} | |
| 158 | -$flag = false; | |
| 159 | -$wppm_task_fillter = $wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task where id=%d",$id)); | |
| 160 | -if(!empty($wppm_task_fillter)){ | |
| 161 | - foreach($wppm_task_fillter as $key_filter=>$val_filter){ | |
| 162 | - $val_array = (array) $val_filter; | |
| 163 | - $tusers = $val_array['users']; | |
| 164 | - $tusers_arr = explode(',',$tusers); | |
| 165 | - $tproject_id = $val_array['project']; | |
| 166 | - $tproject_id = absint($tproject_id); | |
| 167 | - if(!empty($tusers) && in_array($current_user->ID,$tusers_arr)){ | |
| 168 | - $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",$tproject_id,$cu_id)); | |
| 169 | - $project_users = $wpdb->get_var( $wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d",$tproject_id)); | |
| 170 | - $project_users_arr = explode(',',(string)$project_users); | |
| 171 | - if((!empty($project_user_role)) && ($project_user_role == 1) && in_array($current_user->ID,$project_users_arr)){ | |
| 172 | - $flag= true; | |
| 173 | - break; | |
| 174 | - } | |
| 175 | - } | |
| 176 | - } | |
| 177 | -} | |
| 178 | -$project_creator = $wpdb->get_var( $wpdb->prepare("SELECT created_by FROM {$wpdb->prefix}wppm_project WHERE created_by = %d",$cu_id)); | |
| 179 | -?> | |
| 180 | -<form id="wppm_open_task" method="post"> | |
| 181 | - <div id="wppm_alert_success" class="alert alert-success wppm_alert" style="display:none;" role="alert"> | |
| 182 | - <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/success.svg'); ?>" alt="success"> <span class="wppm_alert_text"></span> | |
| 183 | - </div> | |
| 184 | - <div id="wppm_alert_error" class="alert alert-danger wppm_alert" style="display:none;" role="alert"> | |
| 185 | - <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/warning-triangle.svg'); ?>" alt="warning-triangle"> <span class="wppm_alert_text"></span> | |
| 186 | - </div> | |
| 187 | - <div class="wppm_headers row"> | |
| 188 | - <div class="col-sm-8"> | |
| 189 | - <span class="wppm-heading-inline"> | |
| 190 | - <?php echo esc_html_e('Task','taskbuilder');?> | |
| 191 | - </span><?php | |
| 192 | - if(($current_user->has_cap('manage_options') || $wppmfunction->has_permission('add_new_task',$task_id) || ($flag==true) || $project_creator!="") && $task->is_archived!=1){ | |
| 193 | - $style = "display:inline;"; | |
| 194 | - }else{ | |
| 195 | - $style = "display:none;"; | |
| 196 | - } | |
| 197 | - $style = apply_filters('wppm_add_new_task_btn_style_open_task_form',$style); | |
| 198 | - if(($wppm_task_fillter && (!empty($project_user_role)) && ($project_user_role == 1) && in_array($current_user->ID,$project_users_arr)) || $wppm_current_user_capability == 'wppm_admin'|| $wppm_current_user_capability == 'wppm_manager' || $current_user->has_cap('manage_options') || $project_data['created_by']==$current_user->ID){ | |
| 199 | - $archive_style= "display:inline;"; | |
| 200 | - }else{ | |
| 201 | - $archive_style= "display:none;"; | |
| 202 | - } | |
| 203 | - if($proj_id==0) { | |
| 204 | - ?> <span onclick="wppm_add_new_task(<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)" class="wppm_add_new_task_btn" id="wppm_add_new_task_btn" style="<?php echo esc_attr($style)?>" title="<?php esc_attr_e( 'Create Task', 'taskbuilder' ); ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/plus.svg'); ?>" alt="add"></span> | |
| 205 | - <?php } | |
| 206 | - else{ ?> | |
| 207 | - <span class="wppm_add_new_task_btn" id="wppm_add_new_task_btn" title="<?php esc_attr_e( '"Create Task', 'taskbuilder' ); ?>" onclick="wppm_create_project_task(<?php echo esc_attr($proj_id) ?>)" style="<?php echo esc_attr($style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/plus.svg'); ?>" alt="add"></span> | |
| 208 | - <?php } ?> | |
| 209 | - <?php if($proj_id==0) { | |
| 210 | - if (($project_id!=0)) { | |
| 211 | - $task_list_function = "wppm_get_project_tasks_kanban_view( {$project_id})"; | |
| 212 | - } | |
| 213 | - if (empty($project_id) && $task_list_view == 1) { | |
| 214 | - $task_list_function = "wppm_get_task_list('', {$project_id})"; | |
| 215 | - } | |
| 216 | - if(empty($task_list_view) && empty($project_id)) { | |
| 217 | - $task_list_function = "wppm_view_task_search_filter('', '', {$project_id})"; | |
| 218 | - } | |
| 219 | - ?> | |
| 220 | - <span class="wppm-task-list-btn" id="wppm_task_list_btn" title="<?php esc_attr_e( 'Task List', 'taskbuilder' ); ?>"onclick="<?php echo esc_attr($task_list_function) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/list.svg'); ?>" alt="list"></span> | |
| 221 | - <?php } | |
| 222 | - else{ | |
| 223 | - ?> | |
| 224 | - <span class="wppm-task-list-btn" id="wppm_task_list_btn" title="<?php esc_attr_e( 'Task List', 'taskbuilder' ); ?>" onclick="wppm_get_project_tasks(<?php echo esc_attr($proj_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/list.svg'); ?>" alt="list"></span> | |
| 225 | - <?php } ?> | |
| 226 | - <?php $style = ((($current_user->ID && $current_user->has_cap('manage_options')) || ($wppmfunction->has_permission('delete_task',$id)) || $wppm_current_user_capability == 'wppm_admin'|| $project_data['created_by']==$current_user->ID ) && $user_role != 3) ? "display:inline":"display:none"; ?> | |
| 227 | - <?php $clone_style = ((($current_user->ID && $current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin') || ($wppmfunction->has_permission('clone_task',$id)) || $project_data['created_by']==$current_user->ID ) && $task->is_archived!=1 && $user_role != 3) ? "display:inline":"display:none"; ?> | |
| 228 | - <?php $ar_css = ($task->is_archived==1) ? "display:none;" : "display:inline"; ?> | |
| 229 | - <span class="wppm-dashboard-btn" id="wppm_dashboard_btn" title="<?php esc_attr_e( 'Dashboard', 'taskbuilder' ); ?>" onclick="wppm_get_project_tasks(<?php echo esc_attr($proj_id) ?>)"> | |
| 230 | - <a href="<?php echo esc_url(admin_url('admin.php?page=wppm-dashboard')); ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/dashboard-icon.svg'); ?>" alt="dashboard"></a> | |
| 231 | - </span> | |
| 232 | - <span class="wppm-delete_task_btn" id="wppm_delete_task_btn" title="Delete Task" onclick="wppm_get_delete_task(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)" style="<?php echo esc_attr($style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/bin.svg'); ?>" alt="delete"></span> | |
| 233 | - <div class="wppm-clone_task_btn" id="wppm_clone_task_btn" title="Clone Task" onclick="wppm_clone_task(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id)?>,<?php echo esc_attr($project_id) ?>)" style="<?php echo esc_attr($clone_style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/duplicate.svg'); ?>" alt="clone"></div> | |
| 234 | - <span class="wppm-print_task_btn" id="wppm_print_task_btn" title="Print Task" onclick="wppm_print_task(<?php echo esc_attr($id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/printer_menu.svg'); ?>" alt="print" style="<?php echo esc_attr($ar_css);?>"></span> | |
| 235 | - <span class="wppm-archieve_task_btn" id="wppm_archieve_task_btn" title="<?php echo ($task->is_archived==1 ) ? 'Restore Task' : 'Archive Task'; ?>" onclick="wppm_archive_task(<?php echo esc_attr($id) ?>,<?php echo esc_attr($task->is_archived) ?>,<?php echo esc_attr($project_id) ?>)" style="<?php echo esc_attr($archive_style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/archive.svg'); ?>" alt="archive"></span> | |
| 236 | - <input type="hidden" name="wppm_archive_task_ajax_nonce" id="wppm_archive_task_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_archive_task_ajax_nonce' ) ); ?>"> | |
| 237 | - <div class="menu" id="wppmprint_menu" onclick="event.stopPropagation();"> | |
| 238 | - <a href="#" id="wppm_openPDF" onclick="wppm_open_pdf(<?php echo esc_attr($id) ?>)">🖨️ <?php echo esc_html_e('Open In Browser','taskbuilder');?></a> | |
| 239 | - <a href="#" id="wppm_downloadPDF" onclick="wppm_download_pdf(<?php echo esc_attr($id) ?>)">💾 <?php echo esc_html_e('Download PDF','taskbuilder');?></a> | |
| 240 | - </div> | |
| 241 | - <?php do_action('wppm_individual_task_button',$id); | |
| 242 | - $time_tracker_active = class_exists('WPPM_TIMER'); | |
| 243 | - if(!$time_tracker_active){ | |
| 244 | - ?> | |
| 245 | - <span class="wppm_timer_log_btn" id="wppm_timer_log_btn" title="Timer Log" onclick="wppm_timer_log_pro()"><img src="<?php echo esc_url( WPPM_PLUGIN_URL.'asset/images/timer.svg'); ?>" alt="timer_log"></span> | |
| 246 | - <?php } ?> | |
| 247 | - </div> | |
| 248 | - </div> | |
| 249 | - <div id="wppm_load_individual_task_container" class="row"> | |
| 250 | - <div class="col-sm-8 wppm_body col-md-9"> | |
| 251 | - <div class="wppm_task_details_container"> | |
| 252 | - <div class="row"> | |
| 253 | - <div class="col-sm-12"> | |
| 254 | - <span class="wppm_task_label"> <?php echo isset($task->task_name) ? esc_html($task->task_name ):"" ?> | |
| 255 | - <?php if (($wppmfunction->has_permission('change_task_details',$id) || $current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin') && $task->is_archived!=1) { ?> | |
| 256 | - <span id="wppm_individual_edit_task_subject" onclick="wppm_edit_task_details(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)" class="btn btn-sm wppm_action_btn" style="background-color:#FFFFFF !important;color:#000000 !important;"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span> | |
| 257 | - <?php } ?> | |
| 258 | - </span> | |
| 259 | - </div> | |
| 260 | - </div> | |
| 261 | - <div class="row"> | |
| 262 | - <div class="col-sm-3"> | |
| 263 | - <span class="wppm_task_details_label"><?php echo esc_html_e('Project:','taskbuilder');?></span> | |
| 264 | - </div> | |
| 265 | - <div class="col-sm-9"> | |
| 266 | - <span class="wppm_task_details"><?php echo (isset($project_name))? esc_html($project_name ):"" ?></span> | |
| 267 | - </div> | |
| 268 | - </div> | |
| 269 | - <div class="row"> | |
| 270 | - <div class="col-sm-3"> | |
| 271 | - <span class="wppm_task_details_label"><?php echo esc_html_e('Created On:','taskbuilder');?></span> | |
| 272 | - </div> | |
| 273 | - <div class="col-sm-9"><?php | |
| 274 | - $tcDate = isset($task->date_created) ? new DateTime($task->date_created): ""; | |
| 275 | - if($wppm_task_time !=0){ | |
| 276 | - if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 277 | - $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d H:i:s'):""; | |
| 278 | - } elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 279 | - $task_create_date = !empty($tcDate) ? $tcDate->format('d-m-Y H:i:s'):""; | |
| 280 | - } elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 281 | - $task_create_date = !empty($tcDate) ? $tcDate->format('m-d-Y H:i:s'):""; | |
| 282 | - } else { | |
| 283 | - $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d H:i:s'):""; | |
| 284 | - } | |
| 285 | - } elseif($wppm_task_time == 0){ | |
| 286 | - if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 287 | - $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d'):""; | |
| 288 | - } elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 289 | - $task_create_date = !empty($tcDate) ? $tcDate->format('d-m-Y'):""; | |
| 290 | - } elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 291 | - $task_create_date = !empty($tcDate) ? $tcDate->format('m-d-Y'):""; | |
| 292 | - } else { | |
| 293 | - $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d'):""; | |
| 294 | - } | |
| 295 | - } ?> | |
| 296 | - <span class="wppm_task_details"><?php echo (isset($task_create_date))? esc_html($task_create_date):"" ?></span> | |
| 297 | - </div> | |
| 298 | - </div> | |
| 299 | - <?php if($wppm_default_task_date == 1 && $wppm_deafault_time_duration_task==0){ ?> | |
| 300 | - <div class="row"> | |
| 301 | - <div class="col-sm-3"> | |
| 302 | - <span class="wppm_task_details_label"><?php echo esc_html_e('Start Date:','taskbuilder');?></span> | |
| 303 | - </div> | |
| 304 | - <div class="col-sm-9"> | |
| 305 | - <span class="wppm_task_details" id="wppm_edit_tstart_date"><?php echo (isset($task_start_date))? esc_html($task_start_date):"" ?></span> | |
| 306 | - </div> | |
| 307 | - <input type="hidden" name="wppm_edit_tstart_date_ajax_nonce" id="wppm_edit_tstart_date_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_set_change_task_start_date' ) ); ?>"> | |
| 308 | - </div> | |
| 309 | - <div class="row"> | |
| 310 | - <div class="col-sm-3"> | |
| 311 | - <span class="wppm_task_details_label"><?php echo esc_html_e('End Date:','taskbuilder');?></span> | |
| 312 | - </div> | |
| 313 | - <div class="col-sm-9"> | |
| 314 | - <?php $style = (!empty($task->end_date) && ($task->status!=4 && $task->end_date < $current_date && $task->end_date != '0000-00-00 00:00:00' && $task->end_date != '00-00-0000 00:00:00' && $task->end_date != '00-00-0000' && $task->end_date != '0000-00-00')) ? "color:#FF0000":"color:#2C3E50"; ?> | |
| 315 | - <span class="wppm_task_details" id="wppm_edit_tend_date" style="<?php echo esc_attr($style); ?>"><?php echo (isset($task_end_date))? esc_html($task_end_date):"" ?></span> | |
| 316 | - </div> | |
| 317 | - <input type="hidden" name="wppm_edit_tend_date_ajax_nonce" id="wppm_edit_tend_date_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_set_change_task_end_date' ) ); ?>"> | |
| 318 | - </div> | |
| 319 | - <?php } | |
| 320 | - if($wppm_deafault_time_duration_task==1){ | |
| 321 | - $wppm_task_duration = $wppmfunction->wppm_get_duration($task->start_date,$task->end_date); | |
| 322 | - $tstatus = isset($task->status) ? $task->status :""; | |
| 323 | - $style = (!empty($task->end_date) && $tstatus!=4 && $task->end_date < $current_date && ($task->end_date != '0000-00-00 00:00:00' && $task->end_date != '00-00-0000 00:00:00' && $task->end_date != '00-00-0000' && $task->end_date != '0000-00-00')) ? "color:#FF1111":"color:#2C3E51"; ?> | |
| 324 | - <div class="row"> | |
| 325 | - <div class="col-sm-3"> | |
| 326 | - <span class="wppm_task_details_label"><?php echo esc_html_e('Task Duration:','taskbuilder');?></span> | |
| 327 | - </div> | |
| 328 | - <div class="col-sm-9"> | |
| 329 | - <span class="wppm_task_details" id="wppm_edit_task_duration" style="<?php echo esc_attr($style); ?>"><?php echo (isset($wppm_task_duration))? esc_html($wppm_task_duration ): "" ?></span> | |
| 330 | - </div> | |
| 331 | - </div> <?php | |
| 332 | - }?> | |
| 333 | - <div class="row"> | |
| 334 | - <div class="col-sm-3"> | |
| 335 | - <span class="wppm_task_details_label"><?php echo esc_html_e('Task Priority:','taskbuilder');?></span> | |
| 336 | - </div> | |
| 337 | - <div class="col-sm-9"> | |
| 338 | - <span class="wppm_task_details_priority"><span class="wppm_admin_label" style="background-color:<?php echo (isset($task_priority->bg_color))? esc_html($task_priority->bg_color):""?>;color:<?php echo (isset($task_priority->color))? esc_html($task_priority->color):""?>;"><?php echo (isset($task_priority->name)) ? esc_html($task_priority->name):"" ?> </span></span> | |
| 339 | - </div> | |
| 340 | - </div> | |
| 341 | - <div class="row"> | |
| 342 | - <div class="col-sm-3"> | |
| 343 | - <span class="wppm_task_details_label"><?php echo esc_html_e('Description:','taskbuilder');?></span> | |
| 344 | - </div> | |
| 345 | - <div class="col-sm-9"> | |
| 346 | - <span class="wppm_task_description"><?php echo (!empty($task_description))? wp_kses_post(wpautop($task_description)):"" ?></span> | |
| 347 | - </div> | |
| 348 | - </div> | |
| 349 | - <?php do_action('wppm_after_task_details_in_open_task',$task->id, $task->project);?> | |
| 350 | - </div> | |
| 351 | - <div class="wppm_task_checklist_container" id="wppm_task_checklist_container"> | |
| 352 | - <div id="wppm_checklist_container"> | |
| 353 | - <?php | |
| 354 | - if(!empty($wppm_checklist)){ | |
| 355 | - foreach( $wppm_checklist as $key=>$list){ | |
| 356 | - ?> | |
| 357 | - <div class="row"> | |
| 358 | - <div class="col-sm-8"> | |
| 359 | - <span class="wppm_checklist_label"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/checklist.svg'); ?>" alt="checklist"><?php echo isset($list->checklist_name) ? esc_html($list->checklist_name):"" ?></span> | |
| 360 | - </div> | |
| 361 | - <?php | |
| 362 | - $check_style = (($list->created_by == $current_user->ID || $current_user->has_cap('manage_options') || $user_role == 1 || $wppmfunction->has_permission('edit_checklist',$task->id)) && $task->is_archived!=1)? "display:inline":"display:none"; ?> | |
| 363 | - <?php $disabled = (($list->created_by == $current_user->ID || $current_user->has_cap('manage_options') || $user_role == 1 || $wppmfunction->has_permission('delete_checklist',$task->id)|| ($wppmfunction->has_permission('add_checklist',0))) && $task->is_archived!=1)? "":"disabled"; ?> | |
| 364 | - <?php if($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')){ ?> | |
| 365 | - <div class="col-sm-4" style="text-align:right;<?php echo esc_attr($check_style) ?>"> | |
| 366 | - <a class="wppm_delete_checklist" onclick="wppm_delete_checklist(<?php echo esc_attr($list->id);?>,<?php echo esc_attr($task->id);?>,<?php echo esc_attr($proj_id);?>)"><?php echo esc_html_e('Delete Checklist','taskbuilder');?></a> | |
| 367 | - <input type="hidden" name="wppm_delete_checklist_ajax_nonce" id="wppm_delete_checklist_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_delete_checklist' ) ); ?>"> | |
| 368 | - </div> | |
| 369 | - <?php }?> | |
| 370 | - </div> | |
| 371 | - <div class="wppm_progress_bar_container row"> | |
| 372 | - <div class="col-sm-4"> | |
| 373 | - <span class="wppm_progressbar_label" id="wppm_progressbar_label_<?php echo esc_attr($list->id)?>">0%</span> | |
| 374 | - </div> | |
| 375 | - <div class="wppm_progress_bar col-sm-8"> | |
| 376 | - <div id="CheckProgress_<?php echo esc_attr($list->id);?>" class="wppm_checkprogress" role="progressbar" style="width: 0%" aria-valuemin="0" aria-valuemax="100"></div> | |
| 377 | - </div> | |
| 378 | - </div> | |
| 379 | - <?php | |
| 380 | - $list_id = absint($list->id); | |
| 381 | - $sql = $wpdb->prepare( | |
| 382 | - "SELECT * | |
| 383 | - FROM {$wpdb->prefix}wppm_checklist_items | |
| 384 | - WHERE checklist_id = %d | |
| 385 | - ORDER BY load_order ASC", | |
| 386 | - $list_id | |
| 387 | - ); | |
| 388 | - // Execute | |
| 389 | - $wppm_checklist_items = $wpdb->get_results($sql); | |
| 390 | - ?> | |
| 391 | - <ul id="wppm_checklist_items_container_<?php echo esc_attr($list->id) ?>" class="wppm_checklist_items_container" style="list-style-type: none; padding-left:0px; margin-top:10px; margin-bottom:10px;"> | |
| 392 | - <?php | |
| 393 | - if(!empty( $wppm_checklist_items)){ | |
| 394 | - foreach($wppm_checklist_items as $key=>$val){ | |
| 395 | - $checked = $val->checked == 1 ? 'checked="checked"' : ''; | |
| 396 | - ?> | |
| 397 | - <li id="wppm_checklist_<?php echo esc_attr($val->id) ?>" data-id="<?php echo esc_attr($val->id); ?>" class="row wppm_checklist_item" style="margin-bottom:10px;font: 15px 'Helvetica Neue',Helvetica,Arial,sans-serif;"> | |
| 398 | - <div class="col-sm-8" id="wppm_checklist_item_container_<?php echo esc_attr($val->id) ?>"> | |
| 399 | - <span class="wppm_chk_items_drag">☰</span> | |
| 400 | - <input id="wppm_checklist_item_<?php echo esc_attr($val->id) ?>" class="wppm_checklist_item_<?php echo esc_attr($val->checklist_id) ?>" onchange="wppm_checklist_progress(<?php echo esc_attr($val->checklist_id) ?>,<?php echo esc_attr($val->id) ?>,<?php echo esc_attr($task->id) ?>)" type="checkbox" name="wppm_checklist" <?php echo esc_attr($checked) ?> value="<?php echo esc_attr($val->id) ?>" <?php echo esc_attr($disabled) ?> style="margin:5px;"><label style="padding-top: 5px;font-weight: normal;font: 13px 'Helvetica Neue',Helvetica,Arial,sans-serif;"><?php echo isset($val->item_name) ? esc_html($val->item_name) : "" ?></label> | |
| 401 | - <input type="hidden" name="wppm_checklist_progress_ajax_nonce" id="wppm_checklist_progress_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_set_checklist_progress' ) ); ?>"> | |
| 402 | - </div> | |
| 403 | - <?php if (($list->created_by == $current_user->ID || $current_user->has_cap('manage_options') || $user_role == 1 || $wppmfunction->has_permission('delete_checklist',$task->id)) && $task->is_archived!=1) { ?> | |
| 404 | - <div class="col-sm-4" id="wppm_checklist_action_<?php echo esc_attr($val->id) ?>" style="text-align:right; display:none;cursor:pointer;"> | |
| 405 | - <span onclick=wppm_edit_checklist_item(<?php echo esc_attr($val->id) ?>,<?php echo esc_attr($val->checklist_id) ?>,<?php echo esc_attr( $proj_id);?>,<?php echo esc_attr($id) ?>)><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit1.svg'); ?>" alt="edit"></span> | |
| 406 | - <input type="hidden" name="wppm_edit_checklist_item_ajax_nonce" id="wppm_edit_checklist_item_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_edit_checklist_item' ) ); ?>"> | |
| 407 | - <span onclick=wppm_delete_checklist_item(<?php echo esc_attr($val->id) ?>,<?php echo esc_attr($val->checklist_id) ?>,<?php echo esc_attr($proj_id);?>,<?php echo esc_attr($id) ?>)><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/trash.svg'); ?>" alt="delete"></span> | |
| 408 | - <input type="hidden" name="wppm_delete_checklist_item_ajax_nonce" id="wppm_delete_checklist_item_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_remove_checklist_item' ) ); ?>"> | |
| 409 | - </div> | |
| 410 | - <?php } ?> | |
| 411 | - </li> | |
| 412 | - <?php | |
| 413 | - } | |
| 414 | - } ?> | |
| 415 | - <?php if(($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')) && $task->is_archived!=1){ ?> | |
| 416 | - <div class="row"> | |
| 417 | - <div class="col-sm-12 wppm_add_checklist_item_container_<?php echo esc_attr($list->id) ?>" style="padding-top:15px;"> | |
| 418 | - <a class="wppm_add_checklist" id="wppm_add_checklist_item_btn_<?php echo esc_attr($list->id) ?>" onclick="wppm_add_checklist_item(<?php echo esc_attr($list->id)?>)"><?php echo esc_html_e('+ Add item','taskbuilder');?></a> | |
| 419 | - </div> | |
| 420 | - </div> | |
| 421 | - <?php }?> | |
| 422 | - <?php if(($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')) && $task->is_archived!=1){ ?> | |
| 423 | - <div class="row"> | |
| 424 | - <div class="col-sm-12" style="display:none;" id="wppm_add_checklist_label_container_<?php echo esc_attr($list->id) ?>"> | |
| 425 | - <div class="row" id="wppm_add_new_checklist_item_<?php echo esc_attr($list->id) ?>"> | |
| 426 | - <div class="col-sm-12"> | |
| 427 | - <input type="text" id="wppm_checklist_item_label_<?php echo esc_attr($list->id) ?>" class="wppm_checklist_item_label_<?php echo esc_attr($list->id) ?>" placeholder="<?php echo esc_attr__('Add an item','taskbuilder') ?>" name="wppm_checklist_item_label" style="font: 13px 'Helvetica Neue',Helvetica,Arial,sans-serif;"> | |
| 428 | - <input type="button" value="Add" class="btn btn-success btn-sm wppm_add_new_item_btn_<?php echo esc_attr($list->id); ?>" onclick="wppm_add_new_checklist_item(<?php echo esc_attr($list->id)?>,<?php echo esc_attr($task->id)?>,<?php echo esc_attr($proj_id) ?>)"> | |
| 429 | - <input type="hidden" name="wppm_checklist_item_ajax_nonce" id="wppm_checklist_item_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_add_new_checklist_item' ) ); ?>"> | |
| 430 | - <span onclick="wppm_remove_add_checklist_container(<?php echo esc_attr($list->id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/cancel.svg'); ?>" alt="delete"></span> | |
| 431 | - </div> | |
| 432 | - </div> | |
| 433 | - </br> | |
| 434 | - </div> | |
| 435 | - </div> | |
| 436 | - <?php }?> | |
| 437 | - <hr class="wppm_checklist_divider"> | |
| 438 | - </ul> | |
| 439 | - <?php | |
| 440 | - } | |
| 441 | - } ?> | |
| 442 | - </div><?php | |
| 443 | - if($user_role != 3){ | |
| 444 | - if(($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')) && $task->is_archived!=1){ ?> | |
| 445 | - <div id="wppm_add_checklist_container"> | |
| 446 | - <div class="row"> | |
| 447 | - <div class="col-sm-12"> | |
| 448 | - <span id="wppm_add_checklist" onclick="wppm_add_checklist()"> <?php echo esc_html_e('+Add a checklist','taskbuilder')?> </span> | |
| 449 | - </div> | |
| 450 | - </div> | |
| 451 | - <div class="row" id="wppm_add_new_checklist" style="display:none;"> | |
| 452 | - <div class="col-sm-12"> | |
| 453 | - <input type="text" class="wppm_checklist_label" placeholder="<?php echo esc_attr__('Please insert checklist title','taskbuilder');?>" id="wppm_checklist_label" name="wppm_checklist_label"> | |
| 454 | - <input type="button" value="Add" id="wppm_checklist_btn" class="btn btn-success btn-sm" onclick="wppm_add_new_checklist(<?php echo esc_attr($id)?>,<?php echo esc_attr($proj_id) ?>)"> | |
| 455 | - <input type="hidden" name="wppm_checklist_ajax_nonce" id="wppm_checklist_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_add_new_checklist' ) ); ?>"> | |
| 456 | - <span onclick="wppm_remove_add_checklist()"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/cross1.svg'); ?>"></span> | |
| 457 | - </div> | |
| 458 | - </div> | |
| 459 | - </br> | |
| 460 | - </div><?php | |
| 461 | - } | |
| 462 | - }?> | |
| 463 | - </div> | |
| 464 | - <div id="wppm_activity_container" style="<?php echo ($wppm_task_hide_comment_section==0 || $user_role==3) ? 'display:none;' : 'display:block;' ?>"> | |
| 465 | - <div class="row"> | |
| 466 | - <div class="col-sm-12" style="margin-top:5px;"> | |
| 467 | - <span class="wppm_task_discussion"><?php echo esc_html_e('Comment','taskbuilder')?></span><br> | |
| 468 | - </div> | |
| 469 | - </div> | |
| 470 | - <div class="row"> | |
| 471 | - <div class="col-sm-12" style="<?php echo ($task->is_archived==1) ? 'display:none;' : 'display:block;' ?>"> | |
| 472 | - <textarea id="wppm_task_comment" placeholder="<?php echo esc_attr__('Write a comment...','taskbuilder');?>" onclick="wppm_add_task_comment()" name="wppm_task_comment"></textarea> | |
| 473 | - </div> | |
| 474 | - </div> | |
| 475 | - <div class="row" id="wppm_comment_btn" style="<?php echo ($task->is_archived==1) ? 'display:none;' : 'display:block;' ?>"> | |
| 476 | - <div class="col-sm-6"> | |
| 477 | - <span id="wppm_attach_file" onclick="wppm_upload_file()"><?php echo esc_html_e('Attach Files','taskbuilder')?></span> | |
| 478 | - </div> | |
| 479 | - <div class="col-sm-6"> | |
| 480 | - <button type="button" id="wppm_individual_cancel_comment_btn" onclick="wppm_cancel_comment();" class="wppm-btn-cancel"> | |
| 481 | - <?php echo esc_html_e('Cancel','taskbuilder')?> | |
| 482 | - </button> | |
| 483 | - <button type="button" id="wppm_individual_submit_task_comment_btn" style="background-color:<?php echo esc_attr($appearance_settings['comment-send-btn-bg-color'])?>;color:<?php echo esc_attr($appearance_settings['comment-send-btn-color'])?>!important;" onclick="wppm_submit_task_comment(<?php echo esc_attr($id); ?>,<?php echo esc_attr($proj_id); ?>);" class="wppm-btn"> | |
| 484 | - <?php echo esc_html_e('SEND','taskbuilder')?> | |
| 485 | - </button> | |
| 486 | - <input type="hidden" name="_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_submit_task_comment' ) ); ?>"> | |
| 487 | - </div> | |
| 488 | - </div> | |
| 489 | - <div class="row" style="<?php echo ($task->is_archived==1) ? 'display:none;' : 'display:block;' ?>"> | |
| 490 | - <div class="wppm_attachment_container col-sm-12" style="display:none;"> | |
| 491 | - </div> | |
| 492 | - </div> | |
| 493 | - </div> | |
| 494 | - <div class="wppm_thread_container" style="<?php echo ($wppm_task_hide_comment_section==0 || $user_role==3) ? 'display:none;' : 'display:block;' ?>"> | |
| 495 | - <?php | |
| 496 | - if(!empty($task_comment)){ | |
| 497 | - foreach($task_comment as $comment){ | |
| 498 | - $task_comment_meta = $wpdb->get_row( $wpdb->prepare( | |
| 499 | - "SELECT * | |
| 500 | - FROM {$wpdb->prefix}wppm_task_comment_meta | |
| 501 | - WHERE task_id = %d | |
| 502 | - AND comment_id = %d", | |
| 503 | - absint($id), | |
| 504 | - absint($comment->id) | |
| 505 | - ) | |
| 506 | - ); | |
| 507 | - $user = get_userdata( $comment->created_by ); | |
| 508 | - $comment_body = (!empty($comment->body) ? wp_kses_post(wpautop($comment->body)) : ''); | |
| 509 | - $date = wp_date("Y-m-d H:i:s" ,strtotime($comment->create_time)); | |
| 510 | - $thread_date = wp_date("d F Y, h:i:s A" ,strtotime($date)); | |
| 511 | - $attachment_ids = isset($comment->attachment_ids)? $comment->attachment_ids : ''; | |
| 512 | - if($attachment_ids!=""){ | |
| 513 | - $attachments = explode(",",$attachment_ids); | |
| 514 | - } else { | |
| 515 | - $attachments = array(); | |
| 516 | - } | |
| 517 | - ?> | |
| 518 | - <div class="wppm_thread"> | |
| 519 | - <div class="wppm_thread_avatar"> | |
| 520 | - <?php echo (get_avatar($comment->created_by, 40));?> | |
| 521 | - </div> | |
| 522 | - <div class="wppm_thread_body"> | |
| 523 | - <div class="wppm_thread_user_name"> | |
| 524 | - <strong style="color:<?php echo esc_attr($appearance_settings['comment-primary-color']);?>"><?php echo isset($user->display_name) ? esc_html($user->display_name) : '' ?></strong> | |
| 525 | - <span><?php if(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_status')){ | |
| 526 | - $comment_log_body = unserialize($comment->body); | |
| 527 | - $prev_status = $comment_log_body['prev_status']; | |
| 528 | - $new_status = $comment_log_body['new_status']; | |
| 529 | - if(isset($prev_status)){ | |
| 530 | - $task_prev_status = $wpdb->get_row( $wpdb->prepare( | |
| 531 | - "SELECT * FROM {$wpdb->prefix}wppm_task_statuses where id = %d", | |
| 532 | - absint($prev_status) | |
| 533 | - )); | |
| 534 | - } | |
| 535 | - if(isset($new_status)){ | |
| 536 | - $task_new_status = $wpdb->get_row( $wpdb->prepare( | |
| 537 | - "SELECT * FROM {$wpdb->prefix}wppm_task_statuses where id = %d", | |
| 538 | - absint($new_status) | |
| 539 | - )); | |
| 540 | - } | |
| 541 | - printf( | |
| 542 | - esc_html__( 'Changed status from %1$s to %2$s', 'taskbuilder' ), | |
| 543 | - esc_html( $task_prev_status->name ), | |
| 544 | - esc_html( $task_new_status->name ) | |
| 545 | - ); | |
| 546 | - } if(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_creator')){ | |
| 547 | - $comment_log_body = unserialize($comment->body); | |
| 548 | - $prev_user = $comment_log_body['prev_user']; | |
| 549 | - $new_user = $comment_log_body['new_user']; | |
| 550 | - $prev_user_data = get_userdata($prev_user); | |
| 551 | - $new_user_data = get_userdata($new_user); | |
| 552 | - printf( | |
| 553 | - esc_html__( 'Changed creator from %1$s to %2$s', 'taskbuilder' ), | |
| 554 | - esc_html( $prev_user_data->display_name ), | |
| 555 | - esc_html( $new_user_data->display_name ) | |
| 556 | - ); | |
| 557 | - } | |
| 558 | - if( !empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_assign_user')){ | |
| 559 | - esc_html_e("changed the Assignee","taskbuilder"); | |
| 560 | - } | |
| 561 | - if(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_priority')){ | |
| 562 | - $comment_log_body = unserialize($comment->body); | |
| 563 | - $prev_prio = $comment_log_body['prev_prio']; | |
| 564 | - $new_prio = $comment_log_body['new_prio']; | |
| 565 | - if(isset($prev_prio)){ | |
| 566 | - $prev_prio = absint($prev_prio); | |
| 567 | - $task_prev_prio = $wpdb->get_row( $wpdb->prepare( | |
| 568 | - "SELECT * FROM {$wpdb->prefix}wppm_task_priorities where id = %d", | |
| 569 | - $prev_prio | |
| 570 | - )); | |
| 571 | - } | |
| 572 | - if(isset($new_prio)){ | |
| 573 | - $new_prio = absint($new_prio); | |
| 574 | - $task_new_prio = $wpdb->get_row( $wpdb->prepare( | |
| 575 | - "SELECT * FROM {$wpdb->prefix}wppm_task_priorities where id = %d", | |
| 576 | - $new_prio | |
| 577 | - )); | |
| 578 | - } | |
| 579 | - $task_prev_prio_name = !empty($task_prev_prio) ? $task_prev_prio->name: "None"; | |
| 580 | - $task_new_prio_name = !empty($task_new_prio) ? $task_new_prio->name: "None"; | |
| 581 | - printf( | |
| 582 | - esc_html__( 'Changed priority from %1$s to %2$s', 'taskbuilder' ), | |
| 583 | - esc_html( $task_prev_prio_name ), | |
| 584 | - esc_html( $task_new_prio_name ) | |
| 585 | - ); | |
| 586 | - } | |
| 587 | - ?> | |
| 588 | - <small class="wppm_comment_date" style="color:<?php echo esc_attr($appearance_settings['comment-date-color']);?>"><i><?php echo isset($thread_date) ? esc_html($thread_date) : '' ?></i></small> | |
| 589 | - <div class="wppm_thread_action"> | |
| 590 | - <?php if((((($current_user->has_cap('manage_options')) || ($wppmfunction->has_comment_permission('edit_task_comment',$id,$comment->id))) && ((empty($task_comment_meta->comment_type)) || (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='comment')))) && ($task->is_archived!=1)){ ?> | |
| 591 | - <span title="Edit this thread" onclick="wppm_edit_thread(<?php echo esc_attr($comment->id)?>,<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit1.svg'); ?>" alt="edit"></span> | |
| 592 | - <span title="Delete this thread" onclick="wppm_delete_thread(<?php echo esc_attr($comment->id) ?>,<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/trash.svg'); ?>" alt="delete"></span> | |
| 593 | - <?php } ?> | |
| 594 | - </div> | |
| 595 | - </div> | |
| 596 | - <div class="wppm_thread_messege" style="color:<?php echo esc_attr($appearance_settings['comment-secondary-color']);?>"> | |
| 597 | - <?php | |
| 598 | - $allowedtags = array( 'br' => array(), 'abbr' => array('title' => array(),), 'p' => array(), 'strong' => array(), 'a' => array('href' => array(), 'title' => array(), 'target'=> array(), 'rel'=>array()),'em' =>array(),'span' =>array(), 'blockquote'=>array('cite' => array(),),'div' => array('class' => array(),'title' => array(),'style' => array(),),'ul'=>array(),'li'=>array(),'ol'=>array(),'img' => array( 'alt'=> array(),'class' => array(),'height' => array(),'src'=> array(),'width'=> array(),)); | |
| 599 | - if(!empty($comment_body) && ((empty($task_comment_meta->comment_type)) || (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='comment') || (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='delete_task_comment'))){ | |
| 600 | - echo wp_kses(wpautop($comment_body),$allowedtags); | |
| 601 | - } elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_status')){ ?> | |
| 602 | - <span class="wppm_admin_label" style="margin-right: 10px; background-color:<?php echo isset($task_prev_status->bg_color) ? esc_attr($task_prev_status->bg_color):""; ?>;color:<?php echo isset($task_prev_status->color) ? esc_attr($task_prev_status->color): "" ?>;"><?php echo isset($task_prev_status->name) ? esc_attr($task_prev_status->name) : "" ?></span> <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/arrow-right.svg'); ?>" alt="arrow_right"> <span class="wppm_admin_label" style="margin-left:10px; background-color:<?php echo isset($task_new_status->bg_color) ? esc_attr($task_new_status->bg_color):""; ?>;color:<?php echo isset($task_new_status->color) ? esc_attr($task_new_status->color): "" ?>;"><?php echo isset($task_new_status->name) ? esc_attr($task_new_status->name) : "" ?></span><?php | |
| 603 | - }elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_creator')){ ?> | |
| 604 | - <span style="margin-right: 10px;"><?php echo isset($prev_user_data->display_name) ? esc_attr($prev_user_data->display_name) : "" ?></span> <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/arrow-right.svg'); ?>" alt="arrow_right"> <span style="margin-left:10px;"><?php echo isset($new_user_data->display_name) ? esc_attr($new_user_data->display_name) : "" ?></span><?php | |
| 605 | - } elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_assign_user')) { | |
| 606 | - $comment_log_body = unserialize($comment->body); | |
| 607 | - $prev_assign_user = $comment_log_body['prev_assign_user']; | |
| 608 | - $new_assign_user = $comment_log_body['new_assign_user']; | |
| 609 | - $prev_assign_user_array = array(); | |
| 610 | - $new_assign_user_array = array(); | |
| 611 | - if(!empty($prev_assign_user)){ | |
| 612 | - $prev_assign_user_array = explode(",",$prev_assign_user); | |
| 613 | - } | |
| 614 | - if(!empty($new_assign_user)){ | |
| 615 | - $new_assign_user_array = explode(",",$new_assign_user); | |
| 616 | - } | |
| 617 | - $assign_user_name = array(); | |
| 618 | - $assign_user_name_str = ""; | |
| 619 | - if(!empty($prev_assign_user_array)){ | |
| 620 | - foreach($prev_assign_user_array as $val){ | |
| 621 | - $assign_user = get_userdata($val); | |
| 622 | - $assign_user_name[] = $assign_user->display_name; | |
| 623 | - } | |
| 624 | - $assign_user_name_str = implode(",",$assign_user_name); | |
| 625 | - } | |
| 626 | - $new_assign_user_name = array(); | |
| 627 | - $new_assign_user_name_str = ""; | |
| 628 | - if(!empty($new_assign_user_array)){ | |
| 629 | - foreach($new_assign_user_array as $val){ | |
| 630 | - $new_assign_user = get_userdata($val); | |
| 631 | - $new_assign_user_name[] = $new_assign_user->display_name; | |
| 632 | - } | |
| 633 | - $new_assign_user_name_str = implode(",",$new_assign_user_name); | |
| 634 | - } | |
| 635 | - ?> | |
| 636 | - <span style="margin-right: 10px;"><?php echo !empty($assign_user_name) ? esc_attr( $assign_user_name_str) : "None" ?></span> <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/arrow-right.svg'); ?>" alt="arrow_right"> <span style="margin-left:10px;"><?php echo !empty($new_assign_user_name_str) ? esc_attr($new_assign_user_name_str) : "None" ?></span><?php | |
| 637 | - } elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_priority')){ ?> | |
| 638 | - <span class="wppm_admin_label" style="margin-right: 10px; background-color:<?php echo isset($task_prev_prio->bg_color) ? esc_attr($task_prev_prio->bg_color):""; ?>;color:<?php echo isset($task_prev_prio->color) ? esc_attr($task_prev_prio->color): "" ?>;"><?php echo !empty($task_prev_prio->name) ? esc_attr($task_prev_prio->name) : "None" ?></span> <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/arrow-right.svg'); ?>" alt="arrow_right"> <span class="wppm_admin_label" style="margin-left:10px; background-color:<?php echo isset($task_new_prio->bg_color) ? esc_attr($task_new_prio->bg_color):""; ?>;color:<?php echo isset($task_new_prio->color) ? esc_attr($task_new_prio->color): "" ?>;"><?php echo !empty($task_new_prio->name) ? esc_attr($task_new_prio->name) : "None" ?></span><?php | |
| 639 | - } ?> | |
| 640 | - | |
| 641 | - </div> | |
| 642 | - <?php | |
| 643 | - if(!empty($attachments)&& (isset($task_comment_meta->comment_type) && !($task_comment_meta->comment_type=='delete_task_comment'))):?> <br> | |
| 644 | - <strong class="wppm_attachment_title"><?php echo esc_html_e('Attachments','taskbuilder');?>:</strong><br> | |
| 645 | - <table class="wppm_attachment_tbl"> | |
| 646 | - <tbody> | |
| 647 | - <?php | |
| 648 | - if(!empty($attachments)){ | |
| 649 | - foreach( $attachments as $attachment ): | |
| 650 | - $download_url = site_url('/').'?wppm_attachment='.$attachment.'&tid='.$id.'&tac='.$auth_id; | |
| 651 | - $attachment = absint($attachment); | |
| 652 | - $attach = $wpdb->get_row( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_attachments where id=%d",$attachment)); | |
| 653 | - $findStr = ".txt"; | |
| 654 | - if(!empty( $attach)){ | |
| 655 | - $attachment_name = preg_replace('/' . $findStr . '/', "", $attach->name, 1); | |
| 656 | - $attachment_name = sanitize_file_name($attachment_name); | |
| 657 | - } | |
| 658 | - if((!empty($attachment_name))){ | |
| 659 | - ?> | |
| 660 | - <tr class="wppm_attachment_tr"> | |
| 661 | - <td> | |
| 662 | - <a class="wppm_attachment_link" href="<?php echo esc_url($download_url) ?>" target="_blank"> | |
| 663 | - <span class="wppm_attachment_file_name" style="padding: 7px;"><?php echo isset($attach->file_name) ? esc_html($attach->file_name):"";?></span></a> | |
| 664 | - <?php if((($comment->created_by == $current_user->ID) || ($current_user->has_cap('manage_options')) || ($wppmfunction->has_comment_permission('edit_task_comment',$id,$comment->id))) && ($task->is_archived!=1)){ ?> | |
| 665 | - <span class="wppm_thread_action_btn" onclick="wppm_thread_attachment_remove(this,<?php echo !empty($attach->id) ? esc_attr($attach->id) : 0; ?>,<?php echo !empty($comment->id) ? esc_attr($comment->id) : 0; ?>,<?php echo !empty($id) ? esc_attr($id) : 0; ?>,<?php echo !empty($proj_id) ? esc_attr($proj_id) : 0;?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/cancel.svg'); ?>" alt="cancel"></span> | |
| 666 | - <?php } ?> | |
| 667 | - </td> | |
| 668 | - </tr> | |
| 669 | - <input type="hidden" name="wppm_ajax_nonce" id="wppm_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_remove_thread_attachment' ) ); ?>"> | |
| 670 | - <?php } | |
| 671 | - endforeach; | |
| 672 | - } ?> | |
| 673 | - </tbody> | |
| 674 | - </table> | |
| 675 | - <?php do_action('wppm_after_comment_attachment',$id,$comment->id);?> | |
| 676 | - <?php endif;?> | |
| 677 | - </div> | |
| 678 | - </div> | |
| 679 | - <?php } | |
| 680 | - } ?> | |
| 681 | - </div> | |
| 682 | - </div> | |
| 683 | - <div class="wppm_individual_task_widget col-sm-4 wppm_sidebar col-md-3"> | |
| 684 | - <div class="row wppm_widget" id="wppm_status_widget"> | |
| 685 | - <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>"> | |
| 686 | - <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"><?php echo esc_html_e('Status','taskbuilder')?></h4> | |
| 687 | - <?php | |
| 688 | - if($user_role != 3){ | |
| 689 | - if((($current_user->has_cap('manage_options') || $wppm_current_user_capability == ('wppm_admin') || ($flag==true) || ($wppmfunction->has_permission('change_task_status',$id))!="") && ($task->is_archived!=1))){ | |
| 690 | - ?> | |
| 691 | - <span class="wppm_edit_task_details_widget" onclick="wppm_edit_task_status(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span> | |
| 692 | - <?php | |
| 693 | - } | |
| 694 | - } | |
| 695 | - ?> | |
| 696 | - </div> | |
| 697 | - <hr class="widget_divider"> | |
| 698 | - <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>"> | |
| 699 | - <div class="wppm_sidebar_labels"><span class="wppm_label_info" style="color:<?php echo esc_attr($appearance_settings['widget-body-label-color'])?>"><?php echo esc_html_e('Status','taskbuilder')?>:</span> <span class="wppm_admin_label" style="background-color:<?php echo (isset($task_status->bg_color))? esc_attr($task_status->bg_color):""?>;color:<?php echo (isset($task_status->color))? esc_attr($task_status->color):""?>;"><?php echo (isset($task_status->name))? esc_attr($task_status->name):"" ?> </span></div> | |
| 700 | - </div> | |
| 701 | - </div> | |
| 702 | - <div class="row wppm_widget" id="wppm_raisedby_widget"> | |
| 703 | - <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>"> | |
| 704 | - <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"> | |
| 705 | - <?php echo esc_html_e('Task Creator','taskbuilder')?></h4> | |
| 706 | - <?php if($user_role != 3){ | |
| 707 | - if ((($wppmfunction->has_permission('change_raised_by',$id ) || $current_user->has_cap('manage_options')) && ($task->is_archived!=1))) { ?> | |
| 708 | - <span class="wppm_edit_task_details_widget" onclick="wppm_edit_task_creator(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span> | |
| 709 | - <?php } | |
| 710 | - }?> | |
| 711 | - </div> | |
| 712 | - <hr class="widget_divider"> <?php | |
| 713 | - if(isset($task->created_by)){ | |
| 714 | - $user_info = get_userdata($task->created_by); | |
| 715 | - }else{ | |
| 716 | - $user_info =""; | |
| 717 | - } | |
| 718 | - ?> | |
| 719 | - <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>"> | |
| 720 | - <div style="padding:2px 0;"> | |
| 721 | - <span class="wppm_task_user_avatar"><?php echo (get_avatar($task->created_by, 25, "mysteryman")); ?></span> | |
| 722 | - <span class="wppm_task_user_names" style="color:<?php echo esc_attr($appearance_settings['widget-body-text-color'])?>;"><?php echo isset($user_info->display_name)?esc_html($user_info->display_name):""; ?></span> | |
| 723 | - </div> | |
| 724 | - </div> | |
| 725 | - </div> | |
| 726 | - <div class="row wppm_widget" id="wppm_task_users_widget_container"> | |
| 727 | - <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>"> | |
| 728 | - <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>;"><?php echo esc_html_e('Users','taskbuilder')?></h4> | |
| 729 | - <?php | |
| 730 | - if($user_role != 3){ | |
| 731 | - if ((($wppmfunction->has_permission('assign_task_users',$id ) || $current_user->has_cap('manage_options')) && ($task->is_archived!=1))) { ?> | |
| 732 | - <span class="wppm_edit_task_details_widget" onclick="wppm_edit_task_users(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span> | |
| 733 | - <?php } | |
| 734 | - }?> | |
| 735 | - </div> | |
| 736 | - <hr class="widget_divider"> | |
| 737 | - <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>"> | |
| 738 | - <div id="wppm_task_users"> | |
| 739 | - <?php | |
| 740 | - $i=0; | |
| 741 | - if(!empty($users)){ | |
| 742 | - foreach($users as $user) { | |
| 743 | - $user_data = get_userdata($user); | |
| 744 | - if(!empty($project_data['users'])){ | |
| 745 | - $proj_users = explode(',',$project_data['users']); | |
| 746 | - if(in_array($user,$proj_users)){ | |
| 747 | - $i++; | |
| 748 | - ?> | |
| 749 | - <div style="padding:2px 0;"> | |
| 750 | - <span class="wppm_task_user_avatar"><?php echo (get_avatar($user, 25, "mysteryman")); ?></span> | |
| 751 | - <span class="wppm_task_user_names" style="color:<?php echo esc_attr($appearance_settings['widget-body-text-color'])?>;"><?php echo ((!empty($user_data))? esc_html($user_data->display_name) :"") ?></span> | |
| 752 | - </div> | |
| 753 | - <?php | |
| 754 | - } | |
| 755 | - } | |
| 756 | - } | |
| 757 | - } | |
| 758 | - if($i==0){ ?> | |
| 759 | - <span class="wppm_display_user_none" style="color:<?php echo esc_attr($appearance_settings['widget-body-text-color'])?>"><?php echo esc_html_e('None','taskbuilder'); ?></span> <?php | |
| 760 | - } | |
| 761 | - ?> | |
| 762 | - </div> | |
| 763 | - </div> | |
| 764 | - </div> | |
| 765 | - <?php do_action('wppm_after_task_widgets',$id,$task_id );?> | |
| 766 | - </div> | |
| 767 | - <input type="hidden" id="wppm_nonce" value="<?php echo esc_attr(wp_create_nonce('wppm_upload_file'))?>"> | |
| 768 | - <input type="file" id="wppm_attachment_upload" class="hidden" onchange=""> | |
| 769 | - </div> | |
| 770 | -</form> | |
| 771 | -<style> | |
| 772 | - .wppm_comment_date i:hover{ | |
| 773 | - color: <?php echo esc_attr($appearance_settings['comment-date-hover-color'])?>; | |
| 774 | - } | |
| 775 | - #Layer_1{ | |
| 776 | - fill:red!important; | |
| 777 | - } | |
| 778 | -</style> | |
| 779 | -<script> | |
| 780 | -jQuery( document ).ready( function( jQuery ) { | |
| 781 | - const button = document.getElementById('wppm_print_task_btn'); | |
| 782 | - const box = document.getElementById('wppmprint_menu'); | |
| 783 | - | |
| 784 | - // Show box on button click | |
| 785 | - button.addEventListener('click', (e) => { | |
| 786 | - e.stopPropagation(); // prevent document click from firing immediately | |
| 787 | - box.style.display = 'flex'; | |
| 788 | - }); | |
| 789 | - | |
| 790 | - // Prevent hiding when clicking inside box | |
| 791 | - box.addEventListener('click', (e) => { | |
| 792 | - e.stopPropagation(); | |
| 793 | - }); | |
| 794 | - | |
| 795 | - // Hide when clicking outside | |
| 796 | - document.addEventListener('click', () => { | |
| 797 | - box.style.display = 'none'; | |
| 798 | - }); | |
| 799 | -<?php | |
| 800 | - if ((($current_user->ID && $current_user->has_cap('manage_options')) || $wppmfunction->has_permission('change_task_details',$task->id))){ ?> | |
| 801 | - jQuery("#wppm_edit_tstart_date").flatpickr({ | |
| 802 | - enableTime: true, | |
| 803 | - dateFormat: "Y-m-d H:i", | |
| 804 | - onChange: function(selectedDates, dateStr, instance) { | |
| 805 | - var data = { | |
| 806 | - action: 'wppm_set_change_task_start_date', | |
| 807 | - task_id:<?php echo esc_attr($task->id);?>, | |
| 808 | - date:dateStr, | |
| 809 | - _ajax_nonce:jQuery('#wppm_edit_tstart_date_ajax_nonce').val() | |
| 810 | - }; | |
| 811 | - jQuery.post(wppm_admin.ajax_url, data, function(response) { | |
| 812 | - instance.close(); | |
| 813 | - wppm_open_task(<?php echo esc_attr($task->id);?>); | |
| 814 | - }); | |
| 815 | - }, | |
| 816 | - }); | |
| 817 | - jQuery("#wppm_edit_tend_date").flatpickr({ | |
| 818 | - enableTime: true, | |
| 819 | - dateFormat: "Y-m-d H:i", | |
| 820 | - onChange: function(selectedDates, dateStr, instance) { | |
| 821 | - var data = { | |
| 822 | - action: 'wppm_set_change_task_end_date', | |
| 823 | - task_id:<?php echo esc_attr($task->id);?>, | |
| 824 | - date:dateStr, | |
| 825 | - _ajax_nonce:jQuery('#wppm_edit_tend_date_ajax_nonce').val() | |
| 826 | - }; | |
| 827 | - jQuery.post(wppm_admin.ajax_url, data, function(response) { | |
| 828 | - instance.close(); | |
| 829 | - wppm_open_task(<?php echo esc_attr($task->id);?>); | |
| 830 | - }); | |
| 831 | - }, | |
| 832 | - }); | |
| 833 | - <?php } ?> | |
| 834 | - <?php foreach ($wppm_checklist as $chklist) { ?> | |
| 835 | - var $checkboxes = jQuery('.wppm_checklist_item_'+<?php echo esc_attr($chklist->id);?>); | |
| 836 | - var $progress = jQuery('#CheckProgress_'+<?php echo esc_attr($chklist->id);?>); | |
| 837 | - var total = $checkboxes.length; | |
| 838 | - var checked = jQuery('.wppm_checklist_item_'+<?php echo esc_attr($chklist->id);?>).filter(':checked').length; | |
| 839 | - var progressWidth = Math.ceil((checked / total) * 100); | |
| 840 | - jQuery('#CheckProgress_'+<?php echo esc_attr($chklist->id);?>).css('background','#5ba4cf'); | |
| 841 | - jQuery('#CheckProgress_'+<?php echo esc_attr($chklist->id);?>).css('width', progressWidth + '%'); | |
| 842 | - if(progressWidth>0){ | |
| 843 | - jQuery('#wppm_progressbar_label_'+<?php echo esc_attr($chklist->id);?>).text(progressWidth+'%'); | |
| 844 | - } | |
| 845 | - <?php $wppm_checklist_items = $wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist_items where checklist_id=%d",$chklist->id)); | |
| 846 | - foreach ($wppm_checklist_items as $chkitems) { | |
| 847 | - ?> jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).on("mouseover", function () { | |
| 848 | - jQuery( '#wppm_checklist_action_'+<?php echo esc_attr($chkitems->id);?>).css("display","inline"); | |
| 849 | - jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).css("background-color","#e7e8ea"); | |
| 850 | - }) | |
| 851 | - jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).on("mouseout", function () { | |
| 852 | - jQuery( '#wppm_checklist_action_'+<?php echo esc_attr($chkitems->id);?>).css("display","none"); | |
| 853 | - jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).css("background-color","#ffffff"); | |
| 854 | - }) | |
| 855 | - <?php | |
| 856 | - } | |
| 857 | - } | |
| 858 | - $bold = (isset($wppm_toolbar_actions['bold']) && $wppm_toolbar_actions['bold']==1)? 'bold' :""; | |
| 859 | - $italic = (isset($wppm_toolbar_actions['italic']) && $wppm_toolbar_actions['italic']==1)? 'italic' :""; | |
| 860 | - $underline = (isset($wppm_toolbar_actions['underline']) && $wppm_toolbar_actions['underline']==1)?'underline' :""; | |
| 861 | - $blockquote = (isset($wppm_toolbar_actions['blockquote']) && $wppm_toolbar_actions['blockquote']==1)? 'blockquote' :""; | |
| 862 | - $align = (isset($wppm_toolbar_actions['align']) && $wppm_toolbar_actions['align']==1)? ' alignleft aligncenter alignright ' :""; | |
| 863 | - $bullist = (isset($wppm_toolbar_actions['bullist']) && $wppm_toolbar_actions['bullist']==1)? $bullist = 'bullist' :""; | |
| 864 | - $numlist = (isset($wppm_toolbar_actions['numlist']) && $wppm_toolbar_actions['numlist']==1)? $numlist = 'numlist' :""; | |
| 865 | - $rtl = (isset($wppm_toolbar_actions['rtl']) && $wppm_toolbar_actions['rtl']==1)? $rtl = 'rtl' :""; | |
| 866 | - $link = (isset($wppm_toolbar_actions['link']) && $wppm_toolbar_actions['link']==1)? $link = 'link' :""; | |
| 867 | - $image = (isset($wppm_toolbar_actions['wppm_insert_editor_img']) && $wppm_toolbar_actions['wppm_insert_editor_img']==1)? $image = 'image' :""; | |
| 868 | - $forecolor = (isset($wppm_toolbar_actions['forecolor']) && $wppm_toolbar_actions['forecolor']==1)? $forecolor = 'forecolor' :""; | |
| 869 | - $backcolor = (isset($wppm_toolbar_actions['backcolor']) && $wppm_toolbar_actions['backcolor']==1)? $backcolor = 'backcolor' :""; | |
| 870 | - $strikethrough = (isset($wppm_toolbar_actions['strikethrough']) && $wppm_toolbar_actions['strikethrough']==1)? $strikethrough = 'strikethrough' :""; | |
| 871 | - $toolbar = trim("$bold $italic $underline $blockquote | $align | $bullist $numlist | $rtl | $link $image | $forecolor $backcolor $strikethrough"); | |
| 872 | - if(($wppm_tinymce_visibility_open_task==1)){ ?> | |
| 873 | - if((wppm_admin.rich_text_editor) && (wppm_admin.rich_text_editor.trim().length > 0) && (wppm_admin.rich_text_editor == 1)){ | |
| 874 | - tinymce.remove(); | |
| 875 | - tinymce.init({ | |
| 876 | - selector:'#wppm_task_comment', | |
| 877 | - body_id: 'wppm_task_comment', | |
| 878 | - directionality : '<?php //echo 'rtl'; ?>', | |
| 879 | - menubar: false, | |
| 880 | - statusbar: false, | |
| 881 | - height : '200', | |
| 882 | - width : '100%', | |
| 883 | - plugins: [ | |
| 884 | - 'lists link image directionality paste textcolor' | |
| 885 | - ], | |
| 886 | - image_advtab: true, | |
| 887 | - toolbar:'<?php echo esc_js( $toolbar ); ?>', | |
| 888 | - branding: false, | |
| 889 | - autoresize_bottom_margin: 20, | |
| 890 | - browser_spellcheck : true, | |
| 891 | - relative_urls : false, | |
| 892 | - remove_script_host : false, | |
| 893 | - convert_urls : true, | |
| 894 | - paste_as_text: true, | |
| 895 | - setup: function (editor) { | |
| 896 | - } | |
| 897 | - }); | |
| 898 | - jQuery('#wppm_comment_btn').show(); | |
| 899 | - } | |
| 900 | - <?php } ?> | |
| 901 | -}); | |
| 902 | - | |
| 903 | -jQuery(function(jQuery){ | |
| 904 | - // Checklist Sorting | |
| 905 | - jQuery(".wppm_checklist_items_container").sortable({ | |
| 906 | - handle: ".wppm_chk_items_drag", | |
| 907 | - update: function() { | |
| 908 | - let order = []; | |
| 909 | - jQuery(this).find("li").each(function(){ | |
| 910 | - order.push(jQuery(this).data("id")); // checklist item id | |
| 911 | - }); | |
| 912 | - | |
| 913 | - // AJAX Save | |
| 914 | - jQuery.post(wppm_admin.ajax_url, { | |
| 915 | - action: "wppm_update_checklist_order", | |
| 916 | - order: order, | |
| 917 | - task_id: <?php echo esc_attr($id); ?>, | |
| 918 | - _ajax_nonce: '<?php echo esc_attr( wp_create_nonce( 'wppm_update_checklist_order' ) ); ?>' | |
| 919 | - }, function(response_str){ | |
| 920 | - var response = JSON.parse(response_str); | |
| 921 | - jQuery('.wppm_submit_wait').hide(); | |
| 922 | - if (response.sucess_status=='1') { | |
| 923 | - jQuery('#wppm_alert_success .wppm_alert_text').text(response.messege); | |
| 924 | - } | |
| 925 | - jQuery('#wppm_alert_success').slideDown('fast',function(){}); | |
| 926 | - setTimeout(function(){ jQuery('#wppm_alert_success').slideUp('fast',function(){}); }, 3000); | |
| 927 | - }); | |
| 928 | - } | |
| 929 | - }); | |
| 930 | - | |
| 931 | -}); | |
| 932 | - | |
| 933 | -function wppm_cancel_comment(){ <?php | |
| 934 | - if(!empty($wppm_rich_text_editor) && ($wppm_rich_text_editor == 1)){ | |
| 935 | - ?> | |
| 936 | - tinyMCE. activeEditor. setContent(''); | |
| 937 | - tinymce.remove('#wppm_task_comment'); | |
| 938 | - jQuery('#wppm_comment_btn').hide(); | |
| 939 | - <?php } else{ | |
| 940 | - ?> | |
| 941 | - jQuery('#wppm_task_comment').css("width", "80%"); | |
| 942 | - jQuery('#wppm_task_comment').css("height", "30px"); | |
| 943 | - jQuery('#wppm_task_comment').css("color", "#000"); | |
| 944 | - jQuery('#wppm_task_comment').css("padding", "5px"); | |
| 945 | - jQuery('#wppm_task_comment').css(" margin-bottom", "15px"); | |
| 946 | - jQuery('#wppm_task_comment').css("overflow", "hidden"); | |
| 947 | - jQuery('#wppm_task_comment').css("border", "1 px solid #eee"); | |
| 948 | - jQuery('#wppm_task_comment').css("color", "#eee"); | |
| 949 | - jQuery('#wppm_task_comment').css("margin-top", "10px"); | |
| 950 | - jQuery('#wppm_comment_btn').hide(); | |
| 951 | - <?php }?> | |
| 952 | -} | |
| 953 | - | |
| 954 | -function wppm_add_task_comment(){ | |
| 955 | - if((wppm_admin.rich_text_editor == 1)){ | |
| 956 | - tinymce.remove(); | |
| 957 | - tinymce.init({ | |
| 958 | - selector:'#wppm_task_comment', | |
| 959 | - body_id: 'wppm_task_comment', | |
| 960 | - directionality : '<?php //echo 'rtl'; ?>', | |
| 961 | - menubar: false, | |
| 962 | - statusbar: false, | |
| 963 | - height : '200', | |
| 964 | - width : '100%', | |
| 965 | - plugins: [ | |
| 966 | - 'lists link image directionality paste textcolor' | |
| 967 | - ], | |
| 968 | - image_advtab: true, | |
| 969 | - toolbar:'<?php echo esc_js( $toolbar ); ?>', | |
| 970 | - branding: false, | |
| 971 | - autoresize_bottom_margin: 20, | |
| 972 | - browser_spellcheck : true, | |
| 973 | - relative_urls : false, | |
| 974 | - remove_script_host : false, | |
| 975 | - convert_urls : true, | |
| 976 | - paste_as_text: true, | |
| 977 | - setup: function (editor) { | |
| 978 | - } | |
| 979 | - }); | |
| 980 | - } else{ | |
| 981 | - jQuery('#wppm_task_comment').css("width", "100%"); | |
| 982 | - jQuery('#wppm_task_comment').css("height", "160px"); | |
| 983 | - jQuery('#wppm_task_comment').css("color", "#000"); | |
| 984 | - } | |
| 985 | - jQuery('#wppm_comment_btn').show(); | |
| 986 | -} | |
| 987 | - | |
| 988 | -function wppm_submit_task_comment(id,proj_id){ | |
| 989 | - var dataform = new FormData(jQuery('#wppm_open_task')[0]); | |
| 990 | - dataform.append('action','wppm_submit_task_comment'); | |
| 991 | - if((wppm_admin.rich_text_editor == 1)){ | |
| 992 | - var comment_body = tinyMCE.get('wppm_task_comment').getContent().trim(); | |
| 993 | - } else{ | |
| 994 | - var comment_body = jQuery("#wppm_task_comment").val(); | |
| 995 | - } | |
| 996 | - dataform.append('comment_body',comment_body); | |
| 997 | - dataform.append('task_id',id); | |
| 998 | - jQuery('#wppm_task_container').html(wppm_admin.loading_html); | |
| 999 | - jQuery.ajax({ | |
| 1000 | - url: wppm_admin.ajax_url, | |
| 1001 | - type: 'POST', | |
| 1002 | - data: dataform, | |
| 1003 | - processData: false, | |
| 1004 | - contentType: false | |
| 1005 | - }) | |
| 1006 | - .done(function (response_str) { | |
| 1007 | - if((proj_id!=0)||(proj_id!="")){ | |
| 1008 | - wppm_open_project_tasks(id,proj_id); | |
| 1009 | - }else if((proj_id==0)||(proj_id=="")){ | |
| 1010 | - wppm_open_task(id); | |
| 1011 | - } | |
| 1012 | - }); | |
| 1013 | -} | |
| 1014 | - | |
| 1015 | -function wppm_add_checklist_item(checklist_id){ | |
| 1016 | - jQuery('#wppm_add_checklist_label_container_'+checklist_id).show(); | |
| 1017 | - jQuery('#wppm_add_checklist_item_btn_'+checklist_id).hide(); | |
| 1018 | - jQuery('.wppm_add_checklist_label_container_'+checklist_id).show(); | |
| 1019 | - jQuery('.wppm_checklist_item_label_'+checklist_id).css('height', '30px'); | |
| 1020 | - jQuery('.wppm_add_new_item_btn_'+checklist_id).css('margin', '10px'); | |
| 1021 | -} | |
| 1022 | - | |
| 1023 | -function wppm_add_checklist(){ | |
| 1024 | - jQuery('#wppm_add_checklist').hide(); | |
| 1025 | - jQuery('#wppm_add_new_checklist').show(); | |
| 1026 | -} | |
| 1027 | - | |
| 1028 | -function wppm_remove_add_checklist_container(checklist_id){ | |
| 1029 | - jQuery('#wppm_add_checklist_label_container_'+checklist_id).hide(); | |
| 1030 | - jQuery('#wppm_add_checklist_item_btn_'+checklist_id).show(); | |
| 1031 | -} | |
| 1032 | - | |
| 1033 | -function wppm_remove_add_checklist(){ | |
| 1034 | - jQuery('#wppm_add_new_checklist').hide(); | |
| 1035 | - jQuery('#wppm_add_checklist').show(); | |
| 1036 | -} | |
| 1037 | - | |
| 1038 | -function wppm_timer_log_pro(){ | |
| 1039 | - if (confirm('<?php echo esc_js( | |
| 1040 | - __('Unlock the time tracker feature. Available in Taskbuilder Pro along with reports, integrations, automation and more. Do you want to view pricing?', 'taskbuilder') | |
| 1041 | - ); ?>')) { | |
| 1042 | - window.open( | |
| 1043 | - '<?php echo esc_url('https://taskbuilder.net/pricing/'); ?>', | |
| 1044 | - '_blank' | |
| 1045 | - ); | |
| 1046 | - } | |
| 1047 | -} | |
| 1048 | - | |
| 1049 | -function wppm_upload_file(){ | |
| 1050 | - jQuery('#wppm_attachment_upload').unbind('change'); | |
| 1051 | - jQuery('#wppm_attachment_upload').on('change', function() { | |
| 1052 | - var flag = false; | |
| 1053 | - var file = this.files[0]; | |
| 1054 | - jQuery('#wppm_attachment_upload').val(''); | |
| 1055 | - var allowedExtension = ['exe', 'php','js']; | |
| 1056 | - var file_name_split = file.name.split('.'); | |
| 1057 | - var file_extension = file_name_split[file_name_split.length-1]; | |
| 1058 | - file_extension = file_extension.toLowerCase(); | |
| 1059 | - if( (jQuery.inArray(file_extension,allowedExtension) > -1)){ | |
| 1060 | - flag = true; | |
| 1061 | - alert("<?php echo esc_js(__( 'Attached file type not allowed!', 'taskbuilder' ) ); ?>"); | |
| 1062 | - | |
| 1063 | - }; | |
| 1064 | - <?php | |
| 1065 | - $max_upload = (int)(ini_get('upload_max_filesize')); ?> | |
| 1066 | - var current_filesize=file.size/1000000; | |
| 1067 | - if(current_filesize > <?php echo esc_attr($max_upload); ?>){ | |
| 1068 | - flag = true; | |
| 1069 | - alert("<?php echo esc_js(__('File size exceed allowed limit!','taskbuilder')); ?>"); | |
| 1070 | - } | |
| 1071 | - if (!flag){ | |
| 1072 | - var html_str = '<div class="wppm_attachment">'+ | |
| 1073 | - '<div class="progress" style="float: none !important; width: unset !important;">'+ | |
| 1074 | - '<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%">'+ | |
| 1075 | - file.name+ | |
| 1076 | - '</div>'+ | |
| 1077 | - '<span class="wppm_attachment_cancel" onclick="wppm_attachment_cancel(this);" style="display:none;"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/cross_icon.svg'); ?>" alt="delete_icon"></span>'+ | |
| 1078 | - '</div>'+ | |
| 1079 | - '</div>'; | |
| 1080 | - jQuery('.wppm_attachment_container').show(); | |
| 1081 | - jQuery('.wppm_attachment_container').append(html_str); | |
| 1082 | - var attachment = jQuery('.wppm_attachment_container').find('.wppm_attachment').last(); | |
| 1083 | - var data = new FormData(); | |
| 1084 | - data.append('file', file); | |
| 1085 | - data.append('arr_name', file.name); | |
| 1086 | - data.append('action', 'wppm_upload_file'); | |
| 1087 | - data.append('nonce', jQuery('#wppm_nonce').val().trim()); | |
| 1088 | - jQuery.ajax({ | |
| 1089 | - type: 'post', | |
| 1090 | - url: wppm_admin.ajax_url, | |
| 1091 | - data: data, | |
| 1092 | - xhr: function(){ | |
| 1093 | - var xhr = new window.XMLHttpRequest(); | |
| 1094 | - xhr.upload.addEventListener("progress", function(evt){ | |
| 1095 | - if (evt.lengthComputable) { | |
| 1096 | - var percentComplete = Math.floor((evt.loaded / evt.total) * 100); | |
| 1097 | - jQuery(attachment).find('.progress-bar').css('width',percentComplete+'%'); | |
| 1098 | - } | |
| 1099 | - }, false); | |
| 1100 | - return xhr; | |
| 1101 | - }, | |
| 1102 | - processData: false, | |
| 1103 | - contentType: false, | |
| 1104 | - success: function(response) { | |
| 1105 | - var return_obj=JSON.parse(response); | |
| 1106 | - jQuery(attachment).find('.wppm_attachment_cancel').show(); | |
| 1107 | - if( parseInt(return_obj.id) != 0 ){ | |
| 1108 | - jQuery(attachment).append('<input type="hidden" class="wppm_comment_attachment" name="wppm_comment_attachment[]" value="'+return_obj.id+'">'); | |
| 1109 | - jQuery(attachment).find('.progress-bar').addClass('progress-bar-success'); | |
| 1110 | - }else { | |
| 1111 | - jQuery(attachment).find('.progress-bar').addClass('progress-bar-danger'); | |
| 1112 | - } | |
| 1113 | - } | |
| 1114 | - }); | |
| 1115 | - } | |
| 1116 | - }); | |
| 1117 | - jQuery('#wppm_attachment_upload').trigger('click'); | |
| 1118 | -} | |
| 1119 | -</script> | |
| 1 | +<?php | |
| 2 | +if ( ! defined( 'ABSPATH' ) ) { | |
| 3 | + exit; // Exit if accessed directly | |
| 4 | +} | |
| 5 | + | |
| 6 | +global $current_user,$wpdb,$wppmfunction; | |
| 7 | +$id = isset($_POST) && isset($_POST['id']) ? intval(sanitize_text_field(wp_unslash($_POST['id']))) : "0"; | |
| 8 | +$page = isset($_POST) && isset($_POST['page']) ? sanitize_text_field(wp_unslash($_POST['page'])) : ''; | |
| 9 | +$task_list_view = get_option('wppm_default_task_list_view'); | |
| 10 | +$project_id = isset($_POST) && isset($_POST['project_id']) ? intval(sanitize_text_field($_POST['project_id'])) : "0"; | |
| 11 | +$wppm_default_task_date = get_option('wppm_default_task_date'); | |
| 12 | +$wppm_task_time = get_option('wppm_task_time'); | |
| 13 | +$appearance_settings = get_option("wppm-ap-individual-task"); | |
| 14 | +$wppm_tinymce_visibility_open_task = get_option('wppm_tinymce_visibility_open_task'); | |
| 15 | +$settings = get_option("wppm-ap-modal"); | |
| 16 | +$wppm_rich_text_editor = get_option('wppm_rich_text_editor'); | |
| 17 | +$wppm_toolbar_actions = get_option('wppm_toolbar_actions'); | |
| 18 | +$wppm_date_setting = get_option('wppm_date_setting'); | |
| 19 | +$wppm_task_hide_comment_section = get_option('wppm_task_hide_comment_section'); | |
| 20 | +$wppm_deafault_time_duration_task = get_option('wppm_display_time_duration_task'); | |
| 21 | +$url_auth = false; | |
| 22 | +$auth_id = $wppmfunction->wppm_get_auth_code($id); | |
| 23 | +$auth_id = sanitize_text_field($auth_id); | |
| 24 | +// url authentication. | |
| 25 | +$auth_code = isset( $_POST['auth-code'] ) ? sanitize_text_field( wp_unslash($_POST['auth-code'] ) ) : ''; // phpcs:ignore | |
| 26 | +if ( ! $auth_code ) { | |
| 27 | + $auth_code = isset( $_POST['auth_code'] ) ? sanitize_text_field( wp_unslash($_POST['auth_code'] ) ) : ''; // phpcs:ignore | |
| 28 | +} | |
| 29 | + | |
| 30 | +if ( $auth_code && $auth_id == $auth_code ) { | |
| 31 | + $url_auth = true; | |
| 32 | +} | |
| 33 | +if (!(($current_user->ID && $current_user->has_cap('manage_options')) || ($wppmfunction->has_permission('view_task',$id)) || ($url_auth==true))) { ?> | |
| 34 | + <div style="text-align:center;padding:20px 0;"> | |
| 35 | + <h6><?php esc_attr_e( 'Unauthorized access!', 'taskbuilder' ); ?></h6> | |
| 36 | + <a href="<?php echo esc_url( admin_url('admin.php?page=wppm-tasks') ); ?>" class="btn btn-success btn-sm"><?php esc_html_e( 'Go to Task List', 'taskbuilder' ); ?></a> | |
| 37 | + </div> | |
| 38 | + <?php | |
| 39 | + wp_die(); | |
| 40 | +} | |
| 41 | +$proj_id = isset($_POST) && isset($_POST['proj_id']) ? intval(sanitize_text_field(wp_unslash($_POST['proj_id']))) : 0; | |
| 42 | +$current_date = wp_date('Y-m-d'); | |
| 43 | +$wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true ); | |
| 44 | +$cu_id = absint($current_user->ID); | |
| 45 | +if(!empty($id)){ | |
| 46 | + $task = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task where id=%d",$id)); | |
| 47 | + $project_data = $wppmfunction->get_project($task->project); | |
| 48 | + $task_comment = $wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_comment where task_id=%d ORDER BY create_time DESC",$id)); | |
| 49 | + $orderby_proj_sql = (sanitize_sql_orderby( "create_time DESC" )); | |
| 50 | + $task_comment = $wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_comment where task_id=%d ORDER BY ". $orderby_proj_sql,$id)); | |
| 51 | + $task_proj = isset($task->project) ? absint($task->project) :""; | |
| 52 | + $task_id = isset($task->id) ? absint($task->id):""; | |
| 53 | +} | |
| 54 | +$user_role = $wpdb->get_var( $wpdb->prepare("SELECT role_id FROM {$wpdb->prefix}wppm_project_users where proj_id = %d AND user_id = %d",$task_proj,$cu_id)); | |
| 55 | +if(!empty($task_proj)){ | |
| 56 | + $project_name = $wpdb->get_var( $wpdb->prepare("SELECT project_name FROM {$wpdb->prefix}wppm_project where id= %d",$task_proj)); | |
| 57 | +} | |
| 58 | +$wppm_checklist=$wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist where task_id=%d",$task_id)); | |
| 59 | +if(!empty($task->status)){ | |
| 60 | + $task_status_var = absint($task->status); | |
| 61 | + $task_status = $wpdb->get_row( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_statuses where id=%d",$task_status_var)); | |
| 62 | +} | |
| 63 | +if(!empty($task->priority)){ | |
| 64 | + $task_priority_var = absint($task->priority); | |
| 65 | + $task_priority = $wpdb->get_row( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task_priorities where id=%d",$task_priority_var)); | |
| 66 | +} | |
| 67 | +if(!empty($task->users)){ | |
| 68 | + $users = explode(",",$task->users); | |
| 69 | +} | |
| 70 | + | |
| 71 | +if(!empty($task->description)){ | |
| 72 | + $task_description = !empty($task->description) ? wp_kses_post(wpautop($task->description)) : ''; | |
| 73 | +} | |
| 74 | + | |
| 75 | +if($wppm_task_time == 1){ | |
| 76 | + $tsDate = new DateTime($task->start_date); | |
| 77 | + $teDate = new DateTime($task->end_date); | |
| 78 | + if($task->start_date=='0000-00-00 00:00:00'){ | |
| 79 | + if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 80 | + $task_start_date = '0000-00-00 00:00:00'; | |
| 81 | + }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 82 | + $task_start_date = '00-00-0000 00:00:00'; | |
| 83 | + }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 84 | + $task_start_date = '00-00-0000 00:00:00'; | |
| 85 | + }else{ | |
| 86 | + $task_start_date = '0000-00-00 00:00:00'; | |
| 87 | + } | |
| 88 | + }if($task->end_date=='0000-00-00 00:00:00'){ | |
| 89 | + if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 90 | + $task_end_date = '0000-00-00 00:00:00'; | |
| 91 | + }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 92 | + $task_end_date = '00-00-0000 00:00:00'; | |
| 93 | + }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 94 | + $task_end_date = '00-00-0000 00:00:00'; | |
| 95 | + }else{ | |
| 96 | + $task_end_date = '0000-00-00 00:00:00'; | |
| 97 | + } | |
| 98 | + }if($task->start_date!='0000-00-00 00:00:00'){ | |
| 99 | + if(!empty($wppm_date_setting)){ | |
| 100 | + $task_start_date = $tsDate->format($wppm_date_setting); | |
| 101 | + }else{ | |
| 102 | + $task_start_date = isset($task->start_date)? $task->start_date:""; | |
| 103 | + } | |
| 104 | + } | |
| 105 | + if($task->end_date!='0000-00-00 00:00:00'){ | |
| 106 | + if(!empty($wppm_date_setting)){ | |
| 107 | + $task_end_date = $teDate->format($wppm_date_setting); | |
| 108 | + }else{ | |
| 109 | + $task_end_date = isset($task->end_date) ? $task->end_date: "" ; | |
| 110 | + } | |
| 111 | + } | |
| 112 | +} elseif($wppm_task_time == 0){ | |
| 113 | + $tsDate = isset($task->start_date) ? new DateTime($task->start_date): ""; | |
| 114 | + $teDate = isset($task->end_date) ? new DateTime($task->end_date):""; | |
| 115 | + $task_start_date = !empty($tsDate) ? $tsDate->format( $wppm_date_setting):""; | |
| 116 | + $task_end_date = !empty($teDate) ? $teDate->format( $wppm_date_setting):""; | |
| 117 | + if($task->start_date=='0000-00-00 00:00:00'){ | |
| 118 | + if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 119 | + $task_start_date = '0000-00-00'; | |
| 120 | + }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 121 | + $task_start_date = '00-00-0000'; | |
| 122 | + }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 123 | + $task_start_date = '00-00-0000'; | |
| 124 | + }else{ | |
| 125 | + $task_start_date = '0000-00-00'; | |
| 126 | + } | |
| 127 | + } | |
| 128 | + if($task->end_date=='0000-00-00 00:00:00'){ | |
| 129 | + if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 130 | + $task_end_date = '0000-00-00'; | |
| 131 | + }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 132 | + $task_end_date = '00-00-0000'; | |
| 133 | + }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 134 | + $task_end_date = '00-00-0000'; | |
| 135 | + } | |
| 136 | + else{ | |
| 137 | + $task_end_date = '0000-00-00'; | |
| 138 | + } | |
| 139 | + }if($task->start_date!='0000-00-00 00:00:00'){ | |
| 140 | + if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 141 | + $task_start_date = $tsDate->format('Y-m-d'); | |
| 142 | + }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 143 | + $task_start_date = $tsDate->format('d-m-Y'); | |
| 144 | + }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 145 | + $task_start_date = $tsDate->format('m-d-Y'); | |
| 146 | + }else{ | |
| 147 | + $task_start_date = $tsDate->format('Y-m-d'); | |
| 148 | + } | |
| 149 | + }if($task->end_date!='0000-00-00 00:00:00'){ | |
| 150 | + if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 151 | + $task_end_date = $teDate->format('Y-m-d'); | |
| 152 | + }elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 153 | + $task_end_date = $teDate->format('d-m-Y'); | |
| 154 | + }elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 155 | + $task_end_date = $teDate->format('m-d-Y'); | |
| 156 | + }else{ | |
| 157 | + $task_end_date = $teDate->format('Y-m-d'); | |
| 158 | + } | |
| 159 | + } | |
| 160 | +} | |
| 161 | +$flag = false; | |
| 162 | +$wppm_task_fillter = $wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_task where id=%d",$id)); | |
| 163 | +if(!empty($wppm_task_fillter)){ | |
| 164 | + foreach($wppm_task_fillter as $key_filter=>$val_filter){ | |
| 165 | + $val_array = (array) $val_filter; | |
| 166 | + $tusers = $val_array['users']; | |
| 167 | + $tusers_arr = explode(',',$tusers); | |
| 168 | + $tproject_id = $val_array['project']; | |
| 169 | + $tproject_id = absint($tproject_id); | |
| 170 | + if(!empty($tusers) && in_array($current_user->ID,$tusers_arr)){ | |
| 171 | + $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",$tproject_id,$cu_id)); | |
| 172 | + $project_users = $wpdb->get_var( $wpdb->prepare("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = %d",$tproject_id)); | |
| 173 | + $project_users_arr = explode(',',(string)$project_users); | |
| 174 | + if((!empty($project_user_role)) && ($project_user_role == 1) && in_array($current_user->ID,$project_users_arr)){ | |
| 175 | + $flag= true; | |
| 176 | + break; | |
| 177 | + } | |
| 178 | + } | |
| 179 | + } | |
| 180 | +} | |
| 181 | +$project_creator = $wpdb->get_var( $wpdb->prepare("SELECT created_by FROM {$wpdb->prefix}wppm_project WHERE created_by = %d",$cu_id)); | |
| 182 | +?> | |
| 183 | +<form id="wppm_open_task" method="post"> | |
| 184 | + <div id="wppm_alert_success" class="alert alert-success wppm_alert" style="display:none;" role="alert"> | |
| 185 | + <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/success.svg'); ?>" alt="success"> <span class="wppm_alert_text"></span> | |
| 186 | + </div> | |
| 187 | + <div id="wppm_alert_error" class="alert alert-danger wppm_alert" style="display:none;" role="alert"> | |
| 188 | + <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/warning-triangle.svg'); ?>" alt="warning-triangle"> <span class="wppm_alert_text"></span> | |
| 189 | + </div> | |
| 190 | + <div class="wppm_headers row"> | |
| 191 | + <div class="col-sm-8"> | |
| 192 | + <span class="wppm-heading-inline"> | |
| 193 | + <?php echo esc_html_e('Task','taskbuilder');?> | |
| 194 | + </span><?php | |
| 195 | + if(($current_user->has_cap('manage_options') || $wppmfunction->has_permission('add_new_task',$task_id) || ($flag==true) || $project_creator!="") && $task->is_archived!=1){ | |
| 196 | + $style = "display:inline;"; | |
| 197 | + }else{ | |
| 198 | + $style = "display:none;"; | |
| 199 | + } | |
| 200 | + $style = apply_filters('wppm_add_new_task_btn_style_open_task_form',$style); | |
| 201 | + if(($wppm_task_fillter && (!empty($project_user_role)) && ($project_user_role == 1) && in_array($current_user->ID,$project_users_arr)) || $wppm_current_user_capability == 'wppm_admin'|| $wppm_current_user_capability == 'wppm_manager' || $current_user->has_cap('manage_options') || $project_data['created_by']==$current_user->ID){ | |
| 202 | + $archive_style= "display:inline;"; | |
| 203 | + }else{ | |
| 204 | + $archive_style= "display:none;"; | |
| 205 | + } | |
| 206 | + if($proj_id==0) { | |
| 207 | + ?> <span onclick="wppm_add_new_task(<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)" class="wppm_add_new_task_btn" id="wppm_add_new_task_btn" style="<?php echo esc_attr($style)?>" title="<?php esc_attr_e( 'Create Task', 'taskbuilder' ); ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/plus.svg'); ?>" alt="add"></span> | |
| 208 | + <?php } | |
| 209 | + else{ ?> | |
| 210 | + <span class="wppm_add_new_task_btn" id="wppm_add_new_task_btn" title="<?php esc_attr_e( '"Create Task', 'taskbuilder' ); ?>" onclick="wppm_create_project_task(<?php echo esc_attr($proj_id) ?>)" style="<?php echo esc_attr($style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/plus.svg'); ?>" alt="add"></span> | |
| 211 | + <?php } ?> | |
| 212 | + <?php if($proj_id==0) { | |
| 213 | + if (($project_id!=0)) { | |
| 214 | + $task_list_function = "wppm_get_project_tasks_kanban_view( {$project_id})"; | |
| 215 | + } | |
| 216 | + if (empty($project_id) && $task_list_view == 1) { | |
| 217 | + $task_list_function = "wppm_get_task_list('', {$project_id})"; | |
| 218 | + } | |
| 219 | + if(empty($task_list_view) && empty($project_id)) { | |
| 220 | + $task_list_function = "wppm_view_task_search_filter('', '', {$project_id})"; | |
| 221 | + } | |
| 222 | + ?> | |
| 223 | + <span class="wppm-task-list-btn" id="wppm_task_list_btn" title="<?php esc_attr_e( 'Task List', 'taskbuilder' ); ?>"onclick="<?php echo esc_attr($task_list_function) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/list.svg'); ?>" alt="list"></span> | |
| 224 | + <?php } | |
| 225 | + else{ | |
| 226 | + ?> | |
| 227 | + <span class="wppm-task-list-btn" id="wppm_task_list_btn" title="<?php esc_attr_e( 'Task List', 'taskbuilder' ); ?>" onclick="wppm_get_project_tasks(<?php echo esc_attr($proj_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/list.svg'); ?>" alt="list"></span> | |
| 228 | + <?php } ?> | |
| 229 | + <?php $style = ((($current_user->ID && $current_user->has_cap('manage_options')) || ($wppmfunction->has_permission('delete_task',$id)) || $wppm_current_user_capability == 'wppm_admin'|| $project_data['created_by']==$current_user->ID ) && $user_role != 3) ? "display:inline":"display:none"; ?> | |
| 230 | + <?php $clone_style = ((($current_user->ID && $current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin') || ($wppmfunction->has_permission('clone_task',$id)) || $project_data['created_by']==$current_user->ID ) && $task->is_archived!=1 && $user_role != 3) ? "display:inline":"display:none"; ?> | |
| 231 | + <?php $ar_css = ($task->is_archived==1) ? "display:none;" : "display:inline"; ?> | |
| 232 | + <span class="wppm-dashboard-btn" id="wppm_dashboard_btn" title="<?php esc_attr_e( 'Dashboard', 'taskbuilder' ); ?>" onclick="wppm_get_project_tasks(<?php echo esc_attr($proj_id) ?>)"> | |
| 233 | + <a href="<?php echo esc_url(admin_url('admin.php?page=wppm-dashboard')); ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/dashboard-icon.svg'); ?>" alt="dashboard"></a> | |
| 234 | + </span> | |
| 235 | + <span class="wppm-delete_task_btn" id="wppm_delete_task_btn" title="Delete Task" onclick="wppm_get_delete_task(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)" style="<?php echo esc_attr($style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/bin.svg'); ?>" alt="delete"></span> | |
| 236 | + <span class="wppm-clone_task_btn" id="wppm_clone_task_btn" title="Clone Task" onclick="wppm_clone_task(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id)?>,<?php echo esc_attr($project_id) ?>)" style="<?php echo esc_attr($clone_style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/duplicate.svg'); ?>" alt="clone"></span> | |
| 237 | + <span class="wppm-print_task_btn" id="wppm_print_task_btn" title="Print Task" onclick="wppm_print_task(<?php echo esc_attr($id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/printer_menu.svg'); ?>" alt="print" style="<?php echo esc_attr($ar_css);?>"></span> | |
| 238 | + <span class="wppm-archieve_task_btn" id="wppm_archieve_task_btn" title="<?php echo ($task->is_archived==1 ) ? 'Restore Task' : 'Archive Task'; ?>" onclick="wppm_archive_task(<?php echo esc_attr($id) ?>,<?php echo esc_attr($task->is_archived) ?>,<?php echo esc_attr($project_id) ?>)" style="<?php echo esc_attr($archive_style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/archive.svg'); ?>" alt="archive"></span> | |
| 239 | + <input type="hidden" name="wppm_archive_task_ajax_nonce" id="wppm_archive_task_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_archive_task_ajax_nonce' ) ); ?>"> | |
| 240 | + <div class="menu" id="wppmprint_menu" onclick="event.stopPropagation();"> | |
| 241 | + <a href="#" id="wppm_openPDF" onclick="wppm_open_pdf(<?php echo esc_attr($id) ?>)">🖨️ <?php echo esc_html_e('Open In Browser','taskbuilder');?></a> | |
| 242 | + <a href="#" id="wppm_downloadPDF" onclick="wppm_download_pdf(<?php echo esc_attr($id) ?>)">💾 <?php echo esc_html_e('Download PDF','taskbuilder');?></a> | |
| 243 | + </div> | |
| 244 | + <?php do_action('wppm_individual_task_button',$id);?> | |
| 245 | + </div> | |
| 246 | + </div> | |
| 247 | + <div id="wppm_load_individual_task_container" class="row"> | |
| 248 | + <div class="col-sm-8 wppm_body col-md-9"> | |
| 249 | + <div class="wppm_task_details_container"> | |
| 250 | + <div class="row"> | |
| 251 | + <div class="col-sm-12"> | |
| 252 | + <span class="wppm_task_label"> <?php echo isset($task->task_name) ? esc_html($task->task_name ):"" ?> | |
| 253 | + <?php if (($wppmfunction->has_permission('change_task_details',$id) || $current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin') && $task->is_archived!=1) { ?> | |
| 254 | + <span id="wppm_individual_edit_task_subject" onclick="wppm_edit_task_details(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)" class="btn btn-sm wppm_action_btn" style="background-color:#FFFFFF !important;color:#000000 !important;"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span> | |
| 255 | + <?php } ?> | |
| 256 | + </span> | |
| 257 | + <?php if(!empty($task->parent_task_id)){ | |
| 258 | + $wppm_parent_task = $wpdb->get_row( $wpdb->prepare("SELECT id, task_name FROM {$wpdb->prefix}wppm_task where id=%d",absint($task->parent_task_id))); | |
| 259 | + if(!empty($wppm_parent_task)){ | |
| 260 | + $wppm_can_convert_subtask = (($current_user->has_cap('manage_options') || $wppmfunction->has_permission('delete_task',$id)) && $task->is_archived!=1); | |
| 261 | + ?> | |
| 262 | + <div class="wppm_subtask_parent_link"> | |
| 263 | + <?php echo esc_html_e('Subtask of','taskbuilder');?> | |
| 264 | + <a href="#" onclick="wppm_open_subtask(<?php echo esc_attr($wppm_parent_task->id) ?>,<?php echo esc_attr($proj_id) ?>);return false;"><?php echo esc_html($wppm_parent_task->task_name); ?></a> | |
| 265 | + <?php if($wppm_can_convert_subtask){ ?> | |
| 266 | + | <a href="#" onclick="wppm_convert_subtask_to_task(<?php echo esc_attr($id) ?>,<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>);return false;"><?php echo esc_html_e('Convert to Task','taskbuilder');?></a> | |
| 267 | + <input type="hidden" name="wppm_convert_subtask_to_task_ajax_nonce" id="wppm_convert_subtask_to_task_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_convert_subtask_to_task' ) ); ?>"> | |
| 268 | + <?php } ?> | |
| 269 | + </div> | |
| 270 | + <?php } | |
| 271 | + } ?> | |
| 272 | + </div> | |
| 273 | + </div> | |
| 274 | + <div class="row"> | |
| 275 | + <div class="col-sm-3"> | |
| 276 | + <span class="wppm_task_details_label"><?php echo esc_html_e('Project:','taskbuilder');?></span> | |
| 277 | + </div> | |
| 278 | + <div class="col-sm-9"> | |
| 279 | + <span class="wppm_task_details"><?php echo (isset($project_name))? esc_html($project_name ):"" ?></span> | |
| 280 | + </div> | |
| 281 | + </div> | |
| 282 | + <div class="row"> | |
| 283 | + <div class="col-sm-3"> | |
| 284 | + <span class="wppm_task_details_label"><?php echo esc_html_e('Created On:','taskbuilder');?></span> | |
| 285 | + </div> | |
| 286 | + <div class="col-sm-9"><?php | |
| 287 | + $tcDate = isset($task->date_created) ? new DateTime($task->date_created): ""; | |
| 288 | + if($wppm_task_time !=0){ | |
| 289 | + if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 290 | + $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d H:i:s'):""; | |
| 291 | + } elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 292 | + $task_create_date = !empty($tcDate) ? $tcDate->format('d-m-Y H:i:s'):""; | |
| 293 | + } elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 294 | + $task_create_date = !empty($tcDate) ? $tcDate->format('m-d-Y H:i:s'):""; | |
| 295 | + } else { | |
| 296 | + $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d H:i:s'):""; | |
| 297 | + } | |
| 298 | + } elseif($wppm_task_time == 0){ | |
| 299 | + if($wppm_date_setting=='Y-m-d H:i:s'){ | |
| 300 | + $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d'):""; | |
| 301 | + } elseif($wppm_date_setting=='d-m-Y H:i:s'){ | |
| 302 | + $task_create_date = !empty($tcDate) ? $tcDate->format('d-m-Y'):""; | |
| 303 | + } elseif($wppm_date_setting=='m-d-Y H:i:s'){ | |
| 304 | + $task_create_date = !empty($tcDate) ? $tcDate->format('m-d-Y'):""; | |
| 305 | + } else { | |
| 306 | + $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d'):""; | |
| 307 | + } | |
| 308 | + } ?> | |
| 309 | + <span class="wppm_task_details"><?php echo (isset($task_create_date))? esc_html($task_create_date):"" ?></span> | |
| 310 | + </div> | |
| 311 | + </div> | |
| 312 | + <?php if($wppm_default_task_date == 1 && $wppm_deafault_time_duration_task==0){ ?> | |
| 313 | + <div class="row"> | |
| 314 | + <div class="col-sm-3"> | |
| 315 | + <span class="wppm_task_details_label"><?php echo esc_html_e('Start Date:','taskbuilder');?></span> | |
| 316 | + </div> | |
| 317 | + <div class="col-sm-9"> | |
| 318 | + <span class="wppm_task_details" id="wppm_edit_tstart_date"><?php echo (isset($task_start_date))? esc_html($task_start_date):"" ?></span> | |
| 319 | + </div> | |
| 320 | + <input type="hidden" name="wppm_edit_tstart_date_ajax_nonce" id="wppm_edit_tstart_date_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_set_change_task_start_date' ) ); ?>"> | |
| 321 | + </div> | |
| 322 | + <div class="row"> | |
| 323 | + <div class="col-sm-3"> | |
| 324 | + <span class="wppm_task_details_label"><?php echo esc_html_e('End Date:','taskbuilder');?></span> | |
| 325 | + </div> | |
| 326 | + <div class="col-sm-9"> | |
| 327 | + <?php $style = (!empty($task->end_date) && ($task->status!=4 && $task->end_date < $current_date && $task->end_date != '0000-00-00 00:00:00' && $task->end_date != '00-00-0000 00:00:00' && $task->end_date != '00-00-0000' && $task->end_date != '0000-00-00')) ? "color:#FF0000":"color:#2C3E50"; ?> | |
| 328 | + <span class="wppm_task_details" id="wppm_edit_tend_date" style="<?php echo esc_attr($style); ?>"><?php echo (isset($task_end_date))? esc_html($task_end_date):"" ?></span> | |
| 329 | + </div> | |
| 330 | + <input type="hidden" name="wppm_edit_tend_date_ajax_nonce" id="wppm_edit_tend_date_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_set_change_task_end_date' ) ); ?>"> | |
| 331 | + </div> | |
| 332 | + <?php } | |
| 333 | + if($wppm_deafault_time_duration_task==1){ | |
| 334 | + $wppm_task_duration = $wppmfunction->wppm_get_duration($task->start_date,$task->end_date); | |
| 335 | + $tstatus = isset($task->status) ? $task->status :""; | |
| 336 | + $style = (!empty($task->end_date) && $tstatus!=4 && $task->end_date < $current_date && ($task->end_date != '0000-00-00 00:00:00' && $task->end_date != '00-00-0000 00:00:00' && $task->end_date != '00-00-0000' && $task->end_date != '0000-00-00')) ? "color:#FF1111":"color:#2C3E51"; ?> | |
| 337 | + <div class="row"> | |
| 338 | + <div class="col-sm-3"> | |
| 339 | + <span class="wppm_task_details_label"><?php echo esc_html_e('Task Duration:','taskbuilder');?></span> | |
| 340 | + </div> | |
| 341 | + <div class="col-sm-9"> | |
| 342 | + <span class="wppm_task_details" id="wppm_edit_task_duration" style="<?php echo esc_attr($style); ?>"><?php echo (isset($wppm_task_duration))? esc_html($wppm_task_duration ): "" ?></span> | |
| 343 | + </div> | |
| 344 | + </div> <?php | |
| 345 | + }?> | |
| 346 | + <div class="row"> | |
| 347 | + <div class="col-sm-3"> | |
| 348 | + <span class="wppm_task_details_label"><?php echo esc_html_e('Task Priority:','taskbuilder');?></span> | |
| 349 | + </div> | |
| 350 | + <div class="col-sm-9"> | |
| 351 | + <span class="wppm_task_details_priority"><span class="wppm_admin_label" style="background-color:<?php echo (isset($task_priority->bg_color))? esc_html($task_priority->bg_color):""?>;color:<?php echo (isset($task_priority->color))? esc_html($task_priority->color):""?>;"><?php echo (isset($task_priority->name)) ? esc_html($task_priority->name):"" ?> </span></span> | |
| 352 | + </div> | |
| 353 | + </div> | |
| 354 | + <div class="row"> | |
| 355 | + <div class="col-sm-3"> | |
| 356 | + <span class="wppm_task_details_label"><?php echo esc_html_e('Description:','taskbuilder');?></span> | |
| 357 | + </div> | |
| 358 | + <div class="col-sm-9"> | |
| 359 | + <span class="wppm_task_description"><?php echo (!empty($task_description))? wp_kses_post(wpautop($task_description)):"" ?></span> | |
| 360 | + </div> | |
| 361 | + </div> | |
| 362 | + <?php do_action('wppm_after_task_details_in_open_task',$task->id, $task->project);?> | |
| 363 | + </div> | |
| 364 | + <?php if(empty($task->parent_task_id)){ | |
| 365 | + $wppm_subtasks = $wppmfunction->get_subtasks($task_id); | |
| 366 | + $wppm_subtask_progress = $wppmfunction->get_subtask_progress($task_id); | |
| 367 | + $wppm_default_task_status = get_option('wppm_default_task_status'); | |
| 368 | + $wppm_can_add_subtask = (($current_user->has_cap('manage_options') || $wppmfunction->has_permission('add_new_task',$task_id)) && $task->is_archived!=1 && $user_role != 3); | |
| 369 | + ?> | |
| 370 | + <div class="wppm_task_subtask_container" id="wppm_task_subtask_container"> | |
| 371 | + <div class="row"> | |
| 372 | + <div class="col-sm-8"> | |
| 373 | + <span class="wppm_checklist_label"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/task_list.svg'); ?>" alt="subtasks"><?php echo esc_html_e('Subtasks','taskbuilder');?></span> | |
| 374 | + </div> | |
| 375 | + </div> | |
| 376 | + <?php if($wppm_subtask_progress['total'] > 0){ | |
| 377 | + $wppm_subtask_percent = round(($wppm_subtask_progress['completed'] / $wppm_subtask_progress['total']) * 100); ?> | |
| 378 | + <div class="wppm_progress_bar_container row"> | |
| 379 | + <div class="col-sm-4"> | |
| 380 | + <span class="wppm_progressbar_label" id="wppm_subtask_progress_label"><?php echo esc_html($wppm_subtask_progress['completed'].'/'.$wppm_subtask_progress['total']); ?></span> | |
| 381 | + </div> | |
| 382 | + <div class="wppm_progress_bar col-sm-8"> | |
| 383 | + <div id="wppm_subtask_progressbar" class="wppm_checkprogress" role="progressbar" style="width: <?php echo esc_attr($wppm_subtask_percent); ?>%;background:#5ba4cf;" aria-valuemin="0" aria-valuemax="100"></div> | |
| 384 | + </div> | |
| 385 | + </div> | |
| 386 | + <?php } ?> | |
| 387 | + <input type="hidden" name="wppm_set_change_task_status_ajax_nonce" id="wppm_subtask_status_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_set_change_task_status' ) ); ?>"> | |
| 388 | + <input type="hidden" name="wppm_add_new_subtask_ajax_nonce" id="wppm_add_new_subtask_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_add_new_subtask' ) ); ?>"> | |
| 389 | + <input type="hidden" name="wppm_remove_subtask_ajax_nonce" id="wppm_remove_subtask_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_remove_subtask' ) ); ?>"> | |
| 390 | + <input type="hidden" name="wppm_convert_subtask_to_task_ajax_nonce" id="wppm_convert_subtask_to_task_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_convert_subtask_to_task' ) ); ?>"> | |
| 391 | + <ul id="wppm_subtask_items_container" class="wppm_checklist_items_container" style="list-style-type: none; padding-left:0px; margin-top:10px; margin-bottom:10px;"> | |
| 392 | + <?php if(!empty($wppm_subtasks)){ | |
| 393 | + foreach($wppm_subtasks as $subtask){ | |
| 394 | + $wppm_subtask_checked = ($subtask['status']==4) ? 'checked="checked"' : ''; | |
| 395 | + $wppm_subtask_users = !empty($subtask['users']) ? explode(",",$subtask['users']) : array(); | |
| 396 | + $wppm_subtask_can_change_status = ($current_user->has_cap('manage_options') || $wppmfunction->has_permission('change_status',$subtask['id'])) && $task->is_archived!=1; | |
| 397 | + $wppm_subtask_can_delete = ($current_user->has_cap('manage_options') || $wppmfunction->has_permission('delete_task',$subtask['id'])) && $task->is_archived!=1; | |
| 398 | + ?> | |
| 399 | + <li id="wppm_subtask_<?php echo esc_attr($subtask['id']) ?>" class="row wppm_checklist_item" style="margin-bottom:10px;font: 15px 'Helvetica Neue',Helvetica,Arial,sans-serif;"> | |
| 400 | + <div class="col-sm-8"> | |
| 401 | + <input id="wppm_subtask_checkbox_<?php echo esc_attr($subtask['id']) ?>" type="checkbox" onchange="wppm_toggle_subtask_status(<?php echo esc_attr($subtask['id']) ?>,<?php echo esc_attr($task_id) ?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($wppm_default_task_status) ?>,this.checked)" <?php echo esc_attr($wppm_subtask_checked) ?> <?php echo $wppm_subtask_can_change_status ? '' : 'disabled'; ?> style="margin:5px;"> | |
| 402 | + <label style="padding-top: 5px;font-weight: normal;font: 13px 'Helvetica Neue',Helvetica,Arial,sans-serif;cursor:pointer;" onclick="wppm_open_subtask(<?php echo esc_attr($subtask['id']) ?>,<?php echo esc_attr($proj_id) ?>)"><?php echo esc_html($subtask['task_name']); ?></label> | |
| 403 | + </div> | |
| 404 | + <div class="col-sm-4" style="text-align:right;"> | |
| 405 | + <?php $wppm_subtask_avatar_count = 0; | |
| 406 | + $wppm_subtask_total_users = count( array_filter( $wppm_subtask_users ) ); | |
| 407 | + foreach($wppm_subtask_users as $wppm_subtask_user_id){ | |
| 408 | + if(!$wppm_subtask_user_id) continue; | |
| 409 | + $wppm_subtask_avatar_count++; | |
| 410 | + if($wppm_subtask_avatar_count > 3) break; | |
| 411 | + $wppm_subtask_user_data = get_userdata($wppm_subtask_user_id); | |
| 412 | + $wppm_subtask_user_name = !empty($wppm_subtask_user_data) ? $wppm_subtask_user_data->display_name : ''; | |
| 413 | + echo get_avatar($wppm_subtask_user_id, 20, "mysteryman", $wppm_subtask_user_name, array('extra_attr' => 'title="'.esc_attr($wppm_subtask_user_name).'"')); | |
| 414 | + } | |
| 415 | + $wppm_subtask_more_users = $wppm_subtask_total_users - 3; | |
| 416 | + if ( $wppm_subtask_more_users > 0 ) { | |
| 417 | + ?> | |
| 418 | + <span class="wppm_subtask_more_users" title="<?php echo esc_attr( sprintf( _n( '%d more user assigned', '%d more users assigned', $wppm_subtask_more_users, 'taskbuilder' ), $wppm_subtask_more_users ) ); ?>">+<?php echo esc_html( $wppm_subtask_more_users ); ?></span> | |
| 419 | + <?php | |
| 420 | + } ?> | |
| 421 | + <?php if($wppm_subtask_can_delete){ ?> | |
| 422 | + <a href="#" title="<?php echo esc_attr__('Convert to Task','taskbuilder'); ?>" onclick="wppm_convert_subtask_to_task(<?php echo esc_attr($subtask['id']) ?>,<?php echo esc_attr($task_id) ?>,<?php echo esc_attr($proj_id) ?>);return false;" style="font-size:11px;margin-right:8px;"><?php echo esc_html_e('Convert to Task','taskbuilder');?></a> | |
| 423 | + <span onclick="wppm_delete_subtask(<?php echo esc_attr($subtask['id']) ?>,<?php echo esc_attr($task_id) ?>,<?php echo esc_attr($proj_id) ?>)" style="cursor:pointer;"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/trash.svg'); ?>" alt="delete"></span> | |
| 424 | + <?php } ?> | |
| 425 | + </div> | |
| 426 | + </li> | |
| 427 | + <?php | |
| 428 | + } | |
| 429 | + } ?> | |
| 430 | + </ul> | |
| 431 | + <?php if($wppm_can_add_subtask){ | |
| 432 | + $wppm_all_task_statuses = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_task_statuses ORDER BY load_order ASC"); | |
| 433 | + ?> | |
| 434 | + <div class="row"> | |
| 435 | + <div class="col-sm-12" style="padding-top:15px;"> | |
| 436 | + <a class="wppm_add_checklist" id="wppm_add_subtask_btn" onclick="wppm_show_add_subtask()"><?php echo esc_html_e('+ Add subtask','taskbuilder');?></a> | |
| 437 | + </div> | |
| 438 | + </div> | |
| 439 | + <div class="row"> | |
| 440 | + <div class="col-sm-12" style="display:none;" id="wppm_add_subtask_label_container"> | |
| 441 | + <div class="row"> | |
| 442 | + <div class="wppm_task_frm_fields col-sm-6"> | |
| 443 | + <span class="wppm_form_field_label"><b><?php echo esc_html_e('Subtask Name','taskbuilder');?></b> <span style="color:#ff0000;">*</span></span><br> | |
| 444 | + <input type="text" id="wppm_subtask_label" class="form-control" placeholder="<?php echo esc_attr__('Subtask name','taskbuilder') ?>" name="wppm_subtask_label"> | |
| 445 | + </div> | |
| 446 | + <div class="wppm_task_frm_fields col-sm-6"> | |
| 447 | + <span class="wppm_form_field_label"><b><?php echo esc_html_e('Status','taskbuilder');?></b></span><br> | |
| 448 | + <select id="wppm_subtask_status" name="wppm_subtask_status" class="form-control"> | |
| 449 | + <?php if(!empty($wppm_all_task_statuses)){ | |
| 450 | + foreach($wppm_all_task_statuses as $wppm_st){ ?> | |
| 451 | + <option value="<?php echo esc_attr($wppm_st->id) ?>" <?php selected($wppm_st->id, $wppm_default_task_status); ?>><?php echo esc_html($wppm_st->name) ?></option> | |
| 452 | + <?php } | |
| 453 | + } ?> | |
| 454 | + </select> | |
| 455 | + </div> | |
| 456 | + </div> | |
| 457 | + <div class="row"> | |
| 458 | + <div class="wppm_task_frm_fields col-sm-6"> | |
| 459 | + <span class="wppm_form_field_label"><b><?php echo esc_html_e('Due date','taskbuilder');?></b></span><br> | |
| 460 | + <input type="text" id="wppm_subtask_due_date" class="form-control" name="wppm_subtask_due_date" value="" autocomplete="off"> | |
| 461 | + </div> | |
| 462 | + <div class="wppm_task_frm_fields col-sm-6"> | |
| 463 | + <span class="wppm_form_field_label"><b><?php echo esc_html_e('Assignee','taskbuilder');?></b></span><br> | |
| 464 | + <input class="form-control wppm_subtask_assign_users ui-autocomplete-input" name="wppm_subtask_assign_users" type="text" autocomplete="off" placeholder="<?php echo esc_attr__('Search User...','taskbuilder');?>"> | |
| 465 | + </div> | |
| 466 | + </div> | |
| 467 | + <div class="row"> | |
| 468 | + <div class="col-sm-12"> | |
| 469 | + <ul class="wppm_subtask_filter_display_users_container" style="list-style:none;padding-left:0;"></ul> | |
| 470 | + </div> | |
| 471 | + </div> | |
| 472 | + <div class="row"> | |
| 473 | + <div class="wppm_task_frm_fields col-sm-12"> | |
| 474 | + <span class="wppm_form_field_label"><b><?php echo esc_html_e('Description','taskbuilder');?></b></span><br> | |
| 475 | + <textarea id="wppm_subtask_description" name="wppm_subtask_description" class="form-control" rows="3"></textarea> | |
| 476 | + </div> | |
| 477 | + </div> | |
| 478 | + <div class="row" style="padding-top:10px;"> | |
| 479 | + <div class="col-sm-12"> | |
| 480 | + <input type="button" value="<?php echo esc_attr__('Add','taskbuilder') ?>" class="btn btn-success btn-sm" onclick="wppm_add_new_subtask(<?php echo esc_attr($task_id)?>,<?php echo esc_attr($proj_id) ?>)"> | |
| 481 | + <button type="button" class="wppm_reset_btn" onclick="wppm_hide_add_subtask()"><?php echo esc_html_e('Cancel','taskbuilder');?></button> | |
| 482 | + </div> | |
| 483 | + </div> | |
| 484 | + </div> | |
| 485 | + </div> | |
| 486 | + <script type="text/javascript"> | |
| 487 | + jQuery(document).ready(function(){ | |
| 488 | + jQuery('#wppm_subtask_due_date').flatpickr({ | |
| 489 | + enableTime: true, | |
| 490 | + dateFormat: "Y-m-d H:i" | |
| 491 | + }); | |
| 492 | + jQuery('.wppm_subtask_assign_users').autocomplete({ | |
| 493 | + minLength: 1, | |
| 494 | + appendTo: jQuery('.wppm_subtask_assign_users').parent(), | |
| 495 | + source: function(request, response){ | |
| 496 | + jQuery.getJSON(wppm_admin.ajax_url, { | |
| 497 | + action: 'wppm_filter_autocomplete', | |
| 498 | + term: request.term, | |
| 499 | + field: 'task_users_by_project_name', | |
| 500 | + proj_id: <?php echo (int) $task->project; ?> | |
| 501 | + }, function(data){ response(data); }); | |
| 502 | + }, | |
| 503 | + select: function(event, ui){ | |
| 504 | + if(!ui.item.user_id){ return false; } | |
| 505 | + var html_str = '<li class="wppm_filter_display_element" style="list-style:none">' | |
| 506 | + +'<div class="flex-container">' | |
| 507 | + +'<div class="wppm_filter_display_text">' | |
| 508 | + + ui.item.label | |
| 509 | + + '<input type="hidden" name="wppm_subtask_user_names[]" value="'+ui.item.user_id+'">' | |
| 510 | + +'</div>' | |
| 511 | + +'<div class="wppm_filter_display_remove" onclick="wppm_remove_subtask_user(this);"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/cross.svg'); ?>" alt="delete"></div>' | |
| 512 | + +'</div>' | |
| 513 | + +'</li>'; | |
| 514 | + jQuery('.wppm_subtask_filter_display_users_container').append(html_str); | |
| 515 | + jQuery(this).val(''); | |
| 516 | + return false; | |
| 517 | + } | |
| 518 | + }).focus(function(){ jQuery(this).autocomplete("search", ""); }); | |
| 519 | + }); | |
| 520 | + </script> | |
| 521 | + <?php } ?> | |
| 522 | + </div> | |
| 523 | + <?php } ?> | |
| 524 | + <div class="wppm_task_checklist_container" id="wppm_task_checklist_container"> | |
| 525 | + <div id="wppm_checklist_container"> | |
| 526 | + <?php | |
| 527 | + if(!empty($wppm_checklist)){ | |
| 528 | + foreach( $wppm_checklist as $key=>$list){ | |
| 529 | + ?> | |
| 530 | + <div class="row"> | |
| 531 | + <div class="col-sm-8"> | |
| 532 | + <span class="wppm_checklist_label"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/checklist.svg'); ?>" alt="checklist"><?php echo isset($list->checklist_name) ? esc_html($list->checklist_name):"" ?></span> | |
| 533 | + </div> | |
| 534 | + <?php | |
| 535 | + $check_style = (($list->created_by == $current_user->ID || $current_user->has_cap('manage_options') || $user_role == 1 || $wppmfunction->has_permission('edit_checklist',$task->id)) && $task->is_archived!=1)? "display:inline":"display:none"; ?> | |
| 536 | + <?php $disabled = (($list->created_by == $current_user->ID || $current_user->has_cap('manage_options') || $user_role == 1 || $wppmfunction->has_permission('delete_checklist',$task->id)|| ($wppmfunction->has_permission('add_checklist',0))) && $task->is_archived!=1)? "":"disabled"; ?> | |
| 537 | + <?php if($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')){ ?> | |
| 538 | + <div class="col-sm-4" style="text-align:right;<?php echo esc_attr($check_style) ?>"> | |
| 539 | + <a class="wppm_delete_checklist" onclick="wppm_delete_checklist(<?php echo esc_attr($list->id);?>,<?php echo esc_attr($task->id);?>,<?php echo esc_attr($proj_id);?>)"><?php echo esc_html_e('Delete Checklist','taskbuilder');?></a> | |
| 540 | + <input type="hidden" name="wppm_delete_checklist_ajax_nonce" id="wppm_delete_checklist_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_delete_checklist' ) ); ?>"> | |
| 541 | + </div> | |
| 542 | + <?php }?> | |
| 543 | + </div> | |
| 544 | + <div class="wppm_progress_bar_container row"> | |
| 545 | + <div class="col-sm-4"> | |
| 546 | + <span class="wppm_progressbar_label" id="wppm_progressbar_label_<?php echo esc_attr($list->id)?>">0%</span> | |
| 547 | + </div> | |
| 548 | + <div class="wppm_progress_bar col-sm-8"> | |
| 549 | + <div id="CheckProgress_<?php echo esc_attr($list->id);?>" class="wppm_checkprogress" role="progressbar" style="width: 0%" aria-valuemin="0" aria-valuemax="100"></div> | |
| 550 | + </div> | |
| 551 | + </div> | |
| 552 | + <?php | |
| 553 | + $list_id = absint($list->id); | |
| 554 | + $sql = $wpdb->prepare( | |
| 555 | + "SELECT * | |
| 556 | + FROM {$wpdb->prefix}wppm_checklist_items | |
| 557 | + WHERE checklist_id = %d | |
| 558 | + ORDER BY load_order ASC", | |
| 559 | + $list_id | |
| 560 | + ); | |
| 561 | + // Execute | |
| 562 | + $wppm_checklist_items = $wpdb->get_results($sql); | |
| 563 | + ?> | |
| 564 | + <ul id="wppm_checklist_items_container_<?php echo esc_attr($list->id) ?>" class="wppm_checklist_items_container" style="list-style-type: none; padding-left:0px; margin-top:10px; margin-bottom:10px;"> | |
| 565 | + <?php | |
| 566 | + if(!empty( $wppm_checklist_items)){ | |
| 567 | + foreach($wppm_checklist_items as $key=>$val){ | |
| 568 | + $checked = $val->checked == 1 ? 'checked="checked"' : ''; | |
| 569 | + ?> | |
| 570 | + <li id="wppm_checklist_<?php echo esc_attr($val->id) ?>" data-id="<?php echo esc_attr($val->id); ?>" class="row wppm_checklist_item" style="margin-bottom:10px;font: 15px 'Helvetica Neue',Helvetica,Arial,sans-serif;"> | |
| 571 | + <div class="col-sm-8" id="wppm_checklist_item_container_<?php echo esc_attr($val->id) ?>"> | |
| 572 | + <span class="wppm_chk_items_drag">☰</span> | |
| 573 | + <input id="wppm_checklist_item_<?php echo esc_attr($val->id) ?>" class="wppm_checklist_item_<?php echo esc_attr($val->checklist_id) ?>" onchange="wppm_checklist_progress(<?php echo esc_attr($val->checklist_id) ?>,<?php echo esc_attr($val->id) ?>,<?php echo esc_attr($task->id) ?>)" type="checkbox" name="wppm_checklist" <?php echo esc_attr($checked) ?> value="<?php echo esc_attr($val->id) ?>" <?php echo esc_attr($disabled) ?> style="margin:5px;"><label style="padding-top: 5px;font-weight: normal;font: 13px 'Helvetica Neue',Helvetica,Arial,sans-serif;"><?php echo isset($val->item_name) ? esc_html($val->item_name) : "" ?></label> | |
| 574 | + <input type="hidden" name="wppm_checklist_progress_ajax_nonce" id="wppm_checklist_progress_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_set_checklist_progress' ) ); ?>"> | |
| 575 | + </div> | |
| 576 | + <?php if (($list->created_by == $current_user->ID || $current_user->has_cap('manage_options') || $user_role == 1 || $wppmfunction->has_permission('delete_checklist',$task->id)) && $task->is_archived!=1) { ?> | |
| 577 | + <div class="col-sm-4" id="wppm_checklist_action_<?php echo esc_attr($val->id) ?>" style="text-align:right; display:none;cursor:pointer;"> | |
| 578 | + <span onclick=wppm_edit_checklist_item(<?php echo esc_attr($val->id) ?>,<?php echo esc_attr($val->checklist_id) ?>,<?php echo esc_attr( $proj_id);?>,<?php echo esc_attr($id) ?>)><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit1.svg'); ?>" alt="edit"></span> | |
| 579 | + <input type="hidden" name="wppm_edit_checklist_item_ajax_nonce" id="wppm_edit_checklist_item_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_edit_checklist_item' ) ); ?>"> | |
| 580 | + <span onclick=wppm_delete_checklist_item(<?php echo esc_attr($val->id) ?>,<?php echo esc_attr($val->checklist_id) ?>,<?php echo esc_attr($proj_id);?>,<?php echo esc_attr($id) ?>)><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/trash.svg'); ?>" alt="delete"></span> | |
| 581 | + <input type="hidden" name="wppm_delete_checklist_item_ajax_nonce" id="wppm_delete_checklist_item_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_remove_checklist_item' ) ); ?>"> | |
| 582 | + </div> | |
| 583 | + <?php } ?> | |
| 584 | + </li> | |
| 585 | + <?php | |
| 586 | + } | |
| 587 | + } ?> | |
| 588 | + <?php if(($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')) && $task->is_archived!=1){ ?> | |
| 589 | + <div class="row"> | |
| 590 | + <div class="col-sm-12 wppm_add_checklist_item_container_<?php echo esc_attr($list->id) ?>" style="padding-top:15px;"> | |
| 591 | + <a class="wppm_add_checklist" id="wppm_add_checklist_item_btn_<?php echo esc_attr($list->id) ?>" onclick="wppm_add_checklist_item(<?php echo esc_attr($list->id)?>)"><?php echo esc_html_e('+ Add item','taskbuilder');?></a> | |
| 592 | + </div> | |
| 593 | + </div> | |
| 594 | + <?php }?> | |
| 595 | + <?php if(($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')) && $task->is_archived!=1){ ?> | |
| 596 | + <div class="row"> | |
| 597 | + <div class="col-sm-12" style="display:none;" id="wppm_add_checklist_label_container_<?php echo esc_attr($list->id) ?>"> | |
| 598 | + <div class="row" id="wppm_add_new_checklist_item_<?php echo esc_attr($list->id) ?>"> | |
| 599 | + <div class="col-sm-12"> | |
| 600 | + <input type="text" id="wppm_checklist_item_label_<?php echo esc_attr($list->id) ?>" class="wppm_checklist_item_label_<?php echo esc_attr($list->id) ?>" placeholder="<?php echo esc_attr__('Add an item','taskbuilder') ?>" name="wppm_checklist_item_label" style="font: 13px 'Helvetica Neue',Helvetica,Arial,sans-serif;"> | |
| 601 | + <input type="button" value="Add" class="btn btn-success btn-sm wppm_add_new_item_btn_<?php echo esc_attr($list->id); ?>" onclick="wppm_add_new_checklist_item(<?php echo esc_attr($list->id)?>,<?php echo esc_attr($task->id)?>,<?php echo esc_attr($proj_id) ?>)"> | |
| 602 | + <input type="hidden" name="wppm_checklist_item_ajax_nonce" id="wppm_checklist_item_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_add_new_checklist_item' ) ); ?>"> | |
| 603 | + <span onclick="wppm_remove_add_checklist_container(<?php echo esc_attr($list->id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/cancel.svg'); ?>" alt="delete"></span> | |
| 604 | + </div> | |
| 605 | + </div> | |
| 606 | + </br> | |
| 607 | + </div> | |
| 608 | + </div> | |
| 609 | + <?php }?> | |
| 610 | + <hr class="wppm_checklist_divider"> | |
| 611 | + </ul> | |
| 612 | + <?php | |
| 613 | + } | |
| 614 | + } ?> | |
| 615 | + </div><?php | |
| 616 | + if($user_role != 3){ | |
| 617 | + if(($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')) && $task->is_archived!=1){ ?> | |
| 618 | + <div id="wppm_add_checklist_container"> | |
| 619 | + <div class="row"> | |
| 620 | + <div class="col-sm-12"> | |
| 621 | + <span id="wppm_add_checklist" onclick="wppm_add_checklist()"> <?php echo esc_html_e('+Add a checklist','taskbuilder')?> </span> | |
| 622 | + </div> | |
| 623 | + </div> | |
| 624 | + <div class="row" id="wppm_add_new_checklist" style="display:none;"> | |
| 625 | + <div class="col-sm-12"> | |
| 626 | + <input type="text" class="wppm_checklist_label" placeholder="<?php echo esc_attr__('Please insert checklist title','taskbuilder');?>" id="wppm_checklist_label" name="wppm_checklist_label"> | |
| 627 | + <input type="button" value="Add" id="wppm_checklist_btn" class="btn btn-success btn-sm" onclick="wppm_add_new_checklist(<?php echo esc_attr($id)?>,<?php echo esc_attr($proj_id) ?>)"> | |
| 628 | + <input type="hidden" name="wppm_checklist_ajax_nonce" id="wppm_checklist_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_add_new_checklist' ) ); ?>"> | |
| 629 | + <span onclick="wppm_remove_add_checklist()"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/cross1.svg'); ?>"></span> | |
| 630 | + </div> | |
| 631 | + </div> | |
| 632 | + </br> | |
| 633 | + </div><?php | |
| 634 | + } | |
| 635 | + }?> | |
| 636 | + </div> | |
| 637 | + <div id="wppm_activity_container" style="<?php echo ($wppm_task_hide_comment_section==0 || $user_role==3) ? 'display:none;' : 'display:block;' ?>"> | |
| 638 | + <div class="row"> | |
| 639 | + <div class="col-sm-12" style="margin-top:5px;"> | |
| 640 | + <span class="wppm_task_discussion"><?php echo esc_html_e('Comment','taskbuilder')?></span><br> | |
| 641 | + </div> | |
| 642 | + </div> | |
| 643 | + <div class="row"> | |
| 644 | + <div class="col-sm-12" style="<?php echo ($task->is_archived==1) ? 'display:none;' : 'display:block;' ?>"> | |
| 645 | + <textarea id="wppm_task_comment" placeholder="<?php echo esc_attr__('Write a comment...','taskbuilder');?>" onclick="wppm_add_task_comment()" name="wppm_task_comment"></textarea> | |
| 646 | + </div> | |
| 647 | + </div> | |
| 648 | + <div class="row" id="wppm_comment_btn" style="<?php echo ($task->is_archived==1) ? 'display:none;' : 'display:block;' ?>"> | |
| 649 | + <div class="col-sm-6"> | |
| 650 | + <span id="wppm_attach_file" onclick="wppm_upload_file()"><?php echo esc_html_e('Attach Files','taskbuilder')?></span> | |
| 651 | + </div> | |
| 652 | + <div class="col-sm-6"> | |
| 653 | + <button type="button" id="wppm_individual_cancel_comment_btn" onclick="wppm_cancel_comment();" class="wppm-btn-cancel"> | |
| 654 | + <?php echo esc_html_e('Cancel','taskbuilder')?> | |
| 655 | + </button> | |
| 656 | + <button type="button" id="wppm_individual_submit_task_comment_btn" style="background-color:<?php echo esc_attr($appearance_settings['comment-send-btn-bg-color'])?>;color:<?php echo esc_attr($appearance_settings['comment-send-btn-color'])?>!important;" onclick="wppm_submit_task_comment(<?php echo esc_attr($id); ?>,<?php echo esc_attr($proj_id); ?>);" class="wppm-btn"> | |
| 657 | + <?php echo esc_html_e('SEND','taskbuilder')?> | |
| 658 | + </button> | |
| 659 | + <input type="hidden" name="_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_submit_task_comment' ) ); ?>"> | |
| 660 | + </div> | |
| 661 | + </div> | |
| 662 | + <div class="row" style="<?php echo ($task->is_archived==1) ? 'display:none;' : 'display:block;' ?>"> | |
| 663 | + <div class="wppm_attachment_container col-sm-12" style="display:none;"> | |
| 664 | + </div> | |
| 665 | + </div> | |
| 666 | + </div> | |
| 667 | + <div class="wppm_thread_container" style="<?php echo ($wppm_task_hide_comment_section==0 || $user_role==3) ? 'display:none;' : 'display:block;' ?>"> | |
| 668 | + <?php | |
| 669 | + if(!empty($task_comment)){ | |
| 670 | + foreach($task_comment as $comment){ | |
| 671 | + $task_comment_meta = $wpdb->get_row( $wpdb->prepare( | |
| 672 | + "SELECT * | |
| 673 | + FROM {$wpdb->prefix}wppm_task_comment_meta | |
| 674 | + WHERE task_id = %d | |
| 675 | + AND comment_id = %d", | |
| 676 | + absint($id), | |
| 677 | + absint($comment->id) | |
| 678 | + ) | |
| 679 | + ); | |
| 680 | + $user = get_userdata( $comment->created_by ); | |
| 681 | + $comment_body = (!empty($comment->body) ? ($comment->body) : ''); | |
| 682 | + $date = wp_date("Y-m-d H:i:s" ,strtotime($comment->create_time)); | |
| 683 | + $thread_date = wp_date("d F Y, h:i:s A" ,strtotime($date)); | |
| 684 | + $attachment_ids = isset($comment->attachment_ids)? $comment->attachment_ids : ''; | |
| 685 | + if($attachment_ids!=""){ | |
| 686 | + $attachments = explode(",",$attachment_ids); | |
| 687 | + } else { | |
| 688 | + $attachments = array(); | |
| 689 | + } | |
| 690 | + ?> | |
| 691 | + <div class="wppm_thread"> | |
| 692 | + <div class="wppm_thread_avatar"> | |
| 693 | + <?php echo (get_avatar($comment->created_by, 40));?> | |
| 694 | + </div> | |
| 695 | + <div class="wppm_thread_body"> | |
| 696 | + <div class="wppm_thread_user_name"> | |
| 697 | + <strong style="color:<?php echo esc_attr($appearance_settings['comment-primary-color']);?>"><?php echo isset($user->display_name) ? esc_html($user->display_name) : '' ?></strong> | |
| 698 | + <span><?php if(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_status')){ | |
| 699 | + $comment_log_body = unserialize($comment->body); | |
| 700 | + $prev_status = $comment_log_body['prev_status']; | |
| 701 | + $new_status = $comment_log_body['new_status']; | |
| 702 | + if(isset($prev_status)){ | |
| 703 | + $task_prev_status = $wpdb->get_row( $wpdb->prepare( | |
| 704 | + "SELECT * FROM {$wpdb->prefix}wppm_task_statuses where id = %d", | |
| 705 | + absint($prev_status) | |
| 706 | + )); | |
| 707 | + } | |
| 708 | + if(isset($new_status)){ | |
| 709 | + $task_new_status = $wpdb->get_row( $wpdb->prepare( | |
| 710 | + "SELECT * FROM {$wpdb->prefix}wppm_task_statuses where id = %d", | |
| 711 | + absint($new_status) | |
| 712 | + )); | |
| 713 | + } | |
| 714 | + printf( | |
| 715 | + esc_html__( 'Changed status from %1$s to %2$s', 'taskbuilder' ), | |
| 716 | + esc_html( $task_prev_status->name ), | |
| 717 | + esc_html( $task_new_status->name ) | |
| 718 | + ); | |
| 719 | + } if(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_creator')){ | |
| 720 | + $comment_log_body = unserialize($comment->body); | |
| 721 | + $prev_user = $comment_log_body['prev_user']; | |
| 722 | + $new_user = $comment_log_body['new_user']; | |
| 723 | + $prev_user_data = get_userdata($prev_user); | |
| 724 | + $new_user_data = get_userdata($new_user); | |
| 725 | + printf( | |
| 726 | + esc_html__( 'Changed creator from %1$s to %2$s', 'taskbuilder' ), | |
| 727 | + esc_html( $prev_user_data->display_name ), | |
| 728 | + esc_html( $new_user_data->display_name ) | |
| 729 | + ); | |
| 730 | + } | |
| 731 | + if( !empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_assign_user')){ | |
| 732 | + esc_html_e("changed the Assignee","taskbuilder"); | |
| 733 | + } | |
| 734 | + if(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_priority')){ | |
| 735 | + $comment_log_body = unserialize($comment->body); | |
| 736 | + $prev_prio = $comment_log_body['prev_prio']; | |
| 737 | + $new_prio = $comment_log_body['new_prio']; | |
| 738 | + if(isset($prev_prio)){ | |
| 739 | + $prev_prio = absint($prev_prio); | |
| 740 | + $task_prev_prio = $wpdb->get_row( $wpdb->prepare( | |
| 741 | + "SELECT * FROM {$wpdb->prefix}wppm_task_priorities where id = %d", | |
| 742 | + $prev_prio | |
| 743 | + )); | |
| 744 | + } | |
| 745 | + if(isset($new_prio)){ | |
| 746 | + $new_prio = absint($new_prio); | |
| 747 | + $task_new_prio = $wpdb->get_row( $wpdb->prepare( | |
| 748 | + "SELECT * FROM {$wpdb->prefix}wppm_task_priorities where id = %d", | |
| 749 | + $new_prio | |
| 750 | + )); | |
| 751 | + } | |
| 752 | + $task_prev_prio_name = !empty($task_prev_prio) ? $task_prev_prio->name: "None"; | |
| 753 | + $task_new_prio_name = !empty($task_new_prio) ? $task_new_prio->name: "None"; | |
| 754 | + printf( | |
| 755 | + esc_html__( 'Changed priority from %1$s to %2$s', 'taskbuilder' ), | |
| 756 | + esc_html( $task_prev_prio_name ), | |
| 757 | + esc_html( $task_new_prio_name ) | |
| 758 | + ); | |
| 759 | + } | |
| 760 | + ?> | |
| 761 | + <small class="wppm_comment_date" style="color:<?php echo esc_attr($appearance_settings['comment-date-color']);?>"><i><?php echo isset($thread_date) ? esc_html($thread_date) : '' ?></i></small> | |
| 762 | + <div class="wppm_thread_action"> | |
| 763 | + <?php if((((($current_user->has_cap('manage_options')) || ($wppmfunction->has_comment_permission('edit_task_comment',$id,$comment->id))) && ((empty($task_comment_meta->comment_type)) || (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='comment')))) && ($task->is_archived!=1)){ ?> | |
| 764 | + <span title="Edit this thread" onclick="wppm_edit_thread(<?php echo esc_attr($comment->id)?>,<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit1.svg'); ?>" alt="edit"></span> | |
| 765 | + <span title="Delete this thread" onclick="wppm_delete_thread(<?php echo esc_attr($comment->id) ?>,<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/trash.svg'); ?>" alt="delete"></span> | |
| 766 | + <?php } ?> | |
| 767 | + </div> | |
| 768 | + </div> | |
| 769 | + <div class="wppm_thread_messege" style="color:<?php echo esc_attr($appearance_settings['comment-secondary-color']);?>"> | |
| 770 | + <?php | |
| 771 | + $allowedtags = array( 'br' => array(), 'abbr' => array('title' => array(),), 'p' => array(), 'strong' => array(), 'a' => array('href' => array(), 'title' => array(), 'target'=> array(), 'rel'=>array()),'em' =>array(),'span' =>array('class' => true, | |
| 772 | + 'data-user-id' => true,'data-username' => true,), 'blockquote'=>array('cite' => array(),),'div' => array('class' => array(),'title' => array(),'style' => array(),),'ul'=>array(),'li'=>array(),'ol'=>array(),'img' => array( 'alt'=> array(),'class' => array(),'height' => array(),'src'=> array(),'width'=> array(),)); | |
| 773 | + if(!empty($comment_body) && ((empty($task_comment_meta->comment_type)) || (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='comment') || (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='delete_task_comment'))){ | |
| 774 | + $comment_body = $wppmfunction->wppm_clean_mentions_html($comment_body); | |
| 775 | + $comment_body = $wppmfunction->wppm_highlight_user_mentions($comment_body, $current_user->ID); | |
| 776 | + //echo wp_kses(wpautop($comment_body),$allowedtags); | |
| 777 | + //wp_kses($comment, $allowed_tags); | |
| 778 | + echo wp_kses_post(($comment_body)); | |
| 779 | + } elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_status')){ ?> | |
| 780 | + <span class="wppm_admin_label" style="margin-right: 10px; background-color:<?php echo isset($task_prev_status->bg_color) ? esc_attr($task_prev_status->bg_color):""; ?>;color:<?php echo isset($task_prev_status->color) ? esc_attr($task_prev_status->color): "" ?>;"><?php echo isset($task_prev_status->name) ? esc_attr($task_prev_status->name) : "" ?></span> <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/arrow-right.svg'); ?>" alt="arrow_right"> <span class="wppm_admin_label" style="margin-left:10px; background-color:<?php echo isset($task_new_status->bg_color) ? esc_attr($task_new_status->bg_color):""; ?>;color:<?php echo isset($task_new_status->color) ? esc_attr($task_new_status->color): "" ?>;"><?php echo isset($task_new_status->name) ? esc_attr($task_new_status->name) : "" ?></span><?php | |
| 781 | + }elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_creator')){ ?> | |
| 782 | + <span style="margin-right: 10px;"><?php echo isset($prev_user_data->display_name) ? esc_attr($prev_user_data->display_name) : "" ?></span> <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/arrow-right.svg'); ?>" alt="arrow_right"> <span style="margin-left:10px;"><?php echo isset($new_user_data->display_name) ? esc_attr($new_user_data->display_name) : "" ?></span><?php | |
| 783 | + } elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_assign_user')) { | |
| 784 | + $comment_log_body = unserialize($comment->body); | |
| 785 | + $prev_assign_user = $comment_log_body['prev_assign_user']; | |
| 786 | + $new_assign_user = $comment_log_body['new_assign_user']; | |
| 787 | + $prev_assign_user_array = array(); | |
| 788 | + $new_assign_user_array = array(); | |
| 789 | + if(!empty($prev_assign_user)){ | |
| 790 | + $prev_assign_user_array = explode(",",$prev_assign_user); | |
| 791 | + } | |
| 792 | + if(!empty($new_assign_user)){ | |
| 793 | + $new_assign_user_array = explode(",",$new_assign_user); | |
| 794 | + } | |
| 795 | + $assign_user_name = array(); | |
| 796 | + $assign_user_name_str = ""; | |
| 797 | + if(!empty($prev_assign_user_array)){ | |
| 798 | + foreach($prev_assign_user_array as $val){ | |
| 799 | + $assign_user = get_userdata($val); | |
| 800 | + $assign_user_name[] = $assign_user->display_name; | |
| 801 | + } | |
| 802 | + $assign_user_name_str = implode(",",$assign_user_name); | |
| 803 | + } | |
| 804 | + $new_assign_user_name = array(); | |
| 805 | + $new_assign_user_name_str = ""; | |
| 806 | + if(!empty($new_assign_user_array)){ | |
| 807 | + foreach($new_assign_user_array as $val){ | |
| 808 | + $new_assign_user = get_userdata($val); | |
| 809 | + $new_assign_user_name[] = $new_assign_user->display_name; | |
| 810 | + } | |
| 811 | + $new_assign_user_name_str = implode(",",$new_assign_user_name); | |
| 812 | + } | |
| 813 | + ?> | |
| 814 | + <span style="margin-right: 10px;"><?php echo !empty($assign_user_name) ? esc_attr( $assign_user_name_str) : "None" ?></span> <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/arrow-right.svg'); ?>" alt="arrow_right"> <span style="margin-left:10px;"><?php echo !empty($new_assign_user_name_str) ? esc_attr($new_assign_user_name_str) : "None" ?></span><?php | |
| 815 | + } elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_priority')){ ?> | |
| 816 | + <span class="wppm_admin_label" style="margin-right: 10px; background-color:<?php echo isset($task_prev_prio->bg_color) ? esc_attr($task_prev_prio->bg_color):""; ?>;color:<?php echo isset($task_prev_prio->color) ? esc_attr($task_prev_prio->color): "" ?>;"><?php echo !empty($task_prev_prio->name) ? esc_attr($task_prev_prio->name) : "None" ?></span> <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/arrow-right.svg'); ?>" alt="arrow_right"> <span class="wppm_admin_label" style="margin-left:10px; background-color:<?php echo isset($task_new_prio->bg_color) ? esc_attr($task_new_prio->bg_color):""; ?>;color:<?php echo isset($task_new_prio->color) ? esc_attr($task_new_prio->color): "" ?>;"><?php echo !empty($task_new_prio->name) ? esc_attr($task_new_prio->name) : "None" ?></span><?php | |
| 817 | + } ?> | |
| 818 | + | |
| 819 | + </div> | |
| 820 | + <?php | |
| 821 | + if(!empty($attachments)&& (isset($task_comment_meta->comment_type) && !($task_comment_meta->comment_type=='delete_task_comment'))):?> <br> | |
| 822 | + <strong class="wppm_attachment_title"><?php echo esc_html_e('Attachments','taskbuilder');?>:</strong><br> | |
| 823 | + <table class="wppm_attachment_tbl"> | |
| 824 | + <tbody> | |
| 825 | + <?php | |
| 826 | + if(!empty($attachments)){ | |
| 827 | + foreach( $attachments as $attachment ): | |
| 828 | + $download_url = site_url('/').'?wppm_attachment='.$attachment.'&tid='.$id.'&tac='.$auth_id; | |
| 829 | + $attachment = absint($attachment); | |
| 830 | + if (empty($attachment)) { | |
| 831 | + continue; // or return, depending on the context | |
| 832 | + } | |
| 833 | + $attach = $wpdb->get_row( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_attachments where id=%d",$attachment)); | |
| 834 | + $findStr = ".txt"; | |
| 835 | + if(!empty( $attach)){ | |
| 836 | + $attachment_name = preg_replace('/' . $findStr . '/', "", $attach->name, 1); | |
| 837 | + $attachment_name = sanitize_file_name($attachment_name); | |
| 838 | + } | |
| 839 | + if((!empty($attachment_name))){ | |
| 840 | + ?> | |
| 841 | + <tr class="wppm_attachment_tr"> | |
| 842 | + <td> | |
| 843 | + <a class="wppm_attachment_link" href="<?php echo esc_url($download_url) ?>" target="_blank"> | |
| 844 | + <span class="wppm_attachment_file_name" style="padding: 7px;"><?php echo isset($attach->file_name) ? esc_html($attach->file_name):"";?></span></a> | |
| 845 | + <?php if((($comment->created_by == $current_user->ID) || ($current_user->has_cap('manage_options')) || ($wppmfunction->has_comment_permission('edit_task_comment',$id,$comment->id))) && ($task->is_archived!=1)){ ?> | |
| 846 | + <span class="wppm_thread_action_btn" onclick="wppm_thread_attachment_remove(this,<?php echo !empty($attach->id) ? esc_attr($attach->id) : 0; ?>,<?php echo !empty($comment->id) ? esc_attr($comment->id) : 0; ?>,<?php echo !empty($id) ? esc_attr($id) : 0; ?>,<?php echo !empty($proj_id) ? esc_attr($proj_id) : 0;?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/cancel.svg'); ?>" alt="cancel"></span> | |
| 847 | + <?php } ?> | |
| 848 | + </td> | |
| 849 | + </tr> | |
| 850 | + <input type="hidden" name="wppm_ajax_nonce" id="wppm_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_remove_thread_attachment' ) ); ?>"> | |
| 851 | + <?php } | |
| 852 | + endforeach; | |
| 853 | + } ?> | |
| 854 | + </tbody> | |
| 855 | + </table> | |
| 856 | + <?php do_action('wppm_after_comment_attachment',$id,$comment->id);?> | |
| 857 | + <?php endif;?> | |
| 858 | + </div> | |
| 859 | + </div> | |
| 860 | + <?php } | |
| 861 | + } ?> | |
| 862 | + </div> | |
| 863 | + </div> | |
| 864 | + <div class="wppm_individual_task_widget col-sm-4 wppm_sidebar col-md-3"> | |
| 865 | + <div class="row wppm_widget" id="wppm_status_widget"> | |
| 866 | + <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>"> | |
| 867 | + <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"><?php echo esc_html_e('Status','taskbuilder')?></h4> | |
| 868 | + <?php | |
| 869 | + if($user_role != 3){ | |
| 870 | + if((($current_user->has_cap('manage_options') || $wppm_current_user_capability == ('wppm_admin') || ($flag==true) || ($wppmfunction->has_permission('change_task_status',$id))!="") && ($task->is_archived!=1))){ | |
| 871 | + ?> | |
| 872 | + <span class="wppm_edit_task_details_widget" onclick="wppm_edit_task_status(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span> | |
| 873 | + <?php | |
| 874 | + } | |
| 875 | + } | |
| 876 | + ?> | |
| 877 | + </div> | |
| 878 | + <hr class="widget_divider"> | |
| 879 | + <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>"> | |
| 880 | + <div class="wppm_sidebar_labels"><span class="wppm_label_info" style="color:<?php echo esc_attr($appearance_settings['widget-body-label-color'])?>"><?php echo esc_html_e('Status','taskbuilder')?>:</span> <span class="wppm_admin_label" style="background-color:<?php echo (isset($task_status->bg_color))? esc_attr($task_status->bg_color):""?>;color:<?php echo (isset($task_status->color))? esc_attr($task_status->color):""?>;"><?php echo (isset($task_status->name))? esc_attr($task_status->name):"" ?> </span></div> | |
| 881 | + </div> | |
| 882 | + </div> | |
| 883 | + <div class="row wppm_widget" id="wppm_raisedby_widget"> | |
| 884 | + <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>"> | |
| 885 | + <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"> | |
| 886 | + <?php echo esc_html_e('Task Creator','taskbuilder')?></h4> | |
| 887 | + <?php if($user_role != 3){ | |
| 888 | + if ((($wppmfunction->has_permission('change_raised_by',$id ) || $current_user->has_cap('manage_options')) && ($task->is_archived!=1))) { ?> | |
| 889 | + <span class="wppm_edit_task_details_widget" onclick="wppm_edit_task_creator(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span> | |
| 890 | + <?php } | |
| 891 | + }?> | |
| 892 | + </div> | |
| 893 | + <hr class="widget_divider"> <?php | |
| 894 | + if(isset($task->created_by)){ | |
| 895 | + $user_info = get_userdata($task->created_by); | |
| 896 | + }else{ | |
| 897 | + $user_info =""; | |
| 898 | + } | |
| 899 | + ?> | |
| 900 | + <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>"> | |
| 901 | + <div style="padding:2px 0;"> | |
| 902 | + <span class="wppm_task_user_avatar"><?php echo (get_avatar($task->created_by, 25, "mysteryman")); ?></span> | |
| 903 | + <span class="wppm_task_user_names" style="color:<?php echo esc_attr($appearance_settings['widget-body-text-color'])?>;"><?php echo isset($user_info->display_name)?esc_html($user_info->display_name):""; ?></span> | |
| 904 | + </div> | |
| 905 | + </div> | |
| 906 | + </div> | |
| 907 | + <div class="row wppm_widget" id="wppm_task_users_widget_container"> | |
| 908 | + <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>"> | |
| 909 | + <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>;"><?php echo esc_html_e('Users','taskbuilder')?></h4> | |
| 910 | + <?php | |
| 911 | + if($user_role != 3){ | |
| 912 | + if ((($wppmfunction->has_permission('assign_task_users',$id ) || $current_user->has_cap('manage_options')) && ($task->is_archived!=1))) { ?> | |
| 913 | + <span class="wppm_edit_task_details_widget" onclick="wppm_edit_task_users(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($project_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span> | |
| 914 | + <?php } | |
| 915 | + }?> | |
| 916 | + </div> | |
| 917 | + <hr class="widget_divider"> | |
| 918 | + <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>"> | |
| 919 | + <div id="wppm_task_users"> | |
| 920 | + <?php | |
| 921 | + $i=0; | |
| 922 | + if(!empty($users)){ | |
| 923 | + foreach($users as $user) { | |
| 924 | + $user_data = get_userdata($user); | |
| 925 | + if(!empty($project_data['users'])){ | |
| 926 | + $proj_users = explode(',',$project_data['users']); | |
| 927 | + if(in_array($user,$proj_users)){ | |
| 928 | + $i++; | |
| 929 | + ?> | |
| 930 | + <div style="padding:2px 0;"> | |
| 931 | + <span class="wppm_task_user_avatar"><?php echo (get_avatar($user, 25, "mysteryman")); ?></span> | |
| 932 | + <span class="wppm_task_user_names" style="color:<?php echo esc_attr($appearance_settings['widget-body-text-color'])?>;"><?php echo ((!empty($user_data))? esc_html($user_data->display_name) :"") ?></span> | |
| 933 | + </div> | |
| 934 | + <?php | |
| 935 | + } | |
| 936 | + } | |
| 937 | + } | |
| 938 | + } | |
| 939 | + if($i==0){ ?> | |
| 940 | + <span class="wppm_display_user_none" style="color:<?php echo esc_attr($appearance_settings['widget-body-text-color'])?>"><?php echo esc_html_e('None','taskbuilder'); ?></span> <?php | |
| 941 | + } | |
| 942 | + ?> | |
| 943 | + </div> | |
| 944 | + </div> | |
| 945 | + </div> | |
| 946 | + <?php do_action('wppm_after_task_widgets',$id,$task_id );?> | |
| 947 | + </div> | |
| 948 | + <input type="hidden" id="wppm_nonce" value="<?php echo esc_attr(wp_create_nonce('wppm_upload_file'))?>"> | |
| 949 | + <input type="file" id="wppm_attachment_upload" class="hidden" onchange=""> | |
| 950 | + </div> | |
| 951 | +</form> | |
| 952 | +<style> | |
| 953 | + .wppm_comment_date i:hover{ | |
| 954 | + color: <?php echo esc_attr($appearance_settings['comment-date-hover-color'])?>; | |
| 955 | + } | |
| 956 | + #Layer_1{ | |
| 957 | + fill:red!important; | |
| 958 | + } | |
| 959 | +</style> | |
| 960 | +<script> | |
| 961 | +jQuery( document ).ready( function( jQuery ) { | |
| 962 | + const button = document.getElementById('wppm_print_task_btn'); | |
| 963 | + const box = document.getElementById('wppmprint_menu'); | |
| 964 | + | |
| 965 | + // Show box on button click | |
| 966 | + button.addEventListener('click', (e) => { | |
| 967 | + e.stopPropagation(); // prevent document click from firing immediately | |
| 968 | + box.style.display = 'flex'; | |
| 969 | + }); | |
| 970 | + | |
| 971 | + // Prevent hiding when clicking inside box | |
| 972 | + box.addEventListener('click', (e) => { | |
| 973 | + e.stopPropagation(); | |
| 974 | + }); | |
| 975 | + | |
| 976 | + // Hide when clicking outside | |
| 977 | + document.addEventListener('click', () => { | |
| 978 | + box.style.display = 'none'; | |
| 979 | + }); | |
| 980 | + jQuery('#wppm_task_comment').on('focus', function(){ | |
| 981 | + // showMentionList(''); | |
| 982 | + }); | |
| 983 | +<?php | |
| 984 | + if ((($current_user->ID && $current_user->has_cap('manage_options')) || $wppmfunction->has_permission('change_task_details',$task->id))){ ?> | |
| 985 | + jQuery("#wppm_edit_tstart_date").flatpickr({ | |
| 986 | + enableTime: true, | |
| 987 | + dateFormat: "Y-m-d H:i", | |
| 988 | + onChange: function(selectedDates, dateStr, instance) { | |
| 989 | + var data = { | |
| 990 | + action: 'wppm_set_change_task_start_date', | |
| 991 | + task_id:<?php echo esc_attr($task->id);?>, | |
| 992 | + date:dateStr, | |
| 993 | + _ajax_nonce:jQuery('#wppm_edit_tstart_date_ajax_nonce').val() | |
| 994 | + }; | |
| 995 | + jQuery.post(wppm_admin.ajax_url, data, function(response) { | |
| 996 | + instance.close(); | |
| 997 | + wppm_open_task(<?php echo esc_attr($task->id);?>); | |
| 998 | + }); | |
| 999 | + }, | |
| 1000 | + }); | |
| 1001 | + jQuery("#wppm_edit_tend_date").flatpickr({ | |
| 1002 | + enableTime: true, | |
| 1003 | + dateFormat: "Y-m-d H:i", | |
| 1004 | + onChange: function(selectedDates, dateStr, instance) { | |
| 1005 | + var data = { | |
| 1006 | + action: 'wppm_set_change_task_end_date', | |
| 1007 | + task_id:<?php echo esc_attr($task->id);?>, | |
| 1008 | + date:dateStr, | |
| 1009 | + _ajax_nonce:jQuery('#wppm_edit_tend_date_ajax_nonce').val() | |
| 1010 | + }; | |
| 1011 | + jQuery.post(wppm_admin.ajax_url, data, function(response) { | |
| 1012 | + instance.close(); | |
| 1013 | + wppm_open_task(<?php echo esc_attr($task->id);?>); | |
| 1014 | + }); | |
| 1015 | + }, | |
| 1016 | + }); | |
| 1017 | + <?php } ?> | |
| 1018 | + <?php foreach ($wppm_checklist as $chklist) { ?> | |
| 1019 | + var $checkboxes = jQuery('.wppm_checklist_item_'+<?php echo esc_attr($chklist->id);?>); | |
| 1020 | + var $progress = jQuery('#CheckProgress_'+<?php echo esc_attr($chklist->id);?>); | |
| 1021 | + var total = $checkboxes.length; | |
| 1022 | + var checked = jQuery('.wppm_checklist_item_'+<?php echo esc_attr($chklist->id);?>).filter(':checked').length; | |
| 1023 | + var progressWidth = Math.ceil((checked / total) * 100); | |
| 1024 | + jQuery('#CheckProgress_'+<?php echo esc_attr($chklist->id);?>).css('background','#5ba4cf'); | |
| 1025 | + jQuery('#CheckProgress_'+<?php echo esc_attr($chklist->id);?>).css('width', progressWidth + '%'); | |
| 1026 | + if(progressWidth>0){ | |
| 1027 | + jQuery('#wppm_progressbar_label_'+<?php echo esc_attr($chklist->id);?>).text(progressWidth+'%'); | |
| 1028 | + } | |
| 1029 | + <?php $wppm_checklist_items = $wpdb->get_results( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_checklist_items where checklist_id=%d",$chklist->id)); | |
| 1030 | + foreach ($wppm_checklist_items as $chkitems) { | |
| 1031 | + ?> jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).on("mouseover", function () { | |
| 1032 | + jQuery( '#wppm_checklist_action_'+<?php echo esc_attr($chkitems->id);?>).css("display","inline"); | |
| 1033 | + jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).css("background-color","#e7e8ea"); | |
| 1034 | + }) | |
| 1035 | + jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).on("mouseout", function () { | |
| 1036 | + jQuery( '#wppm_checklist_action_'+<?php echo esc_attr($chkitems->id);?>).css("display","none"); | |
| 1037 | + jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).css("background-color","#ffffff"); | |
| 1038 | + }) | |
| 1039 | + <?php | |
| 1040 | + } | |
| 1041 | + } | |
| 1042 | + $bold = (isset($wppm_toolbar_actions['bold']) && $wppm_toolbar_actions['bold']==1)? 'bold' :""; | |
| 1043 | + $italic = (isset($wppm_toolbar_actions['italic']) && $wppm_toolbar_actions['italic']==1)? 'italic' :""; | |
| 1044 | + $underline = (isset($wppm_toolbar_actions['underline']) && $wppm_toolbar_actions['underline']==1)?'underline' :""; | |
| 1045 | + $blockquote = (isset($wppm_toolbar_actions['blockquote']) && $wppm_toolbar_actions['blockquote']==1)? 'blockquote' :""; | |
| 1046 | + $align = (isset($wppm_toolbar_actions['align']) && $wppm_toolbar_actions['align']==1)? ' alignleft aligncenter alignright ' :""; | |
| 1047 | + $bullist = (isset($wppm_toolbar_actions['bullist']) && $wppm_toolbar_actions['bullist']==1)? 'bullist' :""; | |
| 1048 | + $numlist = (isset($wppm_toolbar_actions['numlist']) && $wppm_toolbar_actions['numlist']==1)? 'numlist' :""; | |
| 1049 | + $rtl = (isset($wppm_toolbar_actions['rtl']) && $wppm_toolbar_actions['rtl']==1)? 'rtl' :""; | |
| 1050 | + $link = (isset($wppm_toolbar_actions['link']) && $wppm_toolbar_actions['link']==1)? 'link' :""; | |
| 1051 | + $image = (isset($wppm_toolbar_actions['wppm_insert_editor_img']) && $wppm_toolbar_actions['wppm_insert_editor_img']==1)? 'image' :""; | |
| 1052 | + $forecolor = (isset($wppm_toolbar_actions['forecolor']) && $wppm_toolbar_actions['forecolor']==1)? 'forecolor' :""; | |
| 1053 | + $backcolor = (isset($wppm_toolbar_actions['backcolor']) && $wppm_toolbar_actions['backcolor']==1)? 'backcolor' :""; | |
| 1054 | + $strikethrough = (isset($wppm_toolbar_actions['strikethrough']) && $wppm_toolbar_actions['strikethrough']==1)? 'strikethrough' :""; | |
| 1055 | + $toolbar = trim("$bold $italic $underline $blockquote | $align | $bullist $numlist | $rtl | $link $image | $forecolor $backcolor $strikethrough"); | |
| 1056 | + if(($wppm_tinymce_visibility_open_task==1)){ ?> | |
| 1057 | + if((wppm_admin.rich_text_editor) && (wppm_admin.rich_text_editor.trim().length > 0) && (wppm_admin.rich_text_editor == 1)){ | |
| 1058 | + getMentionDropdown(editor); | |
| 1059 | + tinymce.remove(); | |
| 1060 | + tinymce.init({ | |
| 1061 | + selector:'#wppm_task_comment', | |
| 1062 | + body_id: 'wppm_task_comment', | |
| 1063 | + menubar: false, | |
| 1064 | + statusbar: false, | |
| 1065 | + height : '200', | |
| 1066 | + width : '100%', | |
| 1067 | + plugins: ['lists link image directionality paste textcolor'], | |
| 1068 | + valid_elements: '*[*]', | |
| 1069 | + extended_valid_elements: 'span[class|data-username|data-user-id|,p,br,strong,em,a[href|target]contenteditable]', | |
| 1070 | + toolbar:'<?php echo esc_js($toolbar); ?>', | |
| 1071 | + content_style: ` | |
| 1072 | + .wppm-mention{ | |
| 1073 | + display:inline-block; | |
| 1074 | + background:linear-gradient(135deg,#eef2ff,#e0e7ff); | |
| 1075 | + color:#5b21b6; | |
| 1076 | + padding:2px 8px; | |
| 1077 | + border-radius:16px; | |
| 1078 | + font-weight:600; | |
| 1079 | + border:1px solid #c7d2fe; | |
| 1080 | + } | |
| 1081 | + | |
| 1082 | + .wppm-mention-me{ | |
| 1083 | + background:linear-gradient(135deg,#fef3c7,#fde68a); | |
| 1084 | + color:#92400e; | |
| 1085 | + border:1px solid #fbbf24; | |
| 1086 | + font-weight:700; | |
| 1087 | + } | |
| 1088 | + ` | |
| 1089 | + setup: function (editor) { | |
| 1090 | + wppmmenwppmMentionSetup(editor) | |
| 1091 | + | |
| 1092 | + } // ✅ only ONE setup | |
| 1093 | + }); | |
| 1094 | + jQuery('#wppm_comment_btn').show(); | |
| 1095 | + } | |
| 1096 | + <?php } ?> | |
| 1097 | + }); | |
| 1098 | + | |
| 1099 | +jQuery(function(jQuery){ | |
| 1100 | + // Checklist Sorting | |
| 1101 | + jQuery(".wppm_checklist_items_container").sortable({ | |
| 1102 | + handle: ".wppm_chk_items_drag", | |
| 1103 | + update: function() { | |
| 1104 | + let order = []; | |
| 1105 | + jQuery(this).find("li").each(function(){ | |
| 1106 | + order.push(jQuery(this).data("id")); // checklist item id | |
| 1107 | + }); | |
| 1108 | + | |
| 1109 | + // AJAX Save | |
| 1110 | + jQuery.post(wppm_admin.ajax_url, { | |
| 1111 | + action: "wppm_update_checklist_order", | |
| 1112 | + order: order, | |
| 1113 | + task_id: <?php echo esc_attr($id); ?>, | |
| 1114 | + _ajax_nonce: '<?php echo esc_attr( wp_create_nonce( 'wppm_update_checklist_order' ) ); ?>' | |
| 1115 | + }, function(response_str){ | |
| 1116 | + var response = JSON.parse(response_str); | |
| 1117 | + jQuery('.wppm_submit_wait').hide(); | |
| 1118 | + if (response.sucess_status=='1') { | |
| 1119 | + jQuery('#wppm_alert_success .wppm_alert_text').text(response.messege); | |
| 1120 | + } | |
| 1121 | + jQuery('#wppm_alert_success').slideDown('fast',function(){}); | |
| 1122 | + setTimeout(function(){ jQuery('#wppm_alert_success').slideUp('fast',function(){}); }, 3000); | |
| 1123 | + }); | |
| 1124 | + } | |
| 1125 | + }); | |
| 1126 | + | |
| 1127 | +}); | |
| 1128 | + | |
| 1129 | +function wppm_cancel_comment(){ <?php | |
| 1130 | + if(!empty($wppm_rich_text_editor) && ($wppm_rich_text_editor == 1)){ | |
| 1131 | + ?> | |
| 1132 | + tinyMCE. activeEditor. setContent(''); | |
| 1133 | + tinymce.remove('#wppm_task_comment'); | |
| 1134 | + jQuery('#wppm_comment_btn').hide(); | |
| 1135 | + <?php } else{ | |
| 1136 | + ?> | |
| 1137 | + jQuery('#wppm_task_comment').css("width", "80%"); | |
| 1138 | + jQuery('#wppm_task_comment').css("height", "30px"); | |
| 1139 | + jQuery('#wppm_task_comment').css("color", "#000"); | |
| 1140 | + jQuery('#wppm_task_comment').css("padding", "5px"); | |
| 1141 | + jQuery('#wppm_task_comment').css(" margin-bottom", "15px"); | |
| 1142 | + jQuery('#wppm_task_comment').css("overflow", "hidden"); | |
| 1143 | + jQuery('#wppm_task_comment').css("border", "1 px solid #eee"); | |
| 1144 | + jQuery('#wppm_task_comment').css("color", "#eee"); | |
| 1145 | + jQuery('#wppm_task_comment').css("margin-top", "10px"); | |
| 1146 | + jQuery('#wppm_comment_btn').hide(); | |
| 1147 | + <?php }?> | |
| 1148 | +} | |
| 1149 | + | |
| 1150 | +function wppm_add_task_comment(){ | |
| 1151 | + if((wppm_admin.rich_text_editor == 1)){ | |
| 1152 | + tinymce.remove(); | |
| 1153 | + tinymce.init({ | |
| 1154 | + selector:'#wppm_task_comment', | |
| 1155 | + body_id: 'wppm_task_comment', | |
| 1156 | + directionality : '<?php //echo 'rtl'; ?>', | |
| 1157 | + menubar: false, | |
| 1158 | + statusbar: false, | |
| 1159 | + height : '200', | |
| 1160 | + width : '100%', | |
| 1161 | + plugins: [ | |
| 1162 | + 'lists link image directionality paste textcolor' | |
| 1163 | + ], | |
| 1164 | + image_advtab: true, | |
| 1165 | + toolbar:'<?php echo esc_js( $toolbar ); ?>', | |
| 1166 | + branding: false, | |
| 1167 | + autoresize_bottom_margin: 20, | |
| 1168 | + browser_spellcheck : true, | |
| 1169 | + relative_urls : false, | |
| 1170 | + remove_script_host : false, | |
| 1171 | + convert_urls : true, | |
| 1172 | + paste_as_text: true, | |
| 1173 | + setup: function (editor) { | |
| 1174 | + wppmMentionSetup(editor); | |
| 1175 | + } | |
| 1176 | + }); | |
| 1177 | + } else{ | |
| 1178 | + jQuery('#wppm_task_comment').css("width", "100%"); | |
| 1179 | + jQuery('#wppm_task_comment').css("height", "160px"); | |
| 1180 | + jQuery('#wppm_task_comment').css("color", "#000"); | |
| 1181 | + } | |
| 1182 | + jQuery('#wppm_comment_btn').show(); | |
| 1183 | +} | |
| 1184 | + | |
| 1185 | +function wppm_submit_task_comment(id, proj_id){ | |
| 1186 | + jQuery('#wppm_mention_list').remove(); | |
| 1187 | + var dataform = new FormData(jQuery('#wppm_open_task')[0]); | |
| 1188 | + dataform.append('action','wppm_submit_task_comment'); | |
| 1189 | + let comment_body; | |
| 1190 | + if(wppm_admin.rich_text_editor == 1){ | |
| 1191 | + const editor = tinyMCE.get('wppm_task_comment'); | |
| 1192 | + // Remove dropdown from TinyMCE iframe | |
| 1193 | + const dropdown = editor.getDoc().getElementById('wppm_mention_list'); | |
| 1194 | + if (dropdown) { | |
| 1195 | + dropdown.remove(); | |
| 1196 | + } | |
| 1197 | + comment_body = editor.getContent().trim(); | |
| 1198 | + //comment_body = tinyMCE.get('wppm_task_comment').getContent().trim(); | |
| 1199 | + // remove mention dropdown if accidentally inserted | |
| 1200 | + //comment_body = comment_body.replace(/<div[^>]*id="wppm_mention_list"[^>]*>.*?<\/div>/gi, ''); | |
| 1201 | + comment_body = comment_body.replace( /<div class="mention-item"[\s\S]*?<\/div>/g, ''); | |
| 1202 | + } else { | |
| 1203 | + comment_body = jQuery("#wppm_task_comment").val(); | |
| 1204 | + } | |
| 1205 | + dataform.append('comment_body', comment_body); | |
| 1206 | + dataform.append('task_id', id); | |
| 1207 | + jQuery('#wppm_task_container').html(wppm_admin.loading_html); | |
| 1208 | + jQuery.ajax({ | |
| 1209 | + url: wppm_admin.ajax_url, | |
| 1210 | + type: 'POST', | |
| 1211 | + data: dataform, | |
| 1212 | + processData: false, | |
| 1213 | + contentType: false | |
| 1214 | + }) | |
| 1215 | + .done(function () { | |
| 1216 | + if (proj_id != 0 && proj_id != "") { | |
| 1217 | + wppm_open_project_tasks(id, proj_id); | |
| 1218 | + } else { | |
| 1219 | + wppm_open_task(id); | |
| 1220 | + } | |
| 1221 | + }); | |
| 1222 | +} | |
| 1223 | + | |
| 1224 | +function wppm_add_checklist_item(checklist_id){ | |
| 1225 | + jQuery('#wppm_add_checklist_label_container_'+checklist_id).show(); | |
| 1226 | + jQuery('#wppm_add_checklist_item_btn_'+checklist_id).hide(); | |
| 1227 | + jQuery('.wppm_add_checklist_label_container_'+checklist_id).show(); | |
| 1228 | + jQuery('.wppm_checklist_item_label_'+checklist_id).css('height', '30px'); | |
| 1229 | + jQuery('.wppm_add_new_item_btn_'+checklist_id).css('margin', '10px'); | |
| 1230 | +} | |
| 1231 | + | |
| 1232 | +function wppm_add_checklist(){ | |
| 1233 | + jQuery('#wppm_add_checklist').hide(); | |
| 1234 | + jQuery('#wppm_add_new_checklist').show(); | |
| 1235 | +} | |
| 1236 | + | |
| 1237 | +function wppm_remove_add_checklist_container(checklist_id){ | |
| 1238 | + jQuery('#wppm_add_checklist_label_container_'+checklist_id).hide(); | |
| 1239 | + jQuery('#wppm_add_checklist_item_btn_'+checklist_id).show(); | |
| 1240 | +} | |
| 1241 | + | |
| 1242 | +function wppm_remove_add_checklist(){ | |
| 1243 | + jQuery('#wppm_add_new_checklist').hide(); | |
| 1244 | + jQuery('#wppm_add_checklist').show(); | |
| 1245 | +} | |
| 1246 | + | |
| 1247 | +function wppm_upload_file(){ | |
| 1248 | + jQuery('#wppm_attachment_upload').unbind('change'); | |
| 1249 | + jQuery('#wppm_attachment_upload').on('change', function() { | |
| 1250 | + var flag = false; | |
| 1251 | + var file = this.files[0]; | |
| 1252 | + jQuery('#wppm_attachment_upload').val(''); | |
| 1253 | + var allowedExtension = ['exe', 'php','js']; | |
| 1254 | + var file_name_split = file.name.split('.'); | |
| 1255 | + var file_extension = file_name_split[file_name_split.length-1]; | |
| 1256 | + file_extension = file_extension.toLowerCase(); | |
| 1257 | + if( (jQuery.inArray(file_extension,allowedExtension) > -1)){ | |
| 1258 | + flag = true; | |
| 1259 | + alert("<?php echo esc_js(__( 'Attached file type not allowed!', 'taskbuilder' ) ); ?>"); | |
| 1260 | + | |
| 1261 | + }; | |
| 1262 | + <?php | |
| 1263 | + $max_upload = (int)(ini_get('upload_max_filesize')); ?> | |
| 1264 | + var current_filesize=file.size/1000000; | |
| 1265 | + if(current_filesize > <?php echo esc_attr($max_upload); ?>){ | |
| 1266 | + flag = true; | |
| 1267 | + alert("<?php echo esc_js(__('File size exceed allowed limit!','taskbuilder')); ?>"); | |
| 1268 | + } | |
| 1269 | + if (!flag){ | |
| 1270 | + var html_str = '<div class="wppm_attachment">'+ | |
| 1271 | + '<div class="progress" style="float: none !important; width: unset !important;">'+ | |
| 1272 | + '<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%">'+ | |
| 1273 | + file.name+ | |
| 1274 | + '</div>'+ | |
| 1275 | + '<span class="wppm_attachment_cancel" onclick="wppm_attachment_cancel(this);" style="display:none;"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/cross_icon.svg'); ?>" alt="delete_icon"></span>'+ | |
| 1276 | + '</div>'+ | |
| 1277 | + '</div>'; | |
| 1278 | + jQuery('.wppm_attachment_container').show(); | |
| 1279 | + jQuery('.wppm_attachment_container').append(html_str); | |
| 1280 | + var attachment = jQuery('.wppm_attachment_container').find('.wppm_attachment').last(); | |
| 1281 | + var data = new FormData(); | |
| 1282 | + data.append('file', file); | |
| 1283 | + data.append('arr_name', file.name); | |
| 1284 | + data.append('action', 'wppm_upload_file'); | |
| 1285 | + data.append('nonce', jQuery('#wppm_nonce').val().trim()); | |
| 1286 | + jQuery.ajax({ | |
| 1287 | + type: 'post', | |
| 1288 | + url: wppm_admin.ajax_url, | |
| 1289 | + data: data, | |
| 1290 | + xhr: function(){ | |
| 1291 | + var xhr = new window.XMLHttpRequest(); | |
| 1292 | + xhr.upload.addEventListener("progress", function(evt){ | |
| 1293 | + if (evt.lengthComputable) { | |
| 1294 | + var percentComplete = Math.floor((evt.loaded / evt.total) * 100); | |
| 1295 | + jQuery(attachment).find('.progress-bar').css('width',percentComplete+'%'); | |
| 1296 | + } | |
| 1297 | + }, false); | |
| 1298 | + return xhr; | |
| 1299 | + }, | |
| 1300 | + processData: false, | |
| 1301 | + contentType: false, | |
| 1302 | + success: function(response) { | |
| 1303 | + var return_obj=JSON.parse(response); | |
| 1304 | + jQuery(attachment).find('.wppm_attachment_cancel').show(); | |
| 1305 | + if( parseInt(return_obj.id) != 0 ){ | |
| 1306 | + jQuery(attachment).append('<input type="hidden" class="wppm_comment_attachment" name="wppm_comment_attachment[]" value="'+return_obj.id+'">'); | |
| 1307 | + jQuery(attachment).find('.progress-bar').addClass('progress-bar-success'); | |
| 1308 | + }else { | |
| 1309 | + jQuery(attachment).find('.progress-bar').addClass('progress-bar-danger'); | |
| 1310 | + } | |
| 1311 | + } | |
| 1312 | + }); | |
| 1313 | + } | |
| 1314 | + }); | |
| 1315 | + jQuery('#wppm_attachment_upload').trigger('click'); | |
| 1316 | +} | |
| 1317 | + | |
| 1318 | +function wppmMentionSetup(editor) { | |
| 1319 | + let mentionIndex = -1; | |
| 1320 | + editor.on('keyup', function (e) { | |
| 1321 | + editor.lastMentionRange = editor.selection.getRng(); | |
| 1322 | + let rng = editor.selection.getRng(); | |
| 1323 | + let node = rng.startContainer; | |
| 1324 | + | |
| 1325 | + if (!node || node.nodeType !== 3) return; | |
| 1326 | + | |
| 1327 | + let text = node.textContent; | |
| 1328 | + let cursorPos = rng.startOffset; | |
| 1329 | + let textBeforeCursor = text.substring(0, cursorPos); | |
| 1330 | + | |
| 1331 | + let match = textBeforeCursor.match(/@(\w*)$/); | |
| 1332 | + let dropdown = getMentionDropdown(editor); | |
| 1333 | + | |
| 1334 | + if (match) { | |
| 1335 | + let query = match[1]; | |
| 1336 | + let rect = rng.getBoundingClientRect(); | |
| 1337 | + if (!rect || rect.top === 0) { | |
| 1338 | + rect = editor.selection.getNode().getBoundingClientRect(); | |
| 1339 | + } | |
| 1340 | + let top = rect.bottom + editor.getWin().scrollY; | |
| 1341 | + let left = rect.left + editor.getWin().scrollX; | |
| 1342 | + jQuery.post(wppm_admin.ajax_url, { | |
| 1343 | + action: 'wppm_filter_autocomplete', | |
| 1344 | + term: query, | |
| 1345 | + field : 'task_user_name', | |
| 1346 | + task_id:<?php echo esc_attr($task_id) ?>, | |
| 1347 | + proj_id:<?php echo esc_attr($proj_id) ?> | |
| 1348 | + }, function (res) { | |
| 1349 | + | |
| 1350 | + if (typeof res === "string") res = JSON.parse(res); | |
| 1351 | + if (res.success) res = res.data; | |
| 1352 | + | |
| 1353 | + if (!Array.isArray(res)) return; | |
| 1354 | + | |
| 1355 | + dropdown.empty(); | |
| 1356 | + if( res.length === 0 ){ | |
| 1357 | + dropdown.hide(); | |
| 1358 | + return; | |
| 1359 | + }else{ | |
| 1360 | + res.forEach(user => { | |
| 1361 | + let item = jQuery('<div>') | |
| 1362 | + .addClass('mention-item') | |
| 1363 | + .attr('data-username', user.label) | |
| 1364 | + .attr('data-user-id', user.user_id) | |
| 1365 | + .text(user.label) | |
| 1366 | + .css({ | |
| 1367 | + padding: '8px 12px', | |
| 1368 | + cursor: 'pointer', | |
| 1369 | + fontSize: '14px', | |
| 1370 | + color: '#333', | |
| 1371 | + background: '#fff', | |
| 1372 | + borderBottom: '1px solid #eee' | |
| 1373 | + }); | |
| 1374 | + | |
| 1375 | + item.on('mouseenter', function () { | |
| 1376 | + jQuery(this).css({ | |
| 1377 | + background: '#0073aa', | |
| 1378 | + color: '#fff' | |
| 1379 | + }); | |
| 1380 | + }); | |
| 1381 | + item.on('mouseleave', function () { | |
| 1382 | + if (!jQuery(this).hasClass('active')) { | |
| 1383 | + jQuery(this).css({ | |
| 1384 | + background: '#fff', | |
| 1385 | + color: '#333' | |
| 1386 | + }); | |
| 1387 | + } | |
| 1388 | + }); | |
| 1389 | + dropdown.append(item); | |
| 1390 | + }); | |
| 1391 | + let items = dropdown.find('.mention-item'); | |
| 1392 | + items.removeClass('active').css({ | |
| 1393 | + background: '#fff', | |
| 1394 | + color: '#333' | |
| 1395 | + }); | |
| 1396 | + items.eq(0) | |
| 1397 | + .addClass('active') | |
| 1398 | + .css({ | |
| 1399 | + background: '#0073aa', | |
| 1400 | + color: '#fff' | |
| 1401 | + }); | |
| 1402 | + mentionIndex = 0; | |
| 1403 | + updateActiveItem(items.eq(0), mentionIndex); | |
| 1404 | + dropdown.css({ | |
| 1405 | + position: 'absolute', | |
| 1406 | + display: 'none', | |
| 1407 | + background: '#fff', | |
| 1408 | + border: '1px solid #ddd', | |
| 1409 | + borderRadius: '6px', | |
| 1410 | + padding: '5px 0', | |
| 1411 | + minWidth: '180px', | |
| 1412 | + maxHeight: '220px', | |
| 1413 | + overflowY: 'auto', | |
| 1414 | + boxShadow: '0 4px 10px rgba(0,0,0,.15)', | |
| 1415 | + zIndex: 999999999999999 | |
| 1416 | + }).show(); | |
| 1417 | + } | |
| 1418 | + }); | |
| 1419 | + } else { | |
| 1420 | + dropdown.hide(); | |
| 1421 | + } | |
| 1422 | + }); | |
| 1423 | + editor.on('keydown', function (e) { | |
| 1424 | + let dropdown = getMentionDropdown(editor); | |
| 1425 | + let items = dropdown.find('.mention-item'); | |
| 1426 | + | |
| 1427 | + if (!dropdown.is(':visible') || !items.length) return; | |
| 1428 | + | |
| 1429 | + // DOWN | |
| 1430 | + if (e.key === 'ArrowDown') { | |
| 1431 | + e.preventDefault(); | |
| 1432 | + mentionIndex++; | |
| 1433 | + | |
| 1434 | + if (mentionIndex >= items.length) { | |
| 1435 | + mentionIndex = 0; | |
| 1436 | + } | |
| 1437 | + updateActiveItem(items, mentionIndex); | |
| 1438 | + items.removeClass('active').css({ | |
| 1439 | + background: '#fff', | |
| 1440 | + color: '#333' | |
| 1441 | + }); | |
| 1442 | + | |
| 1443 | + items.eq(mentionIndex) | |
| 1444 | + .addClass('active') | |
| 1445 | + .css({ | |
| 1446 | + background: '#0073aa', | |
| 1447 | + color: '#fff' | |
| 1448 | + }); | |
| 1449 | + } | |
| 1450 | + | |
| 1451 | + // UP | |
| 1452 | + if (e.key === 'ArrowUp') { | |
| 1453 | + e.preventDefault(); | |
| 1454 | + mentionIndex--; | |
| 1455 | + if (mentionIndex < 0) { | |
| 1456 | + mentionIndex = items.length - 1; | |
| 1457 | + } | |
| 1458 | + updateActiveItem(items, mentionIndex); | |
| 1459 | + items.removeClass('active').css({ | |
| 1460 | + background: '#fff', | |
| 1461 | + color: '#333' | |
| 1462 | + }); | |
| 1463 | + | |
| 1464 | + items.eq(mentionIndex) | |
| 1465 | + .addClass('active') | |
| 1466 | + .css({ | |
| 1467 | + background: '#0073aa', | |
| 1468 | + color: '#fff' | |
| 1469 | + }); | |
| 1470 | + } | |
| 1471 | + // ENTER | |
| 1472 | + if (e.key === 'Enter') { | |
| 1473 | + if (mentionIndex >= 0) { | |
| 1474 | + e.preventDefault(); | |
| 1475 | + items.eq(mentionIndex).trigger('click'); | |
| 1476 | + } | |
| 1477 | + } | |
| 1478 | + // ESC | |
| 1479 | + if (e.key === 'Escape') { | |
| 1480 | + dropdown.hide(); | |
| 1481 | + mentionIndex = -1; | |
| 1482 | + } | |
| 1483 | + }); | |
| 1484 | + editor.on('click', function (e) { | |
| 1485 | + let target = jQuery(e.target); | |
| 1486 | + if (target.hasClass('mention-item')) { | |
| 1487 | + let username = target.data('username'); | |
| 1488 | + let userId = target.data('user-id'); | |
| 1489 | + | |
| 1490 | + editor.focus(); | |
| 1491 | + | |
| 1492 | + let rng = editor.lastMentionRange || editor.selection.getRng(); | |
| 1493 | + editor.selection.setRng(rng); | |
| 1494 | + | |
| 1495 | + let node = rng.startContainer; | |
| 1496 | + if (!node || node.nodeType !== 3) return; | |
| 1497 | + | |
| 1498 | + let text = node.textContent; | |
| 1499 | + let cursorPos = rng.startOffset; | |
| 1500 | + | |
| 1501 | + let lastAtIndex = text.substring(0, cursorPos).lastIndexOf('@'); | |
| 1502 | + | |
| 1503 | + if (lastAtIndex !== -1) { | |
| 1504 | + | |
| 1505 | + let range = editor.selection.getRng(); | |
| 1506 | + range.setStart(node, lastAtIndex); | |
| 1507 | + range.setEnd(node, cursorPos); | |
| 1508 | + | |
| 1509 | + editor.selection.setRng(range); | |
| 1510 | + | |
| 1511 | + editor.selection.setContent( | |
| 1512 | + '<span class="wppm-mention" contenteditable="false" data-username="' + username + '" data-user-id="' + userId + '">@' + username + '</span> ' | |
| 1513 | + ); | |
| 1514 | + } | |
| 1515 | + getMentionDropdown(editor).hide(); | |
| 1516 | + } | |
| 1517 | + }); | |
| 1518 | + | |
| 1519 | + editor.on('blur', function () { | |
| 1520 | + getMentionDropdown(editor).hide(); | |
| 1521 | + }); | |
| 1522 | + | |
| 1523 | + editor.on('init', function () { | |
| 1524 | + let body = editor.getBody(); | |
| 1525 | + if (!body) return; | |
| 1526 | + | |
| 1527 | + body.addEventListener('mousedown', function (e) { | |
| 1528 | + if (e.target.classList.contains('mention-item')) { | |
| 1529 | + e.preventDefault(); | |
| 1530 | + } | |
| 1531 | + }); | |
| 1532 | + if (!editor.mentionDropdown) { | |
| 1533 | + editor.mentionDropdown = jQuery('<div class="mention-dropdown"></div>'); | |
| 1534 | + jQuery('body').append(editor.mentionDropdown); // ✅ ONLY HERE | |
| 1535 | + } | |
| 1536 | + }); | |
| 1537 | +} | |
| 1538 | +</script> | |