PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.0
Tutor LMS – eLearning and online course solution v4.0.0
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 20 hours ago Accordion.php 20 hours ago Alert.php 20 hours ago AttachmentCard.php 20 hours ago Avatar.php 20 hours ago Badge.php 20 hours ago BaseComponent.php 20 hours ago Button.php 20 hours ago ConfirmationModal.php 20 hours ago CourseFilter.php 20 hours ago DateFilter.php 20 hours ago DropdownFilter.php 20 hours ago EmptyState.php 20 hours ago FileUploader.php 20 hours ago InputField.php 20 hours ago Modal.php 20 hours ago Nav.php 20 hours ago Pagination.php 20 hours ago Popover.php 20 hours ago PreviewTrigger.php 20 hours ago Progress.php 20 hours ago SearchFilter.php 20 hours ago Sorting.php 20 hours ago StarRating.php 20 hours ago StarRatingInput.php 20 hours ago StatusSelect.php 20 hours ago SvgIcon.php 20 hours ago Table.php 20 hours ago Tabs.php 20 hours ago Tooltip.php 20 hours ago WPEditor.php 20 hours ago
PreviewTrigger.php
129 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 * ```
22 * PreviewTrigger::make()
23 * ->id( 123 )
24 * ->render();
25 * ```
26 *
27 * @since 1.0.0
28 */
29 class PreviewTrigger extends BaseComponent {
30
31 /**
32 * Content ID (Course or Lesson)
33 *
34 * @var int
35 */
36 protected $id;
37
38 /**
39 * Set content ID
40 *
41 * @param int $id Content ID.
42 *
43 * @return self
44 */
45 public function id( int $id ): self {
46 $this->id = $id;
47 return $this;
48 }
49
50 /**
51 * Get component content
52 *
53 * @return string
54 */
55 public function get(): string {
56 $id = $this->id;
57
58 if ( ! $id ) {
59 return '';
60 }
61
62 $post = get_post( $id );
63 if ( ! $post ) {
64 return '';
65 }
66
67 $post_type = $post->post_type;
68 $title = get_the_title( $id );
69 $thumbnail = get_tutor_course_thumbnail_src( 'medium', $id );
70
71 // Fallback for thumbnail if empty.
72 if ( empty( $thumbnail ) ) {
73 $thumbnail = tutor()->url . 'assets/images/placeholder.svg';
74 }
75
76 $instructor_name = '';
77 $instructor_url = '';
78
79 // Determine instructor based on post type logic matching dashboard-notes.
80 if ( tutor()->course_post_type === $post_type ) {
81 $author_id = $post->post_author;
82 $instructor_name = tutor_utils()->display_name( $author_id );
83 $instructor_url = tutor_utils()->profile_url( $author_id, true );
84 } elseif ( tutor()->lesson_post_type === $post_type ) {
85 $course_id = tutor_utils()->get_course_id_by_lesson( $id );
86 if ( $course_id ) {
87 $course_post = get_post( $course_id );
88 $author_id = $course_post->post_author;
89 $instructor_name = tutor_utils()->display_name( $author_id );
90 $instructor_url = tutor_utils()->profile_url( $author_id, true );
91 }
92 }
93
94 $preview_data = array(
95 'title' => $title,
96 'url' => get_permalink( $id ),
97 'thumbnail' => $thumbnail,
98 'instructor' => $instructor_name,
99 'instructor_url' => $instructor_url,
100 );
101
102 ob_start();
103 ?>
104 <div
105 x-data="tutorPreviewTrigger({ data: <?php echo esc_attr( wp_json_encode( $preview_data ) ); ?>, offset: 0 })"
106 x-ref="trigger"
107 class="tutor-preview-trigger"
108 >
109 <span
110 tabindex="0"
111 role="button"
112 aria-haspopup="true"
113 :aria-expanded="open ? 'true' : 'false'"
114 class="tutor-preview-trigger-text"
115 ><?php echo esc_html( $title ); ?></span>
116 <div
117 x-ref="content"
118 x-show="open"
119 x-cloak
120 x-trap="open"
121 @keydown.escape="hide()"
122 @click.outside="handleClickOutside()"
123 class="tutor-popover tutor-preview-card"
124 ></div>
125 </div>
126 <?php
127 return ob_get_clean();
128 }
129 }