PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.7
Tutor LMS – eLearning and online course solution v4.0.7
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.2.0 1.2.1 1.2.11 1.2.12 1.2.13 1.2.20 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.4.0 2.5.0 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.1 3.9.10 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9
tutor / components / CourseFilter.php
tutor / components Last commit date
Constants 1 month ago Accordion.php 1 month ago Alert.php 1 month ago AttachmentCard.php 1 month ago Avatar.php 1 month ago Badge.php 1 month ago BaseComponent.php 1 month ago Button.php 1 month ago ConfirmationModal.php 1 month ago CourseFilter.php 1 month ago DateFilter.php 1 month ago DropdownFilter.php 1 month ago EmptyState.php 1 month ago FileUploader.php 1 month ago InputField.php 1 month ago Modal.php 1 month ago Nav.php 1 month ago Pagination.php 1 month ago Popover.php 1 month ago PreviewTrigger.php 1 month ago Progress.php 1 month ago SearchFilter.php 1 month ago Sorting.php 1 month ago StarRating.php 1 month ago StarRatingInput.php 1 month ago StatusSelect.php 1 month ago SvgIcon.php 1 month ago Table.php 1 month ago Tabs.php 1 month ago Tooltip.php 1 month ago WPEditor.php 1 month ago
CourseFilter.php
124 lines
1 <?php
2 /**
3 * CourseFilter Component Class.
4 *
5 * Responsible for rendering a course filtering dropdown
6 * with a search box to filter the list.
7 *
8 * @package Tutor\Components
9 * @author Themeum
10 * @link https://themeum.com
11 * @since 4.0.0
12 */
13
14 namespace Tutor\Components;
15
16 use Tutor\Components\Constants\Size;
17 use Tutor\Components\Constants\Variant;
18 use Tutor\Models\CourseModel;
19
20 defined( 'ABSPATH' ) || exit;
21
22 /**
23 * Class CourseFilter
24 *
25 * Example Usage:
26 * ```php
27 * // Minimal — auto-fetches courses for the current user
28 * CourseFilter::make()
29 * ->render();
30 *
31 * // With explicit courses list and total count
32 * CourseFilter::make()
33 * ->courses( $courses )
34 * ->count( $total_announcements )
35 * ->render();
36 *
37 * // Pre-populate options from a custom courses array
38 * CourseFilter::make()
39 * ->courses( CourseModel::get_courses_by_instructor() )
40 * ->render();
41 *
42 * // Retrieve HTML without echoing
43 * $html = CourseFilter::make()->courses( $courses )->get();
44 * ```
45 *
46 * @since 4.0.0
47 */
48 class CourseFilter extends DropdownFilter {
49
50 /**
51 * Constructor.
52 *
53 * Set default values for course filter.
54 */
55 public function __construct() {
56 $this->query_param( 'course-id' );
57 $this->variant( Variant::PRIMARY_SOFT );
58 $this->size( Size::X_SMALL );
59 $this->popover_size( Size::MEDIUM );
60 $this->placeholder( __( 'Search Course', 'tutor' ) );
61 $this->search( true );
62 }
63
64 /**
65 * Set courses list
66 *
67 * @param array|null $courses List of courses.
68 *
69 * @return self
70 */
71 public function courses( $courses = null ): self {
72 $options = self::get_course_filter_options( $courses );
73 $this->options( $options );
74 return $this;
75 }
76
77 /**
78 * Get component content.
79 *
80 * @return string
81 */
82 public function get(): string {
83 if ( empty( $this->options ) ) {
84 $this->courses();
85 }
86
87 return parent::get();
88 }
89
90 /**
91 * Get course filter options for DropdownFilter component.
92 *
93 * @since 4.0.0
94 *
95 * @param array|null $courses Optional. Array of course objects.
96 * If not provided, courses will be fetched based on user permissions.
97 *
98 * @return array
99 */
100 public static function get_course_filter_options( $courses = null ) {
101 $course_options = array(
102 array(
103 'label' => __( 'All Courses', 'tutor' ),
104 'value' => '',
105 ),
106 );
107
108 if ( null === $courses ) {
109 $courses = current_user_can( 'manage_options' ) ? CourseModel::get_courses() : CourseModel::get_courses_by_instructor();
110 }
111
112 if ( ! empty( $courses ) ) {
113 foreach ( $courses as $course ) {
114 $course_options[] = array(
115 'label' => $course->post_title,
116 'value' => $course->ID,
117 );
118 }
119 }
120
121 return $course_options;
122 }
123 }
124