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 / BaseComponent.php
tutor / components Last commit date
Constants 22 hours ago Accordion.php 22 hours ago Alert.php 22 hours ago AttachmentCard.php 22 hours ago Avatar.php 22 hours ago Badge.php 22 hours ago BaseComponent.php 22 hours ago Button.php 22 hours ago ConfirmationModal.php 22 hours ago CourseFilter.php 22 hours ago DateFilter.php 22 hours ago DropdownFilter.php 22 hours ago EmptyState.php 22 hours ago FileUploader.php 22 hours ago InputField.php 22 hours ago Modal.php 22 hours ago Nav.php 22 hours ago Pagination.php 22 hours ago Popover.php 22 hours ago PreviewTrigger.php 22 hours ago Progress.php 22 hours ago SearchFilter.php 22 hours ago Sorting.php 22 hours ago StarRating.php 22 hours ago StarRatingInput.php 22 hours ago StatusSelect.php 22 hours ago SvgIcon.php 22 hours ago Table.php 22 hours ago Tabs.php 22 hours ago Tooltip.php 22 hours ago WPEditor.php 22 hours ago
BaseComponent.php
209 lines
1 <?php
2 /**
3 * Tutor Component: BaseComponent
4 *
5 * Provides a base abstract class for all Tutor UI components.
6 * Handles attribute management and basic HTML escaping.
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\Input;
17
18 defined( 'ABSPATH' ) || exit;
19
20 /**
21 * Abstract Base Component class.
22 *
23 * Defines shared behavior for all UI components.
24 *
25 * @since 4.0.0
26 */
27 abstract class BaseComponent {
28
29 /**
30 * Keep the component as string
31 *
32 * @since 4.0.0
33 *
34 * @var string
35 */
36 protected $component_string = '';
37
38 /**
39 * Create a new component instance.
40 *
41 * @since 4.0.0
42 *
43 * @return static
44 */
45 public static function make() {
46 return new static();
47 }
48
49 /**
50 * HTML attributes for the component.
51 *
52 * Example:
53 * [
54 * 'id' => 'tutor-button',
55 * 'class' => 'tutor-btn tutor-btn-primary'
56 * ]
57 *
58 * @since 4.0.0
59 *
60 * @var array
61 */
62 protected $attributes = array();
63
64 /**
65 * Set or merge multiple HTML attributes.
66 *
67 * This method allows components to attach
68 * dynamic attributes such as data-* or aria-*.
69 *
70 * @since 4.0.0
71 *
72 * @param array $attrs Key–value pairs of HTML attributes.
73 *
74 * @return static
75 */
76 public function attrs( array $attrs ) {
77 $this->attributes = array_merge( $this->attributes, $attrs );
78 return $this;
79 }
80
81 /**
82 * Set a custom HTML attribute.
83 *
84 * @since 4.0.0
85 *
86 * @param string $key Attribute name.
87 * @param string $value Attribute value.
88 *
89 * @return static
90 */
91 public function attr( $key, $value ) {
92 $this->attributes[ $key ] = $value;
93 return $this;
94 }
95
96 /**
97 * Compile the stored attributes into an HTML string.
98 *
99 * Converts attributes array into a properly escaped
100 * string suitable for rendering in HTML tags.
101 *
102 * Example output:
103 * `id="tutor-btn" class="tutor-btn tutor-btn-primary"`
104 *
105 * @since 4.0.0
106 *
107 * @return string Escaped and concatenated attributes.
108 */
109 protected function get_attributes_string(): string {
110 $compiled = array();
111
112 foreach ( $this->attributes as $key => $value ) {
113 $compiled[] = sprintf( '%s="%s"', esc_attr( $key ), esc_attr( $value ) );
114 }
115
116 return implode( ' ', $compiled );
117 }
118
119 /**
120 * Render attributes
121 *
122 * @since 4.0.0
123 *
124 * @return void
125 */
126 protected function render_attributes(): void {
127 echo $this->get_attributes_string(); //phpcs:ignore -- Sanitization is performed inside get_attributes_string method.
128 }
129
130 /**
131 * Escape a value for safe HTML output.
132 *
133 * Wrapper for WordPress `esc_html()` function.
134 *
135 * @since 4.0.0
136 *
137 * @param mixed $value Value to escape.
138 * @param string $esc_fn Callable esc func.
139 *
140 * @return string Escaped string.
141 */
142 protected function esc( $value, $esc_fn = 'esc_html' ): string {
143 return call_user_func( $esc_fn, $value );
144 }
145
146 /**
147 * Retrieve the list of allowed HTML tags and attributes.
148 *
149 * Provides a base set of safe HTML tags and merges additional
150 * SVG tags and any custom tags passed
151 * through the $extra_tags parameter.
152 *
153 * @since 4.0.0
154 *
155 * @param array<string, array<string, bool>> $extra_tags Optional.
156 * Additional HTML tags and their allowed attributes
157 * in KSES-compatible format.
158 *
159 * @return array<string, array<string, bool>> Allowed HTML tags
160 * and attributes formatted for wp_kses().
161 */
162 protected function get_allowed_html_tags( $extra_tags = array() ) {
163
164 $allowed_html_tags = array(
165 'div' => array(
166 'class' => true,
167 ),
168 'span' => array(
169 'class' => true,
170 ),
171 'p' => array(
172 'class' => true,
173 ),
174 'b' => array(),
175 'strong' => array(),
176 'i' => array(),
177 );
178
179 $allowed_html_tags = wp_parse_args( Input::allow_svg( array() ), $allowed_html_tags );
180 $allowed_html_tags = wp_parse_args( $extra_tags, $allowed_html_tags );
181
182 return $allowed_html_tags;
183 }
184
185 /**
186 * Get the component output as an HTML string.
187 *
188 * Note: Child classes must implement this method and are responsible
189 * for preparing and properly sanitizing the component’s HTML output.
190 *
191 * @since 4.0.0
192 *
193 * @return string The component HTML output.
194 */
195 abstract public function get(): string;
196
197 /**
198 * Render the component
199 *
200 * @since 4.0.0
201 *
202 * @return void
203 */
204 public function render(): void {
205 // phpcs:ignore -- Sanitization is performed within each child class’s `get` method implementation.
206 echo $this->get();
207 }
208 }
209