PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 5.0.3
Taskbuilder – Project Management & Task Management Tool With Kanban Board v5.0.3
6.0.5 6.0.2 6.0.3 6.0.4 6.0.1 6.0.0 5.0.8 5.0.9 4.0.9 5.0.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 All 57 releases
taskbuilder / includes / admin / tasks / open_task / wppm_open_task.php

wppm_open_task.php in Taskbuilder – Project Management & Task Management Tool With Kanban Board 5.0.3, at includes/admin/tasks/open_task/wppm_open_task.php

1,047 lines 67.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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($_POST['id'])) : "0";
8 $task_list_view = get_option('wppm_default_task_list_view');
9 $wppm_default_task_date = get_option('wppm_default_task_date');
10 $wppm_task_time = get_option('wppm_task_time');
11 $appearance_settings = get_option("wppm-ap-individual-task");
12 $wppm_tinymce_visibility_open_task = get_option('wppm_tinymce_visibility_open_task');
13 $settings = get_option("wppm-ap-modal");
14 $wppm_rich_text_editor = get_option('wppm_rich_text_editor');
15 $wppm_toolbar_actions = get_option('wppm_toolbar_actions');
16 $wppm_date_setting = get_option('wppm_date_setting');
17 $wppm_task_hide_comment_section = get_option('wppm_task_hide_comment_section');
18 $wppm_deafault_time_duration_task = get_option('wppm_display_time_duration_task');
19 $url_auth = false;
20 $auth_id = $wppmfunction->wppm_get_auth_code($id);
21 $auth_id = sanitize_text_field($auth_id);
22 // url authentication.
23 $auth_code = isset( $_POST['auth-code'] ) ? sanitize_text_field( $_POST['auth-code'] ) : ''; // phpcs:ignore
24 if ( ! $auth_code ) {
25 $auth_code = isset( $_POST['auth_code'] ) ? sanitize_text_field( $_POST['auth_code'] ) : ''; // phpcs:ignore
26 }
27
28 if ( $auth_code && $auth_id == $auth_code ) {
29 $url_auth = true;
30 }
31 if (!(($current_user->ID && $current_user->has_cap('manage_options')) || ($wppmfunction->has_permission('view_task',$id)) || ($url_auth==true))) { ?>
32 <div style="align-item:center;" ><h6><?php esc_attr_e( 'Unauthorized access!', 'taskbuilder' ); ?></h6></div>
33 <?php
34 wp_die();
35 }
36 $proj_id = isset($_POST) && isset($_POST['proj_id']) ? intval(sanitize_text_field($_POST['proj_id'])) : 0;
37 $current_date = date('Y-m-d');
38 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
39 $cu_id = $current_user->ID;
40 if(!empty($id)){
41 $task = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_task where id='".esc_sql($id)."'");
42 $project_data = $wppmfunction->get_project($task->project);
43 $task_comment = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_task_comment where task_id='".esc_sql($id)."' ORDER BY create_time DESC");
44 $orderby_proj_sql = esc_sql(sanitize_sql_orderby( "create_time DESC" ));
45 $task_comment = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_task_comment where task_id='".esc_sql($id)."' ORDER BY ". $orderby_proj_sql);
46 $task_proj = isset($task->project) ? esc_sql($task->project) :"";
47 $task_id = isset($task->id) ? esc_sql($task->id):"";
48 }
49 $user_role = $wpdb->get_var( "SELECT role_id FROM {$wpdb->prefix}wppm_project_users where proj_id = '$task_proj' AND user_id = '$cu_id'");
50 if(!empty($task_proj)){
51 $project_name = $wpdb->get_var( "SELECT project_name FROM {$wpdb->prefix}wppm_project where id= '$task_proj'");
52 }
53 $wppm_checklist=$wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_checklist where task_id='$task_id'" );
54 if(!empty($task->status)){
55 $task_status_var = esc_sql($task->status);
56 $task_status = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_task_statuses where id='$task_status_var'");
57 }
58 if(!empty($task->priority)){
59 $task_priority_var = esc_sql($task->priority);
60 $task_priority = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_task_priorities where id='$task_priority_var'");
61 }
62 if(!empty($task->users)){
63 $users = explode(",",$task->users);
64 }
65
66 if(!empty($task->description)){
67 $task_description = stripslashes((htmlspecialchars_decode($task->description, ENT_QUOTES)));
68 }
69
70 if($wppm_task_time == 1){
71 $tsDate = new DateTime($task->start_date);
72 $teDate = new DateTime($task->end_date);
73 if($task->start_date=='0000-00-00 00:00:00'){
74 if($wppm_date_setting=='Y-m-d H:i:s'){
75 $task_start_date = '0000-00-00 00:00:00';
76 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
77 $task_start_date = '00-00-0000 00:00:00';
78 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
79 $task_start_date = '00-00-0000 00:00:00';
80 }else{
81 $task_start_date = '0000-00-00 00:00:00';
82 }
83 }if($task->end_date=='0000-00-00 00:00:00'){
84 if($wppm_date_setting=='Y-m-d H:i:s'){
85 $task_end_date = '0000-00-00 00:00:00';
86 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
87 $task_end_date = '00-00-0000 00:00:00';
88 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
89 $task_end_date = '00-00-0000 00:00:00';
90 }else{
91 $task_end_date = '0000-00-00 00:00:00';
92 }
93 }if($task->start_date!='0000-00-00 00:00:00'){
94 if(!empty($wppm_date_setting)){
95 $task_start_date = $tsDate->format($wppm_date_setting);
96 }else{
97 $task_start_date = isset($task->start_date)? $task->start_date:"";
98 }
99 }
100 if($task->end_date!='0000-00-00 00:00:00'){
101 if(!empty($wppm_date_setting)){
102 $task_end_date = $teDate->format($wppm_date_setting);
103 }else{
104 $task_end_date = isset($task->end_date) ? $task->end_date: "" ;
105 }
106 }
107 } elseif($wppm_task_time == 0){
108 $tsDate = isset($task->start_date) ? new DateTime($task->start_date): "";
109 $teDate = isset($task->end_date) ? new DateTime($task->end_date):"";
110 $task_start_date = !empty($tsDate) ? $tsDate->format( $wppm_date_setting):"";
111 $task_end_date = !empty($teDate) ? $teDate->format( $wppm_date_setting):"";
112 if($task->start_date=='0000-00-00 00:00:00'){
113 if($wppm_date_setting=='Y-m-d H:i:s'){
114 $task_start_date = '0000-00-00';
115 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
116 $task_start_date = '00-00-0000';
117 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
118 $task_start_date = '00-00-0000';
119 }else{
120 $task_start_date = '0000-00-00';
121 }
122 }
123 if($task->end_date=='0000-00-00 00:00:00'){
124 if($wppm_date_setting=='Y-m-d H:i:s'){
125 $task_end_date = '0000-00-00';
126 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
127 $task_end_date = '00-00-0000';
128 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
129 $task_end_date = '00-00-0000';
130 }
131 else{
132 $task_end_date = '0000-00-00';
133 }
134 }if($task->start_date!='0000-00-00 00:00:00'){
135 if($wppm_date_setting=='Y-m-d H:i:s'){
136 $task_start_date = $tsDate->format('Y-m-d');
137 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
138 $task_start_date = $tsDate->format('d-m-Y');
139 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
140 $task_start_date = $tsDate->format('m-d-Y');
141 }else{
142 $task_start_date = $tsDate->format('Y-m-d');
143 }
144 }if($task->end_date!='0000-00-00 00:00:00'){
145 if($wppm_date_setting=='Y-m-d H:i:s'){
146 $task_end_date = $teDate->format('Y-m-d');
147 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
148 $task_end_date = $teDate->format('d-m-Y');
149 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
150 $task_end_date = $teDate->format('m-d-Y');
151 }else{
152 $task_end_date = $teDate->format('Y-m-d');
153 }
154 }
155 }
156 $flag = false;
157 $wppm_task_fillter = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_task where id='".esc_sql($id)."'");
158 if(!empty($wppm_task_fillter)){
159 foreach($wppm_task_fillter as $key_filter=>$val_filter){
160 $val_array = (array) $val_filter;
161 $tusers = $val_array['users'];
162 $tusers_arr = explode(',',$tusers);
163 $tproject_id = $val_array['project'];
164 $tproject_id = esc_sql($tproject_id);
165 if(!empty($tusers) && in_array($current_user->ID,$tusers_arr)){
166 $project_user_role = $wpdb->get_var("SELECT role_id FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = '$tproject_id' AND user_id = '$cu_id'");
167 $project_users = $wpdb->get_var("SELECT users FROM {$wpdb->prefix}wppm_project WHERE id = '$tproject_id'");
168 $project_users_arr = explode(',',(string)$project_users);
169 if((!empty($project_user_role)) && ($project_user_role == 1) && in_array($current_user->ID,$project_users_arr)){
170 $flag= true;
171 break;
172 }
173 }
174 }
175 }
176 $project_creator = $wpdb->get_var("SELECT created_by FROM {$wpdb->prefix}wppm_project WHERE created_by = '$cu_id'");
177 ?>
178 <form id="wppm_open_task" method="post">
179 <div id="wppm_alert_success" class="alert alert-success wppm_alert" style="display:none;" role="alert">
180 <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/success.svg'); ?>" alt="success"> <span class="wppm_alert_text"></span>
181 </div>
182 <div id="wppm_alert_error" class="alert alert-danger wppm_alert" style="display:none;" role="alert">
183 <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/warning-triangle.svg'); ?>" alt="warning-triangle"> <span class="wppm_alert_text"></span>
184 </div>
185 <div class="wppm_headers row">
186 <div class="col-sm-8">
187 <span class="wppm-heading-inline">
188 <?php echo esc_html_e('Task','taskbuilder');?>
189 </span><?php
190 if(($current_user->has_cap('manage_options') || $wppmfunction->has_permission('add_new_task',$task_id) || ($flag==true) || $project_creator!="") && $task->is_archived!=1){
191 $style = "display:inline;";
192 }else{
193 $style = "display:none;";
194 }
195 $style = apply_filters('wppm_add_new_task_btn_style_open_task_form',$style);
196 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){
197 $archive_style= "display:inline;";
198 }else{
199 $archive_style= "display:none;";
200 }
201 if($proj_id==0) {
202 ?> <span onclick="wppm_add_new_task(<?php echo esc_attr($proj_id) ?>)" class="wppm_add_new_task_btn" id="wppm_add_new_task_btn" style="<?php echo $style?>" title="Create Task"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/plus.svg'); ?>" alt="add"></span>
203 <?php }
204 else{ ?>
205 <span class="wppm_add_new_task_btn" id="wppm_add_new_task_btn" title="Create Task" onclick="wppm_create_project_task(<?php echo esc_attr($proj_id) ?>)" style="<?php echo $style ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/plus.svg'); ?>" alt="add"></span>
206 <?php } ?>
207 <?php if($proj_id==0) {
208 $task_list_function = ($task_list_view==1)?"wppm_get_task_list()":"wppm_view_task_search_filter()";
209 ?>
210 <span class="wppm-task-list-btn" id="wppm_task_list_btn" title="Task List" onclick="<?php echo $task_list_function ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/list.svg'); ?>" alt="list"></span>
211 <?php }
212 else{
213 ?>
214 <span class="wppm-task-list-btn" id="wppm_task_list_btn" title="Task List" 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>
215 <?php } ?>
216 <?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 )? "display:inline":"display:none"; ?>
217 <?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) ? "display:inline":"display:none"; ?>
218 <?php $ar_css = ($task->is_archived==1) ? "display:none;" : "display:inline"; ?>
219 <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) ?>)" style="<?php echo esc_attr($style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/bin.svg'); ?>" alt="delete"></span>
220 <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)?>)" style="<?php echo esc_attr($clone_style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/duplicate.svg'); ?>" alt="clone"></div>
221 <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>
222 <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) ?>)" style="<?php echo esc_attr($archive_style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/archive.svg'); ?>" alt="archive"></span>
223 <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' ) ); ?>">
224 <div class="menu" id="wppmprint_menu" onclick="event.stopPropagation();">
225 <a href="#" id="wppm_openPDF" onclick="wppm_open_pdf(<?php echo esc_attr($id) ?>)">🖨 <?php echo esc_html_e('Open In Browser','taskbuilder');?></a>
226 <a href="#" id="wppm_downloadPDF" onclick="wppm_download_pdf(<?php echo esc_attr($id) ?>)">💾 <?php echo esc_html_e('Download PDF','taskbuilder');?></a>
227 </div>
228 <?php do_action('wppm_individual_task_button',$id);?>
229 </div>
230 </div>
231 <div id="wppm_load_individual_task_container" class="row">
232 <div class="col-sm-8 wppm_body col-md-9">
233 <div class="wppm_task_details_container">
234 <div class="row">
235 <div class="col-sm-12">
236 <span class="wppm_task_label"> <?php echo esc_html_e($task->task_name,'taskbuilder');
237 if (($wppmfunction->has_permission('change_task_details',$id) || $current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin') && $task->is_archived!=1) { ?>
238 <span id="wppm_individual_edit_task_subject" onclick="wppm_edit_task_details(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_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>
239 <?php } ?>
240 </span>
241 </div>
242 </div>
243 <div class="row">
244 <div class="col-sm-3">
245 <span class="wppm_task_details_label"><?php echo esc_html_e('Project:','taskbuilder');?></span>
246 </div>
247 <div class="col-sm-9">
248 <span class="wppm_task_details"><?php echo (isset($project_name))? esc_html_e($project_name,'taskbuilder'):"" ?></span>
249 </div>
250 </div>
251 <div class="row">
252 <div class="col-sm-3">
253 <span class="wppm_task_details_label"><?php echo esc_html_e('Created On:','taskbuilder');?></span>
254 </div>
255 <div class="col-sm-9"><?php
256 $tcDate = isset($task->date_created) ? new DateTime($task->date_created): "";
257 if($wppm_task_time !=0){
258 if($wppm_date_setting=='Y-m-d H:i:s'){
259 $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d H:i:s'):"";
260 } elseif($wppm_date_setting=='d-m-Y H:i:s'){
261 $task_create_date = !empty($tcDate) ? $tcDate->format('d-m-Y H:i:s'):"";
262 } elseif($wppm_date_setting=='m-d-Y H:i:s'){
263 $task_create_date = !empty($tcDate) ? $tcDate->format('m-d-Y H:i:s'):"";
264 } else {
265 $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d H:i:s'):"";
266 }
267 } elseif($wppm_task_time == 0){
268 if($wppm_date_setting=='Y-m-d H:i:s'){
269 $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d'):"";
270 } elseif($wppm_date_setting=='d-m-Y H:i:s'){
271 $task_create_date = !empty($tcDate) ? $tcDate->format('d-m-Y'):"";
272 } elseif($wppm_date_setting=='m-d-Y H:i:s'){
273 $task_create_date = !empty($tcDate) ? $tcDate->format('m-d-Y'):"";
274 } else {
275 $task_create_date = !empty($tcDate) ? $tcDate->format('Y-m-d'):"";
276 }
277 } ?>
278 <span class="wppm_task_details"><?php echo (isset($task_create_date))? esc_html($task_create_date):"" ?></span>
279 </div>
280 </div>
281 <?php if($wppm_default_task_date == 1 && $wppm_deafault_time_duration_task==0){ ?>
282 <div class="row">
283 <div class="col-sm-3">
284 <span class="wppm_task_details_label"><?php echo esc_html_e('Start Date:','taskbuilder');?></span>
285 </div>
286 <div class="col-sm-9">
287 <span class="wppm_task_details" id="wppm_edit_tstart_date"><?php echo (isset($task_start_date))? esc_html($task_start_date):"" ?></span>
288 </div>
289 <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' ) ); ?>">
290 </div>
291 <div class="row">
292 <div class="col-sm-3">
293 <span class="wppm_task_details_label"><?php echo esc_html_e('End Date:','taskbuilder');?></span>
294 </div>
295 <div class="col-sm-9">
296 <?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"; ?>
297 <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>
298 </div>
299 <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' ) ); ?>">
300 </div>
301 <?php }
302 if($wppm_deafault_time_duration_task==1){
303 $wppm_task_duration = $wppmfunction->wppm_get_duration($task->start_date,$task->end_date);
304 $tstatus = isset($task->status) ? $task->status :"";
305 $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"; ?>
306 <div class="row">
307 <div class="col-sm-3">
308 <span class="wppm_task_details_label"><?php echo esc_html_e('Task Duration:','taskbuilder');?></span>
309 </div>
310 <div class="col-sm-9">
311 <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>
312 </div>
313 </div> <?php
314 }?>
315 <div class="row">
316 <div class="col-sm-3">
317 <span class="wppm_task_details_label"><?php echo esc_html_e('Task Priority:','taskbuilder');?></span>
318 </div>
319 <div class="col-sm-9">
320 <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_e($task_priority->name,'taskbuilder'):"" ?> </span></span>
321 </div>
322 </div>
323 <div class="row">
324 <div class="col-sm-3">
325 <span class="wppm_task_details_label"><?php echo esc_html_e('Description:','taskbuilder');?></span>
326 </div>
327 <div class="col-sm-9">
328 <span class="wppm_task_description"><?php echo (isset($task_description))? wp_kses_post(wpautop($task_description)):"" ?></span>
329 </div>
330 </div>
331 <?php do_action('wppm_after_task_details_in_open_task',$task->id, $task->project);?>
332 </div>
333 <div class="wppm_task_checklist_container" id="wppm_task_checklist_container">
334 <div id="wppm_checklist_container">
335 <?php
336 if(!empty($wppm_checklist)){
337 foreach( $wppm_checklist as $key=>$list){
338 ?>
339 <div class="row">
340 <div class="col-sm-8">
341 <span class="wppm_checklist_label"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/checklist.svg'); ?>" alt="checklist"><?php echo esc_html_e($list->checklist_name,'taskbuilder');?></span>
342 </div>
343 <?php
344 $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"; ?>
345 <?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"; ?>
346 <?php if($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')){ ?>
347 <div class="col-sm-4" style="text-align:right;<?php echo esc_attr($check_style) ?>">
348 <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>
349 <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' ) ); ?>">
350 </div>
351 <?php }?>
352 </div>
353 <div class="wppm_progress_bar_container row">
354 <div class="col-sm-4">
355 <span class="wppm_progressbar_label" id="wppm_progressbar_label_<?php echo esc_attr($list->id)?>">0%</span>
356 </div>
357 <div class="wppm_progress_bar col-sm-8">
358 <div id="CheckProgress_<?php echo esc_attr($list->id);?>" class="wppm_checkprogress" role="progressbar" style="width: 0%" aria-valuemin="0" aria-valuemax="100"></div>
359 </div>
360 </div>
361 <?php
362 $list_id = esc_sql($list->id);
363 $wppm_checklist_items = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_checklist_items where checklist_id='$list_id' ORDER BY load_order ASC");
364 ?>
365 <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;">
366 <?php
367 if(!empty( $wppm_checklist_items)){
368 foreach($wppm_checklist_items as $key=>$val){
369 $checked = $val->checked == 1 ? 'checked="checked"' : '';
370 ?>
371 <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;">
372 <div class="col-sm-8" id="wppm_checklist_item_container_<?php echo esc_attr($val->id) ?>">
373 <span class="wppm_chk_items_drag"></span>
374 <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 esc_html_e($val->item_name,'taskbuilder') ?></label>
375 <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' ) ); ?>">
376 </div>
377 <?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) { ?>
378 <div class="col-sm-4" id="wppm_checklist_action_<?php echo esc_attr($val->id) ?>" style="text-align:right; display:none;cursor:pointer;">
379 <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>
380 <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' ) ); ?>">
381 <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>
382 <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' ) ); ?>">
383 </div>
384 <?php } ?>
385 </li>
386 <?php
387 }
388 } ?>
389 <?php if(($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')) && $task->is_archived!=1){ ?>
390 <div class="row">
391 <div class="col-sm-12 wppm_add_checklist_item_container_<?php echo esc_attr($list->id) ?>" style="padding-top:15px;">
392 <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>
393 </div>
394 </div>
395 <?php }?>
396 <?php if(($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')) && $task->is_archived!=1){ ?>
397 <div class="row">
398 <div class="col-sm-12" style="display:none;" id="wppm_add_checklist_label_container_<?php echo esc_attr($list->id) ?>">
399 <div class="row" id="wppm_add_new_checklist_item_<?php echo esc_attr($list->id) ?>">
400 <div class="col-sm-12">
401 <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;">
402 <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) ?>)">
403 <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' ) ); ?>">
404 <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>
405 </div>
406 </div>
407 </br>
408 </div>
409 </div>
410 <?php }?>
411 <hr class="wppm_checklist_divider">
412 </ul>
413 <?php
414 }
415 } ?>
416 </div><?php
417 if(($wppmfunction->has_permission('add_checklist',$task->id) || $current_user->has_cap('manage_options')) && $task->is_archived!=1){ ?>
418 <div id="wppm_add_checklist_container">
419 <div class="row">
420 <div class="col-sm-12">
421 <span id="wppm_add_checklist" onclick="wppm_add_checklist()"> <?php echo esc_html_e('+Add a checklist','taskbuilder')?> </span>
422 </div>
423 </div>
424 <div class="row" id="wppm_add_new_checklist" style="display:none;">
425 <div class="col-sm-12">
426 <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">
427 <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) ?>)">
428 <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' ) ); ?>">
429 <span onclick="wppm_remove_add_checklist()"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/cross1.svg'); ?>"></span>
430 </div>
431 </div>
432 </br>
433 </div><?php
434 } ?>
435 </div>
436 <div id="wppm_activity_container" style="<?php echo ($wppm_task_hide_comment_section==0) ? 'display:none;' : 'display:block;' ?>">
437 <div class="row">
438 <div class="col-sm-12" style="margin-top:5px;">
439 <span class="wppm_task_discussion"><?php echo esc_html_e('Comment','taskbuilder')?></span><br>
440 </div>
441 </div>
442 <div class="row">
443 <div class="col-sm-12" style="<?php echo ($task->is_archived==1) ? 'display:none;' : 'display:block;' ?>">
444 <textarea id="wppm_task_comment" placeholder="<?php echo esc_attr__('Write a comment...','taskbuilder');?>" onclick="wppm_add_task_comment()" name="wppm_task_comment"></textarea>
445 </div>
446 </div>
447 <div class="row" id="wppm_comment_btn" style="<?php echo ($task->is_archived==1) ? 'display:none;' : 'display:block;' ?>">
448 <div class="col-sm-6">
449 <span id="wppm_attach_file" onclick="wppm_upload_file()"><?php echo esc_html_e('Attach Files','taskbuilder')?></span>
450 </div>
451 <div class="col-sm-6">
452 <button type="button" id="wppm_individual_cancel_comment_btn" onclick="wppm_cancel_comment();" class="wppm-btn-cancel">
453 <?php echo esc_html_e('Cancel','taskbuilder')?>
454 </button>
455 <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">
456 <?php echo esc_html_e('SEND','taskbuilder')?>
457 </button>
458 <input type="hidden" name="_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_submit_task_comment' ) ); ?>">
459 </div>
460 </div>
461 <div class="row" style="<?php echo ($task->is_archived==1) ? 'display:none;' : 'display:block;' ?>">
462 <div class="wppm_attachment_container col-sm-12" style="display:none;">
463 </div>
464 </div>
465 </div>
466 <div class="wppm_thread_container" style="<?php echo ($wppm_task_hide_comment_section==0) ? 'display:none;' : 'display:block;' ?>">
467 <?php
468 if(!empty($task_comment)){
469 foreach($task_comment as $comment){
470 $task_comment_meta = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_task_comment_meta where task_id='".esc_sql($id)."' AND comment_id='".esc_sql($comment->id)."'");
471 $user = get_userdata( $comment->created_by );
472 $comment_body = stripslashes((htmlspecialchars_decode($comment->body, ENT_QUOTES)));
473 $comment_body = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $comment_body);
474 $date = date("Y-m-d H:i:s" ,strtotime($comment->create_time));
475 $thread_date = date("d F Y, h:i:s A" ,strtotime($date));
476 $attachment_ids = isset($comment->attachment_ids)? $comment->attachment_ids : '';
477 if($attachment_ids!=""){
478 $attachments = explode(",",$attachment_ids);
479 } else {
480 $attachments = array();
481 }
482 ?>
483 <div class="wppm_thread">
484 <div class="wppm_thread_avatar">
485 <?php echo (get_avatar($comment->created_by, 40));?>
486 </div>
487 <div class="wppm_thread_body">
488 <div class="wppm_thread_user_name">
489 <strong style="color:<?php echo esc_attr($appearance_settings['comment-primary-color']);?>"><?php echo esc_html($user->display_name) ?></strong>
490 <span><?php if(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_status')){
491 $comment_log_body = unserialize($comment->body);
492 $prev_status = $comment_log_body['prev_status'];
493 $new_status = $comment_log_body['new_status'];
494 if(isset($prev_status)){
495 $prev_status = esc_sql($prev_status);
496 $task_prev_status = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_task_statuses where id='$prev_status'");
497 }
498 if(isset($new_status)){
499 $new_status = esc_sql($new_status);
500 $task_new_status = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_task_statuses where id='$new_status'");
501 }
502 esc_html_e("changed status from $task_prev_status->name to $task_new_status->name","taskbuilder");
503 } if(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_creator')){
504 $comment_log_body = unserialize($comment->body);
505 $prev_user = $comment_log_body['prev_user'];
506 $new_user = $comment_log_body['new_user'];
507 $prev_user_data = get_userdata($prev_user);
508 $new_user_data = get_userdata($new_user);
509 esc_html_e("changed creator from $prev_user_data->display_name to $new_user_data->display_name","taskbuilder");
510 }
511 if( !empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_assign_user')){
512 esc_html_e("changed the Assignee","taskbuilder");
513 }
514 if(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_priority')){
515 $comment_log_body = unserialize($comment->body);
516 $prev_prio = $comment_log_body['prev_prio'];
517 $new_prio = $comment_log_body['new_prio'];
518 if(isset($prev_prio)){
519 $prev_prio = esc_sql($prev_prio);
520 $task_prev_prio = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_task_priorities where id= '$prev_prio'");
521 }
522 if(isset($new_prio)){
523 $new_prio = esc_sql($new_prio);
524 $task_new_prio = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_task_priorities where id= '$new_prio'");
525 }
526 $task_prev_prio_name = !empty($task_prev_prio) ? $task_prev_prio->name: "None";
527 $task_new_prio_name = !empty($task_new_prio) ? $task_new_prio->name: "None";
528 esc_html_e("changed priority from $task_prev_prio_name to $task_new_prio_name","taskbuilder");
529 }
530 ?>
531 <small class="wppm_comment_date" style="color:<?php echo esc_attr($appearance_settings['comment-date-color']);?>"><i><?php echo esc_html($thread_date) ?></i></small>
532 <div class="wppm_thread_action">
533 <?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)){ ?>
534 <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>
535 <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>
536 <?php } ?>
537 </div>
538 </div>
539 <div class="wppm_thread_messege" style="color:<?php echo esc_attr($appearance_settings['comment-secondary-color']);?>">
540 <?php
541 $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(),));
542 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'))){
543 echo wp_kses(wpautop($comment_body),$allowedtags) ;
544 } elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_status')){ ?>
545 <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
546 }elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_creator')){ ?>
547 <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
548 } elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_assign_user')) {
549 $comment_log_body = unserialize($comment->body);
550 $prev_assign_user = $comment_log_body['prev_assign_user'];
551 $new_assign_user = $comment_log_body['new_assign_user'];
552 $prev_assign_user_array = array();
553 $new_assign_user_array = array();
554 if(!empty($prev_assign_user)){
555 $prev_assign_user_array = explode(",",$prev_assign_user);
556 }
557 if(!empty($new_assign_user)){
558 $new_assign_user_array = explode(",",$new_assign_user);
559 }
560 $assign_user_name = array();
561 $assign_user_name_str = "";
562 if(!empty($prev_assign_user_array)){
563 foreach($prev_assign_user_array as $val){
564 $assign_user = get_userdata($val);
565 $assign_user_name[] = $assign_user->display_name;
566 }
567 $assign_user_name_str = implode(",",$assign_user_name);
568 }
569 $new_assign_user_name = array();
570 $new_assign_user_name_str = "";
571 if(!empty($new_assign_user_array)){
572 foreach($new_assign_user_array as $val){
573 $new_assign_user = get_userdata($val);
574 $new_assign_user_name[] = $new_assign_user->display_name;
575 }
576 $new_assign_user_name_str = implode(",",$new_assign_user_name);
577 }
578 ?>
579 <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
580 } elseif(!empty($comment->body) && (isset($task_comment_meta->comment_type) && $task_comment_meta->comment_type=='change_task_priority')){ ?>
581 <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
582 } ?>
583
584 </div>
585 <?php
586 if(!empty($attachments)&& (isset($task_comment_meta->comment_type) && !($task_comment_meta->comment_type=='delete_task_comment'))):?> <br>
587 <strong class="wppm_attachment_title"><?php echo esc_html_e('Attachments','taskbuilder');?>:</strong><br>
588 <table class="wppm_attachment_tbl">
589 <tbody>
590 <?php
591 if(!empty($attachments)){
592 foreach( $attachments as $attachment ):
593 $download_url = site_url('/').'?wppm_attachment='.$attachment.'&tid='.$id.'&tac='.$auth_id;
594 $attachment = esc_sql($attachment);
595 $attach = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_attachments where id='$attachment'");
596 $findStr = ".txt";
597 if(!empty( $attach)){
598 $attachment_name = preg_replace('/' . $findStr . '/', "", $attach->name, 1);
599 $attachment_name = sanitize_file_name($attachment_name);
600 }
601 if((!empty($attachment_name))){
602 ?>
603 <tr class="wppm_attachment_tr">
604 <td>
605 <a class="wppm_attachment_link" href="<?php echo esc_url($download_url) ?>" target="_blank">
606 <span class="wppm_attachment_file_name" style="padding: 7px;"><?php echo isset($attach->file_name) ? esc_html($attach->file_name):"";?></span></a>
607 <?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)){ ?>
608 <span class="wppm_thread_action_btn" onclick="wppm_thread_attachment_remove(this,<?php echo esc_attr($attach->id); ?>,<?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/cancel.svg'); ?>" alt="cancel"></span>
609 <?php } ?>
610 </td>
611 </tr>
612 <input type="hidden" name="wppm_ajax_nonce" id="wppm_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_remove_thread_attachment' ) ); ?>">
613 <?php }
614 endforeach;
615 } ?>
616 </tbody>
617 </table>
618 <?php do_action('wppm_after_comment_attachment',$id,$comment->id);?>
619 <?php endif;?>
620 </div>
621 </div>
622 <?php }
623 } ?>
624 </div>
625 </div>
626 <div class="wppm_individual_task_widget col-sm-4 wppm_sidebar col-md-3">
627 <div class="row wppm_widget" id="wppm_status_widget">
628 <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>">
629 <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"><?php echo esc_html_e('Status','taskbuilder')?></h4>
630 <?php
631 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))){
632 ?>
633 <span class="wppm_edit_task_details_widget" onclick="wppm_edit_task_status(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span>
634 <?php
635 }
636 ?>
637 </div>
638 <hr class="widget_divider">
639 <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>">
640 <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>
641 </div>
642 </div>
643 <div class="row wppm_widget" id="wppm_raisedby_widget">
644 <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>">
645 <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>">
646 <?php echo esc_html_e('Task Creator','taskbuilder')?></h4>
647 <?php if ((($wppmfunction->has_permission('change_raised_by',$id ) || $current_user->has_cap('manage_options')) && ($task->is_archived!=1))) { ?>
648 <span class="wppm_edit_task_details_widget" onclick="wppm_edit_task_creator(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span>
649 <?php } ?>
650 </div>
651 <hr class="widget_divider"> <?php
652 if(isset($task->created_by)){
653 $user_info = get_userdata($task->created_by);
654 }else{
655 $user_info ="";
656 }
657 ?>
658 <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>">
659 <div style="padding:2px 0;">
660 <span class="wppm_task_user_avatar"><?php echo (get_avatar($task->created_by, 25, "mysteryman")); ?></span>
661 <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>
662 </div>
663 </div>
664 </div>
665 <div class="row wppm_widget" id="wppm_task_users_widget_container">
666 <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>">
667 <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>;"><?php echo esc_html_e('Users','taskbuilder')?></h4>
668 <?php if ((($wppmfunction->has_permission('assign_task_users',$id ) || $current_user->has_cap('manage_options')) && ($task->is_archived!=1))) { ?>
669 <span class="wppm_edit_task_details_widget" onclick="wppm_edit_task_users(<?php echo esc_attr($id) ?>,<?php echo esc_attr($proj_id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span>
670 <?php } ?>
671 </div>
672 <hr class="widget_divider">
673 <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>">
674 <div id="wppm_task_users">
675 <?php
676 $i=0;
677 if(!empty($users)){
678 foreach($users as $user) {
679 $user_data = get_userdata($user);
680 if(!empty($project_data['users'])){
681 $proj_users = explode(',',$project_data['users']);
682 if(in_array($user,$proj_users)){
683 $i++;
684 ?>
685 <div style="padding:2px 0;">
686 <span class="wppm_task_user_avatar"><?php echo (get_avatar($user, 25, "mysteryman")); ?></span>
687 <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>
688 </div>
689 <?php
690 }
691 }
692 }
693 }
694 if($i==0){ ?>
695 <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
696 }
697 ?>
698 </div>
699 </div>
700 </div>
701 <?php do_action('wppm_after_task_widgets',$id,$task_id );?>
702 </div>
703 <input type="hidden" id="wppm_nonce" value="<?php echo wp_create_nonce('wppm_upload_file')?>">
704 <input type="file" id="wppm_attachment_upload" class="hidden" onchange="">
705 </div>
706 </form>
707 <style>
708 .wppm_comment_date i:hover{
709 color: <?php echo esc_attr($appearance_settings['comment-date-hover-color'])?>;
710 }
711 #Layer_1{
712 fill:red!important;
713 }
714 </style>
715 <script>
716 jQuery( document ).ready( function( jQuery ) {
717 const button = document.getElementById('wppm_print_task_btn');
718 const box = document.getElementById('wppmprint_menu');
719
720 // Show box on button click
721 button.addEventListener('click', (e) => {
722 e.stopPropagation(); // prevent document click from firing immediately
723 box.style.display = 'flex';
724 });
725
726 // Prevent hiding when clicking inside box
727 box.addEventListener('click', (e) => {
728 e.stopPropagation();
729 });
730
731 // Hide when clicking outside
732 document.addEventListener('click', () => {
733 box.style.display = 'none';
734 });
735 <?php
736 if ((($current_user->ID && $current_user->has_cap('manage_options')) || $wppmfunction->has_permission('change_task_details',$task->id))){ ?>
737 jQuery("#wppm_edit_tstart_date").flatpickr({
738 enableTime: true,
739 dateFormat: "Y-m-d H:i",
740 onChange: function(selectedDates, dateStr, instance) {
741 var data = {
742 action: 'wppm_set_change_task_start_date',
743 task_id:<?php echo esc_attr($task->id);?>,
744 date:dateStr,
745 _ajax_nonce:jQuery('#wppm_edit_tstart_date_ajax_nonce').val()
746 };
747 jQuery.post(wppm_admin.ajax_url, data, function(response) {
748 instance.close();
749 wppm_open_task(<?php echo esc_attr($task->id);?>);
750 });
751 },
752 });
753 jQuery("#wppm_edit_tend_date").flatpickr({
754 enableTime: true,
755 dateFormat: "Y-m-d H:i",
756 onChange: function(selectedDates, dateStr, instance) {
757 var data = {
758 action: 'wppm_set_change_task_end_date',
759 task_id:<?php echo esc_attr($task->id);?>,
760 date:dateStr,
761 _ajax_nonce:jQuery('#wppm_edit_tend_date_ajax_nonce').val()
762 };
763 jQuery.post(wppm_admin.ajax_url, data, function(response) {
764 instance.close();
765 wppm_open_task(<?php echo esc_attr($task->id);?>);
766 });
767 },
768 });
769 <?php } ?>
770 <?php foreach ($wppm_checklist as $chklist) { ?>
771 var $checkboxes = jQuery('.wppm_checklist_item_'+<?php echo esc_attr($chklist->id);?>);
772 var $progress = jQuery('#CheckProgress_'+<?php echo esc_attr($chklist->id);?>);
773 var total = $checkboxes.length;
774 var checked = jQuery('.wppm_checklist_item_'+<?php echo esc_attr($chklist->id);?>).filter(':checked').length;
775 var progressWidth = Math.ceil((checked / total) * 100);
776 jQuery('#CheckProgress_'+<?php echo esc_attr($chklist->id);?>).css('background','#5ba4cf');
777 jQuery('#CheckProgress_'+<?php echo esc_attr($chklist->id);?>).css('width', progressWidth + '%');
778 if(progressWidth>0){
779 jQuery('#wppm_progressbar_label_'+<?php echo esc_attr($chklist->id);?>).text(progressWidth+'%');
780 }
781 <?php $wppm_checklist_items = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_checklist_items where checklist_id=".$chklist->id);
782 foreach ($wppm_checklist_items as $chkitems) {
783 ?> jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).on("mouseover", function () {
784 jQuery( '#wppm_checklist_action_'+<?php echo esc_attr($chkitems->id);?>).css("display","inline");
785 jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).css("background-color","#e7e8ea");
786 })
787 jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).on("mouseout", function () {
788 jQuery( '#wppm_checklist_action_'+<?php echo esc_attr($chkitems->id);?>).css("display","none");
789 jQuery( '#wppm_checklist_'+<?php echo esc_attr($chkitems->id);?>).css("background-color","#ffffff");
790 })
791 <?php
792 }
793 }
794 $bold = (isset($wppm_toolbar_actions['bold']) && $wppm_toolbar_actions['bold']==1)? 'bold' :"";
795 $italic = (isset($wppm_toolbar_actions['italic']) && $wppm_toolbar_actions['italic']==1)? 'italic' :"";
796 $underline = (isset($wppm_toolbar_actions['underline']) && $wppm_toolbar_actions['underline']==1)?'underline' :"";
797 $blockquote = (isset($wppm_toolbar_actions['blockquote']) && $wppm_toolbar_actions['blockquote']==1)? 'blockquote' :"";
798 $align = (isset($wppm_toolbar_actions['align']) && $wppm_toolbar_actions['align']==1)? ' alignleft aligncenter alignright ' :"";
799 $bullist = (isset($wppm_toolbar_actions['bullist']) && $wppm_toolbar_actions['bullist']==1)? $bullist = 'bullist' :"";
800 $numlist = (isset($wppm_toolbar_actions['numlist']) && $wppm_toolbar_actions['numlist']==1)? $numlist = 'numlist' :"";
801 $rtl = (isset($wppm_toolbar_actions['rtl']) && $wppm_toolbar_actions['rtl']==1)? $rtl = 'rtl' :"";
802 $link = (isset($wppm_toolbar_actions['link']) && $wppm_toolbar_actions['link']==1)? $link = 'link' :"";
803 $image = (isset($wppm_toolbar_actions['wppm_insert_editor_img']) && $wppm_toolbar_actions['wppm_insert_editor_img']==1)? $image = 'image' :"";
804 $forecolor = (isset($wppm_toolbar_actions['forecolor']) && $wppm_toolbar_actions['forecolor']==1)? $forecolor = 'forecolor' :"";
805 $backcolor = (isset($wppm_toolbar_actions['backcolor']) && $wppm_toolbar_actions['backcolor']==1)? $backcolor = 'backcolor' :"";
806 $strikethrough = (isset($wppm_toolbar_actions['strikethrough']) && $wppm_toolbar_actions['strikethrough']==1)? $strikethrough = 'strikethrough' :"";
807 if(($wppm_tinymce_visibility_open_task==1)){
808 if(!empty($wppm_rich_text_editor) && ($wppm_rich_text_editor == 1)){
809 ?>
810 tinymce.remove();
811 tinymce.init({
812 selector:'#wppm_task_comment',
813 body_id: 'wppm_task_comment',
814 directionality : '<?php //echo 'rtl'; ?>',
815 menubar: false,
816 statusbar: false,
817 height : '200',
818 width : '100%',
819 plugins: [
820 'lists link image directionality paste textcolor'
821 ],
822 image_advtab: true,
823 toolbar: '<?php echo $bold ?> <?php echo $italic ?> <?php echo $underline ?> <?php echo $blockquote?> | <?php echo $align ?> | <?php echo $bullist ?> <?php echo $numlist ?> | <?php echo $rtl ?> | <?php echo $link ?> <?php echo $image ?> | <?php echo $forecolor?> <?php echo $backcolor?> <?php echo $strikethrough ?>',
824 branding: false,
825 autoresize_bottom_margin: 20,
826 browser_spellcheck : true,
827 relative_urls : false,
828 remove_script_host : false,
829 convert_urls : true,
830 paste_as_text: true,
831 setup: function (editor) {
832 }
833 });
834 jQuery('#wppm_comment_btn').show();
835 <?php } ?>
836 <?php } ?>
837 });
838
839 jQuery(function(jQuery){
840 // Checklist Sorting
841 jQuery(".wppm_checklist_items_container").sortable({
842 handle: ".wppm_chk_items_drag",
843 update: function() {
844 let order = [];
845 jQuery(this).find("li").each(function(){
846 order.push(jQuery(this).data("id")); // checklist item id
847 });
848
849 // AJAX Save
850 jQuery.post(wppm_admin.ajax_url, {
851 action: "wppm_update_checklist_order",
852 order: order,
853 task_id: <?php echo esc_attr($id); ?>,
854 _ajax_nonce: '<?php echo esc_attr( wp_create_nonce( 'wppm_update_checklist_order' ) ); ?>'
855 }, function(response_str){
856 var response = JSON.parse(response_str);
857 jQuery('.wppm_submit_wait').hide();
858 if (response.sucess_status=='1') {
859 jQuery('#wppm_alert_success .wppm_alert_text').text(response.messege);
860 }
861 jQuery('#wppm_alert_success').slideDown('fast',function(){});
862 setTimeout(function(){ jQuery('#wppm_alert_success').slideUp('fast',function(){}); }, 3000);
863 });
864 }
865 });
866
867 });
868
869 function wppm_cancel_comment(){ <?php
870 if(!empty($wppm_rich_text_editor) && ($wppm_rich_text_editor == 1)){
871 ?>
872 tinyMCE. activeEditor. setContent('');
873 tinymce.remove('#wppm_task_comment');
874 jQuery('#wppm_comment_btn').hide();
875 <?php } else{
876 ?>
877 jQuery('#wppm_task_comment').css("width", "80%");
878 jQuery('#wppm_task_comment').css("height", "30px");
879 jQuery('#wppm_task_comment').css("color", "#000");
880 jQuery('#wppm_task_comment').css("padding", "5px");
881 jQuery('#wppm_task_comment').css(" margin-bottom", "15px");
882 jQuery('#wppm_task_comment').css("overflow", "hidden");
883 jQuery('#wppm_task_comment').css("border", "1 px solid #eee");
884 jQuery('#wppm_task_comment').css("color", "#eee");
885 jQuery('#wppm_task_comment').css("margin-top", "10px");
886 jQuery('#wppm_comment_btn').hide();
887 <?php }?>
888 }
889
890 function wppm_add_task_comment(){
891 <?php
892 if(!empty($wppm_rich_text_editor) && ($wppm_rich_text_editor == 1)){
893 ?>
894 tinymce.remove();
895 tinymce.init({
896 selector:'#wppm_task_comment',
897 body_id: 'wppm_task_comment',
898 directionality : '<?php //echo 'rtl'; ?>',
899 menubar: false,
900 statusbar: false,
901 height : '200',
902 width : '100%',
903 plugins: [
904 'lists link image directionality paste textcolor'
905 ],
906 image_advtab: true,
907 toolbar: '<?php echo $bold ?> <?php echo $italic ?> <?php echo $underline ?> <?php echo $blockquote?> | <?php echo $align ?> | <?php echo $bullist ?> <?php echo $numlist ?> | <?php echo $rtl ?> | <?php echo $link ?> <?php echo $image ?> | <?php echo $forecolor?> <?php echo $backcolor?> <?php echo $strikethrough ?>',
908 branding: false,
909 autoresize_bottom_margin: 20,
910 browser_spellcheck : true,
911 relative_urls : false,
912 remove_script_host : false,
913 convert_urls : true,
914 paste_as_text: true,
915 setup: function (editor) {
916 }
917 });
918 <?php } else{ ?>
919 jQuery('#wppm_task_comment').css("width", "100%");
920 jQuery('#wppm_task_comment').css("height", "160px");
921 jQuery('#wppm_task_comment').css("color", "#000");
922 <?php }?>
923 jQuery('#wppm_comment_btn').show();
924 }
925
926 function wppm_submit_task_comment(id,proj_id){
927 var dataform = new FormData(jQuery('#wppm_open_task')[0]);
928 dataform.append('action','wppm_submit_task_comment');
929 <?php
930 if(!empty($wppm_rich_text_editor) && ($wppm_rich_text_editor == 1)){ ?>
931 var comment_body = tinyMCE.get('wppm_task_comment').getContent().trim();
932 <?php } else{ ?>
933 var comment_body = jQuery("#wppm_task_comment").val();
934 <?php }?>
935 dataform.append('comment_body',comment_body);
936 dataform.append('task_id',id);
937 jQuery('#wppm_task_container').html(wppm_admin.loading_html);
938 jQuery.ajax({
939 url: wppm_admin.ajax_url,
940 type: 'POST',
941 data: dataform,
942 processData: false,
943 contentType: false
944 })
945 .done(function (response_str) {
946 if((proj_id!=0)||(proj_id!="")){
947 wppm_open_project_tasks(id,proj_id);
948 }else if((proj_id==0)||(proj_id=="")){
949 wppm_open_task(id);
950 }
951 });
952 }
953
954 function wppm_add_checklist_item(checklist_id){
955 jQuery('#wppm_add_checklist_label_container_'+checklist_id).show();
956 jQuery('#wppm_add_checklist_item_btn_'+checklist_id).hide();
957 jQuery('.wppm_add_checklist_label_container_'+checklist_id).show();
958 jQuery('.wppm_checklist_item_label_'+checklist_id).css('height', '30px');
959 jQuery('.wppm_add_new_item_btn_'+checklist_id).css('margin', '10px');
960 }
961
962 function wppm_add_checklist(){
963 jQuery('#wppm_add_checklist').hide();
964 jQuery('#wppm_add_new_checklist').show();
965 }
966
967 function wppm_remove_add_checklist_container(checklist_id){
968 jQuery('#wppm_add_checklist_label_container_'+checklist_id).hide();
969 jQuery('#wppm_add_checklist_item_btn_'+checklist_id).show();
970 }
971
972 function wppm_remove_add_checklist(){
973 jQuery('#wppm_add_new_checklist').hide();
974 jQuery('#wppm_add_checklist').show();
975 }
976
977 function wppm_upload_file(){
978 jQuery('#wppm_attachment_upload').unbind('change');
979 jQuery('#wppm_attachment_upload').on('change', function() {
980 var flag = false;
981 var file = this.files[0];
982 jQuery('#wppm_attachment_upload').val('');
983 var allowedExtension = ['exe', 'php','js'];
984 var file_name_split = file.name.split('.');
985 var file_extension = file_name_split[file_name_split.length-1];
986 file_extension = file_extension.toLowerCase();
987 if( (jQuery.inArray(file_extension,allowedExtension) > -1)){
988 flag = true;
989 alert("<?php _e('Attached file type not allowed!','taskbuilder')?>");
990 };
991 <?php
992 $max_upload = (int)(ini_get('upload_max_filesize')); ?>
993 var current_filesize=file.size/1000000;
994 if(current_filesize > <?php echo esc_attr($max_upload); ?>){
995 flag = true;
996 alert("<?php _e('File size exceed allowed limit!','taskbuilder')?>");
997 }
998 if (!flag){
999 var html_str = '<div class="wppm_attachment">'+
1000 '<div class="progress" style="float: none !important; width: unset !important;">'+
1001 '<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%">'+
1002 file.name+
1003 '</div>'+
1004 '<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>'+
1005 '</div>'+
1006 '</div>';
1007 jQuery('.wppm_attachment_container').show();
1008 jQuery('.wppm_attachment_container').append(html_str);
1009 var attachment = jQuery('.wppm_attachment_container').find('.wppm_attachment').last();
1010 var data = new FormData();
1011 data.append('file', file);
1012 data.append('arr_name', file.name);
1013 data.append('action', 'wppm_upload_file');
1014 data.append('nonce', jQuery('#wppm_nonce').val().trim());
1015 jQuery.ajax({
1016 type: 'post',
1017 url: wppm_admin.ajax_url,
1018 data: data,
1019 xhr: function(){
1020 var xhr = new window.XMLHttpRequest();
1021 xhr.upload.addEventListener("progress", function(evt){
1022 if (evt.lengthComputable) {
1023 var percentComplete = Math.floor((evt.loaded / evt.total) * 100);
1024 jQuery(attachment).find('.progress-bar').css('width',percentComplete+'%');
1025 }
1026 }, false);
1027 return xhr;
1028 },
1029 processData: false,
1030 contentType: false,
1031 success: function(response) {
1032 var return_obj=JSON.parse(response);
1033 jQuery(attachment).find('.wppm_attachment_cancel').show();
1034 if( parseInt(return_obj.id) != 0 ){
1035 jQuery(attachment).append('<input type="hidden" class="wppm_comment_attachment" name="wppm_comment_attachment[]" value="'+return_obj.id+'">');
1036 jQuery(attachment).find('.progress-bar').addClass('progress-bar-success');
1037 }else {
1038 jQuery(attachment).find('.progress-bar').addClass('progress-bar-danger');
1039 }
1040 }
1041 });
1042 }
1043 });
1044 jQuery('#wppm_attachment_upload').trigger('click');
1045 }
1046 </script>
1047