PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 6.0.7
Taskbuilder – Project Management & Task Management Tool With Kanban Board v6.0.7
6.0.7 6.0.6 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 All 59 releases
← All changes | includes/admin/projects/projects_list.php +782 -149 1.0.0 → 6.0.7 View file →
@@ -4,58 +4,264 @@
4 4 }
5 5 global $wpdb,$wppmfunction,$current_user;
6 6 $status = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_project_statuses" );
7 7 $categories = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wppm_project_categories" );
8 +$pb_users = get_users(array(
9 + 'orderby' => 'display_name',
10 + 'order' => 'ASC'
11 +));
12 +$assigned_project_users = $wpdb->get_col( "SELECT DISTINCT users FROM {$wpdb->prefix}wppm_project WHERE users != ''" );
13 +$all_assigned_proj_users = array();
14 +foreach ( $assigned_project_users as $row ) {
15 + foreach ( explode( ',', $row ) as $uid ) {
16 + $uid = trim( $uid );
17 + if ( $uid !== '' ) {
18 + $all_assigned_proj_users[] = $uid;
19 + }
20 + }
21 +}
22 +$all_assigned_proj_users = array_unique( $all_assigned_proj_users );
23 +$appearance_settings = wp_parse_args(
24 + get_option( "wppm-ap-project-list", array() ),
25 + array(
26 + 'list-header-button-background-color' => '#0052CC',
27 + 'list-header-button-hover-color' => '#0065ff',
28 + 'list-header-button-text-color' => '#fff',
29 + )
30 +);
31 +$wppm_date_setting = get_option('wppm_date_setting');
32 +$wppm_deafault_time_duration_project = get_option('wppm_display_time_duration_project');
33 +$wppm_current_user_capability = get_user_meta( $current_user->ID, 'wppm_capability', true );
34 +$wppm_can_create_project = ($current_user->has_cap('manage_options')) || $wppm_current_user_capability == 'wppm_manager'|| $wppm_current_user_capability == 'wppm_admin';
35 +$wppm_can_create_project = apply_filters( 'wppm_can_create_project', $wppm_can_create_project, $current_user->ID );
8 36 $proj_per_page = 20;
9 37 $page_no = (isset($_POST['page_no'])) ? intval(sanitize_text_field($_POST['page_no'])): '0';
38 +$page = isset($_POST['page']) ? sanitize_text_field(wp_unslash($_POST['page'])):"";
10 39 $search_tag = isset($_POST['project_search']) ? sanitize_text_field($_POST['project_search']) : '';
11 -if(!empty($search_tag)){
12 - $search_tag_text = '%'.$search_tag.'%';
13 - if($current_user->has_cap('manage_options')){
14 - $query = ("SELECT Project.*
15 - FROM {$wpdb->prefix}wppm_project AS Project
16 - Left join {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
17 - Left join {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
18 - Left join {$wpdb->base_prefix}users user ON (FIND_IN_SET(user.ID,Project.users)>0) AND (user.display_name LIKE '$search_tag_text')
19 - where 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')
20 - Group by Project.id");
21 - $no_of_rows = ("SELECT count(*) FROM
22 - (SELECT Project.*
23 - FROM {$wpdb->prefix}wppm_project AS Project
24 - Left join {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
25 - Left join {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
26 - Left join {$wpdb->base_prefix}users user ON (FIND_IN_SET(user.ID,Project.users)>0) AND (user.display_name LIKE '$search_tag_text')
27 - where 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') Group by Project.id) AS Project" );
28 - }else{
29 - $query = ("SELECT Project.*
30 - FROM {$wpdb->prefix}wppm_project AS Project
31 - Left join {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
32 - Left join {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
33 - Left join {$wpdb->base_prefix}users user ON (FIND_IN_SET(user.ID,Project.users)>0) AND (user.display_name LIKE '$search_tag_text')
34 - where (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)
35 - Group by Project.id");
36 - $no_of_rows = ("SELECT count(*) FROM
37 - (SELECT Project.*
38 - FROM {$wpdb->prefix}wppm_project AS Project
39 - Left join {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
40 - Left join {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
41 - Left join {$wpdb->base_prefix}users user ON (FIND_IN_SET(user.ID,Project.users)>0) AND (user.display_name LIKE '$search_tag_text')
42 - where (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) Group by Project.id) AS Project" );
40 +$order = isset($_POST['order']) ? sanitize_text_field($_POST['order']) :"ASC";
41 +$sort_by = isset($_POST['sort_by']) ? sanitize_text_field($_POST['sort_by']):"project_name";
42 +$filter_by = isset($_POST['wppm_project_filter']) ? sanitize_text_field($_POST['wppm_project_filter']) : "all";
43 +$is_archieved = !empty($_POST['is_archieved']) ? 1 : 0;
44 +if ( isset( $_POST['filters'] ) ) {
45 + if ( is_string( $_POST['filters'] ) ) {
46 + $advanced_filter = json_decode( stripslashes( sanitize_text_field( wp_unslash( $_POST['filters'] ) ) ), true );
47 + } elseif ( is_array( $_POST['filters'] ) ) {
48 + $raw_filters = wp_unslash( $_POST['filters'] );
49 + $advanced_filter = array(
50 + 'created_by' => array_map( 'absint', (array) ( $raw_filters['created_by'] ?? array() ) ),
51 + 'assigned' => array_map( 'absint', (array) ( $raw_filters['assigned'] ?? array() ) ),
52 + 'category' => array_map( 'absint', (array) ( $raw_filters['category'] ?? array() ) ),
53 + 'start_date' => sanitize_text_field( $raw_filters['start_date'] ?? '' ),
54 + 'end_date' => sanitize_text_field( $raw_filters['end_date'] ?? '' ),
55 + );
56 + } else {
57 + $advanced_filter = array();
43 58 }
44 -}else{
45 - if($current_user->has_cap('manage_options')){
46 - $query = ( "SELECT * FROM {$wpdb->prefix}wppm_project" );
47 - $no_of_rows = ( "SELECT count(*) FROM {$wpdb->prefix}wppm_project" );
48 - }else{
49 - $query = ( "SELECT * FROM {$wpdb->prefix}wppm_project
50 - where (FIND_IN_SET('$current_user->ID',users)>0)
51 - ");
52 - $no_of_rows = ( "SELECT count(*) FROM {$wpdb->prefix}wppm_project
53 - where (FIND_IN_SET('$current_user->ID',users)>0)
54 - ");
59 +} elseif ( ! empty( $_COOKIE['tb_proj_list_filters'] ) ) {
60 + $advanced_filter = json_decode( stripslashes( sanitize_text_field( wp_unslash( $_COOKIE['tb_proj_list_filters'] ) ) ), true );
61 +} else {
62 + $advanced_filter = array();
63 +}
64 +if ( ! is_array( $advanced_filter ) ) {
65 + $advanced_filter = array();
66 +}
67 +$current_date = wp_date('Y-m-d');
68 +$wppm_pl_filter = "1=1";
69 +$wppm_hide_completed_status_proj = get_option('wppm_hide_completed_status_proj');
70 +$cu_id = esc_sql($current_user->ID);
71 +$wppm_hide_proj_statuses_from_frontend = get_option('wppm_hide_proj_statuses_from_frontend');
72 +if(!empty($wppm_hide_proj_statuses_from_frontend)){
73 + $wppm_hide_proj_statuses_from_frontend = explode(",",$wppm_hide_proj_statuses_from_frontend);
74 +} else {
75 + $wppm_hide_proj_statuses_from_frontend = '';
76 +}
77 +$is_admin = ( $wppm_current_user_capability === 'wppm_admin' || current_user_can('manage_options') ) ? 1 : 0;
78 +$filters = array(
79 + 'sort_by' => $sort_by,
80 + 'order' => $order,
81 + 'search' => $search_tag,
82 + 'filter'=>$filter_by
83 +);
84 +$pl_filters = isset( $_COOKIE['wppm_proj_filters'] ) ? sanitize_text_field( wp_unslash( $_COOKIE['wppm_proj_filters'] ) ) : $filters;
85 +if(!is_array($pl_filters)){
86 + $pl_filters = json_decode($pl_filters);
87 + $pl_filters_arr = (array) $pl_filters;
88 +} else{
89 + $pl_filters_arr = $filters;
90 +}
91 +$search_tag = isset($_POST['project_search']) ? sanitize_text_field($_POST['project_search']) : $pl_filters_arr['search'];
92 +$order = isset($_POST['order']) ? sanitize_text_field($_POST['order']) :$pl_filters_arr['order'];
93 +$sort_by = isset($_POST['sort_by']) ? sanitize_text_field($_POST['sort_by']):$pl_filters_arr['sort_by'];
94 +$filter_by = isset($_POST['wppm_project_filter']) ? sanitize_text_field($_POST['wppm_project_filter']) : $pl_filters_arr['filter'];
95 +if($sort_by == ""){
96 + $sort_by = 'project_name';
97 +}
98 +$filters = array(
99 + 'sort_by' => $sort_by,
100 + 'order' => $order,
101 + 'search'=>$search_tag,
102 + 'filter'=>$filter_by
103 +);
104 +setcookie('wppm_proj_filters',wp_json_encode( $filters ),time() + 3600);
105 +
106 +$allowed_sort_by = [
107 + 'project_name' => 'project_name',
108 + 'status' => 'proj_statuses.name',
109 + 'category' => 'proj_categories.name',
110 + 'start_date' => 'start_date',
111 + 'end_date' => 'end_date',
112 + 'TIMESTAMPDIFF(SECOND, start_date, end_date)'=> 'TIMESTAMPDIFF(SECOND, start_date, end_date)'
113 +];
114 +// Resolve sort_by safely
115 +$sort_key = isset($pl_filters_arr['sort_by'])
116 + ? sanitize_text_field($pl_filters_arr['sort_by'])
117 + : 'project_name';
118 +
119 +$sort_by = $allowed_sort_by[$sort_key] ?? 'project_name';
120 +$order = ( isset($pl_filters_arr['order']) && strtoupper($pl_filters_arr['order']) === 'ASC' )
121 + ? 'ASC'
122 + : 'DESC';
123 +if($filter_by=='all'){
124 + if($wppm_hide_completed_status_proj == 0){
125 + $wppm_pl_filter = "status!='4'";
55 126 }
56 127 }
57 -$no_of_rows = apply_filters('wppm_project_list_no_of_rows',$no_of_rows);
128 +if($filter_by=='4'){
129 + $wppm_pl_filter = "status='4'";
130 +}elseif($filter_by=='overdue'){
131 + $wppm_pl_filter = "status!='4' AND (CAST(end_date AS DATE)) < '$current_date'";
132 +}elseif($filter_by == 'unassigned'){
133 + $wppm_pl_filter = "users=''";
134 +}elseif($filter_by == '1'){
135 + $wppm_pl_filter = "status='1'";
136 +}elseif($filter_by == '2'){
137 + $wppm_pl_filter = "status='2'";
138 +}elseif($filter_by == '3'){
139 + $wppm_pl_filter = "status='3'";
140 +}elseif($filter_by == 'mine'){
141 + $wppm_pl_filter = "(FIND_IN_SET('$current_user->ID',users)>0)";
142 +}elseif($filter_by == 'active'){
143 + $wppm_pl_filter = " (FIND_IN_SET('$current_user->ID', users) OR created_by = '$current_user->ID' OR $is_admin = 1 )
144 + AND status != 4";
145 +}
146 +
147 +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))){
148 + foreach($wppm_hide_proj_statuses_from_frontend as $status){
149 + $wppm_pl_filter .= " AND status != '$status'";
150 + }
151 +}
152 +$advanced_conditions = array();
153 +if ( ! empty( $advanced_filter['created_by'] ) ) {
154 + $created_by_ids = array_map( 'intval', (array) $advanced_filter['created_by'] );
155 + $advanced_conditions[] = "created_by IN (" . implode( ',', $created_by_ids ) . ")";
156 +}
157 +if ( ! empty( $advanced_filter['assigned'] ) ) {
158 + $assigned_ids = array_map( 'intval', (array) $advanced_filter['assigned'] );
159 + $assigned_sql = array();
160 + foreach ( $assigned_ids as $id ) {
161 + $assigned_sql[] = "FIND_IN_SET('$id', users)";
162 + }
163 + $advanced_conditions[] = "(" . implode( ' OR ', $assigned_sql ) . ")";
164 +}
165 +if ( ! empty( $advanced_filter['category'] ) ) {
166 + $category_ids = array_map( 'intval', (array) $advanced_filter['category'] );
167 + $advanced_conditions[] = "cat_id IN (" . implode( ',', $category_ids ) . ")";
168 +}
169 +if ( ! empty( $advanced_filter['start_date'] ) && preg_match( '/^\d{4}-\d{2}-\d{2}$/', $advanced_filter['start_date'] ) ) {
170 + $advanced_conditions[] = $wpdb->prepare( "(CAST(start_date AS DATE)) >= %s", $advanced_filter['start_date'] );
171 +}
172 +if ( ! empty( $advanced_filter['end_date'] ) && preg_match( '/^\d{4}-\d{2}-\d{2}$/', $advanced_filter['end_date'] ) ) {
173 + $advanced_conditions[] = $wpdb->prepare( "(CAST(end_date AS DATE)) <= %s", $advanced_filter['end_date'] );
174 +}
175 +if ( ! empty( $advanced_conditions ) ) {
176 + $wppm_pl_filter .= " AND " . implode( " AND ", $advanced_conditions );
177 +}
178 +$wppm_project_time = get_option('wppm_project_time');
179 +$wppm_default_project_date = get_option('wppm_default_project_date');
180 +$sort_by = apply_filters('wppm_project_list_sort_by_query',$sort_by);
181 +$order = apply_filters('wppm_project_list_order_query',$order);
182 +$search_tag_text = '%'.$wpdb->esc_like($search_tag).'%';
183 +if (!empty($search_tag)) {
184 + $search_tag_text = '%' . $wpdb->esc_like($search_tag) . '%';
185 + $query = "SELECT Project.*
186 + FROM {$wpdb->prefix}wppm_project AS Project
187 + LEFT JOIN {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
188 + LEFT JOIN {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
189 + LEFT JOIN {$wpdb->base_prefix}users user ON FIND_IN_SET(user.ID, Project.users) > 0
190 + LEFT JOIN {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id";
191 + // SAFE search condition
192 + $search_sql = $wpdb->prepare(
193 + "(Project.project_name LIKE %s
194 + OR proj_statuses.name LIKE %s
195 + OR proj_categories.name LIKE %s
196 + OR user.display_name LIKE %s)",
197 + $search_tag_text,
198 + $search_tag_text,
199 + $search_tag_text,
200 + $search_tag_text
201 + );
202 + if ($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin') {
203 + // ✅ Admin (safe)
204 + $where = " WHERE $wppm_pl_filter AND $search_sql";
205 + } else {
206 + // ✅ Non-admin (safe)
207 + $where = $wpdb->prepare(
208 + " WHERE $wppm_pl_filter
209 + AND $search_sql
210 + AND (
211 + FIND_IN_SET(%d, Project.users) > 0
212 + OR (
213 + proj_meta.meta_key = 'public_project'
214 + AND proj_meta.meta_value = 1
215 + )
216 + OR Project.created_by = %d
217 + )",
218 + $current_user->ID,
219 + $cu_id
220 + );
221 + }
222 +} else {
223 + if ($sort_by == 'project_name' || $sort_by == 'start_date' || $sort_by == 'end_date') {
224 + $query = "SELECT Project.*
225 + FROM {$wpdb->prefix}wppm_project AS Project
226 + LEFT JOIN {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id";
227 + } else {
228 + $query = "SELECT Project.*
229 + FROM {$wpdb->prefix}wppm_project AS Project
230 + LEFT JOIN {$wpdb->prefix}wppm_project_statuses proj_statuses ON Project.status = proj_statuses.id
231 + LEFT JOIN {$wpdb->prefix}wppm_project_categories proj_categories ON Project.cat_id = proj_categories.id
232 + LEFT JOIN {$wpdb->prefix}wppm_project_meta proj_meta ON Project.id = proj_meta.project_id";
233 + }
234 + if ($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin') {
235 + $where = " WHERE $wppm_pl_filter";
236 + } else {
237 + $where = $wpdb->prepare(
238 + " WHERE $wppm_pl_filter
239 + AND (
240 + FIND_IN_SET(%d, Project.users) > 0
241 + OR (
242 + proj_meta.meta_key = 'public_project'
243 + AND proj_meta.meta_value = 1
244 + )
245 + OR Project.created_by = %d
246 + )",
247 + $current_user->ID,
248 + $cu_id
249 + );
250 + }
251 +}
252 +$archived_where = '';
253 +if ( isset( $is_archieved ) && $is_archieved === 1 ) {
254 + $archived_where = ' AND Project.is_archived = 1';
255 +} else {
256 + $archived_where = ' AND Project.is_archived = 0';
257 +}
258 +$where .= $archived_where;
259 +$no_of_rows = ( "SELECT count(*) FROM ($query");
260 +$no_of_rows = apply_filters('wppm_project_list_no_of_rows',$no_of_rows,$wppm_pl_filter,$search_tag);
261 +$where = apply_filters('wppm_project_list_query_where',$where, $wppm_pl_filter,$search_tag);
262 +$query .= $where." Group by Project.id ORDER BY $sort_by $order";
263 +$no_of_rows .= $where." Group by Project.id) AS Project";
58 264 $totalrows = $wpdb->get_var( $no_of_rows );
59 265 $query = apply_filters('wppm_project_list_query',$query);
60 266 $limit_start=$page_no*$proj_per_page;
61 267 $limit="\n LIMIT ".$limit_start.",".$proj_per_page." ";
@@ -60,38 +266,193 @@
60 266 $limit_start=$page_no*$proj_per_page;
61 267 $limit="\n LIMIT ".$limit_start.",".$proj_per_page." ";
62 268 $query = $query.$limit;
63 269 $wppm_fillter = $wpdb->get_results($query);
270 +$new_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(1)."'" );
271 +$inp_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(2)."'" );
272 +$hold_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(3)."'" );
273 +$completed_status_name = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_statuses where id='".esc_sql(4)."'" );
274 +$new_style = (!empty($new_status_name))? "display:inline" :"display:none;";
275 +$inp_status_style = (!empty($inp_status_name))? "display:inline" :"display:none;";
276 +$hold_status_style = (!empty($hold_status_name))? "display:inline" :"display:none;";
277 +$complete_status_style = (!empty($completed_status_name))? "display:inline" :"display:none;";
64 278 ?>
65 279 <form id="wppm_project_list_frm">
66 - <div id="wppm_project_list_container" class="wppm_bootstrap">
67 - <div class="row">
68 - <div class="col-sm-6" id="wppm_heading_inline">
69 - <span class="wppm-heading-inline">
70 - <?php echo esc_html_e('Projects','taskbuilder');?>
71 - </span>
72 - <?php if($current_user->has_cap('manage_options')){ ?>
73 - <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">
74 - <?php } ?>
280 + <div id="wppm-container">
281 + <div id="wppm_project_list_container" class="wppm_bootstrap">
282 + <div class="row">
283 + <div class="col-sm-12" id="wppm_heading_inline">
284 + <span class="wppm-heading-inline">
285 + <?php echo !empty($is_archieved) ? esc_html__('Archived Projects', 'taskbuilder') : esc_html__('Projects', 'taskbuilder'); ?>
286 + </span>
287 + <?php if($wppm_can_create_project){ ?>
288 + <span class="wppm-add-new-btn btn-primary" id="wppm_add_new_project_btn" onclick="wppm_add_new_project()" style="background-color:<?php echo esc_attr($appearance_settings['list-header-button-background-color'])?>;color:<?php echo esc_attr($appearance_settings['list-header-button-text-color'])?>;"><span style="margin-right:5px;"><img id="wppm_add_new_project_icon" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/plus_icon.svg'); ?>" alt="plus_icon"></span><span><?php echo esc_html_e('Add New','taskbuilder');?></span></span>
289 + <?php } ?>
290 + <span class="wppm-add-new-btn btn-primary" id="wppm_project_list" onclick="wppm_get_project_list()" style="background-color:<?php echo esc_attr($appearance_settings['list-header-button-background-color'])?>;color:<?php echo esc_attr($appearance_settings['list-header-button-text-color'])?>;"><span style="margin-right:5px;"><img id ="wppm_project_list_icon" src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/list-symbol.svg'); ?>" alt="list-symbol"></span><span><?php echo esc_html_e('Project List','taskbuilder');?></span></span>
291 + <?php if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_manager'|| $wppm_current_user_capability == 'wppm_admin' ){ ?>
292 + <span class="wppm-add-new-btn btn-primary"" id="wppm_archieve_project_btn" title="Archive Project" onclick="wppm_archieve_project_list()" style="background-color:<?php echo esc_attr($appearance_settings['list-header-button-background-color'])?>;color:<?php echo esc_attr($appearance_settings['list-header-button-text-color'])?>;"><img src="<?php echo esc_url( WPPM_PLUGIN_URL . 'asset/images/archive_project.svg'); ?>" alt="archive"><span style="margin-left:5px;"><span><?php echo esc_html_e('Archive Project','taskbuilder');?></span></span>
293 + <?php } ?>
294 + </div>
75 295 </div>
76 - <div id="wppm_project_and_task_search" class="col-sm-6">
77 - <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">
78 - <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) : "" ?>">
296 + <div style="display:flex;justify-content:space-between;margin-top:20px;flex-wrap: wrap;">
297 + <div style="display:flex;flex-wrap: wrap;">
298 + <div id="wppm_project_filter_container">
299 + <div class="wppm-bulk-actions" style="margin-bottom: 10px;">
300 + <button
301 + id="wppm-bulk-actions-btn"
302 + class="wppm-button small secondary"
303 + type="button"
304 + style="display:none;padding:14px;font: 13px Helvetica Neue, Arial, Helvetica, sans-serif !important"
305 + data-popover="wppm-bulk-actions">
306 + <?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">
307 + </button>
308 + <div id="wppm-bulk-actions" class="gpopover wppm-popover-menu wppm-proj-bulk-actions">
309 + <div class="wppm-popover-menu-item" onclick="wppm_bulk_change_status('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_change_status' ) ); ?>');">
310 + <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>
311 + </div>
312 + <div class="wppm-popover-menu-item" onclick="wppm_bulk_change_category('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_change_category' ) ); ?>');">
313 + <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>
314 + </div>
315 + <div class="wppm-popover-menu-item" onclick="wppm_bulk_assign_users('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_assign_users' ) ); ?>');">
316 + <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>
317 + </div>
318 + <div class="wppm-popover-menu-item" onclick="wppm_bulk_delete_project('<?php echo esc_attr( wp_create_nonce( 'wppm_bulk_assign_users' ) ); ?>');">
319 + <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>
320 + </div>
321 + </div>
322 + </div>
323 + <div class="wppm-filter-item">
324 + <label for="wppm_project_filter"> <?php echo esc_html_e('Filter','taskbuilder');?></label>
325 + <select id="wppm_project_filter" name="wppm_project_filter" onchange="wppm_apply_project_filter(<?php echo $is_archieved ?>)">
326 + <option value="all"<?php echo ($filter_by == "all")? 'selected':""?>><?php echo esc_html_e('All','taskbuilder');?></option>
327 + <option style="<?php echo esc_attr($new_style) ?>" value="1" <?php echo ($filter_by == "1")? 'selected':""?>><?php echo esc_html($new_status_name);?></option>
328 + <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>
329 + <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>
330 + <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>
331 + <option value="mine" <?php echo ($filter_by == "mine")? 'selected':""?>><?php echo esc_html_e('Mine','taskbuilder');?></option>
332 + <option value="unassigned" <?php echo ($filter_by == "unassigned")? 'selected':""?>><?php echo esc_html_e('Unassigned','taskbuilder');?></option>
333 + <option value="overdue" <?php echo ($filter_by == "overdue")? 'selected':""?>><?php echo esc_html_e('Overdue','taskbuilder');?></option>
334 + </select>
335 + </div>
336 + <div class="tb-filters" style="display:flex;margin-left: 4px;">
337 + <div class="tb-filter-bar">
338 + <span id="tb-advanced-toggle" class="tb-btn" style="margin: 10px 10px 10px 2px !important;">
339 + <?php echo esc_html_e('⚙️ Filters', 'taskbuilder'); ?>
340 + </span>
341 + <div id="tb-active-filters" class="tb-chips"></div>
342 + <div id="tb-advanced-panel" class="tb-popover">
343 + <div class="tb-mobile-header">
344 + <span><?php echo esc_html_e('Filters', 'taskbuilder'); ?></span>
345 + <button type="button" id="tb-close-filters">✕</button>
346 + </div>
347 + <div class="tb-arrow"></div>
348 + <div class="tb-section">
349 + <h4> <?php echo esc_html_e('Created By', 'taskbuilder'); ?></h4>
350 + <select id="tb-created-by" class="form-control" multiple>
351 + <?php if(!empty($pb_users)){ foreach($pb_users as $pb_user): ?>
352 + <option value="<?php echo esc_attr($pb_user->ID); ?>"><?php echo esc_html($pb_user->display_name); ?></option>
353 + <?php endforeach; } ?>
354 + </select>
355 + <h4> <?php echo esc_html_e('Co-workers', 'taskbuilder'); ?></h4>
356 + <select id="tb-assigned" class="form-control" multiple>
357 + <?php
358 + if(!empty($all_assigned_proj_users)){
359 + foreach($all_assigned_proj_users as $auid){
360 + $auser = get_userdata($auid);
361 + if($auser){ ?>
362 + <option value="<?php echo esc_attr($auid); ?>"><?php echo esc_html($auser->display_name); ?></option>
363 + <?php }
364 + }
365 + }
366 + ?>
367 + </select>
368 + </div>
369 + <div class="tb-section">
370 + <h4> <?php echo esc_html_e('Category', 'taskbuilder'); ?></h4>
371 + <select id="tb-category" class="form-control" multiple>
372 + <?php if(!empty($categories)){ foreach($categories as $pb_cat){ ?>
373 + <option value="<?php echo esc_attr($pb_cat->id); ?>"><?php echo esc_html($pb_cat->name); ?></option>
374 + <?php } } ?>
375 + </select>
376 + </div>
377 + <div class="tb-section">
378 + <h4> <?php echo esc_html_e('Date', 'taskbuilder'); ?></h4>
379 + <input type="date" class="form-control" id="tb-start-date">
380 + <input type="date" class="form-control" id="tb-end-date">
381 + </div>
382 + <div id="tb-filter-actions">
383 + <button class="wppm-submit-btn" id="tb-apply-filter" type="button"><?php echo esc_html_e('Apply', 'taskbuilder'); ?></button>
384 + <button class="wppm_reset_btn" id="tb-reset-filter" type="button"><?php echo esc_html_e('Reset', 'taskbuilder'); ?></button>
385 + </div>
386 + </div>
387 + </div>
388 + <div id="tb-backdrop"></div>
389 + </div>
390 + <div class="wppm_display_submit">
391 + <div class="wppm-filter-actions">
392 + <span class="wppm-link" onclick="wppm_pl_reset_filter(<?php echo $is_archieved ?>)"> <?php echo esc_html_e('Reset','taskbuilder');?></span>
393 + </div>
394 + </div>
395 + </div>
396 + </div>
397 + <div id="wppm_project_and_task_search" style="display:flex;justify-content:flex-end;">
398 + <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">
399 + <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) : "" ?>">
400 + </div>
79 401 </div>
80 - </div>
81 - <div class="table-responsive">
82 - <table id="wppm_project_table" class="wppm_table table">
83 - <tr>
84 - <th class="wppm_table_header"><?php echo esc_html_e('Project','taskbuilder'); ?></th>
85 - <th class="wppm_table_header"><?php echo esc_html_e('Status','taskbuilder'); ?></th>
86 - <th class="wppm_table_header"><?php echo esc_html_e('Users','taskbuilder'); ?></th>
87 - <th class="wppm_table_header"><?php echo esc_html_e('Category','taskbuilder'); ?></th>
88 - <th class="wppm_table_header" ><?php echo esc_html_e('Start Date','taskbuilder'); ?></th>
89 - <th class="wppm_table_header"><?php echo esc_html_e('End Date','taskbuilder'); ?></th>
90 - <th class="wppm_table_header"><?php echo esc_html_e('No. of tasks','taskbuilder'); ?></th>
91 - <th class="wppm_table_header"></th>
92 - </tr>
93 - <tbody>
402 + <script>
403 + jQuery('#wppm-more-actions-btn, #wppm-bulk-actions-btn').gpopover({width: 200});
404 + </script>
405 + <div class="table-responsive">
406 + <table id="wppm_project_table" class="wppm_table table">
407 + <tr>
408 + <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>" onchange="wppm_bulk_select_change()">
409 + <div class="checkbox-container">
410 + <input id="wppm_bulk_select_option" class="wppm-bulk-selector" type="checkbox" onchange="wppm_bulk_select_change();"/>
411 + <label for="wppm_bulk_select_option"></label>
412 + </div>
413 + </th>
414 + <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
415 + <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>
416 + <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">
417 + <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">
418 + </th>
419 + <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
420 + <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>
421 + <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">
422 + <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">
423 + </th>
424 + <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
425 + <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>
426 + <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
427 + <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>
428 + <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">
429 + <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">
430 + </th>
431 + <?php if($wppm_default_project_date==1 && $wppm_deafault_time_duration_project==0){ ?>
432 + <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
433 + <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>
434 + <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">
435 + <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">
436 + </th>
437 + <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
438 + <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>
439 + <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">
440 + <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">
441 + </th>
442 + <?php }
443 + if( $wppm_deafault_time_duration_project==1){ ?>
444 + <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>">
445 + <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>
446 + <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">
447 + <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">
448 + </th>
449 + <?php }?>
450 + <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>
451 + <th class="wppm_table_header" style="background-color:<?php echo esc_attr($appearance_settings['list-header-background-color'])?>"></th>
452 + <?php do_action('wppm_project_list_extra_column_header'); ?>
453 + </tr>
454 + <tbody>
94 455 <?php
95 456 $total_projects=0;
96 457 $users = array();
97 458 if(!empty($wppm_fillter)){
@@ -96,115 +457,373 @@
96 457 $users = array();
97 458 if(!empty($wppm_fillter)){
98 459 foreach( $wppm_fillter as $project ){
99 460 $total_projects++;
100 - $status = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id=$project->status" );
461 + $proejctdata = $wppmfunction->get_project($project->id);
462 + $wppm_proj_duration = $wppmfunction->wppm_get_duration($project->start_date,$project->end_date);
463 + $pstatus= absint($project->status);
464 + $status = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wppm_project_statuses where id='$pstatus'" );
101 465 $users = explode(",",$project->users);
466 + $pid= absint($project->id);
102 467 if(isset($project->cat_id)){
103 - $category = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_categories where id=$project->cat_id" );
468 + $pcat_id = absint($project->cat_id);
469 + $category = $wpdb->get_var( "SELECT name FROM {$wpdb->prefix}wppm_project_categories where id='$pcat_id'" );
104 470 }
105 471 if(isset($project->id)){
106 - if($current_user->has_cap('manage_options')){
107 - $no_of_tasks = $wpdb->get_var("SELECT count(*) FROM {$wpdb->prefix}wppm_task WHERE project=$project->id ");
472 + if($current_user->has_cap('manage_options') || $wppm_current_user_capability == 'wppm_admin'){
473 + $no_of_tasks = $wpdb->get_var("SELECT count(*) FROM {$wpdb->prefix}wppm_task WHERE project='$pid' AND (parent_task_id = 0 OR parent_task_id IS NULL) ");
108 474 }else{
109 - $query =("SELECT count(*) FROM
475 + $query =("SELECT count(*) FROM
110 476 ( SELECT Task.*
111 477 FROM {$wpdb->prefix}wppm_task AS Task
112 478 Left join {$wpdb->prefix}wppm_project proj ON Task.project = proj.id
113 479 Left join {$wpdb->prefix}wppm_project_users proj_users ON Task.project = proj_users.proj_id
114 - 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 ))Group by Task.id ) AS Task");
480 + Left join {$wpdb->prefix}wppm_project_meta proj_meta ON proj.id = proj_meta.project_id
481 + where Task.project = '$pid' AND (Task.parent_task_id = 0 OR Task.parent_task_id IS NULL) 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");
115 482 $no_of_tasks = $wpdb->get_var($query);
483 + }
484 + $no_of_tasks = apply_filters('wppm_no_of_task_proj_list_query',$no_of_tasks,$project->id);
116 485 }
117 - }
118 - ?>
119 - <tr onclick="wppm_open_project(<?php echo esc_attr($project->id) ?>)">
120 - <td><?php echo esc_html_e($project->project_name,'taskbuilder') ?></td>
121 - <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>
122 - <td>
123 - <?php
124 - $i=0;
125 - if(!empty(array_filter($users))){
126 - foreach($users as $user){
127 - $i++;
128 - if( $i <= 4 ){
129 - $user_info = get_user_by('id', $user );
130 - if(!empty($user_info)){
131 - ?>
132 - <a href="#" title="<?php echo esc_html_e($user_info->display_name) ?>">
133 - <?php echo get_avatar($user_info->ID, 25, "mysteryman");?>
134 - </a> <?php
486 + if($wppm_project_time == 1){
487 + $psDate = new DateTime($project->start_date);
488 + $peDate = new DateTime($project->end_date);
489 + if($project->start_date=='0000-00-00 00:00:00'){
490 + if($wppm_date_setting=='Y-m-d H:i:s'){
491 + $proj_start_date = '0000-00-00 00:00:00';
492 + }elseif($wppm_date_setting=='d-m-Y H:i:s'){
493 + $proj_start_date = '00-00-0000 00:00:00';
494 + }elseif($wppm_date_setting=='m-d-Y H:i:s'){
495 + $proj_start_date = '00-00-0000 00:00:00';
496 + }else{
497 + $proj_start_date = '0000-00-00 00:00:00';
498 + }
499 + }if($project->end_date=='0000-00-00 00:00:00'){
500 + if($wppm_date_setting=='Y-m-d H:i:s'){
501 + $proj_end_date = '0000-00-00 00:00:00';
502 + }elseif($wppm_date_setting=='d-m-Y H:i:s'){
503 + $proj_end_date = '00-00-0000 00:00:00';
504 + }elseif($wppm_date_setting=='m-d-Y H:i:s'){
505 + $proj_end_date = '00-00-0000 00:00:00';
506 + }else{
507 + $proj_end_date = '0000-00-00 00:00:00';
508 + }
509 + }
510 + if($project->start_date!='0000-00-00 00:00:00'){
511 + if(!empty($wppm_date_setting)){
512 + $proj_start_date = $psDate->format($wppm_date_setting);
513 + }else{
514 + $proj_start_date = isset($project->start_date)? $project->start_date:"";
515 + }
516 + }
517 + if($project->end_date!='0000-00-00 00:00:00'){
518 + if(!empty($wppm_date_setting)){
519 + $proj_end_date = $peDate->format($wppm_date_setting);
520 + }else{
521 + $proj_end_date = isset($project->end_date) ? $project->end_date: "" ;
522 + }
523 + }
524 + } elseif($wppm_project_time == 0){
525 + $psDate = new DateTime($project->start_date);
526 + $peDate = new DateTime($project->end_date);
527 + $proj_start_date = $psDate->format('Y-m-d');
528 + $proj_end_date = $peDate->format('Y-m-d');
529 + if($project->start_date=='0000-00-00 00:00:00'){
530 + if($wppm_date_setting=='Y-m-d H:i:s'){
531 + $proj_start_date = '0000-00-00';
532 + }elseif($wppm_date_setting=='d-m-Y H:i:s'){
533 + $proj_start_date = '00-00-0000';
534 + }elseif($wppm_date_setting=='m-d-Y H:i:s'){
535 + $proj_start_date = '00-00-0000';
536 + }else{
537 + $proj_start_date = '0000-00-00';
538 + }
539 + }
540 + if($project->end_date=='0000-00-00 00:00:00'){
541 + if($wppm_date_setting=='Y-m-d H:i:s'){
542 + $proj_end_date = '0000-00-00';
543 + }elseif($wppm_date_setting=='d-m-Y H:i:s'){
544 + $proj_end_date = '00-00-0000';
545 + }elseif($wppm_date_setting=='m-d-Y H:i:s'){
546 + $proj_end_date = '00-00-0000';
547 + }else{
548 + $proj_end_date = '0000-00-00';
549 + }
550 +
551 + }if($project->start_date!='0000-00-00 00:00:00'){
552 + if($wppm_date_setting=='Y-m-d H:i:s'){
553 + $proj_start_date = $psDate->format('Y-m-d');
554 + }elseif($wppm_date_setting=='d-m-Y H:i:s'){
555 + $proj_start_date = $psDate->format('d-m-Y');
556 + }elseif($wppm_date_setting=='m-d-Y H:i:s'){
557 + $proj_start_date = $psDate->format('m-d-Y');
558 + }else{
559 + $proj_start_date = $psDate->format('Y-m-d');
560 + }
561 + }
562 + if($project->end_date!='0000-00-00 00:00:00'){
563 + if($wppm_date_setting=='Y-m-d H:i:s'){
564 + $proj_end_date = $peDate->format('Y-m-d');
565 + }elseif($wppm_date_setting=='d-m-Y H:i:s'){
566 + $proj_end_date = $peDate->format('d-m-Y');
567 + }elseif($wppm_date_setting=='m-d-Y H:i:s'){
568 + $proj_end_date = $peDate->format('m-d-Y');
569 + }else{
570 + $proj_end_date = $peDate->format('Y-m-d');
135 571 }
572 + }
573 + }
574 + ?>
575 + <tr onclick="if(link)wppm_open_project(<?php echo esc_attr($project->id) ?>)">
576 + <td class="bulk-selector" onmouseover="link=false;" onmouseout="link=true;">
577 + <div class="wppm-pl-item-selector">
578 + <div class="checkbox-container">
579 + <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 ); ?>"/>
580 + <label for="wppm_bulk_select_<?php echo esc_attr($project->id) ?>"></label>
581 + </div>
582 + </div>
583 + </td>
584 + <td onmouseover="link=true;"><?php echo esc_html($project->project_name) ?></td>
585 + <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>
586 + <td onmouseover="link=true;">
587 + <?php
588 + $i=0;
589 + if(!empty(array_filter($users))){
590 + foreach($users as $user){
591 + $i++;
592 + if( $i <= 4 ){
593 + $user_info = get_user_by('id', $user );
594 + if(!empty($user_info)){
595 + ?>
596 + <a href="#" title="<?php echo esc_html($user_info->display_name) ?>">
597 + <?php echo get_avatar($user_info->ID, 25, "mysteryman");?>
598 + </a> <?php
599 + }
600 + }
136 601 }
602 + } else{
603 + esc_html_e('None','taskbuilder');
137 604 }
138 - } else{
139 - _e('None','wp_projects');
140 - }
141 - if($i > 4){
142 - ?>
143 - <a href="#" class="wppm_avatar">
144 - <span id="wppm_avatar" style="background-color:black;" class="avatar">+<?php echo esc_html($i-4) ?></span>
145 - </a>
605 + if($i > 4){
606 + ?>
607 + <a href="#" class="wppm_avatar">
608 + <span id="wppm_avatar" style="background-color:black;" class="avatar">+<?php echo esc_html($i-4) ?></span>
609 + </a>
610 + <?php } ?>
611 + </td>
612 + <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($category) ? esc_html($category): "" ?></td>
613 + <?php if($wppm_default_project_date==1 && $wppm_deafault_time_duration_project==0){ ?>
614 + <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($proj_start_date) ? esc_html($proj_start_date): "" ?></td>
615 + <?php
616 + 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')) {
617 + $style = "color:#FF0000";
618 + } else {
619 + $style = "color:#2C3E50";
620 + } ?>
621 + <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>
146 622 <?php } ?>
147 - </td>
148 - <td class="wppm_table_td"><?php echo isset($category) ? esc_html_e($category,'taskbuilder'): "" ?></td>
149 - <td class="wppm_table_td"><?php echo isset($project->start_date) ? esc_html($project->start_date): "" ?></td>
150 - <td class="wppm_table_td"><?php echo isset($project->end_date) ? esc_html($project->end_date):"" ?></td>
151 - <td class="wppm_table_td"><?php echo isset($no_of_tasks) ? esc_html($no_of_tasks):"" ?></td>
152 - <td class="wppm_delete_action">
153 - <?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"; ?>
154 - <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>
155 - <?php ?>
156 - </td>
157 - </tr>
158 - <?php
623 + <?php if($wppm_deafault_time_duration_project==1){ ?>
624 + <?php
625 + 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')) {
626 + $style = "color:#FF0000";
627 + } else {
628 + $style = "color:#2C3E50";
629 + } ?>
630 + <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>
631 + <?php } ?>
632 + <td onmouseover="link=true;" class="wppm_table_td"><?php echo isset($no_of_tasks) ? esc_html($no_of_tasks):"" ?></td>
633 + <td onmouseover="link=true;" class="wppm_delete_action">
634 + <?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"; ?>
635 + <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>
636 + <?php ?>
637 + </td>
638 + <?php do_action('wppm_project_list_extra_column_cell', $project); ?>
639 + </tr>
640 + <?php
641 + }
159 642 }
160 - }
161 - ?>
162 - </tbody>
163 - </table>
164 - <?php
165 - $total_pages=ceil($totalrows/$proj_per_page);
166 - $current_page=$page_no+1;
167 - $prev_page_no=$current_page-1;
168 - $prev_class=($prev_page_no==0)?'disabled':'';
169 - $next_page_no=($total_pages==$current_page)? $current_page-1:$current_page;
170 - $next_class=($total_pages==$current_page)?'disabled':'';
171 - ?>
172 - <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>
173 - <hr style="<?php echo esc_attr($total_pages==0)? '':'display: none;';?>">
174 - </div>
175 - <div class="row wppm_proj_pagination_container">
176 - <div class="col-sm-4">
177 - <?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')?>
643 + ?>
644 + </tbody>
645 + </table>
646 + <?php
647 + $total_pages=ceil($totalrows/$proj_per_page);
648 + $current_page=$page_no+1;
649 + $prev_page_no=$current_page-1;
650 + $prev_class=($prev_page_no==0)?'disabled':'';
651 + $next_page_no=($total_pages==$current_page)? $current_page-1:$current_page;
652 + $next_class=($total_pages==$current_page)?'disabled':'';
653 + ?>
654 + <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>
655 + <hr style="<?php echo esc_attr($total_pages==0)? '':'display: none;';?>">
178 656 </div>
179 - <div class="col-sm-4">
180 - <div class="wppm_proj_pagination" style="<?php echo esc_attr($total_pages==0)? "display:none;":"display:flex;"?>">
181 - <span class="wppm-pagination-txt">
182 - <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>
183 - </span>
184 - <span
185 - <?php echo esc_html($prev_class) ?>
186 - style="<?php echo (isset($prev_class) && esc_attr($prev_class) == 'disabled') ? 'display:none;':'display:block;'?>">
187 - <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_html_e('PREV','taskbuilder');?></a>
188 - </span>
189 - <span
190 - <?php echo esc_attr($next_class) ?>
191 - style="<?php echo (isset($next_class) && $next_class == 'disabled')?'display:none;':'display:block;'?>cursor:pointer;">
192 - <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($limit_start)?>);"><?php echo esc_html_e('NEXT','taskbuilder');?></a>
193 - </span>
657 + <div class="row wppm_proj_pagination_container">
658 + <div class="col-sm-4">
659 + <?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')?>
194 660 </div>
661 + <div class="col-sm-4">
662 + <div class="wppm_proj_pagination" style="<?php echo esc_attr($total_pages==0)? "display:none;":"display:flex;"?>">
663 + <span class="wppm-pagination-txt">
664 + <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>
665 + </span>
666 + <span
667 + <?php echo esc_html($prev_class) ?>
668 + style="<?php echo (isset($prev_class) && esc_attr($prev_class) == 'disabled') ? 'display:none;':'display:block;'?>">
669 + <a class="wppm_pagination_prev" onclick="return wppm_load_prev_page(<?php echo esc_attr($prev_page_no) ?>,<?php echo esc_attr($page_no) ?>,'<?php echo esc_attr($sort_by)?>','<?php echo esc_attr($order) ?>','<?php echo esc_attr($is_archieved)?>');"><?php echo esc_html_e('PREV','taskbuilder');?></a>
670 + </span>
671 + <span
672 + <?php echo esc_attr($next_class) ?>
673 + style="<?php echo (isset($next_class) && $next_class == 'disabled')?'display:none;':'display:block;'?>cursor:pointer;">
674 + <a class="wppm_pagination_next" onclick="return wppm_load_next_page('<?php echo esc_attr($next_page_no) ?>','<?php echo esc_attr($page_no) ?>','<?php echo esc_attr($sort_by)?>','<?php echo esc_attr($order) ?>','<?php echo esc_attr($is_archieved)?>');"><?php echo esc_html_e('NEXT','taskbuilder');?></a>
675 + </span>
676 + </div>
677 + </div>
195 678 </div>
196 679 </div>
197 680 </div>
198 681 </form>
682 +<style>
683 + #wppm_project_table tr:nth-child(even) td{
684 + background-color:<?php echo esc_attr($appearance_settings['list-item-even-background-color'])?>!important;
685 + color:<?php echo esc_attr($appearance_settings['list-item-even-text-color'])?>!important;
686 + }
687 + #wppm_project_table tr:nth-child(odd) td{
688 + background-color:<?php echo esc_attr($appearance_settings['list-item-odd-background-color'])?>!important;
689 + color:<?php echo esc_attr($appearance_settings['list-item-odd-text-color'])?>!important;
690 + }
691 + #wppm_project_table tr:hover td{
692 + background-color:<?php echo esc_attr($appearance_settings['list-item-hover-background-color'])?>!important;
693 + }
694 + #wppm_project_table tr:hover td{
695 + color: <?php echo esc_attr($appearance_settings['list-item-hover-text-color'])?>!important;
696 + }
697 + #wppm_add_new_project_btn:hover,#wppm_project_list:hover,#wppm_archieve_project_btn:hover{
698 + background-color: <?php echo esc_attr($appearance_settings['list-header-button-hover-color'])?>!important;
699 + }
700 +</style>
199 701 <script type="text/javascript">
200 702 jQuery( document ).ready( function( jQuery ) {
703 + let createdBy = <?php echo wp_json_encode(array_map('strval', $advanced_filter['created_by'] ?? [])); ?>;
704 + let assignedUsers = <?php echo wp_json_encode(array_map('strval', $advanced_filter['assigned'] ?? [])); ?>;
705 + let categoryIds = <?php echo wp_json_encode(array_map('strval', $advanced_filter['category'] ?? [])); ?>;
706 + jQuery('#tb-created-by').select2({ width: '100%', dropdownParent: jQuery('#tb-advanced-panel') });
707 + jQuery('#tb-assigned').select2({ width: '100%', dropdownParent: jQuery('#tb-advanced-panel') });
708 + jQuery('#tb-category').select2({ width: '100%', dropdownParent: jQuery('#tb-advanced-panel') });
709 + jQuery('#tb-created-by').val(createdBy).trigger('change');
710 + jQuery('#tb-assigned').val(assignedUsers).trigger('change');
711 + jQuery('#tb-category').val(categoryIds).trigger('change');
712 + jQuery('#tb-start-date').val('<?php echo esc_attr($advanced_filter['start_date'] ?? ''); ?>');
713 + jQuery('#tb-end-date').val('<?php echo esc_attr($advanced_filter['end_date'] ?? ''); ?>');
714 +
715 + window.projectFilters = window.projectFilters || {
716 + created_by: createdBy,
717 + assigned: assignedUsers,
718 + category: categoryIds,
719 + start_date: '<?php echo esc_js($advanced_filter['start_date'] ?? ''); ?>',
720 + end_date: '<?php echo esc_js($advanced_filter['end_date'] ?? ''); ?>'
721 + };
722 +
723 + jQuery(document).off("click", "#tb-apply-filter").on("click", "#tb-apply-filter", function (e) {
724 + e.preventDefault();
725 + window.projectFilters = {
726 + created_by: jQuery("#tb-created-by").val() || [],
727 + assigned: jQuery("#tb-assigned").val() || [],
728 + category: jQuery("#tb-category").val() || [],
729 + start_date: jQuery("#tb-start-date").val() || "",
730 + end_date: jQuery("#tb-end-date").val() || ""
731 + };
732 + renderActiveFilters(window.projectFilters);
733 + setProjectListFilterCookie(window.projectFilters);
734 + triggerProjectFilter(1, window.projectFilters, <?php echo (int) $is_archieved; ?>);
735 + });
736 +
737 + jQuery(document).off("click", ".tb-remove").on("click", ".tb-remove", function () {
738 + let key = jQuery(this).attr("data-key");
739 + let value = jQuery(this).attr("data-value");
740 + if (key === "date") {
741 + window.projectFilters.start_date = "";
742 + window.projectFilters.end_date = "";
743 + jQuery("#tb-start-date").val("");
744 + jQuery("#tb-end-date").val("");
745 + } else {
746 + window.projectFilters[key] = (window.projectFilters[key] || [])
747 + .map(String)
748 + .filter(v => v !== String(value));
749 + jQuery(`#tb-${key}`).val(window.projectFilters[key]).trigger("change");
750 + }
751 + jQuery(this).closest(".tb-chip").remove();
752 + syncUIWithFilters(window.projectFilters);
753 + setProjectListFilterCookie(window.projectFilters);
754 + triggerProjectFilter(1, window.projectFilters, <?php echo (int) $is_archieved; ?>);
755 + });
756 +
757 + jQuery(document).off("click", "#tb-reset-filter").on("click", "#tb-reset-filter", function () {
758 + resetProjectFilters(<?php echo (int) $is_archieved; ?>);
759 + });
760 +
761 + let savedProjectFilters = getProjectListFilterCookie();
762 + if (savedProjectFilters && typeof savedProjectFilters === "object") {
763 + window.projectFilters = {
764 + created_by: savedProjectFilters.created_by || [],
765 + assigned: savedProjectFilters.assigned || [],
766 + category: savedProjectFilters.category || [],
767 + start_date: savedProjectFilters.start_date || "",
768 + end_date: savedProjectFilters.end_date || ""
769 + };
770 + }
771 + setTimeout(function () {
772 + syncUIWithFilters(window.projectFilters);
773 + renderActiveFilters(window.projectFilters);
774 + }, 100);
775 +
776 + jQuery(document).off("click", "#tb-advanced-toggle").on("click", "#tb-advanced-toggle", function (e) {
777 + e.stopPropagation();
778 + jQuery("#tb-advanced-panel").toggleClass("tb-open");
779 + });
780 + jQuery(document).off("click", "#tb-backdrop").on("click", "#tb-backdrop", function () {
781 + jQuery("#tb-advanced-panel").removeClass("tb-open");
782 + jQuery(this).removeClass("active");
783 + });
784 + jQuery(document).off("click.tbProjOutside").on("click.tbProjOutside", function (e) {
785 + if (window.innerWidth > 768) {
786 + if (!jQuery(e.target).closest("#tb-advanced-panel, #tb-advanced-toggle").length) {
787 + jQuery("#tb-advanced-panel").removeClass("tb-open");
788 + }
789 + }
790 + });
791 + jQuery(document).off("click", "#tb-close-filters").on("click", "#tb-close-filters", function () {
792 + jQuery("#tb-advanced-panel").removeClass("tb-open");
793 + jQuery("#tb-backdrop").removeClass("active");
794 + });
795 +
201 796 jQuery("input[name='wppm_project_search_filter']").keypress(function(e) {
202 797 //Enter key
203 798 if (e.which == 13) {
204 - wppm_project_search_filter();
799 + wppm_project_search_filter(<?php echo $is_archieved ?>);
205 800 }
206 801 });
802 + jQuery("#wppm_proj_name_th").hover(function(){
803 + jQuery('#wppm_chevron_sort_up_project_name_img').show();
804 + jQuery('#wppm_chevron_sort_down_project_name_img').hide();
805 + });
806 + jQuery("#wppm_project_status_th").hover(function(){
807 + jQuery('#wppm_chevron_sort_up_project_status_img').show();
808 + jQuery('#wppm_chevron_sort_down_project_status_img').hide();
809 + });
810 + jQuery("#wppm_project_category_th").hover(function(){
811 + jQuery('#wppm_chevron_sort_up_project_cat_img').show();
812 + jQuery('#wppm_chevron_sort_down_project_cat_img').hide();
813 + });
814 + jQuery("#wppm_project_start_date_th").hover(function(){
815 + jQuery('#wppm_chevron_sort_up_project_start_date_img').show();
816 + jQuery('#wppm_chevron_sort_down_project_start_date_img').hide();
817 + });
818 + jQuery("#wppm_project_end_date_th").hover(function(){
819 + jQuery('#wppm_chevron_sort_up_project_end_date_img').show();
820 + jQuery('#wppm_chevron_sort_down_project_end_date_img').hide();
821 + });
822 + jQuery("#wppm_project_time_duration_th").hover(function(){
823 + jQuery('#wppm_chevron_sort_up_project_time_duration_img').show();
824 + jQuery('#wppm_chevron_sort_down_project_time_duration_img').hide();
825 + });
207 826 jQuery(".wppm_delete_action").on("click", function(e){
208 827 e.preventDefault();
209 828 return false;
210 829 });
@@ -222,11 +841,25 @@
222 841 }
223 842 });
224 843 });
225 844 });
845 + /**
846 + * Bulk item selector change
847 + */
848 +function wppm_bulk_item_select_change() {
849 + jQuery("#wppm-bulk-actions-btn").show();
850 + var items = jQuery(".wppm-bulk-select:checked");
851 + var checked = items.length === 0 ? false : true;
852 + if(checked){
853 + jQuery(".wppm-bulk-selector").prop("checked", checked);
854 + }else{
855 + jQuery("#wppm-bulk-actions-btn").hide();
856 + jQuery(".wppm-bulk-selector").prop("checked", false);
857 + }
858 +}
226 859 </script>
227 860 <?php
228 -add_action('wp_footer', 'wppm_page_inline_script', 99999999999999999999);
861 +add_action('wp_footer', 'wppm_page_inline_script', 999999999999999999);
229 862 do_action('wppm_after_shortcode_loaded');
230 863 if(!function_exists('wppm_page_inline_script')) {
231 864 function wppm_page_inline_script() { ?>
232 865 <script type="text/javascript">