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 / Table.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
Table.php
230 lines
1 <?php
2 /**
3 * Table Component Class.
4 *
5 * @package Tutor\Components
6 * @author Themeum
7 * @link https://themeum.com
8 * @since 4.0.0
9 */
10
11 namespace Tutor\Components;
12
13 defined( 'ABSPATH' ) || exit;
14
15 /**
16 * Class Table
17 *
18 * Responsible for rendering table component with variable number
19 * of rows and columns.
20 *
21 * ```
22 * // Component Data Structure
23 * Table::make()
24 * ->headings(
25 * [
26 * [
27 * 'content' => '',
28 * ]
29 * ]
30 * )
31 * ->contents(
32 * [
33 * [
34 * 'columns' => [
35 * [
36 * 'content' => '',
37 * ]
38 * ],
39 * ]
40 * ]
41 * )
42 * ->attributes('')
43 * ->render();
44 * ```
45 *
46 *
47 * ```
48 * // Example Usage:
49 * $heading = array(
50 * array(
51 * 'content' => __( 'Quiz Info', 'tutor' ),
52 * ),
53 * array(
54 * 'content' => __( 'Marks', 'tutor' ),
55 * ),
56 * );
57 *
58 * $content = array(
59 * array(
60 * 'columns' => array(
61 * array(
62 * 'content' => '<div class="tutor-flex tutor-gap-3 tutor-items-center">' . SvgIcon::make()->name( Icon::QUESTION_CIRCLE )->render() . __( 'Questions', 'tutor' ) . '</div>',
63 * ),
64 * array( 'content' => 20 ),
65 * ),
66 * ),
67 * );
68 *
69 * echo Table::make()
70 * ->headings( $heading )
71 * ->contents( $content )
72 * ->attributes( 'tutor-table-wrapper tutor-table-column-borders tutor-mb-6' )
73 * ->render();
74 * ```
75 *
76 * @since 4.0.0
77 */
78 class Table extends BaseComponent {
79
80 /**
81 * Table header content array.
82 *
83 * @var array
84 */
85 protected $cell_headers;
86
87 /**
88 * A 2D array of cell content.
89 *
90 * @var array
91 */
92 protected $cell_content;
93
94 /**
95 * Set table column headings.
96 *
97 * @since 4.0.0
98 *
99 * Headings must be provided in the following format.
100 *
101 * ```
102 * [
103 * [
104 * 'content' => '',
105 * ]
106 * ]
107 * ```
108 *
109 * @param array $headings the table cell headings.
110 *
111 * @return self
112 */
113 public function headings( array $headings ): self {
114 $this->cell_headers = $headings;
115 return $this;
116 }
117
118 /**
119 * Set table cell contents.
120 *
121 * @since 4.0.0
122 *
123 * Content must be given in the following format
124 * ```
125 * [
126 * [
127 * 'columns' => [
128 * [
129 * 'content' => '',
130 * ]
131 * ],
132 * ]
133 * ]
134 * ```
135 * @param array $contents the cell contents.
136 *
137 * @return self
138 */
139 public function contents( array $contents ): self {
140 $this->cell_content = $contents;
141 return $this;
142 }
143
144 /**
145 * Render table heading.
146 *
147 * @since 4.0.0
148 *
149 * @return string HTML
150 */
151 protected function render_table_headings(): string {
152 $headings = '';
153 if ( ! tutor_utils()->count( $this->cell_headers ) ) {
154 return $headings;
155 }
156
157 foreach ( $this->cell_headers as $heading ) {
158 $headings .= sprintf(
159 '<th class="%s">%s</th>',
160 $heading['class'] ?? '',
161 apply_filters( 'tutor_table_heading', $heading['content'] )
162 );
163 }
164
165 return $headings;
166 }
167
168 /**
169 * Render table body.
170 *
171 * @since 4.0.0
172 *
173 * @return string HTML
174 */
175 protected function render_table_body(): string {
176 $rows = '';
177
178 if ( ! count( $this->cell_content ) ) {
179 return $rows;
180 }
181
182 foreach ( $this->cell_content as $row ) {
183 $columns = '';
184 foreach ( $row['columns'] as $column ) {
185 $columns .= sprintf(
186 '<td>%s</td>',
187 apply_filters( 'tutor_table_content', $column['content'] )
188 );
189 }
190
191 $rows .= sprintf( '<tr>%s</tr>', $columns );
192 }
193
194 return $rows;
195 }
196
197 /**
198 * Get the final Table HTML Content.
199 *
200 * @since 4.0.0
201 *
202 * @return string HTML
203 */
204 public function get(): string {
205 if ( isset( $this->attributes['class'] ) && ! empty( $this->attributes['class'] ) ) {
206 $this->attributes['class'] = 'tutor-table ' . $this->attributes['class'];
207 } else {
208 $this->attributes['class'] = 'tutor-table';
209 }
210
211 ob_start();
212 $this->render_attributes();
213 $attrs = ob_get_clean();
214 return sprintf(
215 '<table %s>
216 <thead>
217 %s
218 </thead>
219 <tbody>
220 %s
221 </tbody>
222 </table>
223 ',
224 $attrs,
225 $this->render_table_headings(),
226 $this->render_table_body()
227 );
228 }
229 }
230