PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 5.0.0
Taskbuilder – Project Management & Task Management Tool With Kanban Board v5.0.0
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.0, at includes/admin/tasks/open_task/wppm_open_task.php

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