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/tasks/open_task/wppm_edit_task_details.php +58 -10 1.0.3 → 6.0.7 View file →
@@ -3,13 +3,35 @@
3 3 exit; // Exit if accessed directly
4 4 }
5 5
6 6 global $wpdb,$wppmfunction,$current_user;
7 -$task_id = isset($_POST['task_id']) ? intval(sanitize_text_field($_POST['task_id'])) : '' ;
8 -$proj_id = isset($_POST['proj_id']) ? intval(sanitize_text_field($_POST['proj_id'])) : '' ;
7 +$task_id = isset($_POST['task_id']) ? intval(sanitize_text_field(wp_unslash($_POST['task_id']))) : '' ;
8 +$proj_id = isset($_POST['proj_id']) ? intval(sanitize_text_field(wp_unslash($_POST['proj_id']))) : '' ;
9 +$current_project_id = isset($_POST['project_id']) ? intval(sanitize_text_field(wp_unslash($_POST['project_id']))) : '' ;
9 10 if (!(($current_user->ID && $current_user->has_cap('manage_options')) || $wppmfunction->has_permission('change_task_details',$task_id))) {exit;}
10 11 $task_data = $wppmfunction->get_task($task_id);
12 +$settings = get_option("wppm-ap-modal");
13 +$orderby_proj_sql = (sanitize_sql_orderby( "project_name" ));
11 14 $project_data = $wppmfunction->get_project(intval(sanitize_text_field($task_data['project'])));
15 +if($current_user->has_cap('manage_options')){
16 + $projects = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_project ORDER BY $orderby_proj_sql");
17 +}else{
18 + $sql = $wpdb->prepare(
19 + "SELECT Proj.*
20 + FROM {$wpdb->prefix}wppm_project AS Proj
21 + LEFT JOIN {$wpdb->prefix}wppm_project_meta AS proj_meta
22 + ON Proj.id = proj_meta.project_id
23 + WHERE FIND_IN_SET(%d, Proj.users)
24 + OR (proj_meta.meta_key = 'public_project' AND proj_meta.meta_value = 1)
25 + GROUP BY Proj.id",
26 + $current_user->ID
27 + );
28 +// 4️⃣ Append ORDER BY (safe because we whitelisted columns)
29 +$sql .= " ORDER BY $orderby_proj_sql";
30 +
31 +// 5️⃣ Execute
32 +$projects = $wpdb->get_results($sql);
33 +}
12 34 $priority_id = sanitize_text_field($task_data['priority']);
13 35 $project_id = sanitize_text_field($task_data['project']);
14 36
15 37 $priorities = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_task_priorities");
@@ -32,9 +54,17 @@
32 54 </div>
33 55 </div>
34 56 <div class="row" style="padding-left:2px;padding-bottom: 10px;">
35 57 <div class="col-sm-12">
36 - <input type="text" class="wppm_edit_project_label form-control" value="<?php echo isset($project_data['project_name']) ? esc_attr($project_data['project_name']):"" ?>" readonly>
58 + <select searchable="search here" onchange="wppm_select_project()" class="form-control" size="40" name="wppm_task_project" id="wppm_task_project">
59 + <?php
60 + if(!empty($projects)){
61 + foreach($projects as $proj) {
62 + ?>
63 + <option <?php echo esc_attr($proj->id)==esc_attr($project_id) ?'selected="selected"':''?> value="<?php echo esc_attr($proj->id)?>"><?php echo esc_html($proj->project_name);?></option>
64 + <?php }
65 + } ?>
66 + </select>
37 67 </div>
38 68 </div>
39 69 <div class="row" style="padding-left:2px;">
40 70 <div class="col-sm-12">
@@ -85,27 +115,37 @@
85 115 </div>
86 116 <div class="row" style="padding-left:2px;">
87 117 <div class="col-sm-12">
88 118 <textarea id="wppm_edit_task_description" class="form-control" name="wppm_edit_task_description">
89 - <?php echo isset($task_data['description']) ? stripslashes(htmlspecialchars_decode(esc_textarea($task_data['description']),ENT_QUOTES)) :""?>
119 + <?php echo !empty($task_data['description']) ? wp_kses_post(wpautop($task_data['description'])) :""?>
90 120 </textarea>
91 121 </div>
92 122 </div>
93 123 <?php do_action('wppm_edit_task_details',$task_id,$project_id);?>
94 124 <input type="hidden" name="action" value="wppm_set_change_task_details" />
125 + <input type="hidden" name="_ajax_nonce" value="<?php echo esc_attr(wp_create_nonce('wppm_set_change_task_details'))?>">
95 126 <input type="hidden" name="user_id" id="user_id" value="">
96 127 <input type="hidden" name="task_id" value="<?php echo esc_attr($task_id) ?>" />
128 + <input type="hidden" name="proj_id" value="<?php echo esc_attr($proj_id) ?>" />
129 + <input type="hidden" name="project_id" value="<?php echo esc_attr($current_project_id) ?>" />
97 130 </form>
131 +<style>
132 +.select2-results__options {
133 + color:<?php echo esc_attr( $settings['body-text-color'])?>!important;
134 + }
135 +</style>
98 136 <script>
99 137 jQuery( document ).ready( function( jQuery ) {
138 + wppm_select_project();
100 139 jQuery("#wppm_edit_task_start_date").flatpickr({
101 140 enableTime: true,
102 141 dateFormat: "Y-m-d H:i",
142 + defaultDate: "today"
103 143 });
104 144 jQuery("#wppm_edit_task_end_date").flatpickr({
105 145 enableTime: true,
106 - dateFormat: "Y-m-d H:i"
107 - //minDate: startdate
146 + dateFormat: "Y-m-d H:i",
147 + defaultDate: "today" //
108 148 });
109 149 tinymce.remove();
110 150 tinymce.init({
111 151 selector:'#wppm_edit_task_description',
@@ -126,13 +166,21 @@
126 166 relative_urls : false,
127 167 remove_script_host : false,
128 168 convert_urls : true,
129 169 paste_as_text: true,
170 + content_style:
171 + `body {
172 + color:<?php echo esc_attr( $settings['body-text-color'])?>!important;
173 + }`,
130 174 setup: function (editor) {
131 175 }
132 176 });
133 177 });
134 -
178 +jQuery('#wppm_task_project').select2();
179 +function wppm_select_project(){
180 + jQuery('.wppm_filter_display_element').hide();
181 + <?php do_action('wppm_display_cf_by_project_in_edit_task_details') ?>
182 +}
135 183 jQuery('#wppm_edit_project_label').select2();
136 184
137 185 </script>
138 186 <?php
@@ -139,10 +187,10 @@
139 187 $body = ob_get_clean();
140 188
141 189 ob_start();
142 190 ?>
143 -<button type="button" class="btn wppm_popup_close" onclick="wppm_modal_close();"><?php echo esc_html_e('Close','taskbuilder');?></button>
144 -<button type="button" class="btn wppm_popup_action" onclick="wppm_set_change_task_details(<?php echo esc_attr($task_id)?>,<?php echo esc_attr($proj_id) ?>);"><?php echo esc_html_e('Save','taskbuilder');?></button>
191 +<button type="button" class="btn <?php echo ($proj_id!="0") ? 'wppm_popup_close': 'wppm_task_popup_close' ?> " onclick="<?php echo ($proj_id!=0) ? "wppm_modal_close()":"wppm_task_modal_close()"?>"><?php echo esc_html_e('Close','taskbuilder');?></button>
192 +<button type="button" class="btn <?php echo ($proj_id!="0") ? 'wppm_popup_action': 'wppm_task_popup_action' ?> " onclick="wppm_set_change_task_details(<?php echo esc_attr($task_id)?>,<?php echo esc_attr($proj_id) ?>,<?php echo esc_attr($current_project_id) ?>);"><?php echo esc_html_e('Save','taskbuilder');?></button>
145 193 <?php
146 194 $footer = ob_get_clean();
147 195
148 196 $output = array(
@@ -148,6 +196,6 @@
148 196 $output = array(
149 197 'body' => $body,
150 198 'footer' => $footer
151 199 );
152 -echo json_encode($output);
200 +echo wp_json_encode( $output );
153 201 ?>