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

wppm_open_project.php in Taskbuilder – Project Management & Task Management Tool With Kanban Board 4.0.3, at includes/admin/projects/wppm_open_project.php

693 lines 47.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 exit; // Exit if accessed directly
4 }
5 global $wpdb,$current_user,$wppmfunction;
6 $wppm_project_time = get_option('wppm_project_time');
7 $wppm_default_project_date = get_option('wppm_default_project_date');
8 $wppm_public_projects_permission = get_option('wppm_public_projects_permission');
9 $appearance_settings = get_option("wppm-ap-individual-project");
10 $wppm_tinymce_visibility_open_project = get_option('wppm_tinymce_visibility_open_project');
11 $settings = get_option("wppm-ap-modal");
12 $wppm_rich_text_editor = get_option('wppm_rich_text_editor');
13 $wppm_toolbar_actions = get_option('wppm_toolbar_actions');
14 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
15 $current_date = date('Y-m-d');
16 $id = isset($_POST) && isset($_POST['id']) ? intval(sanitize_text_field($_POST['id'])) : 0;
17 if (!isset($id)) {exit;}
18 $auth_id = $wppmfunction->get_project_meta($id,'project_auth_code',true);
19 $auth_id = sanitize_text_field($auth_id);
20 $project = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_project where id = '".esc_sql($id)."'" );
21 $orderby_sql = esc_sql(sanitize_sql_orderby("create_time DESC"));
22 // url authentication.
23 $auth_code = isset( $_POST['auth-code'] ) ? sanitize_text_field( $_POST['auth-code'] ) : ''; // phpcs:ignore
24 if ( ! $auth_code ) {
25 $auth_code = isset( $_POST['auth_code'] ) ? sanitize_text_field( $_POST['auth_code'] ) : ''; // phpcs:ignore
26 }
27
28 if ( $auth_code && $auth_id == $auth_code ) {
29 $url_auth = true;
30 }
31 $project_comment = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_project_comment where proj_id='".esc_sql($id)."' ORDER BY $orderby_sql");
32 if(isset($project->users)){
33 $users = explode(",",$project->users);
34 }else{
35 $users = "";
36 }
37 $wppm_users_role = get_option('wppm_user_role');
38 if(isset($project->status)){
39 $projstatus = esc_sql($project->status);
40 $project_status = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id = '$projstatus'");
41 }
42 if(isset($project->cat_id)){
43 $projcat = esc_sql($project->cat_id);
44 $project_category = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_categories where id = '$projcat'");
45 }
46 if(!empty($project->description)){
47 $project_description = stripslashes((htmlspecialchars_decode($project->description, ENT_QUOTES)));
48 }
49 if($wppm_project_time == 1){
50 $proj_start_date = isset($project->start_date)? $project->start_date:"";
51 $proj_end_date = isset($project->end_date) ? $project->end_date: "" ;
52 } elseif($wppm_project_time == 0){
53 $psDate = isset($project->start_date) ? new DateTime($project->start_date): "";
54 $peDate = isset($project->end_date) ? new DateTime($project->end_date):"";
55 $proj_start_date = !empty($psDate) ? $psDate->format('Y-m-d'):"";
56 $proj_end_date = !empty($peDate) ? $peDate->format('Y-m-d'):"";
57 }
58 $project_data = $wppmfunction->get_project($id);
59 $project_users = explode(",",$project_data['users']);
60 if(!empty($auth_code)){
61 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'))) && ($url_auth==true)) {
62 ?>
63 <div style="align-item:center;" ><h6><?php esc_attr_e( 'Unauthorized access!', 'taskbuilder' ); ?></h6></div>
64 <?php
65 wp_die();
66 }
67 }
68
69 ?>
70 <form id="wppm_open_project" method="post">
71 <div class="row">
72 <div class="col-sm-12">
73 <span class="wppm-heading-inline"><?php echo esc_html_e('Project','taskbuilder');?></span>
74 <?php if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_manager'|| $wppm_current_user_capability == 'wppm_admin'){ ?>
75 <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>
76 <?php } ?>
77 <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>
78 <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>
79 <?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"; ?>
80 <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>
81 <?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"; ?>
82 <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>
83 <?php echo do_action('wppm_after_open_project_buttons',$project->id);?>
84 </div>
85 </div>
86 <div id="wppm_load_individual_project_container" class="row">
87 <div class="col-sm-8 wppm_body col-md-9">
88 <div class="row">
89 <div class="col-sm-12" id="wppm_project_details_container">
90 <div class="row">
91 <div class="col-sm-12">
92 <span class="wppm_project_label"> <?php echo isset($project->project_name) ? esc_html($project->project_name):"";
93 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'))) { ?>
94 <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>
95 <?php } ?>
96 </span>
97 </div>
98 </div>
99 <div class="row">
100 <div class="col-sm-3">
101 <span class="wppm_project_details_label"><?php echo esc_html_e('Created On:','taskbuilder');?></span>
102 </div>
103 <div class="col-sm-9">
104 <span class="wppm_project_details"><?php echo isset($project->date_created) ? esc_html($project->date_created):"" ?></span>
105 </div>
106 </div>
107 <?php if($wppm_default_project_date==1) { ?>
108 <div class="row">
109 <div class="col-sm-3">
110 <span class="wppm_project_details_label"><?php echo esc_html_e('Start Date:','taskbuilder');?></span>
111 </div>
112 <div class="col-sm-9">
113 <span class="wppm_project_details" id="wppm_edit_pstart_date"><?php echo (isset($proj_start_date))? esc_html($proj_start_date): "" ?></span>
114 </div>
115 <input type="hidden" name="wppm_edit_pstart_date_ajax_nonce" id="wppm_edit_pstart_date_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_set_change_proj_start_date' ) ); ?>">
116 </div>
117 <div class="row">
118 <div class="col-sm-3">
119 <span class="wppm_project_details_label"><?php echo esc_html_e('End Date:','taskbuilder');?></span>
120 </div>
121 <div class="col-sm-9">
122 <?php
123 $pstatus = isset($project->status) ? $project->status :"";
124 $style = ($pstatus!=4 && $proj_end_date < $current_date) ? "color:#FF0000":"color:#2C3E50"; ?>
125 <span class="wppm_project_details" id="wppm_edit_pend_date" style="<?php echo esc_attr($style); ?>"><?php echo (isset($proj_end_date))? esc_html($proj_end_date):"" ?></span>
126 </div>
127 <input type="hidden" name="wppm_edit_pend_date_ajax_nonce" id="wppm_edit_pend_date_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_set_change_proj_end_date' ) ); ?>">
128 </div>
129 <?php } ?>
130 <div class="row">
131 <div class="col-sm-3">
132 <span class="wppm_project_details_label"><?php echo esc_html_e('Project Category:','taskbuilder');?></span>
133 </div>
134 <div class="col-sm-9">
135 <span class="wppm_project_details"><?php echo (isset($project_category->name))? esc_html_e($project_category->name,'taskbuilder'):"" ?></span>
136 </div>
137 </div>
138 <div class="row">
139 <div class="col-sm-3">
140 <span class="wppm_project_details_label"><?php echo esc_html_e('Description:','taskbuilder');?></span>
141 </div>
142 <?php
143 $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(),));
144 ?>
145 <div class="col-sm-9 wppm_project_description">
146 <span><?php echo (isset($project_description))? wp_kses(wpautop($project_description),$allowedtags):"" ?></span>
147 </div>
148 </div>
149 </div>
150 </div>
151 <div id="wppm_proj_discussion_container">
152 <div class="row">
153 <div class="col-sm-12" style="margin-top:5px;">
154 <span class="wppm_proj_discussion"><?php echo esc_html_e('Comment','taskbuilder')?></span><br>
155 </div>
156 </div>
157 <div class="row">
158 <div class="col-sm-12">
159 <textarea id="wppm_proj_comment" placeholder="<?php echo esc_attr__('Write a comment...','taskbuilder');?>" onclick="wppm_add_proj_comment()" name="wppm_proj_comment"></textarea>
160 </div>
161 </div>
162 <div class="row" id="wppm_proj_comment_btn">
163 <div class="col-sm-6">
164 <span id="wppm_proj_attach_file" onclick="wppm_upload_proj_comment_file()"><?php echo esc_html_e('Attach Files','taskbuilder')?></span>
165 </div>
166 <div class="col-sm-6">
167 <button type="button" id="wppm_individual_cancel_proj_comment_btn" onclick="wppm_cancel_proj_comment();" class="wppm-btn-cancel">
168 <?php echo esc_html_e('Cancel','taskbuilder')?>
169 </button>
170 <button type="button" id="wppm_individual_submit_proj_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_proj_comment(<?php echo esc_attr($id); ?>);" class="wppm-btn">
171 <?php echo esc_html_e('SEND','taskbuilder')?>
172 </button>
173 </div>
174 <input type="hidden" name="_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wppm_submit_proj_comment' ) ); ?>">
175 </div>
176 <div class="row">
177 <div class="wppm_proj_attachment_container col-sm-12" style="display:none;">
178 </div>
179 </div>
180 </div>
181 <div class="wppm_thread_container">
182 <?php
183 if(!empty($project_comment)){
184 foreach($project_comment as $comment){
185 $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)."'");
186 $user = get_userdata( $comment->created_by );
187 $comment_body = stripslashes((htmlspecialchars_decode($comment->body, ENT_QUOTES)));
188 $comment_body = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $comment_body);
189 $date = date("Y-m-d H:i:s" ,strtotime($comment->create_time));
190 $thread_date = date("d F Y, h:i:s A" ,strtotime($date));
191 $attachment_ids = isset($comment->attachment_ids)? $comment->attachment_ids : '';
192 if($attachment_ids!=""){
193 $attachments = explode(",",$attachment_ids);
194 } else {
195 $attachments = array();
196 }
197 ?>
198 <div class="wppm_proj_thread">
199 <div class="wppm_thread_avatar">
200 <?php echo (get_avatar($comment->created_by, 40));?>
201 </div>
202 <div class="wppm_thread_body">
203 <div class="wppm_thread_user_name">
204 <strong style="color:<?php echo esc_attr($appearance_settings['comment-primary-color']);?>"><?php echo esc_html($user->display_name) ?></strong>
205 <span><?php if(!empty($comment->body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_proj_status')){
206 $comment_log_body = unserialize($comment->body);
207 $prev_status = $comment_log_body['prev_status'];
208 $new_status = $comment_log_body['new_status'];
209 if(isset($prev_status)){
210 $prev_status = esc_sql($prev_status);
211 $project_prev_status = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id = '$prev_status'");
212 }
213 if(isset($new_status)){
214 $new_status = esc_sql($new_status);
215 $project_new_status = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id= '$new_status'");
216 }
217 esc_html_e("changed status from $project_prev_status->name to $project_new_status->name","taskbuilder");
218 }
219 if(!empty($comment->body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_proj_creator')){
220 $comment_log_body = unserialize($comment->body);
221 $prev_user = $comment_log_body['prev_user'];
222 $new_user = $comment_log_body['new_user'];
223 $prev_user_data = get_userdata($prev_user);
224 $new_user_data = get_userdata($new_user);
225 esc_html_e("changed creator from $prev_user_data->display_name to $new_user_data->display_name","taskbuilder");
226 }if(!empty($comment->body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_assign_user')){
227 esc_html_e("changed the Assignee","taskbuilder");
228 }if(!empty($comment->body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_proj_cat')){
229 $comment_log_body = unserialize($comment->body);
230 $prev_cat = $comment_log_body['prev_cat'];
231 $new_cat = $comment_log_body['new_cat'];
232 if(!empty($prev_cat)){
233 $prev_cat = esc_sql($prev_cat);
234 $project_prev_cat = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_categories where id= '$prev_cat'");
235 }
236 if(!empty($new_cat)){
237 $new_cat = esc_sql($new_cat);
238 $project_new_cat = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_categories where id='$new_cat'");
239 }
240 $proj_prev_cat_name = !empty($project_prev_cat) ? $project_prev_cat->name: "None";
241 $proj_new_cat_name = !empty($project_new_cat) ? $project_new_cat->name: "None";
242 esc_html_e("changed category from $proj_prev_cat_name to $proj_new_cat_name","taskbuilder");
243 }
244 ?></span>
245 <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>
246 <div class="wppm_thread_action">
247 <?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')))){ ?>
248 <span title="Edit this thread" onclick="wppm_edit_proj_thread(<?php echo esc_attr($comment->id)?>,<?php echo esc_attr($id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/edit1.svg'); ?>" alt="edit"></span>
249 <span title="Delete this thread" onclick="wppm_delete_proj_thread(<?php echo esc_attr($comment->id) ?>,<?php echo esc_attr($id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/trash.svg'); ?>" alt="delete"></span>
250 <?php } ?>
251 </div>
252 </div>
253 <div class="wppm_thread_messege" style="color:<?php echo esc_attr($appearance_settings['comment-secondary-color']);?>">
254 <?php
255 $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(),));
256 if(!empty($comment_body) && ((empty($proj_comment_meta->comment_type)) || (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='comment') || $proj_comment_meta->comment_type=='delete_proj_comment')){
257 echo wp_kses(wpautop($comment_body),$allowedtags) ;
258 } elseif(!empty($comment_body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_proj_status')){ ?>
259 <span class="wppm_admin_label" style="margin-right: 10px; background-color:<?php echo isset($project_prev_status->bg_color) ? esc_attr($project_prev_status->bg_color):""; ?>;color:<?php echo isset($project_prev_status->color) ? esc_attr($project_prev_status->color): "" ?>;"><?php echo isset($project_prev_status->name) ? esc_attr($project_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($project_new_status->bg_color) ? esc_attr($project_new_status->bg_color):""; ?>;color:<?php echo isset($project_new_status->color) ? esc_attr($project_new_status->color): "" ?>;"><?php echo isset($project_new_status->name) ? esc_attr($project_new_status->name) : "" ?></span><?php
260 } elseif(!empty($comment_body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_proj_creator')) { ?>
261 <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
262 } elseif(!empty($comment_body) && (isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_assign_user')) {
263 $comment_log_body = unserialize($comment->body);
264 $prev_assign_user = $comment_log_body['prev_assign_user'];
265 $new_assign_user = $comment_log_body['new_assign_user'];
266 $prev_assign_user_array = array();
267 $new_assign_user_array = array();
268 if(!empty($prev_assign_user)){
269 $prev_assign_user_array = explode(",",$prev_assign_user);
270 }
271 if(!empty($new_assign_user)){
272 $new_assign_user_array = explode(",",$new_assign_user);
273 }
274 $assign_user_name = array();
275 $assign_user_name_str = "";
276 if(!empty($prev_assign_user_array)){
277 foreach($prev_assign_user_array as $val){
278 $assign_user = get_userdata($val);
279 $assign_user_name[] = $assign_user->display_name;
280 }
281 $assign_user_name_str = implode(",",$assign_user_name);
282 }
283 $new_assign_user_name = array();
284 $new_assign_user_name_str = "";
285 if(!empty($new_assign_user_array)){
286 foreach($new_assign_user_array as $val){
287 $new_assign_user = get_userdata($val);
288 $new_assign_user_name[] = $new_assign_user->display_name;
289 }
290 $new_assign_user_name_str = implode(",",$new_assign_user_name);
291 }
292 ?>
293 <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
294 }elseif(isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='change_proj_cat'){ ?>
295 <span style="margin-right: 10px;"><?php echo !empty($project_prev_cat->name) ? esc_attr($project_prev_cat->name) : " 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($project_new_cat->name) ? esc_attr($project_new_cat->name) : "None" ?></span><?php
296 } ?>
297
298 </div>
299 <?php
300 if(!empty($attachments) && !(isset($proj_comment_meta->comment_type) && $proj_comment_meta->comment_type=='delete_proj_comment')):?> <br>
301 <strong class="wppm_attachment_title"><?php echo esc_html_e('Attachments','taskbuilder');?>:</strong><br>
302 <table class="wppm_attachment_tbl">
303 <tbody>
304 <?php
305 if(!empty($attachments)){
306 foreach( $attachments as $attachment ):
307 $download_url = site_url('/').'?wppm_attachment='.$attachment.'&pid='.$id.'&pac='.$auth_id;
308 $attachment = esc_sql($attachment);
309 $attach = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_attachments where id='$attachment'");
310 $findStr = ".txt";
311 if(!empty( $attach)){
312 $attachment_name = preg_replace('/' . $findStr . '/', "", $attach->name, 1);
313 $attachment_name = sanitize_file_name($attachment_name);
314 }
315 if((!empty($attachment_name))){
316 ?>
317 <tr class="wppm_attachment_tr">
318 <td>
319 <a class="wppm_attachment_link" href="<?php echo esc_url($download_url) ?>" target="_blank">
320 <span class="wppm_attachment_file_name" style="padding: 7px;"><?php echo isset($attach->file_name) ? esc_html($attach->file_name):"";?></span></a>
321 <?php if((($comment->created_by == $current_user->ID) || ($current_user->has_cap('manage_options')) || ($wppmfunction->has_proj_comment_permission('edit_proj_comment',$id,$comment->id)))){ ?>
322 <span class="wppm_thread_action_btn" onclick="wppm_proj_thread_attachment_remove(this,<?php echo isset($attach->id)? esc_attr($attach->id):''; ?>,<?php echo isset($comment->id)? esc_attr($comment->id):''; ?>,<?php echo isset($comment->proj_id) ? esc_attr($comment->proj_id):'';?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/cancel.svg'); ?>" alt="cancel"></span>
323 <?php } ?>
324 </td>
325 </tr>
326 <?php }
327 endforeach;
328 } ?>
329 </tbody>
330 </table>
331 <input type="hidden" name="wppm_proj_thread_attachment_remove_ajax_nonce" id="wppm_proj_thread_attachment_remove" value="<?php echo esc_attr( wp_create_nonce( 'wppm_remove_proj_thread_attachment' ) ); ?>">
332 <?php do_action('wppm_after_project_comment_attachment',$id,$comment->id);?>
333 <?php endif;?>
334 </div>
335 </div>
336 <?php }
337 } ?>
338 </div>
339 </div>
340 <div class="wppm_individual_project_widget col-sm-4 wppm_sidebar col-md-3">
341 <div class="row wppm_widget" id="wppm_project_status_widget">
342 <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>">
343 <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"><?php echo esc_html_e('Status','taskbuilder')?></h4>
344 <?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"; ?>
345 <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>
346 </div>
347 <hr class="widget_divider">
348 <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>">
349 <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>
350 </div>
351 </div>
352 <div class="row wppm_widget" id="wppm_project_raisedby_widget">
353 <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>">
354 <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>
355 <?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')) { ?>
356 <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>
357 <?php } ?>
358 </div>
359 <hr class="widget_divider"> <?php
360 if(isset($project->created_by)){
361 $user_info = get_userdata($project->created_by);
362 }else{
363 $user_info = "";
364 }
365 ?>
366 <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>">
367 <div id="wppm_project_creator">
368 <div style="padding:2px 0;">
369 <span class="wppm_project_user_avatar"><?php echo isset($project->created_by)? (get_avatar($project->created_by, 25, "mysteryman")):""; ?></span>
370 <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>
371 </div>
372 </div>
373 </div>
374 </div>
375 <div class="row wppm_widget" id="wppm_project_users_widget_container">
376 <div class="wppm-widget-header" style="background-color:<?php echo esc_attr($appearance_settings['widget-header-bg-color'])?>">
377 <h4 class="widget_header" style="color:<?php echo esc_attr($appearance_settings['widget-header-text-color'])?>"><?php echo esc_html_e('Users','taskbuilder')?></h4>
378 <?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') { ?>
379 <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>
380 <?php } ?>
381 </div>
382 <hr class="widget_divider">
383 <div class="wppm-widget-body" style="background-color:<?php echo esc_attr($appearance_settings['widget-body-bg-color'])?>">
384 <div id="wppm_project_users">
385 <?php
386 if(!(empty(array_filter($users)))){
387 foreach($users as $user) {
388 $user_data = get_userdata($user);
389 $user = esc_sql($user);
390 $project_user = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wppm_project_users WHERE proj_id = '".esc_sql($id)."' AND user_id = '$user'");
391 ?>
392 <div style="padding:2px 0;">
393 <span class="wppm_project_user_avatar"><?php echo (get_avatar($user, 25, "mysteryman")); ?></span>
394 <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>
395 <?php
396 if(!empty($wppm_users_role)){
397 foreach($wppm_users_role as $key=>$role){
398 if(!empty($role)){
399 foreach($role as $k=>$val){
400 if( !empty($project_user) && $key == $project_user->role_id){ ?>
401 <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
402 }
403 }
404 }
405 }
406 }
407 ?>
408 </div>
409 <?php
410 }
411 } else {
412 ?><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
413 }
414 ?>
415 </div>
416 </div>
417 </div>
418 <?php echo do_action('wppm_after_project_widget',$project->id);?>
419 </div>
420 <div id="wppm_alert_success" class="alert alert-success wppm_alert" style="display:none;" role="alert">
421 <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/success.svg'); ?>" alt="success"><span class="wppm_alert_text"></span>
422 </div>
423 <div id="wppm_alert_error" class="alert alert-danger wppm_alert" style="display:none;" role="alert">
424 <img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/warning-triangle.svg'); ?>" alt="warning-triangle"><span class="wppm_alert_text"></span>
425 </div>
426 <input type="hidden" id="wppm_proj_nonce" value="<?php echo wp_create_nonce('wppm_upload_proj_attach_file')?>">
427 <input type="file" id="wppm_proj_attachment_upload" class="hidden" onchange="">
428 </div>
429 </form>
430 <style>
431 .wppm_comment_date i:hover{
432 color: <?php echo esc_attr($appearance_settings['comment-date-hover-color'])?>;
433 }
434 #wppm_open_project .wppm-add-new-btn:hover{
435 background-color: <?php echo esc_attr($appearance_settings['menu-button-hover-color'])?>!important;
436 }
437 </style>
438 <script>
439 jQuery( document ).ready( function( jQuery ) { <?php
440 if ((($current_user->ID && $current_user->has_cap('manage_options')) || $wppmfunction->has_project_permission('change_project_details',$id) || ($project->created_by==$current_user->ID && $wppm_current_user_capability == 'wppm_manager') || $wppm_current_user_capability == 'wppm_admin')) { ?>
441 jQuery("#wppm_edit_pstart_date").flatpickr({
442 enableTime: true,
443 dateFormat: "Y-m-d H:i",
444 onChange: function(selectedDates, dateStr, instance) {
445 var data = {
446 action: 'wppm_set_change_proj_start_date',
447 proj_id:<?php echo esc_attr($project->id);?>,
448 date:dateStr,
449 _ajax_nonce:jQuery('#wppm_edit_pstart_date_ajax_nonce').val()
450 };
451 jQuery.post(wppm_admin.ajax_url, data, function(response) {
452 instance.close();
453 wppm_open_project(<?php echo esc_attr($project->id);?>);
454 });
455 },
456 });
457 jQuery("#wppm_edit_pend_date").flatpickr({
458 enableTime: true,
459 dateFormat: "Y-m-d H:i",
460 onChange: function(selectedDates, dateStr, instance) {
461 var data = {
462 action: 'wppm_set_change_proj_end_date',
463 proj_id:<?php echo esc_attr($project->id);?>,
464 date:dateStr,
465 _ajax_nonce:jQuery('#wppm_edit_pend_date_ajax_nonce').val()
466 };
467 jQuery.post(wppm_admin.ajax_url, data, function(response) {
468 instance.close();
469 wppm_open_project(<?php echo esc_attr($project->id);?>);
470 });
471 },
472 });
473 <?php }
474 if((!empty($wppm_rich_text_editor)) && ($wppm_rich_text_editor == 1)){
475 $bold = (isset($wppm_toolbar_actions['bold']) && $wppm_toolbar_actions['bold']==1)? 'bold' :"";
476 $italic = (isset($wppm_toolbar_actions['italic']) && $wppm_toolbar_actions['italic']==1)? 'italic' :"";
477 $underline = (isset($wppm_toolbar_actions['underline']) && $wppm_toolbar_actions['underline']==1)?'underline' :"";
478 $blockquote = (isset($wppm_toolbar_actions['blockquote']) && $wppm_toolbar_actions['blockquote']==1)? 'blockquote' :"";
479 $align = (isset($wppm_toolbar_actions['align']) && $wppm_toolbar_actions['align']==1)? ' alignleft aligncenter alignright ' :"";
480 $bullist = (isset($wppm_toolbar_actions['bullist']) && $wppm_toolbar_actions['bullist']==1)? $bullist = 'bullist' :"";
481 $numlist = (isset($wppm_toolbar_actions['numlist']) && $wppm_toolbar_actions['numlist']==1)? $numlist = 'numlist' :"";
482 $rtl = (isset($wppm_toolbar_actions['rtl']) && $wppm_toolbar_actions['rtl']==1)? $rtl = 'rtl' :"";
483 $link = (isset($wppm_toolbar_actions['link']) && $wppm_toolbar_actions['link']==1)? $link = 'link' :"";
484 $image = (isset($wppm_toolbar_actions['wppm_insert_editor_img']) && $wppm_toolbar_actions['wppm_insert_editor_img']==1)? $image = 'image' :"";
485 $forecolor = (isset($wppm_toolbar_actions['forecolor']) && $wppm_toolbar_actions['forecolor']==1)? $forecolor = 'forecolor' :"";
486 $backcolor = (isset($wppm_toolbar_actions['backcolor']) && $wppm_toolbar_actions['backcolor']==1)? $backcolor = 'backcolor' :"";
487 $strikethrough = (isset($wppm_toolbar_actions['strikethrough']) && $wppm_toolbar_actions['strikethrough']==1)? $strikethrough = 'strikethrough' :""; ?>
488 tinymce.remove();
489 tinymce.init({
490 selector:'#wppm_proj_description',
491 body_id: 'wppm_proj_description',
492 directionality : '<?php //echo 'rtl'; ?>',
493 menubar: false,
494 statusbar: false,
495 height : '200',
496 plugins: [
497 'lists link image directionality textcolor'
498 ],
499 image_advtab: true,
500 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 ?>',
501 branding: false,
502 autoresize_bottom_margin: 20,
503 browser_spellcheck : true,
504 relative_urls : false,
505 remove_script_host : false,
506 convert_urls : true,
507 setup: function (editor) {
508 }
509 }); <?php
510 }
511 if($wppm_tinymce_visibility_open_project==1){
512 if(!empty($wppm_rich_text_editor) && ($wppm_rich_text_editor == 1)){
513 ?>
514 tinymce.remove();
515 tinymce.init({
516 selector:'#wppm_proj_comment',
517 body_id: 'wppm_proj_comment',
518 directionality : '<?php //echo 'rtl'; ?>',
519 menubar: false,
520 statusbar: false,
521 height : '200',
522 width : '100%',
523 plugins: [
524 'lists link image directionality paste textcolor'
525 ],
526 image_advtab: true,
527 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 ?>',
528 branding: false,
529 autoresize_bottom_margin: 20,
530 browser_spellcheck : true,
531 relative_urls : false,
532 remove_script_host : false,
533 convert_urls : true,
534 paste_as_text: true,
535 setup: function (editor) {
536 }
537 });
538 <?php } ?>
539 jQuery('#wppm_proj_comment_btn').show();
540 <?php } ?>
541 });
542
543 function wppm_add_proj_comment(){
544 <?php
545 if(!empty($wppm_rich_text_editor) && ($wppm_rich_text_editor == 1)){
546 ?>
547 tinymce.remove();
548 tinymce.init({
549 selector:'#wppm_proj_comment',
550 body_id: 'wppm_proj_comment',
551 directionality : '<?php //echo 'rtl'; ?>',
552 menubar: false,
553 statusbar: false,
554 height : '200',
555 width : '100%',
556 plugins: [
557 'lists link image directionality paste textcolor'
558 ],
559 image_advtab: true,
560 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 ?>',
561 branding: false,
562 autoresize_bottom_margin: 20,
563 browser_spellcheck : true,
564 relative_urls : false,
565 remove_script_host : false,
566 convert_urls : true,
567 paste_as_text: true,
568 setup: function (editor) {
569 }
570 });
571 <?php } else{ ?>
572 jQuery('#wppm_proj_comment').css("width", "100%");
573 jQuery('#wppm_proj_comment').css("height", "160px");
574 jQuery('#wppm_proj_comment').css("color", "#000");
575 <?php }?>
576 jQuery('#wppm_proj_comment_btn').show();
577 }
578
579 function wppm_cancel_proj_comment(){ <?php
580 if(!empty($wppm_rich_text_editor) && ($wppm_rich_text_editor == 1)){
581 ?>
582 tinyMCE. activeEditor. setContent('');
583 tinymce.remove('#wppm_proj_comment');
584 jQuery('#wppm_proj_comment_btn').hide();
585 <?php } else{
586 ?>
587 jQuery('#wppm_proj_comment').css("width", "80%");
588 jQuery('#wppm_proj_comment').css("height", "30px");
589 jQuery('#wppm_proj_comment').css("color", "#000");
590 jQuery('#wppm_proj_comment').css("padding", "5px");
591 jQuery('#wppm_proj_comment').css(" margin-bottom", "15px");
592 jQuery('#wppm_proj_comment').css("overflow", "hidden");
593 jQuery('#wppm_proj_comment').css("border", "1 px solid #eee");
594 jQuery('#wppm_proj_comment').css("color", "#eee");
595 jQuery('#wppm_proj_comment').css("margin-top", "10px");
596 jQuery('#wppm_proj_comment_btn').hide();
597 <?php }?>
598 }
599
600 function wppm_submit_proj_comment(proj_id){
601 var dataform = new FormData(jQuery('#wppm_open_project')[0]);
602 dataform.append('action','wppm_submit_proj_comment');
603 <?php
604 if(!empty($wppm_rich_text_editor) && ($wppm_rich_text_editor == 1)){ ?>
605 var comment_body = tinyMCE.get('wppm_proj_comment').getContent().trim();
606 <?php } else{ ?>
607 var comment_body = jQuery("#wppm_proj_comment").val().trim();
608 <?php }?>
609 dataform.append('comment_body',comment_body);
610 dataform.append('proj_id',proj_id);
611 jQuery('#wppm_load_individual_project_container').html(wppm_admin.loading_html);
612 jQuery.ajax({
613 url: wppm_admin.ajax_url,
614 type: 'POST',
615 data: dataform,
616 processData: false,
617 contentType: false
618 })
619 .done(function (response_str) {
620 wppm_open_project(proj_id);
621 });
622 }
623
624 function wppm_upload_proj_comment_file(){
625 jQuery('#wppm_proj_attachment_upload').unbind('change');
626 jQuery('#wppm_proj_attachment_upload').on('change', function() {
627 var flag = false;
628 var file = this.files[0];
629 jQuery('#wppm_proj_attachment_upload').val('');
630 var allowedExtension = ['exe', 'php','js'];
631 var file_name_split = file.name.split('.');
632 var file_extension = file_name_split[file_name_split.length-1];
633 file_extension = file_extension.toLowerCase();
634 if( (jQuery.inArray(file_extension,allowedExtension) > -1)){
635 flag = true;
636 alert("<?php _e('Attached file type not allowed!','taskbuilder')?>");
637 };
638 <?php
639 $max_upload = (int)(ini_get('upload_max_filesize')); ?>
640 var current_filesize=file.size/1000000;
641 if(current_filesize > <?php echo esc_attr($max_upload); ?>){
642 flag = true;
643 alert("<?php _e('File size exceed allowed limit!','taskbuilder')?>");
644 }
645 if (!flag){
646 var html_str = '<div class="wppm_attachment">'+
647 '<div class="progress" style="float: none !important; width: unset !important;">'+
648 '<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%">'+
649 file.name+
650 '</div>'+
651 '<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>'+
652 '</div>'+
653 '</div>';
654 jQuery('.wppm_proj_attachment_container').show();
655 jQuery('.wppm_proj_attachment_container').append(html_str);
656 var attachment = jQuery('.wppm_proj_attachment_container').find('.wppm_attachment').last();
657 var data = new FormData();
658 data.append('file', file);
659 data.append('arr_name', file.name);
660 data.append('action', 'wppm_upload_proj_attach_file');
661 data.append('nonce', jQuery('#wppm_proj_nonce').val().trim());
662 jQuery.ajax({
663 type: 'post',
664 url: wppm_admin.ajax_url,
665 data: data,
666 xhr: function(){
667 var xhr = new window.XMLHttpRequest();
668 xhr.upload.addEventListener("progress", function(evt){
669 if (evt.lengthComputable) {
670 var percentComplete = Math.floor((evt.loaded / evt.total) * 100);
671 jQuery(attachment).find('.progress-bar').css('width',percentComplete+'%');
672 }
673 }, false);
674 return xhr;
675 },
676 processData: false,
677 contentType: false,
678 success: function(response) {
679 var return_obj=JSON.parse(response);
680 jQuery(attachment).find('.wppm_attachment_cancel').show();
681 if( parseInt(return_obj.id) != 0 ){
682 jQuery(attachment).append('<input type="hidden" class="wppm_proj_comment_attachment" name="wppm_proj_comment_attachment[]" value="'+return_obj.id+'">');
683 jQuery(attachment).find('.progress-bar').addClass('progress-bar-success');
684 }else {
685 jQuery(attachment).find('.progress-bar').addClass('progress-bar-danger');
686 }
687 }
688 });
689 }
690 });
691 jQuery('#wppm_proj_attachment_upload').trigger('click');
692 }
693 </script>