PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 6.0.7
Taskbuilder – Project Management & Task Management Tool With Kanban Board v6.0.7
6.0.7 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 All 59 releases
← All changes | includes/admin/projects/wppm_open_project.php +126 -84 5.0.3 → 6.0.7 View file →
@@ -14,15 +14,17 @@
14 14 $wppm_date_setting = get_option('wppm_date_setting');
15 15 $wppm_proj_hide_comment_section = get_option('wppm_proj_hide_comment_section');
16 16 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
17 17 $wppm_deafault_time_duration_project = get_option('wppm_display_time_duration_project');
18 -$current_date = date('Y-m-d');
19 -$id = isset($_POST) && isset($_POST['id']) ? intval(sanitize_text_field($_POST['id'])) : 0;
18 +$current_date = wp_date('Y-m-d');
19 +$id = isset($_POST) && isset($_POST['id']) ? absint(sanitize_text_field(wp_unslash($_POST['id']))) : 0;
20 20 if (!isset($id)) {exit;}
21 -$auth_id = $wppmfunction->get_project_meta($id,'project_auth_code',true);
21 +$wppm_can_create_project = ($current_user->has_cap('manage_options')) || $wppm_current_user_capability == 'wppm_manager'|| $wppm_current_user_capability == 'wppm_admin';
22 +$wppm_can_create_project = apply_filters( 'wppm_can_create_project', $wppm_can_create_project, $current_user->ID, $id );
23 +$auth_id = $wppmfunction->get_project_fields($id,'project_auth_code',true);
22 24 $auth_id = sanitize_text_field($auth_id);
23 -$project = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_project where id = '".esc_sql($id)."'" );
24 -$orderby_sql = esc_sql(sanitize_sql_orderby("create_time DESC"));
25 +$project = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project where id = %d",$id));
26 +$orderby_sql = (sanitize_sql_orderby("create_time DESC"));
25 27 // url authentication.
26 28 $auth_code = isset( $_POST['auth-code'] ) ? sanitize_text_field( $_POST['auth-code'] ) : ''; // phpcs:ignore
27 29 if ( ! $auth_code ) {
28 30 $auth_code = isset( $_POST['auth_code'] ) ? sanitize_text_field( $_POST['auth_code'] ) : ''; // phpcs:ignore
@@ -30,9 +32,9 @@
30 32
31 33 if ( $auth_code && $auth_id == $auth_code ) {
32 34 $url_auth = true;
33 35 }
34 -$project_comment = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_project_comment where proj_id='".esc_sql($id)."' ORDER BY $orderby_sql");
36 +$project_comment = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_comment where proj_id = %d ORDER BY $orderby_sql",$id));
35 37 if(isset($project->users)){
36 38 $users = explode(",",$project->users);
37 39 }else{
38 40 $users = "";
@@ -37,18 +39,31 @@
37 39 }else{
38 40 $users = "";
39 41 }
40 42 $wppm_users_role = get_option('wppm_user_role');
43 +$current_user_role='';
44 +if ( ! empty( $users ) && in_array( $current_user->ID, $users, true ) ) {
45 + $current_user_role = $wpdb->get_var(
46 + $wpdb->prepare(
47 + "SELECT role_id
48 + FROM {$wpdb->prefix}wppm_project_users
49 + WHERE proj_id = %d
50 + AND user_id = %d",
51 + $id,
52 + $current_user->ID
53 + )
54 + );
55 +}
41 56 if(isset($project->status)){
42 - $projstatus = esc_sql($project->status);
43 - $project_status = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id = '$projstatus'");
57 + $projstatus = absint($project->status);
58 + $project_status = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id = %d",$projstatus));
44 59 }
45 60 if(isset($project->cat_id)){
46 - $projcat = esc_sql($project->cat_id);
47 - $project_category = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_categories where id = '$projcat'");
61 + $projcat = absint($project->cat_id);
62 + $project_category = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_categories where id = %d",$projcat));
48 63 }
49 64 if(!empty($project->description)){
50 - $project_description = stripslashes((htmlspecialchars_decode($project->description, ENT_QUOTES)));
65 + $project_description = ! empty( $project->description ) ? $project->description : '';
51 66 }
52 67 if($wppm_project_time == 1){
53 68 $psDate = new DateTime($project->start_date);
54 69 $peDate = new DateTime($project->end_date);
@@ -130,32 +145,52 @@
130 145 }
131 146
132 147 $project_data = $wppmfunction->get_project($id);
133 148 $project_users = explode(",",$project_data['users']);
149 + if(!empty($id)){
150 + $project_id = esc_sql($id);
151 + $public_proj_meta = $wpdb->get_var( "SELECT meta_value FROM {$wpdb->prefix}wppm_project_meta where project_id= '$project_id' AND meta_key='public_project'");
152 +}else{
153 + $public_proj_meta ="";
154 +}
134 155
135 -if (!(($current_user->ID && $current_user->has_cap('manage_options')) || in_array($current_user->ID,$project_users) || ($project_data['created_by']==$current_user->ID && $wppm_current_user_capability == 'wppm_manager') || ($current_user->ID && $current_user->has_cap('wppm_admin')) || ((!empty($auth_code)) && $url_auth==true))) {
156 +if (!(($current_user->ID && $current_user->has_cap('manage_options')) || in_array($current_user->ID,$project_users) || ((!in_array($current_user->ID,$project_users)) && $public_proj_meta == '1')|| ($project_data['created_by']==$current_user->ID && $wppm_current_user_capability == 'wppm_manager') || ($current_user->ID && $current_user->has_cap('wppm_admin')) || ((!empty($auth_code)) && $url_auth==true))) {
136 157 ?>
137 158 <div style="align-item:center;" ><h6><?php esc_attr_e( 'Unauthorized access!', 'taskbuilder' ); ?></h6></div>
138 159 <?php
139 160 wp_die();
140 161 }
141 -
162 +if( $wppm_current_user_capability == 'wppm_admin' || $current_user->has_cap('manage_options') || $project_data['created_by']==$current_user->ID){
163 + $archive_style= "display:inline;";
164 +}else{
165 + $archive_style= "display:none;";
166 +}
142 167 ?>
143 168 <form id="wppm_open_project" method="post">
144 169 <div class="row">
145 170 <div class="col-sm-12">
146 171 <span class="wppm-heading-inline"><?php echo esc_html_e('Project','taskbuilder');?></span>
147 - <?php if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_manager'|| $wppm_current_user_capability == 'wppm_admin'){ ?>
172 + <?php if($wppm_can_create_project){ ?>
148 173 <span class="wppm-add-new-btn btn-primary" style="background-color:<?php echo esc_attr($appearance_settings['menu-button-bg-color'])?>;color:<?php echo esc_attr($appearance_settings['menu-button-text-color'])?>" id="wppm_add_new_project_btn" onclick="wppm_add_new_project()"><span style="margin-right:5px;"><img id="wppm_add_new_project_icon" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/plus_icon.svg'); ?>" alt="plus_icon"></span><span><?php echo esc_html_e('Add New','taskbuilder');?></span></span>
149 174 <?php } ?>
150 175 <span class="wppm-add-new-btn btn-primary" id="wppm_project_list" style="background-color:<?php echo esc_attr($appearance_settings['menu-button-bg-color'])?>;color:<?php echo esc_attr($appearance_settings['menu-button-text-color'])?>" onclick="wppm_get_project_list()" ><span style="margin-right:5px;"><img id ="wppm_project_list_icon" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/list-symbol.svg'); ?>" alt="list-symbol"></span><span><?php echo esc_html_e('Project List','taskbuilder');?></span></span>
176 + <span class="wppm-add-new-btn btn-primary"" id="wppm_archieve_project_btn" title="<?php echo ($project->is_archived==1 ) ? 'Restore Project' : 'Archive Project'; ?>" onclick="wppm_archive_project(<?php echo esc_attr($project->id) ?>,<?php echo esc_attr($project->is_archived) ?>)" style="<?php echo esc_attr($archive_style) ?>"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/archive_project.svg'); ?>" alt="archive"><span style="margin-left:5px;"><?php echo ($project->is_archived==1 ) ? esc_html_e('Restore Project','taskbuilder') : esc_html_e('Archive Project','taskbuilder');?></span></span>
177 + <input type="hidden" name="wppm_archive_project_ajax_nonce" id="wppm_archive_project_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_archive_project_ajax_nonce' ) ); ?>">
178 + <!-- Dashboard Button -->
179 + <a class="wppm-add-new-btn btn-primary" style="background-color:<?php echo esc_attr($appearance_settings['menu-button-bg-color'])?>;color:<?php echo esc_attr($appearance_settings['menu-button-text-color'])?>" href="<?php echo esc_url( admin_url('admin.php?page=wppm-dashboard') ); ?>">
180 + <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/dashboard.svg'); ?>" alt="dashboard_icon">
181 + <?php esc_html_e('Dashboard','taskbuilder'); ?>
182 + </a>
151 183 <span class="wppm-add-new-btn btn-primary" id="wppm_project_tasks" style="background-color:<?php echo esc_attr($appearance_settings['menu-button-bg-color'])?>;color:<?php echo esc_attr($appearance_settings['menu-button-text-color'])?>" onclick="wppm_get_project_tasks(<?php echo esc_attr($id) ?>)"><span style="margin-right:5px;"><img id ="wppm_task_list_icon" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/task_list.svg'); ?>" alt="task_list"></span><span><?php echo esc_html_e('Tasks','taskbuilder');?></span></span>
184 + <span class="wppm-add-new-btn btn-primary" id="wppm_project_tasks_kanban_view" style="background-color:<?php echo esc_attr($appearance_settings['menu-button-bg-color'])?>;color:<?php echo esc_attr($appearance_settings['menu-button-text-color'])?>" onclick="wppm_get_project_tasks_kanban_view(<?php echo esc_attr($id) ?>)"><span style="margin-right:5px;"><img id ="wppm_task_list_icon" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/kanban-svg.svg'); ?>" alt="task_list"></span><span><?php echo esc_html_e('Kanban View','taskbuilder');?></span></span>
152 185 <?php $style = (($current_user->ID && $current_user->has_cap('manage_options')) || ($wppmfunction->has_project_permission('delete_project',$project->id)) || ($project->created_by==$current_user->ID && $wppm_current_user_capability == 'wppm_manager') || ($current_user->ID && $current_user->has_cap('wppm_admin')))? "display:inline":"display:none"; ?>
153 186 <span class="wppm-add-new-btn btn-primary" id="wppm_delete_project_btn" style="background-color:<?php echo esc_attr($appearance_settings['menu-button-bg-color'])?>;color:<?php echo esc_attr($appearance_settings['menu-button-text-color'])?>;<?php echo esc_attr($style) ?>" onclick="wppm_delete_project(<?php echo esc_attr($id) ?>)"><span style="margin-right:5px;"><img id="wppm_delete_project_icon" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/delete2.svg'); ?>" alt="delete"></span><span><?php echo esc_html_e('Delete','taskbuilder');?></span></span>
154 187 <?php $visibility_style = (($current_user->ID && ($current_user->has_cap('manage_options') || $current_user->has_cap('wppm_admin') || ($project->created_by==$current_user->ID && $wppm_current_user_capability == 'wppm_manager'))) && ($wppm_public_projects_permission==1))? "display:inline":"display:none"; ?>
155 188 <span class="wppm-add-new-btn btn-primary" id="wppm_project_visibility" style="background-color:<?php echo esc_attr($appearance_settings['menu-button-bg-color'])?>;color:<?php echo esc_attr($appearance_settings['menu-button-text-color'])?>;<?php echo esc_attr($visibility_style) ?>" onclick="wppm_get_project_visibility(<?php echo esc_attr($id) ?>)"><span style="margin-right:5px;"><img id ="wppm_task_list_icon" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/wppm_visibility.svg'); ?>" alt="project_visibility"></span><span><?php echo esc_html_e('Project Visibility','taskbuilder');?></span></span>
156 - <?php echo do_action('wppm_after_open_project_buttons',$project->id);?>
157 - </div>
189 + <?php do_action('wppm_after_open_project_buttons',$project->id); ?>
190 + <?php foreach ( wppm_get_locked_pro_addons_by_placement('toolbar') as $wppm_addon_key => $wppm_addon ) : ?>
191 + <a class="wppm-add-new-btn btn-primary wppm-locked-toolbar-btn" style="background-color:<?php echo esc_attr($appearance_settings['menu-button-bg-color'])?>;color:<?php echo esc_attr($appearance_settings['menu-button-text-color'])?>" href="<?php echo esc_url( wppm_pro_upgrade_url() ); ?>" target="_blank" rel="noopener noreferrer" title="<?php echo esc_attr( sprintf( __( '%s is a Pro feature. Click to upgrade.', 'taskbuilder' ), $wppm_addon['label'] ) ); ?>"><span class="wppm-pro-icon-wrap" style="margin-right:5px;"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/' . $wppm_addon['icon'] ); ?>" alt=""><span class="wppm-pro-badge-corner"><?php echo wppm_pro_badge_svg( 11 ); ?></span></span><span><?php echo esc_html( $wppm_addon['label'] ); ?></span></a>
192 + <?php endforeach; ?>
158 193 </div>
159 194 <div id="wppm_load_individual_project_container" class="row">
160 195 <div class="col-sm-8 wppm_body col-md-9">
161 196 <div class="row">
@@ -162,9 +197,10 @@
162 197 <div class="col-sm-12" id="wppm_project_details_container">
163 198 <div class="row">
164 199 <div class="col-sm-12">
165 200 <span class="wppm_project_label"> <?php echo isset($project->project_name) ? esc_html($project->project_name):"";
166 - if (($wppmfunction->has_project_permission('change_project_details',$id)) || ($current_user->has_cap('manage_options') || $current_user->has_cap('wppm_admin') || ($project->created_by==$current_user->ID && $wppm_current_user_capability == 'wppm_manager'))) { ?>
201 + if ((($wppmfunction->has_project_permission('change_project_details',$id)) || ($current_user->has_cap('manage_options') || $current_user->has_cap('wppm_admin') || ($project->created_by==$current_user->ID && $wppm_current_user_capability == 'wppm_manager'))) && $project_data['is_archived']!=1) {
202 + ?>
167 203 <span id="wppm_individual_edit_project_subject" onclick="wppm_edit_proj_details(<?php echo esc_attr($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>
168 204 <?php } ?>
169 205 </span>
170 206 </div>
@@ -238,9 +274,9 @@
238 274 <div class="col-sm-3">
239 275 <span class="wppm_project_details_label"><?php echo esc_html_e('Project Category:','taskbuilder');?></span>
240 276 </div>
241 277 <div class="col-sm-9">
242 - <span class="wppm_project_details"><?php echo (isset($project_category->name))? esc_html_e($project_category->name,'taskbuilder'):"" ?></span>
278 + <span class="wppm_project_details"><?php echo (isset($project_category->name))? esc_html($project_category->name):"" ?></span>
243 279 </div>
244 280 </div>
245 281 <div class="row">
246 282 <div class="col-sm-3">
@@ -249,14 +285,15 @@
249 285 <?php
250 286 $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(),));
251 287 ?>
252 288 <div class="col-sm-9 wppm_project_description">
253 - <span><?php echo (isset($project_description))? wp_kses(wpautop($project_description),$allowedtags):"" ?></span>
289 + <span><?php echo (!empty($project_description))? wp_kses(wpautop($project_description),$allowedtags):"" ?></span>
254 290 </div>
291 + <?php do_action('wppm_after_project_details_in_open_project',$project->id);?>
255 292 </div>
256 293 </div>
257 294 </div>
258 - <div id="wppm_proj_discussion_container" style="<?php echo ($wppm_proj_hide_comment_section==0) ? 'display:none;' : 'display:block;' ?>">
295 + <div id="wppm_proj_discussion_container" style="<?php echo ($wppm_proj_hide_comment_section==0 || $current_user_role==3|| $project_data['is_archived']==1) ? 'display:none;' : 'display:block;' ?>">
259 296 <div class="row">
260 297 <div class="col-sm-12" style="margin-top:5px;">
261 298 <span class="wppm_proj_discussion"><?php echo esc_html_e('Comment','taskbuilder')?></span><br>
262 299 </div>
@@ -284,18 +321,17 @@
284 321 <div class="wppm_proj_attachment_container col-sm-12" style="display:none;">
285 322 </div>
286 323 </div>
287 324 </div>
288 - <div class="wppm_thread_container" style="<?php echo ($wppm_proj_hide_comment_section==0) ? 'display:none;' : 'display:block;' ?>">
325 + <div class="wppm_thread_container" style="<?php echo ($wppm_proj_hide_comment_section==0 || $current_user_role==3 || $project_data['is_archived']==1) ? 'display:none;' : 'display:block;' ?>">
289 326 <?php
290 327 if(!empty($project_comment)){
291 328 foreach($project_comment as $comment){
292 329 $proj_comment_meta = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_project_comment_meta where proj_id='".esc_sql($id)."' AND comment_id='".esc_sql($comment->id)."'");
293 330 $user = get_userdata( $comment->created_by );
294 - $comment_body = stripslashes((htmlspecialchars_decode($comment->body, ENT_QUOTES)));
295 - $comment_body = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $comment_body);
296 - $date = date("Y-m-d H:i:s" ,strtotime($comment->create_time));
297 - $thread_date = date("d F Y, h:i:s A" ,strtotime($date));
331 + $comment_body = !empty($comment->body) ? wp_kses_post(wpautop($comment->body)) : '';
332 + $date = wp_date("Y-m-d H:i:s" ,strtotime($comment->create_time));
333 + $thread_date = wp_date("d F Y, h:i:s A" ,strtotime($date));
298 334 $attachment_ids = isset($comment->attachment_ids)? $comment->attachment_ids : '';
299 335 if($attachment_ids!=""){
300 336 $attachments = explode(",",$attachment_ids);
301 337 } else {
@@ -313,16 +349,16 @@
313 349 $comment_log_body = unserialize($comment->body);
314 350 $prev_status = $comment_log_body['prev_status'];
315 351 $new_status = $comment_log_body['new_status'];
316 352 if(isset($prev_status)){
317 - $prev_status = esc_sql($prev_status);
318 - $project_prev_status = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id = '$prev_status'");
353 + $prev_status = absint($prev_status);
354 + $project_prev_status = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id = %d",$prev_status));
319 355 }
320 356 if(isset($new_status)){
321 - $new_status = esc_sql($new_status);
322 - $project_new_status = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id= '$new_status'");
357 + $new_status = absint($new_status);
358 + $project_new_status = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id= %d",$new_status));
323 359 }
324 - esc_html_e("changed status from $project_prev_status->name to $project_new_status->name","taskbuilder");
360 + echo esc_html( sprintf(__( 'Changed status from %1$s to %2$s', 'taskbuilder' ),$project_prev_status->name,$project_new_status->name));
325 361 }
326 362 if(!empty($comment->body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_proj_creator')){
327 363 $comment_log_body = unserialize($comment->body);
328 364 $prev_user = $comment_log_body['prev_user'];
@@ -328,27 +364,29 @@
328 364 $prev_user = $comment_log_body['prev_user'];
329 365 $new_user = $comment_log_body['new_user'];
330 366 $prev_user_data = get_userdata($prev_user);
331 367 $new_user_data = get_userdata($new_user);
332 - esc_html_e("changed creator from $prev_user_data->display_name to $new_user_data->display_name","taskbuilder");
333 - }if(!empty($comment->body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_assign_user')){
334 - esc_html_e("changed the Assignee","taskbuilder");
335 - }if(!empty($comment->body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_proj_cat')){
336 - $comment_log_body = unserialize($comment->body);
337 - $prev_cat = $comment_log_body['prev_cat'];
338 - $new_cat = $comment_log_body['new_cat'];
339 - if(!empty($prev_cat)){
340 - $prev_cat = esc_sql($prev_cat);
341 - $project_prev_cat = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_categories where id= '$prev_cat'");
368 + echo sprintf( esc_html__( 'Changed creator from %1$s to %2$s', 'taskbuilder' ), esc_html( $prev_user_data->display_name ), esc_html( $new_user_data->display_name ));
342 369 }
343 - if(!empty($new_cat)){
344 - $new_cat = esc_sql($new_cat);
345 - $project_new_cat = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_categories where id='$new_cat'");
370 + if(!empty($comment->body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_assign_user')){
371 + esc_html_e("Changed the Assignee","taskbuilder");
346 372 }
347 - $proj_prev_cat_name = !empty($project_prev_cat) ? $project_prev_cat->name: "None";
348 - $proj_new_cat_name = !empty($project_new_cat) ? $project_new_cat->name: "None";
349 - esc_html_e("changed category from $proj_prev_cat_name to $proj_new_cat_name","taskbuilder");
350 - }
373 + if(!empty($comment->body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_proj_cat')){
374 + $comment_log_body = unserialize($comment->body);
375 + $prev_cat = $comment_log_body['prev_cat'];
376 + $new_cat = $comment_log_body['new_cat'];
377 + if(!empty($prev_cat)){
378 + $prev_cat = absint($prev_cat);
379 + $project_prev_cat = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_categories where id= %d",$prev_cat));
380 + }
381 + if(!empty($new_cat)){
382 + $new_cat = absint($new_cat);
383 + $project_new_cat = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_categories where id=%d",$new_cat));
384 + }
385 + $proj_prev_cat_name = !empty($project_prev_cat) ? $project_prev_cat->name: "None";
386 + $proj_new_cat_name = !empty($project_new_cat) ? $project_new_cat->name: "None";
387 + echo sprintf( esc_html__( 'Changed category from %1$s to %2$s', 'taskbuilder' ), esc_html( $proj_prev_cat_name ), esc_html( $proj_new_cat_name ));
388 + }
351 389 ?></span>
352 390 <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>
353 391 <div class="wppm_thread_action">
354 392 <?php if(( (($current_user->has_cap('manage_options')) || ($wppmfunction->has_proj_comment_permission('edit_proj_comment',$id,$comment->id))) && ((empty($proj_comment_meta->comment_type))|| (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='comment')))){ ?>
@@ -411,10 +449,10 @@
411 449 <?php
412 450 if(!empty($attachments)){
413 451 foreach( $attachments as $attachment ):
414 452 $download_url = site_url('/').'?wppm_attachment='.$attachment.'&pid='.$id.'&pac='.$auth_id;
415 - $attachment = esc_sql($attachment);
416 - $attach = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_attachments where id='$attachment'");
453 + $attachment = absint($attachment);
454 + $attach = $wpdb->get_row( $wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_attachments where id=%d",$attachment));
417 455 $findStr = ".txt";
418 456 if(!empty( $attach)){
419 457 $attachment_name = preg_replace('/' . $findStr . '/', "", $attach->name, 1);
420 458 $attachment_name = sanitize_file_name($attachment_name);
@@ -447,10 +485,10 @@
447 485 <div class="wppm_individual_project_widget col-sm-4 wppm_sidebar col-md-3">
448 486 <div class="row wppm_widget" id="wppm_project_status_widget">
449 487 <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>">
450 488 <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"><?php echo esc_html_e('Status','taskbuilder')?></h4>
451 - <?php $style = ($wppmfunction->has_project_permission('change_project_status',$id) || $current_user->has_cap('manage_options') || ($project->created_by==$current_user->ID && $wppm_current_user_capability == 'wppm_manager') || $wppm_current_user_capability == 'wppm_admin')? "display:flex":"display:none"; ?>
452 - <span class="wppm_edit_project_details_widget" style="<?php echo $style ?>" onclick="wppm_edit_project_status(<?php echo esc_attr($id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span>
489 + <?php $style = (($wppmfunction->has_project_permission('change_project_status',$id) || $current_user->has_cap('manage_options') || ($project->created_by==$current_user->ID && $wppm_current_user_capability == 'wppm_manager') || $wppm_current_user_capability == 'wppm_admin') && $project_data['is_archived']!=1)? "display:flex":"display:none"; ?>
490 + <span class="wppm_edit_project_details_widget" style="<?php echo esc_attr($style) ?>" onclick="wppm_edit_project_status(<?php echo esc_attr($id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span>
453 491 </div>
454 492 <hr class="widget_divider">
455 493 <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>">
456 494 <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 class="wppm_admin_label" style="background-color:<?php echo isset($project_status->bg_color) ? esc_attr($project_status->bg_color):""; ?>;color:<?php echo isset($project_status->color) ? esc_attr($project_status->color): "" ?>;"><?php echo isset($project_status->name) ? esc_attr($project_status->name) : "" ?> </span></div>
@@ -458,9 +496,9 @@
458 496 </div>
459 497 <div class="row wppm_widget" id="wppm_project_raisedby_widget">
460 498 <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>">
461 499 <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"><?php echo esc_html_e('Project Creator','taskbuilder')?></span></h4>
462 - <?php if ($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'|| ($project->created_by==$current_user->ID && $wppm_current_user_capability == 'wppm_manager')) { ?>
500 + <?php if (($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'|| ($project->created_by==$current_user->ID && $wppm_current_user_capability == 'wppm_manager')) && $project_data['is_archived']!=1) { ?>
463 501 <span class="wppm_edit_project_details_widget" onclick="wppm_edit_project_creator(<?php echo esc_attr($id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span>
464 502 <?php } ?>
465 503 </div>
466 504 <hr class="widget_divider"> <?php
@@ -473,9 +511,9 @@
473 511 <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>">
474 512 <div id="wppm_project_creator">
475 513 <div style="padding:2px 0;">
476 514 <span class="wppm_project_user_avatar"><?php echo isset($project->created_by)? (get_avatar($project->created_by, 25, "mysteryman")):""; ?></span>
477 - <span class="wppm_project_user_names" style="color:<?php echo esc_attr($appearance_settings['widget-body-text-color'])?>"><?php echo (!empty($user_info)) ? esc_html_e($user_info->display_name,'taskbuilder') : "";?></span>
515 + <span class="wppm_project_user_names" style="color:<?php echo esc_attr($appearance_settings['widget-body-text-color'])?>"><?php echo (!empty($user_info)) ? esc_html($user_info->display_name) : "";?></span>
478 516 </div>
479 517 </div>
480 518 </div>
481 519 </div>
@@ -481,9 +519,9 @@
481 519 </div>
482 520 <div class="row wppm_widget" id="wppm_project_users_widget_container">
483 521 <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>">
484 522 <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"><?php echo esc_html_e('Users','taskbuilder')?></h4>
485 - <?php if ($wppmfunction->has_project_permission('assign_project_users',$id ) || $current_user->has_cap('manage_options') || ($project->created_by==$current_user->ID && $wppm_current_user_capability == 'wppm_manager') || $wppm_current_user_capability == 'wppm_admin') { ?>
523 + <?php if (($wppmfunction->has_project_permission('assign_project_users',$id ) || $current_user->has_cap('manage_options') || ($project->created_by==$current_user->ID && $wppm_current_user_capability == 'wppm_manager') || $wppm_current_user_capability == 'wppm_admin') && $project_data['is_archived']!=1) { ?>
486 524 <span class="wppm_edit_project_details_widget" onclick="wppm_get_users(<?php echo esc_attr($id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit_01.svg'); ?>" alt="edit"></span>
487 525 <?php } ?>
488 526 </div>
489 527 <hr class="widget_divider">
@@ -489,34 +527,36 @@
489 527 <hr class="widget_divider">
490 528 <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>">
491 529 <div id="wppm_project_users">
492 530 <?php
493 - if(!(empty(array_filter($users)))){
494 - foreach($users as $user) {
495 - $user_data = get_userdata($user);
496 - $user = esc_sql($user);
497 - $project_user = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = '".esc_sql($id)."' AND user_id = '$user'");
498 - ?>
499 - <div style="padding:2px 0;">
500 - <span class="wppm_project_user_avatar"><?php echo (get_avatar($user, 25, "mysteryman")); ?></span>
501 - <span class="wppm_project_user_names" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"><?php echo esc_html_e($user_data->display_name,'taskbuilder'); ?></span>
502 - <?php
503 - if(!empty($wppm_users_role)){
504 - foreach($wppm_users_role as $key=>$role){
505 - if(!empty($role)){
506 - foreach($role as $k=>$val){
507 - if( !empty($project_user) && $key == $project_user->role_id){ ?>
508 - <span class="wppm_project_user_role" style="color:<?php echo esc_attr($appearance_settings['widget-body-text-color'])?>">(<?php echo esc_html_e($role['label'],'taskbuilder'); ?>)</span><?php
531 + if(!empty($users)){
532 + if(!(empty(array_filter($users)))){
533 + foreach($users as $user) {
534 + $user_data = get_userdata($user);
535 + $user = absint($user);
536 + $project_user = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = %d AND user_id = %d",$id,$user));
537 + ?>
538 + <div style="padding:2px 0;">
539 + <span class="wppm_project_user_avatar"><?php echo (get_avatar($user, 25, "mysteryman")); ?></span>
540 + <span class="wppm_project_user_names" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"><?php echo esc_html($user_data->display_name); ?></span>
541 + <?php
542 + if(!empty($wppm_users_role)){
543 + foreach($wppm_users_role as $key=>$role){
544 + if(!empty($role)){
545 + foreach($role as $k=>$val){
546 + if( !empty($project_user) && $key == $project_user->role_id){ ?>
547 + <span class="wppm_project_user_role" style="color:<?php echo esc_attr($appearance_settings['widget-body-text-color'])?>">(<?php echo esc_html($role['label']); ?>)</span><?php
548 + }
509 549 }
510 550 }
511 551 }
512 552 }
513 - }
514 - ?>
515 - </div>
516 - <?php
517 - }
518 - } else {
553 + ?>
554 + </div>
555 + <?php
556 + }
557 + }
558 + }else {
519 559 ?><span class="wppm_project_users_not_assign_label" style="color:<?php echo esc_attr($appearance_settings['widget-body-text-color'])?>"> <?php echo esc_html_e('None','taskbuilder'); ?></span><?php
520 560 }
521 561 ?>
522 562 </div>
@@ -521,9 +561,9 @@
521 561 ?>
522 562 </div>
523 563 </div>
524 564 </div>
525 - <?php echo do_action('wppm_after_project_widget',$project->id);?>
565 + <?php do_action('wppm_after_project_widget',$project->id);?>
526 566 </div>
527 567 <div id="wppm_alert_success" class="alert alert-success wppm_alert" style="display:none;" role="alert">
528 568 <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/success.svg'); ?>" alt="success"><span class="wppm_alert_text"></span>
529 569 </div>
@@ -529,9 +569,9 @@
529 569 </div>
530 570 <div id="wppm_alert_error" class="alert alert-danger wppm_alert" style="display:none;" role="alert">
531 571 <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/warning-triangle.svg'); ?>" alt="warning-triangle"><span class="wppm_alert_text"></span>
532 572 </div>
533 - <input type="hidden" id="wppm_proj_nonce" value="<?php echo wp_create_nonce('wppm_upload_proj_attach_file')?>">
573 + <input type="hidden" id="wppm_proj_nonce" value="<?php echo esc_attr(wp_create_nonce('wppm_upload_proj_attach_file'))?>">
534 574 <input type="file" id="wppm_proj_attachment_upload" class="hidden" onchange="">
535 575 </div>
536 576 </form>
537 577 <style>
@@ -590,9 +630,11 @@
590 630 $link = (isset($wppm_toolbar_actions['link']) && $wppm_toolbar_actions['link']==1)? $link = 'link' :"";
591 631 $image = (isset($wppm_toolbar_actions['wppm_insert_editor_img']) && $wppm_toolbar_actions['wppm_insert_editor_img']==1)? $image = 'image' :"";
592 632 $forecolor = (isset($wppm_toolbar_actions['forecolor']) && $wppm_toolbar_actions['forecolor']==1)? $forecolor = 'forecolor' :"";
593 633 $backcolor = (isset($wppm_toolbar_actions['backcolor']) && $wppm_toolbar_actions['backcolor']==1)? $backcolor = 'backcolor' :"";
594 - $strikethrough = (isset($wppm_toolbar_actions['strikethrough']) && $wppm_toolbar_actions['strikethrough']==1)? $strikethrough = 'strikethrough' :""; ?>
634 + $strikethrough = (isset($wppm_toolbar_actions['strikethrough']) && $wppm_toolbar_actions['strikethrough']==1)? $strikethrough = 'strikethrough' :"";
635 + $toolbar = trim("$bold $italic $underline $blockquote | $align | $bullist $numlist | $rtl | $link $image | $forecolor $backcolor $strikethrough");?>
636 +
595 637 tinymce.remove();
596 638 tinymce.init({
597 639 selector:'#wppm_proj_description',
598 640 body_id: 'wppm_proj_description',
@@ -603,9 +645,9 @@
603 645 plugins: [
604 646 'lists link image directionality textcolor'
605 647 ],
606 648 image_advtab: true,
607 - 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 ?>',
649 + toolbar: '<?php echo esc_js( $toolbar ); ?>',
608 650 branding: false,
609 651 autoresize_bottom_margin: 20,
610 652 browser_spellcheck : true,
611 653 relative_urls : false,
@@ -630,9 +672,9 @@
630 672 plugins: [
631 673 'lists link image directionality paste textcolor'
632 674 ],
633 675 image_advtab: true,
634 - 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 ?>',
676 + toolbar: '<?php echo esc_js( $toolbar ); ?>',
635 677 branding: false,
636 678 autoresize_bottom_margin: 20,
637 679 browser_spellcheck : true,
638 680 relative_urls : false,
@@ -663,9 +705,9 @@
663 705 plugins: [
664 706 'lists link image directionality paste textcolor'
665 707 ],
666 708 image_advtab: true,
667 - 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 ?>',
709 + toolbar: '<?php echo esc_js( $toolbar ); ?>',
668 710 branding: false,
669 711 autoresize_bottom_margin: 20,
670 712 browser_spellcheck : true,
671 713 relative_urls : false,
@@ -739,9 +781,9 @@
739 781 var file_extension = file_name_split[file_name_split.length-1];
740 782 file_extension = file_extension.toLowerCase();
741 783 if( (jQuery.inArray(file_extension,allowedExtension) > -1)){
742 784 flag = true;
743 - alert("<?php _e('Attached file type not allowed!','taskbuilder')?>");
785 + alert("<?php echo esc_js(__('Attached file type not allowed!','taskbuilder'))?>");
744 786 };
745 787 <?php
746 788 $max_upload = (int)(ini_get('upload_max_filesize')); ?>
747 789 var current_filesize=file.size/1000000;
@@ -746,9 +788,9 @@
746 788 $max_upload = (int)(ini_get('upload_max_filesize')); ?>
747 789 var current_filesize=file.size/1000000;
748 790 if(current_filesize > <?php echo esc_attr($max_upload); ?>){
749 791 flag = true;
750 - alert("<?php _e('File size exceed allowed limit!','taskbuilder')?>");
792 + alert("<?php echo esc_js(__('File size exceed allowed limit!','taskbuilder'))?>");
751 793 }
752 794 if (!flag){
753 795 var html_str = '<div class="wppm_attachment">'+
754 796 '<div class="progress" style="float: none !important; width: unset !important;">'+