PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 4.0.7
Taskbuilder – Project Management & Task Management Tool With Kanban Board v4.0.7
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 4.0.7, at includes/admin/projects/projects_list.php

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