Skip to content

Commit 97236b6

Browse files
authored
Merge pull request #624 from ProgressPlanner/filip/v19/filter-out-providers-by-cap
Dont display tasks to users which dont't have capability to complete them
2 parents f5926a7 + 9587cd9 commit 97236b6

5 files changed

Lines changed: 46 additions & 20 deletions

File tree

classes/admin/class-enqueue.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,17 @@ public function localize_script( $handle, $localize_data = [] ) {
214214
$delay_celebration = \progress_planner()->get_plugin_upgrade_tasks()->should_show_upgrade_popover();
215215
}
216216

217+
// Get the providers available for the user.
218+
$include_providers = [];
219+
$providers_available_for_user = \progress_planner()->get_suggested_tasks()->get_tasks_manager()->get_task_providers_available_for_user();
220+
foreach ( $providers_available_for_user as $provider ) {
221+
// Skip user provider.
222+
if ( 'user' === $provider->get_provider_id() ) {
223+
continue;
224+
}
225+
$include_providers[] = $provider->get_provider_id();
226+
}
227+
217228
// Check if user wants to see all recommendations.
218229
$show_all_recommendations = isset( $_GET['prpl_show_all_recommendations'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
219230
$tasks_per_page = $show_all_recommendations ? -1 : \Progress_Planner\Admin\Widgets\Suggested_Tasks::PER_PAGE_DEFAULT;
@@ -223,15 +234,15 @@ public function localize_script( $handle, $localize_data = [] ) {
223234
[
224235
'post_status' => 'publish',
225236
'posts_per_page' => $tasks_per_page,
226-
'exclude_provider' => [ 'user' ],
237+
'include_provider' => $include_providers, // User provider is already excluded.
227238
]
228239
);
229240
// Get pending celebration tasks.
230241
$pending_celebration_tasks = \progress_planner()->get_suggested_tasks()->get_tasks_in_rest_format(
231242
[
232243
'post_status' => 'pending',
233244
'posts_per_page' => 100,
234-
'exclude_provider' => [ 'user' ],
245+
'include_provider' => $include_providers, // User provider is already excluded.
235246
]
236247
);
237248

classes/admin/class-page-settings.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,6 @@ public function store_settings_form_options() {
133133
\wp_send_json_error( [ 'message' => \esc_html__( 'You do not have permission to update settings.', 'progress-planner' ) ] );
134134
}
135135

136-
// Check the nonce.
137-
\check_admin_referer( 'progress_planner' );
138-
139136
// Use check_ajax_referer instead of check_admin_referer for AJAX handlers.
140137
// check_admin_referer is designed for form submissions, not AJAX requests.
141138
if ( ! \check_ajax_referer( 'progress_planner', 'nonce', false ) ) {

classes/class-suggested-tasks.php

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -446,16 +446,6 @@ public function register_taxonomy() {
446446
public function rest_api_tax_query( $args, $request ) {
447447
$tax_query = [];
448448

449-
// Include terms (matches any term in list).
450-
if ( isset( $request['provider'] ) ) {
451-
$tax_query[] = [
452-
'taxonomy' => 'prpl_recommendations_provider',
453-
'field' => 'slug',
454-
'terms' => \explode( ',', $request['provider'] ),
455-
'operator' => 'IN',
456-
];
457-
}
458-
459449
// Exclude terms.
460450
if ( isset( $request['exclude_provider'] ) ) {
461451
$tax_query[] = [
@@ -466,10 +456,27 @@ public function rest_api_tax_query( $args, $request ) {
466456
];
467457
}
468458

469-
if ( ! empty( $tax_query ) ) {
470-
$args['tax_query'] = $tax_query; // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
459+
$include_providers = [];
460+
$providers_available_for_user = \progress_planner()->get_suggested_tasks()->get_tasks_manager()->get_task_providers_available_for_user();
461+
foreach ( $providers_available_for_user as $provider ) {
462+
$include_providers[] = $provider->get_provider_id();
471463
}
472464

465+
// Include terms (matches any term in list).
466+
if ( isset( $request['provider'] ) ) {
467+
$request_providers = \explode( ',', $request['provider'] );
468+
$include_providers = \array_intersect( $include_providers, $request_providers );
469+
}
470+
471+
$tax_query[] = [
472+
'taxonomy' => 'prpl_recommendations_provider',
473+
'field' => 'slug',
474+
'terms' => $include_providers,
475+
'operator' => 'IN',
476+
];
477+
478+
$args['tax_query'] = $tax_query; // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
479+
473480
// Handle sorting parameters.
474481
if ( isset( $request['filter']['orderby'] ) ) {
475482
$args['orderby'] = \sanitize_sql_orderby( $request['filter']['orderby'] );

classes/suggested-tasks/class-tasks-manager.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,20 @@ public function get_task_providers() {
196196
return $this->task_providers;
197197
}
198198

199+
/**
200+
* Get the user available task providers, based on the capability required and the user role.
201+
*
202+
* @return array
203+
*/
204+
public function get_task_providers_available_for_user() {
205+
return \array_filter(
206+
$this->task_providers,
207+
function ( $task_provider ) {
208+
return $task_provider->capability_required();
209+
}
210+
);
211+
}
212+
199213
/**
200214
* Get a task provider by its ID.
201215
*

classes/suggested-tasks/providers/class-email-sending.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,6 @@ public function ajax_test_email_sending() {
263263
\wp_send_json_error( [ 'message' => \esc_html__( 'You do not have permission to test email sending.', 'progress-planner' ) ] );
264264
}
265265

266-
// Check the nonce.
267-
\check_admin_referer( 'progress_planner' );
268-
269266
// Use check_ajax_referer for AJAX handlers.
270267
if ( ! \check_ajax_referer( 'progress_planner', 'nonce', false ) ) {
271268
\wp_send_json_error( [ 'message' => \esc_html__( 'Invalid nonce.', 'progress-planner' ) ] );

0 commit comments

Comments
 (0)