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