Changeset 3286301
- Timestamp:
- 05/02/2025 01:41:15 PM (11 months ago)
- Location:
- taskbuilder
- Files:
-
- 4 added
- 16 edited
- 1 copied
-
tags/4.0.3 (copied) (copied from taskbuilder/trunk)
-
tags/4.0.3/asset/images/recurrent_task.svg (added)
-
tags/4.0.3/includes/admin/addons.php (modified) (1 diff)
-
tags/4.0.3/includes/admin/projects/open_project/wppm_drag_and_drop_card.php (modified) (1 diff)
-
tags/4.0.3/includes/admin/projects/open_project/wppm_view_project_tasks.php (modified) (6 diffs)
-
tags/4.0.3/includes/admin/tasks/open_task/wppm_open_task.php (modified) (1 diff)
-
tags/4.0.3/includes/admin/tasks/wppm_tasks_list.php (modified) (3 diffs)
-
tags/4.0.3/includes/class-wppm-frontend.php (modified) (2 diffs)
-
tags/4.0.3/includes/frontend/wppm_public_projects_tasks.php (added)
-
tags/4.0.3/readme.txt (modified) (5 diffs)
-
tags/4.0.3/taskbuilder.php (modified) (2 diffs)
-
trunk/asset/images/recurrent_task.svg (added)
-
trunk/includes/admin/addons.php (modified) (1 diff)
-
trunk/includes/admin/projects/open_project/wppm_drag_and_drop_card.php (modified) (1 diff)
-
trunk/includes/admin/projects/open_project/wppm_view_project_tasks.php (modified) (6 diffs)
-
trunk/includes/admin/tasks/open_task/wppm_open_task.php (modified) (1 diff)
-
trunk/includes/admin/tasks/wppm_tasks_list.php (modified) (3 diffs)
-
trunk/includes/class-wppm-frontend.php (modified) (2 diffs)
-
trunk/includes/frontend/wppm_public_projects_tasks.php (added)
-
trunk/readme.txt (modified) (5 diffs)
-
trunk/taskbuilder.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
taskbuilder/tags/4.0.3/includes/admin/addons.php
r3254059 r3286301 294 294 </div> 295 295 </div> 296 <div class="col-md-3 col-sm-6 col-xs-12 pricing-widget"> 297 <div class="row"> 298 <div class="pheader"> 299 <h3 class="title"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/recurrent_task.svg'); ?>"> <?php echo esc_html_e('Recurrent Task','taskbuilder');?></h3> 300 <h4 class="subtitle">$29.99</h4> 301 <div style="text-align:center"> 302 <small class="payment_freq"><?php echo esc_html_e('Per year','taskbuilder');?></small> 303 <small class="payment_freq"><?php echo esc_html_e('(Add-ons subject to yearly license for support and updates.)','taskbuilder');?></small> 304 </div> 305 </div> 306 <div class="pbody"> 307 <div class="addon-container"> 308 <i class="fas fa-arrow-right"></i> 309 <div class="addon-details"> 310 <?php echo esc_html_e('Recurring tasks are automated task entries that repeat at defined intervals—daily, weekly, monthly. They eliminate the need to manually re-enter routine tasks, keeping workflows smooth and consistent.','taskbuilder');?></div> 311 </div> 312 </div> 313 <div class="pfooter"> 314 <div class="purchase_addon"> 315 <a href="https://taskbuilder.net/pricing/" target="__blank" type="button" class="btn btn-success"><?php echo esc_html_e('Purchase','taskbuilder');?></a> 316 </div> 317 <div> 318 <a href="https://taskbuilder.net/recurrent-task/" target="__blank" type="button" class="btn btn-success"><?php echo esc_html_e('View Details','taskbuilder');?></a> 319 </div> 320 </div> 321 </div> 322 </div> 296 323 </div> 297 324 </div> -
taskbuilder/tags/4.0.3/includes/admin/projects/open_project/wppm_drag_and_drop_card.php
r3079882 r3286301 12 12 if (!$wppm_card) {exit;} 13 13 $wppm_card_id= substr($wppm_card, 20); 14 $wppm_target_task_status = substr($target_task_status,25); 15 $values= array( 16 'status'=> $wppm_target_task_status 17 ); 18 $wpdb->update($wpdb->prefix.'wppm_task',$values,array('id'=>intval($wppm_card_id))); 19 echo '{ "sucess_status":"1","messege":"Success" }'; 14 if($wppmfunction->has_permission('change_task_status',$wppm_card_id)){ 15 $wppm_target_task_status = substr($target_task_status,25); 16 $task_data = $wppmfunction->get_task($wppm_card_id); 17 $task_id = $wppm_card_id; 18 $old_status_id = $task_data['status']; 19 $status_id = esc_sql($wppm_target_task_status); 20 $wppmfunction->change_status( $task_id, $status_id); 21 $change_task_value = array('prev_status'=>"$old_status_id",'new_status'=>"$status_id"); 22 $change_task_obj = serialize($change_task_value); 23 $log_values = array('task_id'=>"$task_id",'body'=>$change_task_obj,'attachment_ids'=>"",'create_time'=>date("Y-m-d h:i:sa"),'created_by'=>"$current_user->ID" ); 24 $wpdb->insert($wpdb->prefix . 'wppm_task_comment',$log_values); 25 $log_id = esc_sql($wpdb->insert_id); 26 $task_log_values = array('task_id'=>"$task_id",'comment_id'=>"$log_id",'comment_type'=>'change_task_status'); 27 $wpdb->insert($wpdb->prefix . 'wppm_task_comment_meta',$task_log_values); 28 echo '{ "sucess_status":"1","messege":"Success" }'; 29 }else{ 30 echo '{ "sucess_status":"0","messege":"You do not have permission to change this task status." }'; 31 } -
taskbuilder/tags/4.0.3/includes/admin/projects/open_project/wppm_view_project_tasks.php
r3226189 r3286301 16 16 $filter_by = isset($_POST['wppm_task_filter']) ? sanitize_text_field($_POST['wppm_task_filter']) : "all"; 17 17 $proj_filter = isset($_POST['wppm_proj_filter']) ? sanitize_text_field($_POST['wppm_proj_filter']) : "0"; 18 $public_projects = isset($_POST['public_projects']) ? sanitize_text_field($_POST['public_projects']):"0"; 18 19 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true ); 19 20 $filters = array( … … 41 42 $where = " where project_name = '".$proj_attr."' Group by proj.id ORDER BY '$santitize_order_by'"; 42 43 }else{ 43 $where = " Group by proj.id ORDER BY '$santitize_order_by'"; 44 if(!empty($public_projects)){ 45 $where = " where proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1 Group by proj.id ORDER BY '$santitize_order_by'"; 46 }else{ 47 $where = " Group by proj.id ORDER BY '$santitize_order_by'"; 48 } 44 49 } 45 50 }else{ 46 $where = " where ((FIND_IN_SET($current_user->ID,proj.users)) OR (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR ( proj.created_by='$cu_id')) $wppm_proj_attr Group by proj.id ORDER BY '$santitize_order_by'"; 51 if(!empty($public_projects)){ 52 $where = " where (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) $wppm_proj_attr Group by proj.id ORDER BY '$santitize_order_by'"; 53 } else{ 54 $where = " where ((FIND_IN_SET($current_user->ID,proj.users)) OR (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR ( proj.created_by='$cu_id')) $wppm_proj_attr Group by proj.id ORDER BY '$santitize_order_by'"; 55 } 47 56 } 48 57 $where = apply_filters('wppm_project_filter_in_task_list_grid_view_where',$where); … … 101 110 "); 102 111 $no_of_rows = ( "SELECT count(*) FROM ($query"); 103 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') AND Task.status='$status_id' "; 112 if(!empty($public_projects)){ 113 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') AND Task.status='$status_id' "; 114 }else{ 115 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') AND Task.status='$status_id' "; 116 } 104 117 } else{ 105 118 $query = ("SELECT Task.* … … 113 126 "); 114 127 $no_of_rows = ( "SELECT count(*) FROM ($query"); 115 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR proj.created_by='$cu_id') AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) AND Task.status= '$status_id'"; 128 if(!empty($public_projects)){ 129 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) AND Task.status= '$status_id'"; 130 }else{ 131 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR proj.created_by='$cu_id') AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) AND Task.status= '$status_id'"; 132 } 116 133 } 117 134 }else{ … … 122 139 "); 123 140 $no_of_rows = ( "SELECT count(*) FROM ($query"); 124 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND Task.status= '$status_id'"; 141 if(!empty($public_projects)){ 142 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND Task.status= '$status_id'"; 143 }else{ 144 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND Task.status= '$status_id'"; 145 } 125 146 }else{ 126 147 $query = ( "SELECT Task.* … … 131 152 "); 132 153 $no_of_rows = ( "SELECT count(*) FROM ($query"); 133 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND ((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR proj.created_by='$cu_id') AND Task.status= '$status_id'"; 154 if(!empty($public_projects)){ 155 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND Task.status= '$status_id'"; 156 } else{ 157 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND ((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR proj.created_by='$cu_id') AND Task.status= '$status_id'"; 158 } 134 159 } 135 160 } -
taskbuilder/tags/4.0.3/includes/admin/tasks/open_task/wppm_open_task.php
r3254059 r3286301 75 75 } 76 76 $flag = false; 77 $wppm_task_fillter = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_task ");77 $wppm_task_fillter = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_task where id='".esc_sql($id)."'"); 78 78 if(!empty($wppm_task_fillter)){ 79 79 foreach($wppm_task_fillter as $key_filter=>$val_filter){ -
taskbuilder/tags/4.0.3/includes/admin/tasks/wppm_tasks_list.php
r3254059 r3286301 12 12 $proj_filter = isset($_POST['wppm_proj_filter']) ? sanitize_text_field($_POST['wppm_proj_filter']) : "0"; 13 13 $proj_attr = isset($_POST['wppm_project_attr']) ? sanitize_text_field($_POST['wppm_project_attr']):""; 14 $public_projects = isset($_POST['public_projects']) ? sanitize_text_field($_POST['public_projects']):"0"; 14 15 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true ); 15 16 $wppm_create_tasks_coworkers_permission = get_option('wppm_allow_coworkers_create_task'); … … 33 34 $where = " where project_name = '".$proj_attr."' Group by proj.id ORDER BY ".$orderby_proj_sql; 34 35 }else{ 35 $where = " Group by proj.id ORDER BY ".$orderby_proj_sql; 36 if(!empty($public_projects)){ 37 $where = " where proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1 Group by proj.id ORDER BY ".$orderby_proj_sql; 38 }else{ 39 $where = " Group by proj.id ORDER BY ".$orderby_proj_sql; 40 } 36 41 } 37 42 }else{ 38 $where = " where ((FIND_IN_SET('$current_user->ID',proj.users)) OR (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR ( proj.created_by='$cu_id')) $wppm_proj_attr Group by proj.id ORDER BY $orderby_proj_sql"; 43 if(!empty($public_projects)){ 44 $where = " where (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) $wppm_proj_attr Group by proj.id ORDER BY $orderby_proj_sql"; 45 } 46 else{ 47 $where = " where ((FIND_IN_SET('$current_user->ID',proj.users)) OR (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR ( proj.created_by='$cu_id')) $wppm_proj_attr Group by proj.id ORDER BY $orderby_proj_sql"; 48 } 39 49 } 40 50 $where = apply_filters('wppm_project_filter_in_task_list_where',$where); … … 152 162 if(!empty($search_tag )){ 153 163 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){ 154 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') $wppm_proj_attr "; 164 if(!empty($public_projects)){ 165 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') $wppm_proj_attr "; 166 }else{ 167 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') $wppm_proj_attr "; 168 } 155 169 } else{ 156 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) $wppm_proj_attr"; 170 if(!empty($public_projects)){ 171 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) $wppm_proj_attr"; 172 }else{ 173 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) $wppm_proj_attr"; 174 } 157 175 } 158 176 }else{ 159 177 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){ 160 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr"; 178 if(!empty($public_projects)){ 179 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr"; 180 }else{ 181 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr"; 182 } 161 183 } else{ 162 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND ((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) $wppm_proj_attr"; 184 if(!empty($public_projects)){ 185 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr"; 186 }else{ 187 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND ((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) $wppm_proj_attr"; 188 } 163 189 } 164 190 } -
taskbuilder/tags/4.0.3/includes/class-wppm-frontend.php
r3254059 r3286301 13 13 add_shortcode( 'wppm_projects', array( $this, 'wppm_projects' ) ); 14 14 add_shortcode( 'wppm_tasks', array( $this, 'wppm_tasks' ) ); 15 add_shortcode( 'wppm_public_projects_tasks', array( $this, 'wppm_public_projects_tasks' ) ); 15 16 add_action('wp_ajax_nopriv_wppm_sign_in',array($this,'wppm_sign_in')); 16 17 add_action('wp_ajax_nopriv_wppm_set_user_login',array($this,'wppm_set_user_login')); … … 76 77 } 77 78 79 function wppm_public_projects_tasks(){ 80 ob_start(); 81 include WPPM_ABSPATH.'includes/frontend/wppm_public_projects_tasks.php'; 82 return ob_get_clean(); 83 } 84 78 85 } 79 86 endif; -
taskbuilder/tags/4.0.3/readme.txt
r3265149 r3286301 4 4 Tags: project,project management,task management,task manager,Kanban 5 5 Requires at least: 4.4 6 Tested up to: 6. 7.27 Stable tag: 4.0. 26 Tested up to: 6.8.1 7 Stable tag: 4.0.3 8 8 License: GPL v3 9 9 … … 21 21 [wppm_tasks_calendar] - Use Calendar on front-end(pro feature). 22 22 [wppm_tasks project ="insert project name here"]- If you want to display only selected project's task on page, you can add attribute as project name to tasks shortcode. It will only display tasks of selected project. 23 [wppm_public_projects_tasks] = Display public project's tasks from frontend. 23 24 24 25 ` … … 57 58 * [Due Date Reminder](https://taskbuilder.net/due-date-reminder/) - Due date reminder are super helpful for keeping your team on track to hit deadlines. Email notification will send to customer before due date of task. 58 59 * [Usergroup](https://taskbuilder.net/usergroup/) - Using usergroup add-on you can assign group of users to project and those group assign to project can be assign to tasks of project. 60 * [Recurrent Task] (https://taskbuilder.net/recurrent-task/) - Recurrent Tasks add-on allow administrators to effortlessly schedule recurring tasks for routine tasks The system automatically generates these tasks at the defined times, providing a streamlined approach to essential and repetitive processes. With versatile recurrence periods, customizable scheduling options, and the ability to set start and end dates. 59 61 60 62 ## 👨💻 DOCUMENTATION AND SUPPORT ## … … 113 115 114 116 == Changelog == 117 = V 4.0.3(May 2, 2025) = 118 * New: Public project's shortcode. You can use [wppm_public_projects_tasks] shortcode to display public project's tasks from frontend. 119 * Fix: If cowerkers permission disable for to change task status, cowerkers still change status by drag and drop feature in kanban view. 120 * Fix: When status change by drag and drop cards in kanban view, change status log not added in open task form. 121 * New (pro feature): Recurrent Task add-on. 122 115 123 = V 4.0.2(April 1,2025) = 116 124 * Fix: SQL Injection. … … 131 139 * Fix: If status name change from setting, changes not reflect on filter of task list, project list. 132 140 * New: Rich Text Editor Setting. You can enable/disable Rich Text Editor from setting( Dashboard > projects > Settings > Rich Text Editor). 133 * New(Pro feature): You can rearrange custom fields. By that order ,custom fields will display in create task form.141 * New(Pro feature): You can rearrange custom fields. By that order custom fields will display in create task form. 134 142 135 143 = V 3.0.8(Dec 25,2024) = -
taskbuilder/tags/4.0.3/taskbuilder.php
r3265149 r3286301 4 4 * Plugin URI: https://wordpress.org/plugins/taskbuilder/ 5 5 * Description: Wordpress Project & Task Management plugin. Easy to keep track of projects & tasks! 6 * Version: 4.0. 26 * Version: 4.0.3 7 7 * Author: Taskbuilder Team 8 8 * Author URI: https://taskbuilder.net/ 9 9 * Requires at least: 4.4 10 * Tested up to: 6. 7.210 * Tested up to: 6.8.1 11 11 * Text Domain: taskbuilder 12 12 * Domain Path: /lang … … 20 20 21 21 final class WP_Taskbuilder { 22 public $version = '4.0. 2';22 public $version = '4.0.3'; 23 23 public function __construct() { 24 24 // define global constants -
taskbuilder/trunk/includes/admin/addons.php
r3254059 r3286301 294 294 </div> 295 295 </div> 296 <div class="col-md-3 col-sm-6 col-xs-12 pricing-widget"> 297 <div class="row"> 298 <div class="pheader"> 299 <h3 class="title"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/recurrent_task.svg'); ?>"> <?php echo esc_html_e('Recurrent Task','taskbuilder');?></h3> 300 <h4 class="subtitle">$29.99</h4> 301 <div style="text-align:center"> 302 <small class="payment_freq"><?php echo esc_html_e('Per year','taskbuilder');?></small> 303 <small class="payment_freq"><?php echo esc_html_e('(Add-ons subject to yearly license for support and updates.)','taskbuilder');?></small> 304 </div> 305 </div> 306 <div class="pbody"> 307 <div class="addon-container"> 308 <i class="fas fa-arrow-right"></i> 309 <div class="addon-details"> 310 <?php echo esc_html_e('Recurring tasks are automated task entries that repeat at defined intervals—daily, weekly, monthly. They eliminate the need to manually re-enter routine tasks, keeping workflows smooth and consistent.','taskbuilder');?></div> 311 </div> 312 </div> 313 <div class="pfooter"> 314 <div class="purchase_addon"> 315 <a href="https://taskbuilder.net/pricing/" target="__blank" type="button" class="btn btn-success"><?php echo esc_html_e('Purchase','taskbuilder');?></a> 316 </div> 317 <div> 318 <a href="https://taskbuilder.net/recurrent-task/" target="__blank" type="button" class="btn btn-success"><?php echo esc_html_e('View Details','taskbuilder');?></a> 319 </div> 320 </div> 321 </div> 322 </div> 296 323 </div> 297 324 </div> -
taskbuilder/trunk/includes/admin/projects/open_project/wppm_drag_and_drop_card.php
r3079882 r3286301 12 12 if (!$wppm_card) {exit;} 13 13 $wppm_card_id= substr($wppm_card, 20); 14 $wppm_target_task_status = substr($target_task_status,25); 15 $values= array( 16 'status'=> $wppm_target_task_status 17 ); 18 $wpdb->update($wpdb->prefix.'wppm_task',$values,array('id'=>intval($wppm_card_id))); 19 echo '{ "sucess_status":"1","messege":"Success" }'; 14 if($wppmfunction->has_permission('change_task_status',$wppm_card_id)){ 15 $wppm_target_task_status = substr($target_task_status,25); 16 $task_data = $wppmfunction->get_task($wppm_card_id); 17 $task_id = $wppm_card_id; 18 $old_status_id = $task_data['status']; 19 $status_id = esc_sql($wppm_target_task_status); 20 $wppmfunction->change_status( $task_id, $status_id); 21 $change_task_value = array('prev_status'=>"$old_status_id",'new_status'=>"$status_id"); 22 $change_task_obj = serialize($change_task_value); 23 $log_values = array('task_id'=>"$task_id",'body'=>$change_task_obj,'attachment_ids'=>"",'create_time'=>date("Y-m-d h:i:sa"),'created_by'=>"$current_user->ID" ); 24 $wpdb->insert($wpdb->prefix . 'wppm_task_comment',$log_values); 25 $log_id = esc_sql($wpdb->insert_id); 26 $task_log_values = array('task_id'=>"$task_id",'comment_id'=>"$log_id",'comment_type'=>'change_task_status'); 27 $wpdb->insert($wpdb->prefix . 'wppm_task_comment_meta',$task_log_values); 28 echo '{ "sucess_status":"1","messege":"Success" }'; 29 }else{ 30 echo '{ "sucess_status":"0","messege":"You do not have permission to change this task status." }'; 31 } -
taskbuilder/trunk/includes/admin/projects/open_project/wppm_view_project_tasks.php
r3226189 r3286301 16 16 $filter_by = isset($_POST['wppm_task_filter']) ? sanitize_text_field($_POST['wppm_task_filter']) : "all"; 17 17 $proj_filter = isset($_POST['wppm_proj_filter']) ? sanitize_text_field($_POST['wppm_proj_filter']) : "0"; 18 $public_projects = isset($_POST['public_projects']) ? sanitize_text_field($_POST['public_projects']):"0"; 18 19 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true ); 19 20 $filters = array( … … 41 42 $where = " where project_name = '".$proj_attr."' Group by proj.id ORDER BY '$santitize_order_by'"; 42 43 }else{ 43 $where = " Group by proj.id ORDER BY '$santitize_order_by'"; 44 if(!empty($public_projects)){ 45 $where = " where proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1 Group by proj.id ORDER BY '$santitize_order_by'"; 46 }else{ 47 $where = " Group by proj.id ORDER BY '$santitize_order_by'"; 48 } 44 49 } 45 50 }else{ 46 $where = " where ((FIND_IN_SET($current_user->ID,proj.users)) OR (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR ( proj.created_by='$cu_id')) $wppm_proj_attr Group by proj.id ORDER BY '$santitize_order_by'"; 51 if(!empty($public_projects)){ 52 $where = " where (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) $wppm_proj_attr Group by proj.id ORDER BY '$santitize_order_by'"; 53 } else{ 54 $where = " where ((FIND_IN_SET($current_user->ID,proj.users)) OR (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR ( proj.created_by='$cu_id')) $wppm_proj_attr Group by proj.id ORDER BY '$santitize_order_by'"; 55 } 47 56 } 48 57 $where = apply_filters('wppm_project_filter_in_task_list_grid_view_where',$where); … … 101 110 "); 102 111 $no_of_rows = ( "SELECT count(*) FROM ($query"); 103 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') AND Task.status='$status_id' "; 112 if(!empty($public_projects)){ 113 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') AND Task.status='$status_id' "; 114 }else{ 115 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') AND Task.status='$status_id' "; 116 } 104 117 } else{ 105 118 $query = ("SELECT Task.* … … 113 126 "); 114 127 $no_of_rows = ( "SELECT count(*) FROM ($query"); 115 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR proj.created_by='$cu_id') AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) AND Task.status= '$status_id'"; 128 if(!empty($public_projects)){ 129 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) AND Task.status= '$status_id'"; 130 }else{ 131 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR proj.created_by='$cu_id') AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) AND Task.status= '$status_id'"; 132 } 116 133 } 117 134 }else{ … … 122 139 "); 123 140 $no_of_rows = ( "SELECT count(*) FROM ($query"); 124 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND Task.status= '$status_id'"; 141 if(!empty($public_projects)){ 142 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND Task.status= '$status_id'"; 143 }else{ 144 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND Task.status= '$status_id'"; 145 } 125 146 }else{ 126 147 $query = ( "SELECT Task.* … … 131 152 "); 132 153 $no_of_rows = ( "SELECT count(*) FROM ($query"); 133 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND ((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR proj.created_by='$cu_id') AND Task.status= '$status_id'"; 154 if(!empty($public_projects)){ 155 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND Task.status= '$status_id'"; 156 } else{ 157 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND ((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR proj.created_by='$cu_id') AND Task.status= '$status_id'"; 158 } 134 159 } 135 160 } -
taskbuilder/trunk/includes/admin/tasks/open_task/wppm_open_task.php
r3254059 r3286301 75 75 } 76 76 $flag = false; 77 $wppm_task_fillter = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_task ");77 $wppm_task_fillter = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wppm_task where id='".esc_sql($id)."'"); 78 78 if(!empty($wppm_task_fillter)){ 79 79 foreach($wppm_task_fillter as $key_filter=>$val_filter){ -
taskbuilder/trunk/includes/admin/tasks/wppm_tasks_list.php
r3254059 r3286301 12 12 $proj_filter = isset($_POST['wppm_proj_filter']) ? sanitize_text_field($_POST['wppm_proj_filter']) : "0"; 13 13 $proj_attr = isset($_POST['wppm_project_attr']) ? sanitize_text_field($_POST['wppm_project_attr']):""; 14 $public_projects = isset($_POST['public_projects']) ? sanitize_text_field($_POST['public_projects']):"0"; 14 15 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true ); 15 16 $wppm_create_tasks_coworkers_permission = get_option('wppm_allow_coworkers_create_task'); … … 33 34 $where = " where project_name = '".$proj_attr."' Group by proj.id ORDER BY ".$orderby_proj_sql; 34 35 }else{ 35 $where = " Group by proj.id ORDER BY ".$orderby_proj_sql; 36 if(!empty($public_projects)){ 37 $where = " where proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1 Group by proj.id ORDER BY ".$orderby_proj_sql; 38 }else{ 39 $where = " Group by proj.id ORDER BY ".$orderby_proj_sql; 40 } 36 41 } 37 42 }else{ 38 $where = " where ((FIND_IN_SET('$current_user->ID',proj.users)) OR (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR ( proj.created_by='$cu_id')) $wppm_proj_attr Group by proj.id ORDER BY $orderby_proj_sql"; 43 if(!empty($public_projects)){ 44 $where = " where (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) $wppm_proj_attr Group by proj.id ORDER BY $orderby_proj_sql"; 45 } 46 else{ 47 $where = " where ((FIND_IN_SET('$current_user->ID',proj.users)) OR (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR ( proj.created_by='$cu_id')) $wppm_proj_attr Group by proj.id ORDER BY $orderby_proj_sql"; 48 } 39 49 } 40 50 $where = apply_filters('wppm_project_filter_in_task_list_where',$where); … … 152 162 if(!empty($search_tag )){ 153 163 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){ 154 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') $wppm_proj_attr "; 164 if(!empty($public_projects)){ 165 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') $wppm_proj_attr "; 166 }else{ 167 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text') $wppm_proj_attr "; 168 } 155 169 } else{ 156 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) $wppm_proj_attr"; 170 if(!empty($public_projects)){ 171 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter AND (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) $wppm_proj_attr"; 172 }else{ 173 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND (((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) AND (Task.task_name LIKE '$search_tag_text' OR proj.project_name LIKE '$search_tag_text' OR task_statuses.name LIKE '$search_tag_text' OR task_priorities.name LIKE '$search_tag_text' OR user.display_name LIKE '$search_tag_text')) $wppm_proj_attr"; 174 } 157 175 } 158 176 }else{ 159 177 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){ 160 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr"; 178 if(!empty($public_projects)){ 179 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr"; 180 }else{ 181 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr"; 182 } 161 183 } else{ 162 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND ((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) $wppm_proj_attr"; 184 if(!empty($public_projects)){ 185 $where = " where (proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) AND $wppm_tl_filter AND $wppm_task_by_proj_filter $wppm_proj_attr"; 186 }else{ 187 $where = " where $wppm_tl_filter AND $wppm_task_by_proj_filter AND ((FIND_IN_SET('$current_user->ID',Task.users)>0) OR (Task.created_by= '$cu_id') OR (proj_users.user_id = '$cu_id' AND proj_users.role_id = 1 AND (FIND_IN_SET('$current_user->ID',proj.users)>0)) OR (Task.project = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR (proj.created_by='$cu_id' AND (FIND_IN_SET('$current_user->ID',proj.users)>0))) $wppm_proj_attr"; 188 } 163 189 } 164 190 } -
taskbuilder/trunk/includes/class-wppm-frontend.php
r3254059 r3286301 13 13 add_shortcode( 'wppm_projects', array( $this, 'wppm_projects' ) ); 14 14 add_shortcode( 'wppm_tasks', array( $this, 'wppm_tasks' ) ); 15 add_shortcode( 'wppm_public_projects_tasks', array( $this, 'wppm_public_projects_tasks' ) ); 15 16 add_action('wp_ajax_nopriv_wppm_sign_in',array($this,'wppm_sign_in')); 16 17 add_action('wp_ajax_nopriv_wppm_set_user_login',array($this,'wppm_set_user_login')); … … 76 77 } 77 78 79 function wppm_public_projects_tasks(){ 80 ob_start(); 81 include WPPM_ABSPATH.'includes/frontend/wppm_public_projects_tasks.php'; 82 return ob_get_clean(); 83 } 84 78 85 } 79 86 endif; -
taskbuilder/trunk/readme.txt
r3265149 r3286301 4 4 Tags: project,project management,task management,task manager,Kanban 5 5 Requires at least: 4.4 6 Tested up to: 6. 7.27 Stable tag: 4.0. 26 Tested up to: 6.8.1 7 Stable tag: 4.0.3 8 8 License: GPL v3 9 9 … … 21 21 [wppm_tasks_calendar] - Use Calendar on front-end(pro feature). 22 22 [wppm_tasks project ="insert project name here"]- If you want to display only selected project's task on page, you can add attribute as project name to tasks shortcode. It will only display tasks of selected project. 23 [wppm_public_projects_tasks] = Display public project's tasks from frontend. 23 24 24 25 ` … … 57 58 * [Due Date Reminder](https://taskbuilder.net/due-date-reminder/) - Due date reminder are super helpful for keeping your team on track to hit deadlines. Email notification will send to customer before due date of task. 58 59 * [Usergroup](https://taskbuilder.net/usergroup/) - Using usergroup add-on you can assign group of users to project and those group assign to project can be assign to tasks of project. 60 * [Recurrent Task] (https://taskbuilder.net/recurrent-task/) - Recurrent Tasks add-on allow administrators to effortlessly schedule recurring tasks for routine tasks The system automatically generates these tasks at the defined times, providing a streamlined approach to essential and repetitive processes. With versatile recurrence periods, customizable scheduling options, and the ability to set start and end dates. 59 61 60 62 ## 👨💻 DOCUMENTATION AND SUPPORT ## … … 113 115 114 116 == Changelog == 117 = V 4.0.3(May 2, 2025) = 118 * New: Public project's shortcode. You can use [wppm_public_projects_tasks] shortcode to display public project's tasks from frontend. 119 * Fix: If cowerkers permission disable for to change task status, cowerkers still change status by drag and drop feature in kanban view. 120 * Fix: When status change by drag and drop cards in kanban view, change status log not added in open task form. 121 * New (pro feature): Recurrent Task add-on. 122 115 123 = V 4.0.2(April 1,2025) = 116 124 * Fix: SQL Injection. … … 131 139 * Fix: If status name change from setting, changes not reflect on filter of task list, project list. 132 140 * New: Rich Text Editor Setting. You can enable/disable Rich Text Editor from setting( Dashboard > projects > Settings > Rich Text Editor). 133 * New(Pro feature): You can rearrange custom fields. By that order ,custom fields will display in create task form.141 * New(Pro feature): You can rearrange custom fields. By that order custom fields will display in create task form. 134 142 135 143 = V 3.0.8(Dec 25,2024) = -
taskbuilder/trunk/taskbuilder.php
r3265149 r3286301 4 4 * Plugin URI: https://wordpress.org/plugins/taskbuilder/ 5 5 * Description: Wordpress Project & Task Management plugin. Easy to keep track of projects & tasks! 6 * Version: 4.0. 26 * Version: 4.0.3 7 7 * Author: Taskbuilder Team 8 8 * Author URI: https://taskbuilder.net/ 9 9 * Requires at least: 4.4 10 * Tested up to: 6. 7.210 * Tested up to: 6.8.1 11 11 * Text Domain: taskbuilder 12 12 * Domain Path: /lang … … 20 20 21 21 final class WP_Taskbuilder { 22 public $version = '4.0. 2';22 public $version = '4.0.3'; 23 23 public function __construct() { 24 24 // define global constants
Note: See TracChangeset
for help on using the changeset viewer.