PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.6
Tutor LMS – eLearning and online course solution v4.0.6
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 / PreviewTrigger.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
PreviewTrigger.php
138 lines
1 <?php
2 /**
3 * PreviewTrigger Component Class.
4 *
5 * Responsible for rendering a preview trigger with a popover card.
6 *
7 * @package Tutor\Components
8 * @author Themeum
9 * @link https://themeum.com
10 * @since 1.0.0
11 */
12
13 namespace Tutor\Components;
14
15 defined( 'ABSPATH' ) || exit;
16
17 /**
18 * Class PreviewTrigger
19 *
20 * Example Usage:
21 * ```php
22 * // Render a preview trigger for a course
23 * PreviewTrigger::make()
24 * ->id( $course_id )
25 * ->render();
26 *
27 * // Render a preview trigger for a lesson
28 * PreviewTrigger::make()
29 * ->id( $lesson_id )
30 * ->render();
31 *
32 * // Retrieve HTML without echoing
33 * $html = PreviewTrigger::make()->id( $course_id )->get();
34 * ```
35 *
36 * @since 1.0.0
37 */
38 class PreviewTrigger extends BaseComponent {
39
40 /**
41 * Content ID (Course or Lesson)
42 *
43 * @var int
44 */
45 protected $id;
46
47 /**
48 * Set content ID
49 *
50 * @param int $id Content ID.
51 *
52 * @return self
53 */
54 public function id( int $id ): self {
55 $this->id = $id;
56 return $this;
57 }
58
59 /**
60 * Get component content
61 *
62 * @return string
63 */
64 public function get(): string {
65 $id = $this->id;
66
67 if ( ! $id ) {
68 return '';
69 }
70
71 $post = get_post( $id );
72 if ( ! $post ) {
73 return '';
74 }
75
76 $post_type = $post->post_type;
77 $title = get_the_title( $id );
78 $thumbnail = get_tutor_course_thumbnail_src( 'medium', $id );
79
80 // Fallback for thumbnail if empty.
81 if ( empty( $thumbnail ) ) {
82 $thumbnail = tutor()->url . 'assets/images/placeholder.svg';
83 }
84
85 $instructor_name = '';
86 $instructor_url = '';
87
88 // Determine instructor based on post type logic matching dashboard-notes.
89 if ( tutor()->course_post_type === $post_type ) {
90 $author_id = $post->post_author;
91 $instructor_name = tutor_utils()->display_name( $author_id );
92 $instructor_url = tutor_utils()->profile_url( $author_id, true );
93 } elseif ( tutor()->lesson_post_type === $post_type ) {
94 $course_id = tutor_utils()->get_course_id_by_lesson( $id );
95 if ( $course_id ) {
96 $course_post = get_post( $course_id );
97 $author_id = $course_post->post_author;
98 $instructor_name = tutor_utils()->display_name( $author_id );
99 $instructor_url = tutor_utils()->profile_url( $author_id, true );
100 }
101 }
102
103 $preview_data = array(
104 'title' => $title,
105 'url' => get_permalink( $id ),
106 'thumbnail' => $thumbnail,
107 'instructor' => $instructor_name,
108 'instructor_url' => $instructor_url,
109 );
110
111 ob_start();
112 ?>
113 <div
114 x-data="tutorPreviewTrigger({ data: <?php echo esc_attr( wp_json_encode( $preview_data ) ); ?>, offset: 0 })"
115 x-ref="trigger"
116 class="tutor-preview-trigger"
117 >
118 <span
119 tabindex="0"
120 role="button"
121 aria-haspopup="true"
122 :aria-expanded="open ? 'true' : 'false'"
123 class="tutor-preview-trigger-text"
124 ><?php echo esc_html( $title ); ?></span>
125 <div
126 x-ref="content"
127 x-show="open"
128 x-cloak
129 x-trap="open"
130 @keydown.escape="hide()"
131 @click.outside="handleClickOutside()"
132 class="tutor-popover tutor-preview-card"
133 ></div>
134 </div>
135 <?php
136 return ob_get_clean();
137 }
138 }