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

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