PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 3.0.8
Taskbuilder – Project Management & Task Management Tool With Kanban Board v3.0.8
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
← All changes | includes/admin/projects/projects_list.php +125 -309 6.0.23.0.8 View file →
@@ -5,29 +5,18 @@
5 5 global $wpdb,$wppmfunction,$current_user;
6 6 $status = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_project_statuses" );
7 7 $categories = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_project_categories" );
8 8 $appearance_settings = get_option("wppm-ap-project-list");
9 -$wppm_date_setting = get_option('wppm_date_setting');
10 -$wppm_deafault_time_duration_project = get_option('wppm_display_time_duration_project');
11 9 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
12 10 $proj_per_page = 20;
13 11 $page_no = (isset($_POST['page_no'])) ? intval(sanitize_text_field($_POST['page_no'])): '0';
14 -$page = isset($_POST['page']) ? sanitize_text_field(wp_unslash($_POST['page'])):"";
15 12 $search_tag = isset($_POST['project_search']) ? sanitize_text_field($_POST['project_search']) : '';
16 13 $order = isset($_POST['order']) ? sanitize_text_field($_POST['order']) :"ASC";
17 14 $sort_by = isset($_POST['sort_by']) ? sanitize_text_field($_POST['sort_by']):"project_name";
18 15 $filter_by = isset($_POST['wppm_project_filter']) ? sanitize_text_field($_POST['wppm_project_filter']) : "all";
19 -$is_archieved = !empty($_POST['is_archieved']) ? 1 : 0;
20 -$current_date = wp_date('Y-m-d');
16 +$current_date = date('Y-m-d');
21 17 $wppm_pl_filter = "1=1";
22 -$wppm_hide_completed_status_proj = get_option('wppm_hide_completed_status_proj');
23 18 $cu_id = esc_sql($current_user->ID);
24 -$wppm_hide_proj_statuses_from_frontend = get_option('wppm_hide_proj_statuses_from_frontend');
25 -if(!empty($wppm_hide_proj_statuses_from_frontend)){
26 - $wppm_hide_proj_statuses_from_frontend = explode(",",$wppm_hide_proj_statuses_from_frontend);
27 -} else {
28 - $wppm_hide_proj_statuses_from_frontend = '';
29 -}
30 19 $filters = array(
31 20 'sort_by' => $sort_by,
32 21 'order' => $order,
33 22 'search' => $search_tag,
@@ -53,138 +42,80 @@
53 42 'search'=>$search_tag,
54 43 'filter'=>$filter_by
55 44 );
56 45 setcookie('wppm_proj_filters',wp_json_encode( $filters ),time() + 3600);
57 -
58 -$allowed_sort_by = [
59 - 'project_name' => 'project_name',
60 - 'status' => 'proj_statuses.name',
61 - 'category' => 'proj_categories.name',
62 - 'start_date' => 'start_date',
63 - 'end_date' => 'end_date',
64 - 'TIMESTAMPDIFF(SECOND, start_date, end_date)'=> 'TIMESTAMPDIFF(SECOND, start_date, end_date)'
65 -];
66 -// Resolve sort_by safely
67 -$sort_key = isset($pl_filters_arr['sort_by'])
68 - ? sanitize_text_field($pl_filters_arr['sort_by'])
69 - : 'project_name';
70 -
71 -$sort_by = $allowed_sort_by[$sort_key] ?? 'project_name';
72 -$order = ( isset($pl_filters_arr['order']) && strtoupper($pl_filters_arr['order']) === 'ASC' )
73 - ? 'ASC'
74 - : 'DESC';
75 -if($filter_by=='all'){
76 - if($wppm_hide_completed_status_proj == 0){
77 - $wppm_pl_filter = "status!='4'";
78 - }
46 +if($pl_filters_arr['sort_by']=='status'){
47 + $sort_by = 'proj_statuses.name';
79 48 }
80 -if($filter_by=='4'){
49 +if($pl_filters_arr['sort_by']=='category'){
50 + $sort_by = 'proj_categories.name';
51 +}
52 +if($pl_filters_arr['sort_by']=='start_date'){
53 + $sort_by = 'start_date';
54 +}
55 +if($pl_filters_arr['sort_by']=='end_date'){
56 + $sort_by = 'end_date';
57 +}
58 +if($sort_by=='category'){
59 + $sort_by = 'proj_categories.name';
60 +}
61 +if($filter_by=='completed'){
81 62 $wppm_pl_filter = "status='4'";
82 63 }elseif($filter_by=='overdue'){
83 64 $wppm_pl_filter = "status!='4' AND (CAST(end_date AS DATE)) < '$current_date'";
84 65 }elseif($filter_by == 'unassigned'){
85 66 $wppm_pl_filter = "users=''";
86 -}elseif($filter_by == '1'){
67 +}elseif($filter_by == 'new'){
87 68 $wppm_pl_filter = "status='1'";
88 -}elseif($filter_by == '2'){
69 +}elseif($filter_by == 'inprogress'){
89 70 $wppm_pl_filter = "status='2'";
90 -}elseif($filter_by == '3'){
71 +}elseif($filter_by == 'hold'){
91 72 $wppm_pl_filter = "status='3'";
92 73 }elseif($filter_by == 'mine'){
93 74 $wppm_pl_filter = "(FIND_IN_SET('$current_user->ID',users)>0)";
94 75 }
95 -
96 -if(!empty($wppm_hide_proj_statuses_from_frontend) && is_array($wppm_hide_proj_statuses_from_frontend) && ((isset($_POST['is_frontend'])) && (sanitize_text_field($_POST['is_frontend'])==1))){
97 - foreach($wppm_hide_proj_statuses_from_frontend as $status){
98 - $wppm_pl_filter .= " AND status != '$status'";
99 - }
100 -}
101 76 $wppm_project_time = get_option('wppm_project_time');
102 77 $wppm_default_project_date = get_option('wppm_default_project_date');
103 78 $sort_by = apply_filters('wppm_project_list_sort_by_query',$sort_by);
104 79 $order = apply_filters('wppm_project_list_order_query',$order);
105 80 $search_tag_text = '%'.$wpdb->esc_like($search_tag).'%';
106 -if (!empty($search_tag)) {
107 - $search_tag_text = '%' . $wpdb->esc_like($search_tag) . '%';
108 - $query = "SELECT Project.*
109 - FROM {$wpdb->prefix}wppm_project AS Project
110 - LEFT JOIN {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
111 - LEFT JOIN {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
112 - LEFT JOIN {$wpdb->base_prefix}users user ON FIND_IN_SET(user.ID, Project.users) > 0
113 - LEFT JOIN {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id";
114 - // SAFE search condition
115 - $search_sql = $wpdb->prepare(
116 - "(Project.project_name LIKE %s
117 - OR proj_statuses.name LIKE %s
118 - OR proj_categories.name LIKE %s
119 - OR user.display_name LIKE %s)",
120 - $search_tag_text,
121 - $search_tag_text,
122 - $search_tag_text,
123 - $search_tag_text
124 - );
125 - if ($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin') {
126 - // ✅ Admin (safe)
127 - $where = " WHERE $wppm_pl_filter AND $search_sql";
128 - } else {
129 - // ✅ Non-admin (safe)
130 - $where = $wpdb->prepare(
131 - " WHERE $wppm_pl_filter
132 - AND $search_sql
133 - AND (
134 - FIND_IN_SET(%d, Project.users) > 0
135 - OR (
136 - proj_meta.meta_key = 'public_project'
137 - AND proj_meta.meta_value = 1
138 - )
139 - OR Project.created_by = %d
140 - )",
141 - $current_user->ID,
142 - $cu_id
143 - );
144 - }
145 -} else {
146 - if ($sort_by == 'project_name' || $sort_by == 'start_date' || $sort_by == 'end_date') {
147 - $query = "SELECT Project.*
148 - FROM {$wpdb->prefix}wppm_project AS Project
149 - LEFT JOIN {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id";
150 - } else {
151 - $query = "SELECT Project.*
152 - FROM {$wpdb->prefix}wppm_project AS Project
153 - LEFT JOIN {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
154 - LEFT JOIN {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
155 - LEFT JOIN {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id";
156 - }
157 - if ($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin') {
158 - $where = " WHERE $wppm_pl_filter";
159 - } else {
160 - $where = $wpdb->prepare(
161 - " WHERE (
162 - $wppm_pl_filter
163 - AND (
164 - FIND_IN_SET(%d, Project.users) > 0
165 - OR (
166 - proj_meta.meta_key = 'public_project'
167 - AND proj_meta.meta_value = 1
168 - )
169 - )
170 - OR Project.created_by = %d
171 - )",
172 - $current_user->ID,
173 - $cu_id
174 - );
175 - }
81 +if(!empty($search_tag)){
82 + $search_tag_text = '%'.$wpdb->esc_like($search_tag).'%';
83 + $query = ("SELECT Project.*
84 + FROM {$wpdb->prefix}wppm_project AS Project
85 + Left join {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
86 + Left join {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
87 + Left join {$wpdb->base_prefix}users user ON (FIND_IN_SET(user.ID,Project.users)>0) AND (user.display_name LIKE '$search_tag_text')
88 + Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id
89 + ");
90 + if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
91 + $where = " where $wppm_pl_filter AND (Project.project_name LIKE '$search_tag_text' OR proj_statuses.name LIKE '$search_tag_text' OR proj_categories.name LIKE '$search_tag_text' OR ( user.display_name LIKE '$search_tag_text'))";
92 + }else{
93 + $where = " where $wppm_pl_filter AND (Project.project_name LIKE '$search_tag_text' OR proj_statuses.name LIKE '$search_tag_text' OR proj_categories.name LIKE '$search_tag_text' OR ( user.display_name LIKE '$search_tag_text')) AND ((FIND_IN_SET('$current_user->ID',Project.users)>0) OR (Project.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR Project.created_by='$cu_id')";
94 + }
95 +}else{
96 + if($sort_by=='project_name'|| $sort_by=='start_date' || $sort_by=='end_date'){
97 + $query = ( "SELECT Project.* FROM {$wpdb->prefix}wppm_project AS Project
98 + Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id
99 + ");
100 + } else{
101 + $query = ( "SELECT Project.* FROM {$wpdb->prefix}wppm_project AS Project
102 + Left join {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
103 + Left join {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
104 + Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id
105 + ");
106 + }
107 + if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
108 + $where = " where $wppm_pl_filter";
109 + }else{
110 + $where = " where ($wppm_pl_filter AND (FIND_IN_SET('$current_user->ID',Project.users)>0 OR (Project.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1)) OR Project.created_by='$cu_id')";
111 + }
176 112 }
177 -$archived_where = '';
178 -if ( isset( $is_archieved ) && $is_archieved === 1 ) {
179 - $archived_where = ' AND Project.is_archived = 1';
180 -} else {
181 - $archived_where = ' AND Project.is_archived = 0';
182 -}
183 -$where .= $archived_where;
184 113 $no_of_rows = ( "SELECT count(*) FROM ($query");
185 114 $no_of_rows = apply_filters('wppm_project_list_no_of_rows',$no_of_rows,$wppm_pl_filter,$search_tag);
186 115 $where = apply_filters('wppm_project_list_query_where',$where, $wppm_pl_filter,$search_tag);
116 +$sort_by = esc_sql($sort_by);
117 +$order = esc_sql($order);
187 118 $query .= $where." Group by Project.id ORDER BY $sort_by $order";
188 119 $no_of_rows .= $where." Group by Project.id) AS Project";
189 120 $totalrows = $wpdb->get_var( $no_of_rows );
190 121 $query = apply_filters('wppm_project_list_query',$query);
@@ -191,85 +122,75 @@
191 122 $limit_start=$page_no*$proj_per_page;
192 123 $limit="\n LIMIT ".$limit_start.",".$proj_per_page." ";
193 124 $query = $query.$limit;
194 125 $wppm_fillter = $wpdb->get_results($query);
195 -$new_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(1)."'" );
196 -$inp_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(2)."'" );
197 -$hold_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(3)."'" );
198 -$completed_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(4)."'" );
199 -$new_style = (!empty($new_status_name))? "display:inline" :"display:none;";
200 -$inp_status_style = (!empty($inp_status_name))? "display:inline" :"display:none;";
201 -$hold_status_style = (!empty($hold_status_name))? "display:inline" :"display:none;";
202 -$complete_status_style = (!empty($completed_status_name))? "display:inline" :"display:none;";
203 126 ?>
204 127 <form id="wppm_project_list_frm">
205 128 <div id="wppm-container">
206 129 <div id="wppm_project_list_container" class="wppm_bootstrap">
207 130 <div class="row">
208 - <div class="col-sm-12" id="wppm_heading_inline">
131 + <div class="col-sm-6" id="wppm_heading_inline">
209 132 <span class="wppm-heading-inline">
210 - <?php echo !empty($is_archieved) ? esc_html__('Archived Projects', 'taskbuilder') : esc_html__('Projects', 'taskbuilder'); ?>
133 + <?php echo esc_html_e('Projects','taskbuilder');?>
211 134 </span>
212 - <?php if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_manager'|| $wppm_current_user_capability == 'wppm_admin'){ ?>
213 - <span class="wppm-add-new-btn btn-primary" 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>
214 - <?php } ?>
215 - <span class="wppm-add-new-btn btn-primary" id="wppm_project_list" 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>
216 - <?php if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_manager'|| $wppm_current_user_capability == 'wppm_admin' ){ ?>
217 - <span class="wppm-add-new-btn btn-primary"" id="wppm_archieve_project_btn" title="Archive Project" onclick="wppm_archieve_project_list()"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/archive_project.svg'); ?>" alt="archive"><span style="margin-left:5px;"><span><?php echo esc_html_e('Archive Project','taskbuilder');?></span></span>
218 - <?php } ?>
135 + <?php if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_manager'|| $wppm_current_user_capability == 'wppm_admin' ){ ?>
136 + <img width="25" height="30" id="wppm_add_new_project_btn" class="wppm_add_new_project_btn" onclick="wppm_add_new_project()" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/add.svg'); ?>" alt="add">
137 + <?php } ?>
219 138 </div>
139 + <div id="wppm_project_and_task_search" class="col-sm-6">
140 + <img width="25px" id="wppm_project_search_filter_img" height="15px" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/search.svg'); ?>" alt="search">
141 + <input type="search" id="wppm_project_search_filter" name="wppm_project_search_filter" class="form-control form-control-sm" aria-controls="selection-datatable" placeholder="<?php echo esc_attr__('Search','taskbuilder');?>" value="<?php echo (!empty($search_tag)) ? esc_attr($search_tag) : "" ?>">
142 + </div>
220 143 </div>
221 - <div style="display:flex;justify-content:space-between;margin-top:20px;flex-wrap: wrap;">
222 - <div style="display:flex;flex-wrap: wrap;">
223 - <div id="wppm_project_filter_container">
224 - <div class="wppm-bulk-actions" style="margin-bottom: 10px;">
225 - <button
226 - id="wppm-bulk-actions-btn"
227 - class="wppm-button small secondary"
228 - type="button"
229 - style="display:none;padding:14px;font: 13px Helvetica Neue, Arial, Helvetica, sans-serif !important"
230 - data-popover="wppm-bulk-actions">
231 - <?php esc_attr_e( 'Bulk Actions ', 'taskbuilder' ); ?><img style="color:#313042" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/wppm_chevron_down_icon.svg'); ?>" alt="chevron_down">
232 - </button>
233 - <div id="wppm-bulk-actions" class="gpopover wppm-popover-menu wppm-proj-bulk-actions">
234 - <div class="wppm-popover-menu-item" onclick="wppm_bulk_change_status('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_change_status' ) ); ?>');">
235 - <span><img style="margin-right:5px;" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/gps-navigation.svg'); ?>" alt="status"><?php echo esc_html_e('Change Status','taskbuilder'); ?></span>
144 + <div class="row">
145 + <div class="col-sm-6" id="wppm_project_filter_container">
146 + <div class="wppm-filter-item">
147 + <label for="wppm_project_filter"> <?php echo esc_html_e('Filter','taskbuilder');?></label>
148 + <select id="wppm_project_filter" name="wppm_project_filter" onchange="wppm_apply_project_filter()">
149 + <option value="all"<?php echo ($filter_by == "all")? 'selected':""?>><?php echo esc_html_e('All','taskbuilder');?></option>
150 + <option value="new" <?php echo ($filter_by == "new")? 'selected':""?>><?php echo esc_html_e('New','taskbuilder');?></option>
151 + <option value="inprogress" <?php echo ($filter_by == "inprogress")? 'selected':""?>><?php echo esc_html_e('In Progress','taskbuilder');?></option>
152 + <option value="hold" <?php echo ($filter_by == "hold")? 'selected':""?>><?php echo esc_html_e('Hold','taskbuilder');?></option>
153 + <option value="completed" <?php echo ($filter_by == "completed")? 'selected':""?>><?php echo esc_html_e('Completed','taskbuilder');?></option>
154 + <option value="mine" <?php echo ($filter_by == "mine")? 'selected':""?>><?php echo esc_html_e('Mine','taskbuilder');?></option>
155 + <option value="unassigned" <?php echo ($filter_by == "unassigned")? 'selected':""?>><?php echo esc_html_e('Unassigned','taskbuilder');?></option>
156 + <option value="overdue" <?php echo ($filter_by == "overdue")? 'selected':""?>><?php echo esc_html_e('Overdue','taskbuilder');?></option>
157 + </select>
158 + </div>
159 + <div class="wppm_display_submit">
160 + <div class="wppm-filter-actions">
161 + <span class="wppm-link" onclick="wppm_pl_reset_filter()"> <?php echo esc_html_e('Reset','taskbuilder');?></span>
162 + </div>
163 + </div>
164 + </div>
165 + </div>
166 + <div class="row">
167 + <div class="col-sm-12">
168 + <div class="wppm-bulk-actions">
169 + <button
170 + id="wppm-bulk-actions-btn"
171 + class="wppm-button small secondary"
172 + type="button"
173 + style="display:none"
174 + data-popover="wppm-bulk-actions">
175 + <?php esc_attr_e( 'Bulk Actions ', 'taskbuilder' ); ?><img style="color:#313042" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/wppm_chevron_down_icon.svg'); ?>" alt="chevron_down">
176 + </button>
177 + <div id="wppm-bulk-actions" class="gpopover wppm-popover-menu wppm-proj-bulk-actions">
178 + <div class="wppm-popover-menu-item" onclick="wppm_bulk_change_status('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_change_status' ) ); ?>');">
179 + <span><img style="margin-right:5px;" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/gps-navigation.svg'); ?>" alt="status"><?php echo esc_html_e('Change Status','taskbuilder'); ?></span>
180 + </div>
181 + <div class="wppm-popover-menu-item" onclick="wppm_bulk_change_category('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_change_category' ) ); ?>');">
182 + <span><img style="margin-right:5px;" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/tags.svg'); ?>" alt="category"><?php echo esc_html_e('Change Category','taskbuilder'); ?></span>
183 + </div>
184 + <div class="wppm-popover-menu-item" onclick="wppm_bulk_assign_users('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_assign_users' ) ); ?>');">
185 + <span><img style="margin-right:5px;" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/users.svg'); ?>" alt="users"><?php echo esc_html_e('Assign Co-workers','taskbuilder'); ?></span>
186 + </div>
187 + <div class="wppm-popover-menu-item" onclick="wppm_bulk_delete_project('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_assign_users' ) ); ?>');">
188 + <span><img style="margin-right:5px;" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/trash-alt-solid.svg'); ?>" alt="delete"><?php echo esc_html_e('Delete','taskbuilder'); ?></span>
189 + </div>
236 190 </div>
237 - <div class="wppm-popover-menu-item" onclick="wppm_bulk_change_category('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_change_category' ) ); ?>');">
238 - <span><img style="margin-right:5px;" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/tags.svg'); ?>" alt="category"><?php echo esc_html_e('Change Category','taskbuilder'); ?></span>
239 - </div>
240 - <div class="wppm-popover-menu-item" onclick="wppm_bulk_assign_users('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_assign_users' ) ); ?>');">
241 - <span><img style="margin-right:5px;" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/users.svg'); ?>" alt="users"><?php echo esc_html_e('Assign Co-workers','taskbuilder'); ?></span>
242 - </div>
243 - <div class="wppm-popover-menu-item" onclick="wppm_bulk_delete_project('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_assign_users' ) ); ?>');">
244 - <span><img style="margin-right:5px;" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/trash-alt-solid.svg'); ?>" alt="delete"><?php echo esc_html_e('Delete','taskbuilder'); ?></span>
245 - </div>
246 - </div>
247 191 </div>
248 - <div class="wppm-filter-item">
249 - <label for="wppm_project_filter"> <?php echo esc_html_e('Filter','taskbuilder');?></label>
250 - <select id="wppm_project_filter" name="wppm_project_filter" onchange="wppm_apply_project_filter(<?php echo $is_archieved ?>)">
251 - <option value="all"<?php echo ($filter_by == "all")? 'selected':""?>><?php echo esc_html_e('All','taskbuilder');?></option>
252 - <option style="<?php echo esc_attr($new_style) ?>" value="1" <?php echo ($filter_by == "1")? 'selected':""?>><?php echo esc_html($new_status_name);?></option>
253 - <option style="<?php echo esc_attr($inp_status_style) ?>" value="2" <?php echo ($filter_by == "2")? 'selected':""?>><?php echo esc_html($inp_status_name);?></option>
254 - <option style="<?php echo esc_attr($hold_status_style) ?>" value="3" <?php echo ($filter_by == "3")? 'selected':""?>><?php echo esc_html($hold_status_name);?></option>
255 - <option style="<?php echo esc_attr($complete_status_style) ?>" value="4" <?php echo ($filter_by == "4")? 'selected':""?>><?php echo esc_html($completed_status_name);?></option>
256 - <option value="mine" <?php echo ($filter_by == "mine")? 'selected':""?>><?php echo esc_html_e('Mine','taskbuilder');?></option>
257 - <option value="unassigned" <?php echo ($filter_by == "unassigned")? 'selected':""?>><?php echo esc_html_e('Unassigned','taskbuilder');?></option>
258 - <option value="overdue" <?php echo ($filter_by == "overdue")? 'selected':""?>><?php echo esc_html_e('Overdue','taskbuilder');?></option>
259 - </select>
260 - </div>
261 - <div class="wppm_display_submit">
262 - <div class="wppm-filter-actions">
263 - <span class="wppm-link" onclick="wppm_pl_reset_filter(<?php echo $is_archieved ?>)"> <?php echo esc_html_e('Reset','taskbuilder');?></span>
264 - </div>
265 - </div>
266 192 </div>
267 - </div>
268 - <div id="wppm_project_and_task_search" style="display:flex;justify-content:flex-end;">
269 - <img width="25px" id="wppm_project_search_filter_img" style="position: relative;top: 10px;left: 30px;" height="15px" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/search.svg'); ?>" alt="search">
270 - <input type="search" id="wppm_project_search_filter" style="margin-right:10px;" name="wppm_project_search_filter" class="form-control form-control-sm" aria-controls="selection-datatable" placeholder="<?php echo esc_attr__('Search','taskbuilder');?>" value="<?php echo (!empty($search_tag)) ? esc_attr($search_tag) : "" ?>">
271 - </div>
272 193 </div>
273 194 <script>
274 195 jQuery('#wppm-more-actions-btn, #wppm-bulk-actions-btn').gpopover({width: 200});
275 196 </script>
@@ -298,9 +219,9 @@
298 219 <span id="wppm_project_category_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Category','taskbuilder'); ?></span>
299 220 <img width="16" height="16" onclick="wppm_sort_up_project_list('category','ASC')" style = "<?php echo ($sort_by == 'proj_categories.name' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_up_project_cat_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
300 221 <img width="16" height="16" onclick="wppm_sort_up_project_list('category','DESC')" style = "<?php echo ($sort_by == 'proj_categories.name' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_down_project_cat_img" class="wppm_chevron_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
301 222 </th>
302 - <?php if($wppm_default_project_date==1 && $wppm_deafault_time_duration_project==0){ ?>
223 + <?php if($wppm_default_project_date==1){ ?>
303 224 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
304 225 <span id="wppm_project_start_date_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Start Date','taskbuilder'); ?></span>
305 226 <img width="16" height="16" onclick="wppm_sort_up_project_list('start_date','ASC')" style = "<?php echo ($sort_by == 'start_date' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_up_project_start_date_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
306 227 <img width="16" height="16" onclick="wppm_sort_up_project_list('start_date','DESC')" style = "<?php echo ($sort_by == 'start_date' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_down_project_start_date_img" class="wppm_chevron_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
@@ -309,16 +230,9 @@
309 230 <span id="wppm_project_end_date_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('End Date','taskbuilder'); ?></span>
310 231 <img width="16" height="16" onclick="wppm_sort_up_project_list('end_date','ASC')" style = "<?php echo ($sort_by == 'end_date' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_up_project_end_date_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
311 232 <img width="16" height="16" onclick="wppm_sort_up_project_list('end_date','DESC')" style = "<?php echo ($sort_by == 'end_date' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_down_project_end_date_img" class="wppm_chevron_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
312 233 </th>
313 - <?php }
314 - if( $wppm_deafault_time_duration_project==1){ ?>
315 - <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
316 - <span id="wppm_project_time_duration_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Duration','taskbuilder'); ?></span>
317 - <img width="16" height="16" onclick="wppm_sort_up_project_list('TIMESTAMPDIFF(SECOND, start_date, end_date)','ASC')" style = "<?php echo ($sort_by == 'TIMESTAMPDIFF(SECOND, start_date, end_date)' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_up_project_time_duration_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
318 - <img width="16" height="16" onclick="wppm_sort_up_project_list('TIMESTAMPDIFF(SECOND, start_date, end_date)','DESC')" style = "<?php echo ($sort_by == 'TIMESTAMPDIFF(SECOND, start_date, end_date)' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_down_project_time_duration_img" class="wppm_chevron_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
319 - </th>
320 - <?php }?>
234 + <?php } ?>
321 235 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>"><span style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('No. of tasks','taskbuilder'); ?></span></th>
322 236 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>"></th>
323 237 </tr>
324 238 <tbody>
@@ -328,15 +242,14 @@
328 242 if(!empty($wppm_fillter)){
329 243 foreach( $wppm_fillter as $project ){
330 244 $total_projects++;
331 245 $proejctdata = $wppmfunction->get_project($project->id);
332 - $wppm_proj_duration = $wppmfunction->wppm_get_duration($project->start_date,$project->end_date);
333 - $pstatus= absint($project->status);
246 + $pstatus= esc_sql($project->status);
334 247 $status = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id='$pstatus'" );
335 248 $users = explode(",",$project->users);
336 - $pid= absint($project->id);
249 + $pid= esc_sql($project->id);
337 250 if(isset($project->cat_id)){
338 - $pcat_id = absint($project->cat_id);
251 + $pcat_id = esc_sql($project->cat_id);
339 252 $category = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_categories where id='$pcat_id'" );
340 253 }
341 254 if(isset($project->id)){
342 255 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
@@ -353,94 +266,15 @@
353 266 }
354 267 $no_of_tasks = apply_filters('wppm_no_of_task_proj_list_query',$no_of_tasks,$project->id);
355 268 }
356 269 if($wppm_project_time == 1){
357 - $psDate = new DateTime($project->start_date);
358 - $peDate = new DateTime($project->end_date);
359 - if($project->start_date=='0000-00-00 00:00:00'){
360 - if($wppm_date_setting=='Y-m-d H:i:s'){
361 - $proj_start_date = '0000-00-00 00:00:00';
362 - }elseif($wppm_date_setting=='d-m-Y H:i:s'){
363 - $proj_start_date = '00-00-0000 00:00:00';
364 - }elseif($wppm_date_setting=='m-d-Y H:i:s'){
365 - $proj_start_date = '00-00-0000 00:00:00';
366 - }else{
367 - $proj_start_date = '0000-00-00 00:00:00';
368 - }
369 - }if($project->end_date=='0000-00-00 00:00:00'){
370 - if($wppm_date_setting=='Y-m-d H:i:s'){
371 - $proj_end_date = '0000-00-00 00:00:00';
372 - }elseif($wppm_date_setting=='d-m-Y H:i:s'){
373 - $proj_end_date = '00-00-0000 00:00:00';
374 - }elseif($wppm_date_setting=='m-d-Y H:i:s'){
375 - $proj_end_date = '00-00-0000 00:00:00';
376 - }else{
377 - $proj_end_date = '0000-00-00 00:00:00';
378 - }
379 - }
380 - if($project->start_date!='0000-00-00 00:00:00'){
381 - if(!empty($wppm_date_setting)){
382 - $proj_start_date = $psDate->format($wppm_date_setting);
383 - }else{
384 - $proj_start_date = isset($project->start_date)? $project->start_date:"";
385 - }
386 - }
387 - if($project->end_date!='0000-00-00 00:00:00'){
388 - if(!empty($wppm_date_setting)){
389 - $proj_end_date = $peDate->format($wppm_date_setting);
390 - }else{
391 - $proj_end_date = isset($project->end_date) ? $project->end_date: "" ;
392 - }
393 - }
270 + $proj_start_date = $project->start_date;
271 + $proj_end_date = $project->end_date;
394 272 } elseif($wppm_project_time == 0){
395 273 $psDate = new DateTime($project->start_date);
396 274 $peDate = new DateTime($project->end_date);
397 275 $proj_start_date = $psDate->format('Y-m-d');
398 276 $proj_end_date = $peDate->format('Y-m-d');
399 - if($project->start_date=='0000-00-00 00:00:00'){
400 - if($wppm_date_setting=='Y-m-d H:i:s'){
401 - $proj_start_date = '0000-00-00';
402 - }elseif($wppm_date_setting=='d-m-Y H:i:s'){
403 - $proj_start_date = '00-00-0000';
404 - }elseif($wppm_date_setting=='m-d-Y H:i:s'){
405 - $proj_start_date = '00-00-0000';
406 - }else{
407 - $proj_start_date = '0000-00-00';
408 - }
409 - }
410 - if($project->end_date=='0000-00-00 00:00:00'){
411 - if($wppm_date_setting=='Y-m-d H:i:s'){
412 - $proj_end_date = '0000-00-00';
413 - }elseif($wppm_date_setting=='d-m-Y H:i:s'){
414 - $proj_end_date = '00-00-0000';
415 - }elseif($wppm_date_setting=='m-d-Y H:i:s'){
416 - $proj_end_date = '00-00-0000';
417 - }else{
418 - $proj_end_date = '0000-00-00';
419 - }
420 -
421 - }if($project->start_date!='0000-00-00 00:00:00'){
422 - if($wppm_date_setting=='Y-m-d H:i:s'){
423 - $proj_start_date = $psDate->format('Y-m-d');
424 - }elseif($wppm_date_setting=='d-m-Y H:i:s'){
425 - $proj_start_date = $psDate->format('d-m-Y');
426 - }elseif($wppm_date_setting=='m-d-Y H:i:s'){
427 - $proj_start_date = $psDate->format('m-d-Y');
428 - }else{
429 - $proj_start_date = $psDate->format('Y-m-d');
430 - }
431 - }
432 - if($project->end_date!='0000-00-00 00:00:00'){
433 - if($wppm_date_setting=='Y-m-d H:i:s'){
434 - $proj_end_date = $peDate->format('Y-m-d');
435 - }elseif($wppm_date_setting=='d-m-Y H:i:s'){
436 - $proj_end_date = $peDate->format('d-m-Y');
437 - }elseif($wppm_date_setting=='m-d-Y H:i:s'){
438 - $proj_end_date = $peDate->format('m-d-Y');
439 - }else{
440 - $proj_end_date = $peDate->format('Y-m-d');
441 - }
442 - }
443 277 }
444 278 ?>
445 279 <tr onclick="if(link)wppm_open_project(<?php echo esc_attr($project->id) ?>)">
446 280 <td class="bulk-selector" onmouseover="link=false;" onmouseout="link=true;">
@@ -450,10 +284,10 @@
450 284 <label for="wppm_bulk_select_<?php echo esc_attr($project->id) ?>"></label>
451 285 </div>
452 286 </div>
453 287 </td>
454 - <td onmouseover="link=true;"><?php echo esc_html($project->project_name) ?></td>
455 - <td onmouseover="link=true;"><span class="wppm_td_project_status" style="background-color:<?php echo esc_attr($status->bg_color);?>; color: <?php echo esc_attr($status->color); ?>"><?php echo esc_html($status->name) ?></span></td>
288 + <td onmouseover="link=true;"><?php echo esc_html_e($project->project_name,'taskbuilder') ?></td>
289 + <td onmouseover="link=true;"><span class="wppm_td_project_status" style="background-color:<?php echo esc_attr($status->bg_color);?>; color: <?php echo esc_attr($status->color); ?>"><?php echo esc_html_e($status->name,'taskbuilder') ?></span></td>
456 290 <td onmouseover="link=true;">
457 291 <?php
458 292 $i=0;
459 293 if(!empty(array_filter($users))){
@@ -462,9 +296,9 @@
462 296 if( $i <= 4 ){
463 297 $user_info = get_user_by('id', $user );
464 298 if(!empty($user_info)){
465 299 ?>
466 - <a href="#" title="<?php echo esc_html($user_info->display_name) ?>">
300 + <a href="#" title="<?php echo esc_html_e($user_info->display_name) ?>">
467 301 <?php echo get_avatar($user_info->ID, 25, "mysteryman");?>
468 302 </a> <?php
469 303 }
470 304 }
@@ -469,9 +303,9 @@
469 303 }
470 304 }
471 305 }
472 306 } else{
473 - esc_html_e('None','taskbuilder');
307 + _e('None','wp_projects');
474 308 }
475 309 if($i > 4){
476 310 ?>
477 311 <a href="#" class="wppm_avatar">
@@ -478,28 +312,14 @@
478 312 <span id="wppm_avatar" style="background-color:black;" class="avatar">+<?php echo esc_html($i-4) ?></span>
479 313 </a>
480 314 <?php } ?>
481 315 </td>
482 - <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($category) ? esc_html($category): "" ?></td>
483 - <?php if($wppm_default_project_date==1 && $wppm_deafault_time_duration_project==0){ ?>
316 + <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($category) ? esc_html_e($category,'taskbuilder'): "" ?></td>
317 + <?php if($wppm_default_project_date==1){ ?>
484 318 <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($proj_start_date) ? esc_html($proj_start_date): "" ?></td>
485 - <?php
486 - if(!empty($proj_end_date) && $project->status!=4 && $proj_end_date < $current_date && ($proj_end_date != '0000-00-00 00:00:00' && $proj_end_date != '00-00-0000 00:00:00' && $proj_end_date != '00-00-0000' && $proj_end_date != '0000-00-00')) {
487 - $style = "color:#FF0000";
488 - } else {
489 - $style = "color:#2C3E50";
490 - } ?>
491 - <td onmouseover="link=true;" class="wppm_table_td"><span style="<?php echo esc_attr($style); ?>"><?php echo isset($proj_end_date) ? esc_html($proj_end_date):"" ?></span></td>
319 + <?php $style = ($project->status!=4 && $proj_end_date < $current_date) ? "color:#FF0000":"color:#2C3E50"; ?>
320 + <td onmouseover="link=true;" class="wppm_table_td"><span style="<?php echo esc_attr($style); ?>"><?php echo isset($proj_end_date) ? esc_html($proj_end_date):"" ?></td></span>
492 321 <?php } ?>
493 - <?php if($wppm_deafault_time_duration_project==1){ ?>
494 - <?php
495 - if(!empty($proj_end_date) && $project->status!=4 && $proj_end_date < $current_date && ($proj_end_date != '0000-00-00 00:00:00' && $proj_end_date != '00-00-0000 00:00:00' && $proj_end_date != '00-00-0000' && $proj_end_date != '0000-00-00')) {
496 - $style = "color:#FF0000";
497 - } else {
498 - $style = "color:#2C3E50";
499 - } ?>
500 - <td onmouseover="link=true;" class="wppm_table_td"><span style="<?php echo esc_attr($style); ?>"><?php echo isset($wppm_proj_duration) ? esc_html($wppm_proj_duration):"" ?></span></td>
501 - <?php } ?>
502 322 <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($no_of_tasks) ? esc_html($no_of_tasks):"" ?></td>
503 323 <td onmouseover="link=true;" class="wppm_delete_action">
504 324 <?php $style = (($current_user->ID && $current_user->has_cap('manage_options')) || ($wppmfunction->has_project_permission('delete_project',esc_attr($project->id))) || $wppm_current_user_capability == 'wppm_admin' || ($proejctdata['created_by']==$current_user->ID && $wppm_current_user_capability == 'wppm_manager') )? "display:inline":"display:none"; ?>
505 325 <span style="<?php echo esc_attr($style); ?>" onclick="wppm_delete_project(<?php echo esc_attr($project->id) ?>)"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/trash.svg'); ?>" alt="delete"></span>
@@ -534,14 +354,14 @@
534 354 </span>
535 355 <span
536 356 <?php echo esc_html($prev_class) ?>
537 357 style="<?php echo (isset($prev_class) && esc_attr($prev_class) == 'disabled') ? 'display:none;':'display:block;'?>">
538 - <a class="wppm_pagination_prev" onclick="return wppm_load_prev_page(<?php echo esc_attr($prev_page_no) ?>,<?php echo esc_attr($page_no) ?>,'<?php echo esc_attr($sort_by)?>','<?php echo esc_attr($order) ?>','<?php echo esc_attr($is_archieved)?>');"><?php echo esc_html_e('PREV','taskbuilder');?></a>
358 + <a class="wppm_pagination_prev" onclick="return wppm_load_prev_page(<?php echo esc_attr($prev_page_no) ?>,<?php echo esc_attr($page_no) ?>,'<?php echo esc_attr($sort_by)?>','<?php echo esc_attr($order) ?>');"><?php echo esc_html_e('PREV','taskbuilder');?></a>
539 359 </span>
540 360 <span
541 361 <?php echo esc_attr($next_class) ?>
542 362 style="<?php echo (isset($next_class) && $next_class == 'disabled')?'display:none;':'display:block;'?>cursor:pointer;">
543 - <a class="wppm_pagination_next" onclick="return wppm_load_next_page('<?php echo esc_attr($next_page_no) ?>','<?php echo esc_attr($page_no) ?>','<?php echo esc_attr($sort_by)?>','<?php echo esc_attr($order) ?>','<?php echo esc_attr($is_archieved)?>');"><?php echo esc_html_e('NEXT','taskbuilder');?></a>
363 + <a class="wppm_pagination_next" onclick="return wppm_load_next_page('<?php echo esc_attr($next_page_no) ?>','<?php echo esc_attr($page_no) ?>','<?php echo esc_attr($sort_by)?>','<?php echo esc_attr($order) ?>');"><?php echo esc_html_e('NEXT','taskbuilder');?></a>
544 364 </span>
545 365 </div>
546 366 </div>
547 367 </div>
@@ -568,9 +388,9 @@
568 388 jQuery( document ).ready( function( jQuery ) {
569 389 jQuery("input[name='wppm_project_search_filter']").keypress(function(e) {
570 390 //Enter key
571 391 if (e.which == 13) {
572 - wppm_project_search_filter(<?php echo $is_archieved ?>);
392 + wppm_project_search_filter();
573 393 }
574 394 });
575 395 jQuery("#wppm_proj_name_th").hover(function(){
576 396 jQuery('#wppm_chevron_sort_up_project_name_img').show();
@@ -590,12 +410,8 @@
590 410 });
591 411 jQuery("#wppm_project_end_date_th").hover(function(){
592 412 jQuery('#wppm_chevron_sort_up_project_end_date_img').show();
593 413 jQuery('#wppm_chevron_sort_down_project_end_date_img').hide();
594 - });
595 - jQuery("#wppm_project_time_duration_th").hover(function(){
596 - jQuery('#wppm_chevron_sort_up_project_time_duration_img').show();
597 - jQuery('#wppm_chevron_sort_down_project_time_duration_img').hide();
598 414 });
599 415 jQuery(".wppm_delete_action").on("click", function(e){
600 416 e.preventDefault();
601 417 return false;