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

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

594 lines 40.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 exit; // Exit if accessed directly
4 }
5 global $wpdb,$wppmfunction,$current_user;
6 $status = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_project_statuses" );
7 $categories = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_project_categories" );
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 $wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
12 $proj_per_page = 20;
13 $page_no = (isset($_POST['page_no'])) ? intval(sanitize_text_field($_POST['page_no'])): '0';
14 $search_tag = isset($_POST['project_search']) ? sanitize_text_field($_POST['project_search']) : '';
15 $order = isset($_POST['order']) ? sanitize_text_field($_POST['order']) :"ASC";
16 $sort_by = isset($_POST['sort_by']) ? sanitize_text_field($_POST['sort_by']):"project_name";
17 $filter_by = isset($_POST['wppm_project_filter']) ? sanitize_text_field($_POST['wppm_project_filter']) : "all";
18 $current_date = wp_date('Y-m-d');
19 $wppm_pl_filter = "1=1";
20 $wppm_hide_completed_status_proj = get_option('wppm_hide_completed_status_proj');
21 $cu_id = esc_sql($current_user->ID);
22 $wppm_hide_proj_statuses_from_frontend = get_option('wppm_hide_proj_statuses_from_frontend');
23 if(!empty($wppm_hide_proj_statuses_from_frontend)){
24 $wppm_hide_proj_statuses_from_frontend = explode(",",$wppm_hide_proj_statuses_from_frontend);
25 } else {
26 $wppm_hide_proj_statuses_from_frontend = '';
27 }
28 $filters = array(
29 'sort_by' => $sort_by,
30 'order' => $order,
31 'search' => $search_tag,
32 'filter'=>$filter_by
33 );
34 $pl_filters = isset( $_COOKIE['wppm_proj_filters'] ) ? sanitize_text_field( wp_unslash( $_COOKIE['wppm_proj_filters'] ) ) : $filters;
35 if(!is_array($pl_filters)){
36 $pl_filters = json_decode($pl_filters);
37 $pl_filters_arr = (array) $pl_filters;
38 } else{
39 $pl_filters_arr = $filters;
40 }
41 $search_tag = isset($_POST['project_search']) ? sanitize_text_field($_POST['project_search']) : $pl_filters_arr['search'];
42 $order = isset($_POST['order']) ? sanitize_text_field($_POST['order']) :$pl_filters_arr['order'];
43 $sort_by = isset($_POST['sort_by']) ? sanitize_text_field($_POST['sort_by']):$pl_filters_arr['sort_by'];
44 $filter_by = isset($_POST['wppm_project_filter']) ? sanitize_text_field($_POST['wppm_project_filter']) : $pl_filters_arr['filter'];
45 if($sort_by == ""){
46 $sort_by = 'project_name';
47 }
48 $filters = array(
49 'sort_by' => $sort_by,
50 'order' => $order,
51 'search'=>$search_tag,
52 'filter'=>$filter_by
53 );
54 setcookie('wppm_proj_filters',wp_json_encode( $filters ),time() + 3600);
55
56 $allowed_sort_by = [
57 'project_name' => 'project_name',
58 'status' => 'proj_statuses.name',
59 'category' => 'proj_categories.name',
60 'start_date' => 'start_date',
61 'end_date' => 'end_date',
62 'TIMESTAMPDIFF(SECOND, start_date, end_date)'=> 'TIMESTAMPDIFF(SECOND, start_date, end_date)'
63 ];
64 // Resolve sort_by safely
65 $sort_key = isset($pl_filters_arr['sort_by'])
66 ? sanitize_text_field($pl_filters_arr['sort_by'])
67 : 'project_name';
68
69 $sort_by = $allowed_sort_by[$sort_key] ?? 'project_name';
70 $order = ( isset($pl_filters_arr['order']) && strtoupper($pl_filters_arr['order']) === 'ASC' )
71 ? 'ASC'
72 : 'DESC';
73 if($filter_by=='all'){
74 if($wppm_hide_completed_status_proj == 0){
75 $wppm_pl_filter = "status!='4'";
76 }
77 }
78 if($filter_by=='4'){
79 $wppm_pl_filter = "status='4'";
80 }elseif($filter_by=='overdue'){
81 $wppm_pl_filter = "status!='4' AND (CAST(end_date AS DATE)) < '$current_date'";
82 }elseif($filter_by == 'unassigned'){
83 $wppm_pl_filter = "users=''";
84 }elseif($filter_by == '1'){
85 $wppm_pl_filter = "status='1'";
86 }elseif($filter_by == '2'){
87 $wppm_pl_filter = "status='2'";
88 }elseif($filter_by == '3'){
89 $wppm_pl_filter = "status='3'";
90 }elseif($filter_by == 'mine'){
91 $wppm_pl_filter = "(FIND_IN_SET('$current_user->ID',users)>0)";
92 }
93
94 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))){
95 foreach($wppm_hide_proj_statuses_from_frontend as $status){
96 $wppm_pl_filter .= " AND status != '$status'";
97 }
98 }
99
100 $wppm_project_time = get_option('wppm_project_time');
101 $wppm_default_project_date = get_option('wppm_default_project_date');
102 $sort_by = apply_filters('wppm_project_list_sort_by_query',$sort_by);
103 $order = apply_filters('wppm_project_list_order_query',$order);
104 $search_tag_text = '%'.$wpdb->esc_like($search_tag).'%';
105 if(!empty($search_tag)){
106 $search_tag_text = '%'.$wpdb->esc_like($search_tag).'%';
107 $query = ("SELECT Project.*
108 FROM {$wpdb->prefix}wppm_project AS Project
109 Left join {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
110 Left join {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
111 Left join {$wpdb->base_prefix}users user ON (FIND_IN_SET(user.ID,Project.users)>0) AND (user.display_name LIKE '$search_tag_text')
112 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id
113 ");
114 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
115 $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'))";
116 }else{
117 $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')";
118 }
119 }else{
120 if($sort_by=='project_name'|| $sort_by=='start_date' || $sort_by=='end_date'){
121 $query = ( "SELECT Project.* FROM {$wpdb->prefix}wppm_project AS Project
122 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id
123 ");
124 } else{
125 $query = ( "SELECT Project.* FROM {$wpdb->prefix}wppm_project AS Project
126 Left join {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
127 Left join {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
128 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id
129 ");
130 }
131 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
132 $where = " where $wppm_pl_filter";
133 }else{
134 $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')";
135 }
136 }
137 $no_of_rows = ( "SELECT count(*) FROM ($query");
138 $no_of_rows = apply_filters('wppm_project_list_no_of_rows',$no_of_rows,$wppm_pl_filter,$search_tag);
139 $where = apply_filters('wppm_project_list_query_where',$where, $wppm_pl_filter,$search_tag);
140 $query .= $where." Group by Project.id ORDER BY $sort_by $order";
141 $no_of_rows .= $where." Group by Project.id) AS Project";
142 $totalrows = $wpdb->get_var( $no_of_rows );
143 $query = apply_filters('wppm_project_list_query',$query);
144 $limit_start=$page_no*$proj_per_page;
145 $limit="\n LIMIT ".$limit_start.",".$proj_per_page." ";
146 $query = $query.$limit;
147 $wppm_fillter = $wpdb->get_results($query);
148 $new_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(1)."'" );
149 $inp_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(2)."'" );
150 $hold_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(3)."'" );
151 $completed_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(4)."'" );
152 $new_style = (!empty($new_status_name))? "display:inline" :"display:none;";
153 $inp_status_style = (!empty($inp_status_name))? "display:inline" :"display:none;";
154 $hold_status_style = (!empty($hold_status_name))? "display:inline" :"display:none;";
155 $complete_status_style = (!empty($completed_status_name))? "display:inline" :"display:none;";
156 ?>
157 <form id="wppm_project_list_frm">
158 <div id="wppm-container">
159 <div id="wppm_project_list_container" class="wppm_bootstrap">
160 <div class="row">
161 <div class="col-sm-12" id="wppm_heading_inline">
162 <span class="wppm-heading-inline">
163 <?php echo esc_html_e('Projects','taskbuilder');?>
164 </span>
165 <?php if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_manager'|| $wppm_current_user_capability == 'wppm_admin' ){ ?>
166 <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">
167 <?php } ?>
168 </div>
169 </div>
170 <div style="display:flex;justify-content:space-between;margin-top:20px;flex-wrap: wrap;">
171 <div style="display:flex;flex-wrap: wrap;">
172 <div id="wppm_project_filter_container">
173 <div class="wppm-bulk-actions" style="margin-bottom: 10px;">
174 <button
175 id="wppm-bulk-actions-btn"
176 class="wppm-button small secondary"
177 type="button"
178 style="display:none;padding:14px;font: 13px Helvetica Neue, Arial, Helvetica, sans-serif !important"
179 data-popover="wppm-bulk-actions">
180 <?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">
181 </button>
182 <div id="wppm-bulk-actions" class="gpopover wppm-popover-menu wppm-proj-bulk-actions">
183 <div class="wppm-popover-menu-item" onclick="wppm_bulk_change_status('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_change_status' ) ); ?>');">
184 <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>
185 </div>
186 <div class="wppm-popover-menu-item" onclick="wppm_bulk_change_category('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_change_category' ) ); ?>');">
187 <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>
188 </div>
189 <div class="wppm-popover-menu-item" onclick="wppm_bulk_assign_users('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_assign_users' ) ); ?>');">
190 <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>
191 </div>
192 <div class="wppm-popover-menu-item" onclick="wppm_bulk_delete_project('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_assign_users' ) ); ?>');">
193 <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>
194 </div>
195 </div>
196 </div>
197 <div class="wppm-filter-item">
198 <label for="wppm_project_filter"> <?php echo esc_html_e('Filter','taskbuilder');?></label>
199 <select id="wppm_project_filter" name="wppm_project_filter" onchange="wppm_apply_project_filter()">
200 <option value="all"<?php echo ($filter_by == "all")? 'selected':""?>><?php echo esc_html_e('All','taskbuilder');?></option>
201 <option style="<?php echo esc_attr($new_style) ?>" value="1" <?php echo ($filter_by == "1")? 'selected':""?>><?php echo esc_html($new_status_name);?></option>
202 <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>
203 <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>
204 <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>
205 <option value="mine" <?php echo ($filter_by == "mine")? 'selected':""?>><?php echo esc_html_e('Mine','taskbuilder');?></option>
206 <option value="unassigned" <?php echo ($filter_by == "unassigned")? 'selected':""?>><?php echo esc_html_e('Unassigned','taskbuilder');?></option>
207 <option value="overdue" <?php echo ($filter_by == "overdue")? 'selected':""?>><?php echo esc_html_e('Overdue','taskbuilder');?></option>
208 </select>
209 </div>
210 <div class="wppm_display_submit">
211 <div class="wppm-filter-actions">
212 <span class="wppm-link" onclick="wppm_pl_reset_filter()"> <?php echo esc_html_e('Reset','taskbuilder');?></span>
213 </div>
214 </div>
215 </div>
216 </div>
217 <div id="wppm_project_and_task_search" style="display:flex;justify-content:flex-end;">
218 <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">
219 <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) : "" ?>">
220 </div>
221 </div>
222 <script>
223 jQuery('#wppm-more-actions-btn, #wppm-bulk-actions-btn').gpopover({width: 200});
224 </script>
225 <div class="table-responsive">
226 <table id="wppm_project_table" class="wppm_table table">
227 <tr>
228 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>" onchange="wppm_bulk_select_change()">
229 <div class="checkbox-container">
230 <input id="wppm_bulk_select_option" class="wppm-bulk-selector" type="checkbox" onchange="wppm_bulk_select_change();"/>
231 <label for="wppm_bulk_select_option"></label>
232 </div>
233 </th>
234 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
235 <span id="wppm_proj_name_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Project','taskbuilder'); ?></span>
236 <img width="16" height="16" onclick="wppm_sort_up_project_list('project_name','ASC')" style = "<?php echo ($sort_by == 'project_name' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_up_project_name_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
237 <img width="16" height="16" onclick="wppm_sort_up_project_list('project_name','DESC')" style = "<?php echo ($sort_by == 'project_name' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_down_project_name_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
238 </th>
239 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
240 <span id="wppm_project_status_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Status','taskbuilder'); ?></span>
241 <img width="16" height="16" onclick="wppm_sort_up_project_list('status','ASC')" style = "<?php echo ($sort_by == 'proj_statuses.name' && $order == 'DESC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_up_project_status_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_up_icon.svg'); ?>" alt="chevron_sort_up_icon">
242 <img width="16" height="16" onclick="wppm_sort_up_project_list('status','DESC')" style = "<?php echo ($sort_by == 'proj_statuses.name' && $order == 'ASC') ? 'display:inline': 'display:none;'?>" class="wppm_chevron_img" id="wppm_chevron_sort_down_project_status_img" class="wppm_chevron_img" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/sort_down_icon.svg'); ?>" alt="chevron_sort_down_icon">
243 </th>
244 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
245 <span id="wppm_proj_list_users_th" style="color:<?php echo esc_attr($appearance_settings['list-header-text-color'])?>"><?php echo esc_html_e('Users','taskbuilder'); ?></span></th>
246 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
247 <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>
248 <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">
249 <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">
250 </th>
251 <?php if($wppm_default_project_date==1 && $wppm_deafault_time_duration_project==0){ ?>
252 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
253 <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>
254 <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">
255 <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">
256 </th>
257 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
258 <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>
259 <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">
260 <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">
261 </th>
262 <?php }
263 if( $wppm_deafault_time_duration_project==1){ ?>
264 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
265 <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>
266 <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">
267 <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">
268 </th>
269 <?php }?>
270 <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>
271 <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>"></th>
272 </tr>
273 <tbody>
274 <?php
275 $total_projects=0;
276 $users = array();
277 if(!empty($wppm_fillter)){
278 foreach( $wppm_fillter as $project ){
279 $total_projects++;
280 $proejctdata = $wppmfunction->get_project($project->id);
281 $wppm_proj_duration = $wppmfunction->wppm_get_duration($project->start_date,$project->end_date);
282 $pstatus= esc_sql($project->status);
283 $status = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id='$pstatus'" );
284 $users = explode(",",$project->users);
285 $pid= esc_sql($project->id);
286 if(isset($project->cat_id)){
287 $pcat_id = esc_sql($project->cat_id);
288 $category = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_categories where id='$pcat_id'" );
289 }
290 if(isset($project->id)){
291 if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
292 $no_of_tasks = $wpdb->get_var("SELECT count(*) FROM {$wpdb->prefix}wppm_task WHERE project='$pid' ");
293 }else{
294 $query =("SELECT count(*) FROM
295 ( SELECT Task.*
296 FROM {$wpdb->prefix}wppm_task AS Task
297 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
298 Left join {$wpdb->prefix}wppm_project_users proj_users ON Task.project = proj_users.proj_id
299 Left join {$wpdb->prefix}wppm_project_meta proj_meta ON proj.id = proj_meta.project_id
300 where Task.project = '$pid' 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 ) OR (proj.id = proj_meta.project_id AND proj_meta.meta_key='public_project' AND proj_meta.meta_value=1) OR ( Task.project = proj.id AND proj.created_by='$cu_id')) Group by Task.id ) AS Task");
301 $no_of_tasks = $wpdb->get_var($query);
302 }
303 $no_of_tasks = apply_filters('wppm_no_of_task_proj_list_query',$no_of_tasks,$project->id);
304 }
305 if($wppm_project_time == 1){
306 $psDate = new DateTime($project->start_date);
307 $peDate = new DateTime($project->end_date);
308 if($project->start_date=='0000-00-00 00:00:00'){
309 if($wppm_date_setting=='Y-m-d H:i:s'){
310 $proj_start_date = '0000-00-00 00:00:00';
311 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
312 $proj_start_date = '00-00-0000 00:00:00';
313 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
314 $proj_start_date = '00-00-0000 00:00:00';
315 }else{
316 $proj_start_date = '0000-00-00 00:00:00';
317 }
318 }if($project->end_date=='0000-00-00 00:00:00'){
319 if($wppm_date_setting=='Y-m-d H:i:s'){
320 $proj_end_date = '0000-00-00 00:00:00';
321 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
322 $proj_end_date = '00-00-0000 00:00:00';
323 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
324 $proj_end_date = '00-00-0000 00:00:00';
325 }else{
326 $proj_end_date = '0000-00-00 00:00:00';
327 }
328 }
329 if($project->start_date!='0000-00-00 00:00:00'){
330 if(!empty($wppm_date_setting)){
331 $proj_start_date = $psDate->format($wppm_date_setting);
332 }else{
333 $proj_start_date = isset($project->start_date)? $project->start_date:"";
334 }
335 }
336 if($project->end_date!='0000-00-00 00:00:00'){
337 if(!empty($wppm_date_setting)){
338 $proj_end_date = $peDate->format($wppm_date_setting);
339 }else{
340 $proj_end_date = isset($project->end_date) ? $project->end_date: "" ;
341 }
342 }
343 } elseif($wppm_project_time == 0){
344 $psDate = new DateTime($project->start_date);
345 $peDate = new DateTime($project->end_date);
346 $proj_start_date = $psDate->format('Y-m-d');
347 $proj_end_date = $peDate->format('Y-m-d');
348 if($project->start_date=='0000-00-00 00:00:00'){
349 if($wppm_date_setting=='Y-m-d H:i:s'){
350 $proj_start_date = '0000-00-00';
351 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
352 $proj_start_date = '00-00-0000';
353 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
354 $proj_start_date = '00-00-0000';
355 }else{
356 $proj_start_date = '0000-00-00';
357 }
358 }
359 if($project->end_date=='0000-00-00 00:00:00'){
360 if($wppm_date_setting=='Y-m-d H:i:s'){
361 $proj_end_date = '0000-00-00';
362 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
363 $proj_end_date = '00-00-0000';
364 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
365 $proj_end_date = '00-00-0000';
366 }else{
367 $proj_end_date = '0000-00-00';
368 }
369
370 }if($project->start_date!='0000-00-00 00:00:00'){
371 if($wppm_date_setting=='Y-m-d H:i:s'){
372 $proj_start_date = $psDate->format('Y-m-d');
373 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
374 $proj_start_date = $psDate->format('d-m-Y');
375 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
376 $proj_start_date = $psDate->format('m-d-Y');
377 }else{
378 $proj_start_date = $psDate->format('Y-m-d');
379 }
380 }
381 if($project->end_date!='0000-00-00 00:00:00'){
382 if($wppm_date_setting=='Y-m-d H:i:s'){
383 $proj_end_date = $peDate->format('Y-m-d');
384 }elseif($wppm_date_setting=='d-m-Y H:i:s'){
385 $proj_end_date = $peDate->format('d-m-Y');
386 }elseif($wppm_date_setting=='m-d-Y H:i:s'){
387 $proj_end_date = $peDate->format('m-d-Y');
388 }else{
389 $proj_end_date = $peDate->format('Y-m-d');
390 }
391 }
392 }
393 ?>
394 <tr onclick="if(link)wppm_open_project(<?php echo esc_attr($project->id) ?>)">
395 <td class="bulk-selector" onmouseover="link=false;" onmouseout="link=true;">
396 <div class="wppm-pl-item-selector">
397 <div class="checkbox-container">
398 <input id="wppm_bulk_select_<?php echo esc_attr($project->id) ?>" class="wppm-bulk-select" type="checkbox" onchange="wppm_bulk_item_select_change();" value="<?php echo esc_attr( $project->id ); ?>"/>
399 <label for="wppm_bulk_select_<?php echo esc_attr($project->id) ?>"></label>
400 </div>
401 </div>
402 </td>
403 <td onmouseover="link=true;"><?php echo esc_html($project->project_name) ?></td>
404 <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>
405 <td onmouseover="link=true;">
406 <?php
407 $i=0;
408 if(!empty(array_filter($users))){
409 foreach($users as $user){
410 $i++;
411 if( $i <= 4 ){
412 $user_info = get_user_by('id', $user );
413 if(!empty($user_info)){
414 ?>
415 <a href="#" title="<?php echo esc_html($user_info->display_name) ?>">
416 <?php echo get_avatar($user_info->ID, 25, "mysteryman");?>
417 </a> <?php
418 }
419 }
420 }
421 } else{
422 _e('None','wp_projects');
423 }
424 if($i > 4){
425 ?>
426 <a href="#" class="wppm_avatar">
427 <span id="wppm_avatar" style="background-color:black;" class="avatar">+<?php echo esc_html($i-4) ?></span>
428 </a>
429 <?php } ?>
430 </td>
431 <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($category) ? esc_html($category): "" ?></td>
432 <?php if($wppm_default_project_date==1 && $wppm_deafault_time_duration_project==0){ ?>
433 <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($proj_start_date) ? esc_html($proj_start_date): "" ?></td>
434 <?php
435 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')) {
436 $style = "color:#FF0000";
437 } else {
438 $style = "color:#2C3E50";
439 } ?>
440 <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>
441 <?php } ?>
442 <?php if($wppm_deafault_time_duration_project==1){ ?>
443 <?php
444 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')) {
445 $style = "color:#FF0000";
446 } else {
447 $style = "color:#2C3E50";
448 } ?>
449 <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>
450 <?php } ?>
451 <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($no_of_tasks) ? esc_html($no_of_tasks):"" ?></td>
452 <td onmouseover="link=true;" class="wppm_delete_action">
453 <?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"; ?>
454 <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>
455 <?php ?>
456 </td>
457 </tr>
458 <?php
459 }
460 }
461 ?>
462 </tbody>
463 </table>
464 <?php
465 $total_pages=ceil($totalrows/$proj_per_page);
466 $current_page=$page_no+1;
467 $prev_page_no=$current_page-1;
468 $prev_class=($prev_page_no==0)?'disabled':'';
469 $next_page_no=($total_pages==$current_page)? $current_page-1:$current_page;
470 $next_class=($total_pages==$current_page)?'disabled':'';
471 ?>
472 <div class="wppm_project_result" style="<?php echo esc_attr($total_pages==0)? '':'display: none;';?>"><?php echo esc_html_e('Your search request returned no results.','taskbuilder');?></div>
473 <hr style="<?php echo esc_attr($total_pages==0)? '':'display: none;';?>">
474 </div>
475 <div class="row wppm_proj_pagination_container">
476 <div class="col-sm-4">
477 <?php echo esc_html_e('Total:','taskbuilder'); ?>&nbsp;<?php echo esc_html($total_projects) ?>&nbsp;<?php echo esc_html_e('of','taskbuilder') ?>&nbsp;<?php echo esc_html($totalrows) ?>&nbsp;<?php echo esc_html_e('Projects','taskbuilder')?>
478 </div>
479 <div class="col-sm-4">
480 <div class="wppm_proj_pagination" style="<?php echo esc_attr($total_pages==0)? "display:none;":"display:flex;"?>">
481 <span class="wppm-pagination-txt">
482 <span><?php echo esc_html($current_page); ?>&nbsp;<?php echo esc_html_e('of','taskbuilder');?>&nbsp;<?php echo esc_html($total_pages); ?>&nbsp;<?php echo esc_html_e('Page','taskbuilder'); ?></span>
483 </span>
484 <span
485 <?php echo esc_html($prev_class) ?>
486 style="<?php echo (isset($prev_class) && esc_attr($prev_class) == 'disabled') ? 'display:none;':'display:block;'?>">
487 <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>
488 </span>
489 <span
490 <?php echo esc_attr($next_class) ?>
491 style="<?php echo (isset($next_class) && $next_class == 'disabled')?'display:none;':'display:block;'?>cursor:pointer;">
492 <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>
493 </span>
494 </div>
495 </div>
496 </div>
497 </div>
498 </div>
499 </form>
500 <style>
501 #wppm_project_table tr:nth-child(even) td{
502 background-color:<?php echo esc_attr($appearance_settings['list-item-even-background-color'])?>!important;
503 color:<?php echo esc_attr($appearance_settings['list-item-even-text-color'])?>!important;
504 }
505 #wppm_project_table tr:nth-child(odd) td{
506 background-color:<?php echo esc_attr($appearance_settings['list-item-odd-background-color'])?>!important;
507 color:<?php echo esc_attr($appearance_settings['list-item-odd-text-color'])?>!important;
508 }
509 #wppm_project_table tr:hover td{
510 background-color:<?php echo esc_attr($appearance_settings['list-item-hover-background-color'])?>!important;
511 }
512 #wppm_project_table tr:hover td{
513 color: <?php echo esc_attr($appearance_settings['list-item-hover-text-color'])?>!important;
514 }
515 </style>
516 <script type="text/javascript">
517 jQuery( document ).ready( function( jQuery ) {
518 jQuery("input[name='wppm_project_search_filter']").keypress(function(e) {
519 //Enter key
520 if (e.which == 13) {
521 wppm_project_search_filter();
522 }
523 });
524 jQuery("#wppm_proj_name_th").hover(function(){
525 jQuery('#wppm_chevron_sort_up_project_name_img').show();
526 jQuery('#wppm_chevron_sort_down_project_name_img').hide();
527 });
528 jQuery("#wppm_project_status_th").hover(function(){
529 jQuery('#wppm_chevron_sort_up_project_status_img').show();
530 jQuery('#wppm_chevron_sort_down_project_status_img').hide();
531 });
532 jQuery("#wppm_project_category_th").hover(function(){
533 jQuery('#wppm_chevron_sort_up_project_cat_img').show();
534 jQuery('#wppm_chevron_sort_down_project_cat_img').hide();
535 });
536 jQuery("#wppm_project_start_date_th").hover(function(){
537 jQuery('#wppm_chevron_sort_up_project_start_date_img').show();
538 jQuery('#wppm_chevron_sort_down_project_start_date_img').hide();
539 });
540 jQuery("#wppm_project_end_date_th").hover(function(){
541 jQuery('#wppm_chevron_sort_up_project_end_date_img').show();
542 jQuery('#wppm_chevron_sort_down_project_end_date_img').hide();
543 });
544 jQuery("#wppm_project_time_duration_th").hover(function(){
545 jQuery('#wppm_chevron_sort_up_project_time_duration_img').show();
546 jQuery('#wppm_chevron_sort_down_project_time_duration_img').hide();
547 });
548 jQuery(".wppm_delete_action").on("click", function(e){
549 e.preventDefault();
550 return false;
551 });
552
553 jQuery('#wppm_project_list_frm').on('submit', function (e) {
554 var dataform = new FormData(jQuery('#wppm_project_list_frm')[0]);
555 jQuery.ajax({
556 url: wppm_admin.ajax_url,
557 type: 'POST',
558 data: dataform,
559 processData: false,
560 contentType: false,
561 success: function () {
562 alert('form was submitted');
563 }
564 });
565 });
566 });
567 /**
568 * Bulk item selector change
569 */
570 function wppm_bulk_item_select_change() {
571 jQuery("#wppm-bulk-actions-btn").show();
572 var items = jQuery(".wppm-bulk-select:checked");
573 var checked = items.length === 0 ? false : true;
574 if(checked){
575 jQuery(".wppm-bulk-selector").prop("checked", checked);
576 }else{
577 jQuery("#wppm-bulk-actions-btn").hide();
578 jQuery(".wppm-bulk-selector").prop("checked", false);
579 }
580 }
581 </script>
582 <?php
583 add_action('wp_footer', 'wppm_page_inline_script', 999999999999999999);
584 do_action('wppm_after_shortcode_loaded');
585 if(!function_exists('wppm_page_inline_script')) {
586 function wppm_page_inline_script() { ?>
587 <script type="text/javascript">
588 jQuery( document ).ready( function( jQuery ) {
589 wppm_get_project_list();
590 });
591 </script>
592 <?php }
593 }
594 ?>