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