Skip to content

Commit

Permalink
Pass checks argument to sensei_can_user_view_lesson filter (#7657)
Browse files Browse the repository at this point in the history
  • Loading branch information
merkushin committed Aug 7, 2024
1 parent 71b1a9d commit 763b07b
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 6 deletions.
4 changes: 4 additions & 0 deletions changelog/update-sensei-can-user-view-lesson-args
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Significance: patch
Type: added

Pass checks argument to sensei_can_user_view_lesson filter.
25 changes: 19 additions & 6 deletions includes/sensei-functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,24 +156,37 @@ function sensei_can_user_view_lesson( $lesson_id = null, $user_id = null ) {
$pre_requisite_complete = true;
};

$can_user_view_lesson = ! sensei_is_login_required()
|| sensei_all_access( $user_id )
$login_not_required = ! sensei_is_login_required();
$user_has_all_access = sensei_all_access( $user_id );

$can_user_view_lesson = $login_not_required
|| $user_has_all_access
|| ( $user_can_view_course_content && $pre_requisite_complete )
|| $is_preview_lesson;

$checks = array(
'login_not_required' => $login_not_required,
'user_has_all_access' => $user_has_all_access,
'user_can_view_course_content' => $user_can_view_course_content,
'pre_requisite_complete' => $pre_requisite_complete,
'is_preview_lesson' => $is_preview_lesson,
);

/**
* Filter if the user can view lesson and quiz content.
*
* @since 1.9.0
* @since $$next-version$$ Added $checks parameter.
*
* @hook sensei_can_user_view_lesson
*
* @param {bool} $can_user_view_lesson True if they can view lesson/quiz content.
* @param {int} $lesson_id Lesson post ID.
* @param {int} $user_id User ID.
* @param {bool} $can_user_view_lesson True if they can view lesson/quiz content.
* @param {int} $lesson_id Lesson post ID.
* @param {int} $user_id User ID.
* $param {array} $checks Array of checks that were made to determine access.
* @return {bool} Filtered access.
*/
return apply_filters( 'sensei_can_user_view_lesson', $can_user_view_lesson, $lesson_id, $user_id );
return apply_filters( 'sensei_can_user_view_lesson', $can_user_view_lesson, $lesson_id, $user_id, $checks );
}

if ( ! function_exists( 'sensei_light_or_dark' ) ) {
Expand Down
39 changes: 39 additions & 0 deletions tests/unit-tests/test-sensei-functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,26 @@

class Sensei_Functions_Test extends WP_UnitTestCase {

/**
* Sensei factory.
*
* @var \Sensei_Factory
*/
protected $factory;

public function setUp(): void {
parent::setUp();

$this->factory = new \Sensei_Factory();
}

public function tearDown(): void {
// Ensure explicit theme support is removed.
remove_theme_support( 'sensei' );

parent::tearDown();

$this->factory->tearDown();
}

/**
Expand Down Expand Up @@ -108,6 +123,30 @@ public function testSenseiUserRegistrationUrl() {
);
}

public function testSenseiCanUserViewLesson_WhenCalled_FiresFilterWithChecksArgument() {
/* Arrange. */
$lesson_id = $this->factory->lesson->create();
$user_id = $this->factory->user->create();

$has_checks = false;
$filter = function ( $can_view_lesson, $lesson_id, $user_id, $checks ) use ( &$has_checks ) {
$has_checks = is_array( $checks ) && isset(
$checks['login_not_required'],
$checks['user_has_all_access'],
$checks['user_can_view_course_content'],
$checks['pre_requisite_complete'],
$checks['is_preview_lesson']
);
};
add_filter( 'sensei_can_user_view_lesson', $filter, 10, 4 );

/* Act. */
sensei_can_user_view_lesson( $lesson_id, $user_id );

/* Assert. */
$this->assertTrue( $has_checks );
}

/**
* Filter for setting theme to Twenty Sixteen.
*
Expand Down

0 comments on commit 763b07b

Please sign in to comment.