PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 5.0.2
Taskbuilder – Project Management & Task Management Tool With Kanban Board v5.0.2
6.0.6 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 All 58 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.2, at includes/admin/tasks/open_task/wppm_open_task.php

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