PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 2.1.3
Tutor LMS – eLearning and online course solution v2.1.3
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 / classes / Assets.php
tutor / classes Last commit date
Addons.php 3 years ago Admin.php 3 years ago Ajax.php 3 years ago Announcements.php 3 years ago Assets.php 3 years ago Backend_Page_Trait.php 3 years ago Course.php 3 years ago Course_Embed.php 3 years ago Course_Filter.php 3 years ago Course_List.php 3 years ago Course_Settings_Tabs.php 3 years ago Course_Widget.php 3 years ago Custom_Validation.php 3 years ago Dashboard.php 3 years ago FormHandler.php 3 years ago Frontend.php 3 years ago Gutenberg.php 3 years ago Input.php 3 years ago Instructor.php 3 years ago Instructors_List.php 3 years ago Lesson.php 3 years ago Options_V2.php 3 years ago Post_types.php 3 years ago Private_Course_Access.php 3 years ago Q_and_A.php 3 years ago Question_Answers_List.php 3 years ago Quiz.php 3 years ago Quiz_Attempts_List.php 3 years ago RestAPI.php 3 years ago Reviews.php 3 years ago Rewrite_Rules.php 4 years ago Shortcode.php 3 years ago Student.php 4 years ago Students_List.php 4 years ago Taxonomies.php 4 years ago Template.php 3 years ago Theme_Compatibility.php 5 years ago Tools.php 3 years ago Tools_V2.php 4 years ago Tutor.php 3 years ago TutorEDD.php 4 years ago Tutor_Base.php 5 years ago Tutor_List_Table.php 3 years ago Tutor_Setup.php 3 years ago Upgrader.php 4 years ago User.php 4 years ago Utils.php 3 years ago Video_Stream.php 4 years ago Withdraw.php 3 years ago Withdraw_Requests_List.php 3 years ago WooCommerce.php 3 years ago
Assets.php
636 lines
1 <?php
2 /**
3 * Manage Assets
4 *
5 * @package Tutor
6 * @author Themeum <support@themeum.com>
7 * @link https://themeum.com
8 * @since 1.0.0
9 */
10
11 namespace TUTOR;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Assets class
19 *
20 * @since 1.0.0
21 */
22 class Assets {
23
24 /**
25 * Constructor
26 *
27 * @since 1.0.0
28 * @return void
29 */
30 public function __construct() {
31 /**
32 * Common scripts loading
33 */
34 add_action( 'admin_enqueue_scripts', array( $this, 'common_scripts' ) );
35 add_action( 'wp_enqueue_scripts', array( $this, 'common_scripts' ) );
36 /**
37 * Front and backend script enqueue
38 */
39 add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
40 add_action( 'wp_enqueue_scripts', array( $this, 'frontend_scripts' ) );
41
42 add_action( 'admin_enqueue_scripts', array( $this, 'load_meta_data' ) );
43 add_action( 'wp_enqueue_scripts', array( $this, 'load_meta_data' ) );
44
45 /**
46 * Text domain loading
47 */
48 add_action( 'admin_enqueue_scripts', array( $this, 'tutor_script_text_domain' ), 100 );
49 add_action( 'wp_enqueue_scripts', array( $this, 'tutor_script_text_domain' ), 100 );
50 add_filter( 'tutor_localize_data', array( $this, 'modify_localize_data' ) );
51
52 /**
53 * Register translatable function to load
54 * Handled script with text domain attached to
55 *
56 * @since 1.9.0
57 */
58 add_action( 'admin_head', array( $this, 'tutor_add_mce_button' ) );
59 add_filter( 'get_the_generator_html', array( $this, 'tutor_generator_tag' ), 10, 2 );
60 add_filter( 'get_the_generator_xhtml', array( $this, 'tutor_generator_tag' ), 10, 2 );
61
62 /**
63 * Add translation support for external tinyMCE button
64 *
65 * @since 1.9.7
66 */
67 add_filter( 'mce_external_languages', array( $this, 'tutor_tinymce_translate' ) );
68
69 /**
70 * Identifier class to body tag
71 *
72 * @since v1.9.9
73 */
74 add_filter( 'body_class', array( $this, 'add_identifier_class_to_body' ) );
75 add_filter( 'admin_body_class', array( $this, 'add_identifier_class_to_body' ) );
76
77 /**
78 * Add edit with front end builder button on Gutenberg editor
79 *
80 * @since v2.0.5
81 */
82 add_action( 'enqueue_block_editor_assets', __CLASS__ . '::add_frontend_editor_button' );
83 }
84
85 /**
86 * Load default localized data
87 *
88 * @since 1.0.0
89 * @return array
90 */
91 private function get_default_localized_data() {
92 $home_url = get_home_url();
93 $parsed = parse_url( $home_url );
94
95 $base_path = ( is_array( $parsed ) && isset( $parsed['path'] ) ) ? $parsed['path'] : '/';
96 $base_path = rtrim( $base_path, '/' ) . '/';
97
98 $post_id = get_the_ID();
99 $post_type = get_post_type( $post_id );
100
101 $current_page = tutor_utils()->get_current_page_slug();
102
103 return array(
104 'ajaxurl' => admin_url( 'admin-ajax.php' ),
105 'home_url' => get_home_url(),
106 'site_title' => get_bloginfo( 'title' ),
107 'base_path' => tutor()->basepath,
108 'tutor_url' => tutor()->url,
109 'tutor_pro_url' => function_exists( 'tutor_pro' ) ? tutor_pro()->url : null,
110 'nonce_key' => tutor()->nonce,
111 tutor()->nonce => wp_create_nonce( tutor()->nonce_action ),
112 'loading_icon_url' => get_admin_url() . 'images/wpspin_light.gif',
113 'placeholder_img_src' => tutor_placeholder_img_src(),
114 'enable_lesson_classic_editor' => get_tutor_option( 'enable_lesson_classic_editor' ),
115 'tutor_frontend_dashboard_url' => tutor_utils()->get_tutor_dashboard_page_permalink(),
116 'wp_date_format' => tutor_js_date_format_against_wp(),
117 'is_admin' => is_admin(),
118 'is_admin_bar_showing' => is_admin_bar_showing(),
119 'addons_data' => tutor_utils()->prepare_free_addons_data(),
120 'current_user' => wp_get_current_user(),
121 'content_change_event' => 'tutor_content_changed_event',
122 'is_tutor_course_edit' => isset( $_GET['action'] ) && 'edit' === $_GET['action'] && tutor()->course_post_type === get_post_type( get_the_ID() ) ? true : false,
123 'assignment_max_file_allowed' => 'tutor_assignments' === $post_type ? (int) tutor_utils()->get_assignment_option( $post_id, 'upload_files_limit' ) : 0,
124 'current_page' => $current_page,
125 'quiz_answer_display_time' => 1000 * (int) tutor_utils()->get_option( 'quiz_answer_display_time' ),
126 );
127 }
128
129 /**
130 * Enqueue scripts for admin
131 *
132 * @since 1.0.0
133 * @return void
134 */
135 public function admin_scripts() {
136 wp_enqueue_style( 'tutor-select2', tutor()->url . 'assets/packages/select2/select2.min.css', array(), TUTOR_VERSION );
137 wp_enqueue_style( 'tutor-admin', tutor()->url . 'assets/css/tutor-admin.min.css', array(), TUTOR_VERSION );
138 /**
139 * Scripts
140 */
141 wp_enqueue_media();
142
143 wp_enqueue_script( 'wp-color-picker' );
144 wp_enqueue_style( 'wp-color-picker' );
145
146 wp_enqueue_script( 'jquery-ui-slider' );
147 wp_enqueue_script( 'jquery-ui-datepicker' );
148
149 wp_enqueue_script( 'tutor-select2', tutor()->url . 'assets/packages/select2/select2.full.min.js', array( 'jquery' ), TUTOR_VERSION, true );
150 wp_enqueue_script( 'tutor-admin', tutor()->url . 'assets/js/tutor-admin.min.js', array( 'jquery', 'wp-color-picker', 'wp-i18n' ), TUTOR_VERSION, true );
151 }
152
153 /**
154 * Load frontend scripts
155 *
156 * @since 1.0.0
157 * @return void
158 */
159 public function frontend_scripts() {
160 global $post, $wp_query;
161
162 /**
163 * We checked wp_enqueue_editor() in condition because it conflicting with Divi Builder
164 * condition updated @since v.1.7.4
165 */
166
167 if ( is_single() ) {
168 if ( function_exists( 'et_pb_is_pagebuilder_used' ) ) {
169 $is_page_builder_used = et_pb_is_pagebuilder_used( get_the_ID() );
170 if ( ! $is_page_builder_used ) {
171 wp_enqueue_editor();
172 }
173 } else {
174 wp_enqueue_editor();
175 }
176 }
177
178 /**
179 * Initializing quicktags script to use in wp_editor();
180 */
181 wp_enqueue_script( 'quicktags' );
182
183 $tutor_dashboard_page_id = (int) tutor_utils()->get_option( 'tutor_dashboard_page_id' );
184 if ( get_the_ID() === $tutor_dashboard_page_id ) {
185 wp_enqueue_media();
186 }
187
188 /**
189 * Enabling Sorting, draggable, droppable...
190 */
191 wp_enqueue_script( 'jquery-ui-sortable' );
192 wp_enqueue_script( 'jquery-touch-punch', array( 'jquery-ui-sortable' ) );
193
194 // Plyr.
195 if ( is_single_course( true ) ) {
196 wp_enqueue_style( 'tutor-plyr', tutor()->url . 'assets/packages/plyr/plyr.css', array(), TUTOR_VERSION );
197 wp_enqueue_script( 'tutor-plyr', tutor()->url . 'assets/packages/plyr/plyr.polyfilled.min.js', array( 'jquery' ), TUTOR_VERSION, true );
198 }
199
200 // Social Share.
201 wp_enqueue_script( 'tutor-social-share', tutor()->url . 'assets/packages/SocialShare/SocialShare.min.js', array( 'jquery' ), TUTOR_VERSION, true );
202
203 /**
204 * Chart Data
205 */
206 if ( ! empty( $wp_query->query_vars['tutor_dashboard_page'] ) ) {
207 wp_enqueue_script( 'jquery-ui-slider' );
208
209 wp_enqueue_style( 'tutor-select2', tutor()->url . 'assets/packages/select2/select2.min.css', array(), TUTOR_VERSION );
210 wp_enqueue_script( 'tutor-select2', tutor()->url . 'assets/packages/select2/select2.full.min.js', array( 'jquery' ), TUTOR_VERSION, true );
211
212 if ( 'earning' === $wp_query->query_vars['tutor_dashboard_page'] ) {
213 wp_enqueue_script( 'tutor-front-chart-js', tutor()->url . 'assets/js/lib/Chart.bundle.min.js', array(), TUTOR_VERSION );
214 wp_enqueue_script( 'jquery-ui-datepicker' );
215 }
216 }
217 /**
218 * Dependency wp-i18n added for translate js file
219 *
220 * @since 1.9.0
221 */
222 wp_enqueue_style( 'tutor-frontend', tutor()->url . 'assets/css/tutor-front.min.css', array(), TUTOR_VERSION );
223 wp_enqueue_script( 'tutor-frontend', tutor()->url . 'assets/js/tutor-front.min.js', array( 'jquery', 'wp-i18n' ), TUTOR_VERSION, true );
224
225 /**
226 * Load frontend dashboard style
227 *
228 * @since v1.9.8
229 */
230 if ( tutor_utils()->is_tutor_frontend_dashboard() ) {
231 wp_enqueue_style( 'tutor-frontend-dashboard-css', tutor()->url . 'assets/css/tutor-frontend-dashboard.min.css', TUTOR_VERSION );
232 }
233
234 // Load date picker for announcement at frontend.
235 wp_enqueue_script( 'jquery-ui-datepicker' );
236 $css = '.mce-notification.mce-notification-error{display: none !important;}';
237 wp_add_inline_style( 'tutor-frontend', $css );
238 }
239
240 /**
241 * Modify localize data
242 *
243 * @since 1.0.0
244 *
245 * @param array $localize_data localize data.
246 * @return array
247 */
248 public function modify_localize_data( $localize_data ) {
249 global $post;
250
251 if ( is_admin() ) {
252 $taxonomy = Input::get( 'taxonomy' );
253 if ( 'course-category' === $taxonomy || 'course-tag' === $taxonomy ) {
254 $localize_data['open_tutor_admin_menu'] = true;
255 }
256 } else {
257
258 // Assign quiz option.
259 if ( ! empty( $post->post_type ) && 'tutor_quiz' === $post->post_type ) {
260 $single_quiz_options = (array) tutor_utils()->get_quiz_option( $post->ID );
261 $saved_quiz_options = array(
262 'quiz_when_time_expires' => tutor_utils()->get_option( 'quiz_when_time_expires' ),
263 );
264
265 $quiz_options = array_merge( $single_quiz_options, $saved_quiz_options );
266
267 $previous_attempts = tutor_utils()->quiz_attempts();
268
269 if ( $previous_attempts && count( $previous_attempts ) ) {
270 $quiz_options['quiz_auto_start'] = 0;
271 }
272
273 $localize_data['quiz_options'] = $quiz_options;
274 }
275
276 // Including player assets if video exists.
277 if ( tutor_utils()->has_video_in_single() ) {
278 $localize_data['post_id'] = get_the_ID();
279 $localize_data['best_watch_time'] = 0;
280
281 $best_watch_time = tutor_utils()->get_lesson_reading_info( get_the_ID(), 0, 'video_best_watched_time' );
282 if ( $best_watch_time > 0 ) {
283 $localize_data['best_watch_time'] = $best_watch_time;
284 }
285 }
286 }
287
288 return $localize_data;
289 }
290
291 /**
292 * Load common scripts for frontend and backend
293 *
294 * @since 1.0.0
295 * @return void
296 */
297 public function common_scripts() {
298
299 /**
300 * Load TinyMCE for tutor settings page if tutor pro is not available.
301 *
302 * @since v2.0.8
303 */
304 $baseurl = includes_url( 'js/tinymce' );
305 $current_page = Input::get( 'page' );
306
307 // If it is settings page & tutor pro not activated.
308 if ( 'tutor_settings' === $current_page && ! wp_script_is( 'wp-tinymce-root' ) ) {
309 wp_enqueue_script( 'tutor-tiny', $baseurl . '/tinymce.min.js', array( 'jquery' ), TUTOR_VERSION, true );
310 }
311 wp_enqueue_style( 'tutor-icon', tutor()->url . 'assets/css/tutor-icon.min.css', array(), TUTOR_VERSION );
312
313 // Common css library.
314 if ( is_rtl() ) {
315 wp_enqueue_style( 'tutor', tutor()->url . 'assets/css/tutor.rtl.min.css', array(), TUTOR_VERSION );
316 } else {
317 wp_enqueue_style( 'tutor', tutor()->url . 'assets/css/tutor.min.css', array(), TUTOR_VERSION );
318 }
319
320 // Load course builder resources.
321 if ( tutor_utils()->get_course_builder_screen() ) {
322 wp_enqueue_script( 'tutor-course-builder', tutor()->url . 'assets/js/tutor-course-builder.min.js', array( 'jquery', 'wp-i18n' ), TUTOR_VERSION, true );
323 wp_enqueue_style( 'tutor-course-builder-css', tutor()->url . 'assets/css/tutor-course-builder.min.css', array(), TUTOR_VERSION );
324 }
325 /**
326 * Load tutor common scripts both backend and frontend
327 *
328 * @since v2.0.0
329 */
330 wp_enqueue_script( 'tutor-script', tutor()->url . 'assets/js/tutor.min.js', array( 'jquery', 'wp-i18n' ), TUTOR_VERSION, true );
331
332 /**
333 * Enqueue datetime countdown scripts & styles
334 *
335 * Add filter to enqueue countdown scripts & styles
336 * don't return false if it is true to prevent conflict
337 * with other filters
338 *
339 * @since v2.1.0
340 */
341 $should_enqueue = apply_filters( 'tutor_should_enqueue_countdown_scripts', false );
342 if ( $should_enqueue ) {
343 wp_enqueue_script( 'tutor-moment', tutor()->url . 'assets/js/lib/countdown/moment.min.js', array(), TUTOR_VERSION, true );
344
345 wp_enqueue_script( 'tutor-moment-timezone', tutor()->url . 'assets/js/lib/countdown/moment-timezone-with-data.min.js', array(), TUTOR_VERSION, true );
346
347 wp_enqueue_script( 'tutor-jquery-countdown', tutor()->url . 'assets/js/lib/countdown/jquery.countdown.min.js', array( 'jquery' ), TUTOR_VERSION, true );
348
349 wp_enqueue_script( 'tutor-countdown', tutor()->url . 'assets/js/lib/countdown/tutor-countdown.min.js', array( 'jquery' ), TUTOR_VERSION, true );
350
351 wp_enqueue_style( 'tutor-countdown', tutor()->url . 'assets/js/lib/countdown/tutor-countdown.min.css', '', TUTOR_VERSION );
352 }
353 }
354
355 /**
356 * Load meta data
357 *
358 * @since 1.0.0
359 * @return void
360 */
361 public function load_meta_data() {
362 // Localize scripts.
363 $localize_data = apply_filters( 'tutor_localize_data', $this->get_default_localized_data() );
364 wp_localize_script( 'tutor-frontend', '_tutorobject', $localize_data );
365 wp_localize_script( 'tutor-admin', '_tutorobject', $localize_data );
366 wp_localize_script( 'tutor-course-builder', '_tutorobject', $localize_data );
367 wp_localize_script( 'tutor-script', '_tutorobject', $localize_data );
368
369 // Inline styles.
370 wp_add_inline_style( 'tutor-frontend', $this->load_color_palette() );
371 wp_add_inline_style( 'tutor-admin', $this->load_color_palette() );
372 }
373
374 /**
375 * Load color palette
376 *
377 * @since 1.0.0
378 * @return string
379 */
380 private function load_color_palette() {
381 $colors = array(
382 'tutor_primary_color' => '--tutor-color-primary',
383 'tutor_primary_hover_color' => '--tutor-color-primary-hover',
384 'tutor_text_color' => '--tutor-body-color',
385 'tutor_border_color' => '--tutor-border-color',
386 'tutor_gray_color' => '--tutor-color-gray',
387 );
388
389 // Admin colors.
390 $admin_colors = array();
391 if ( is_admin() ) {
392 $admin_color = get_user_option( 'admin_color' );
393
394 switch ( $admin_color ) {
395 case 'light':
396 $admin_color_codes = array( '#04a4cc', '#04b0db' );
397 break;
398
399 case 'modern':
400 $admin_color_codes = array( '#3858e9', '#4664eb' );
401 break;
402
403 case 'blue':
404 $admin_color_codes = array( '#e1a948', '#e3af55' );
405 break;
406
407 case 'coffee':
408 $admin_color_codes = array( '#c7a589', '#ccad93' );
409 break;
410
411 case 'ectoplasm':
412 $admin_color_codes = array( '#a3b745', '#a9bd4f' );
413 break;
414
415 case 'midnight':
416 $admin_color_codes = array( '#e14d43', '#e35950' );
417 break;
418
419 case 'ocean':
420 $admin_color_codes = array( '#9ebaa0', '#a7c0a9' );
421 break;
422
423 case 'sunrise':
424 $admin_color_codes = array( '#dd823b', '#df8a48' );
425 break;
426
427 default:
428 $admin_color_codes = array( '#007cba', '#006ba1' );
429 break;
430 }
431
432 $admin_colors = array(
433 '--tutor-color-primary' => $admin_color_codes[0],
434 '--tutor-color-primary-hover' => $admin_color_codes[1],
435 );
436 }
437
438 $fallback_colors = array(
439 'tutor_primary_color' => '#3E64DE',
440 'tutor_primary_hover_color' => '#395BCA',
441 'tutor_text_color' => '#212327',
442 'tutor_border_color' => '#E3E5EB',
443 'tutor_gray_color' => '#CDCFD5',
444 );
445
446 $color_string = '';
447 foreach ( $colors as $key => $property ) {
448 $fallback_color = isset( $fallback_colors[ $key ] ) ? $fallback_colors[ $key ] : '#212327';
449 $color = tutor_utils()->get_option( $key, $fallback_color );
450 $color_rgb = tutor_utils()->hex2rgb( $color );
451
452 if ( is_admin() && isset( $admin_colors[ $property ] ) ) {
453 $color = $admin_colors[ $property ];
454 $color_rgb = tutor_utils()->hex2rgb( $admin_colors[ $property ] );
455 }
456
457 if ( $color ) {
458 $color_string .= $property . ':' . $color . ';';
459 }
460
461 if ( $color_rgb ) {
462 $color_string .= $property . '-rgb:' . $color_rgb . ';';
463 }
464 }
465
466 return ':root{' . $color_string . '}';
467 }
468
469 /**
470 * Add Tinymce button for placing shortcode
471 *
472 * @since 1.0.0
473 * @return void|null
474 */
475 public function tutor_add_mce_button() {
476 // Check user permissions.
477 if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) {
478 return;
479 }
480 // Check if WYSIWYG is enabled.
481 if ( 'true' == get_user_option( 'rich_editing' ) ) {
482 add_filter( 'mce_external_plugins', array( $this, 'tutor_add_tinymce_js' ) );
483 add_filter( 'mce_buttons', array( $this, 'tutor_register_mce_button' ) );
484 }
485 }
486
487 /**
488 * Add tinymce button
489 *
490 * @since 1.0.0
491 *
492 * @param array $plugin_array plugin array.
493 * @return array
494 */
495 public function tutor_add_tinymce_js( $plugin_array ) {
496 $plugin_array['tutor_button'] = tutor()->url . 'assets/js/lib/mce-button.js';
497 return $plugin_array;
498 }
499
500 /**
501 * Register new button in the editor
502 *
503 * @since 1.0.0
504 *
505 * @param array $buttons buttons.
506 * @return array
507 */
508 public function tutor_register_mce_button( $buttons ) {
509 array_push( $buttons, 'tutor_button' );
510 return $buttons;
511 }
512
513 /**
514 * Output generator tag to aid debugging.
515 *
516 * @since 1.0.0
517 *
518 * @param string $gen Generator.
519 * @param string $type Type.
520 *
521 * @return string
522 */
523 public function tutor_generator_tag( $gen, $type ) {
524 switch ( $type ) {
525 case 'html':
526 $gen .= "\n" . '<meta name="generator" content="TutorLMS ' . TUTOR_VERSION . '">';
527 break;
528 case 'xhtml':
529 $gen .= "\n" . '<meta name="generator" content="TutorLMS ' . TUTOR_VERSION . '" />';
530 break;
531 }
532 return $gen;
533 }
534
535 /**
536 * Load text domain handled script after all enqueue_scripts
537 * registered functions
538 *
539 * @since 1.9.0
540 * @return void
541 */
542 public function tutor_script_text_domain() {
543 wp_set_script_translations( 'tutor-frontend', 'tutor', tutor()->path . 'languages/' );
544 wp_set_script_translations( 'tutor-admin', 'tutor', tutor()->path . 'languages/' );
545 wp_set_script_translations( 'tutor-course-builder', 'tutor', tutor()->path . 'languages/' );
546 }
547
548 /**
549 * Add translation support for external tinyMCE button
550 *
551 * @since 1.9.7
552 * @return array
553 */
554 public function tutor_tinymce_translate() {
555 $locales['tutor_button'] = tutor()->path . 'includes/tinymce_translate.php';
556 return $locales;
557 }
558
559 /**
560 * Add an identifier class to body
561 *
562 * @since 1.0.0
563 *
564 * @param mixed $classes classes.
565 * @return mixed
566 */
567 public function add_identifier_class_to_body( $classes ) {
568 $course_builder_screen = tutor_utils()->get_course_builder_screen();
569 $to_add = array( 'tutor-lms' );
570
571 // Add backend course editor identifier class to body.
572 if ( $course_builder_screen ) {
573 $to_add[] = is_admin() ? 'tutor-backend' : '';
574 $to_add[] = ' tutor-screen-course-builder tutor-screen-course-builder-' . $course_builder_screen . ' ';
575 }
576
577 // Add frontend course builder identifier class.
578 if ( ! $course_builder_screen && tutor_utils()->is_tutor_frontend_dashboard() ) {
579 $to_add[] = 'tutor-screen-frontend-dashboard';
580 }
581
582 if ( is_admin() ) {
583 $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
584 $base = ( $screen && is_object( $screen ) && property_exists( $screen, 'base' ) ) ? $screen->base : '';
585 $index = strpos( $base, 'tutor' );
586
587 if ( 0 === $index || $index > 0 ) {
588 $to_add[] = 'tutor-backend';
589
590 $page = Input::get( 'page' );
591 if ( 'tutor_settings' === $page ) {
592 $to_add[] = 'tutor-screen-backend-settings ';
593 }
594 if ( ! empty( $page ) ) {
595 $to_add[] = 'tutor-backend-' . $page;
596 }
597 }
598 }
599
600 // Remove duplicate classes if any.
601 $to_add = array_unique( $to_add );
602
603 if ( is_array( $classes ) ) {
604 $classes = array_merge( $classes, $to_add );
605 } else {
606 $classes .= implode( ' ', $to_add );
607 }
608
609 return $classes;
610 }
611
612 /**
613 * Enqueue script for adding edit with frontend course builder button
614 * on the Gutenberg editor
615 *
616 * @since 2.0.5
617 * @return void
618 */
619 public static function add_frontend_editor_button() {
620 $wp_screen = get_current_screen();
621
622 if ( is_a( $wp_screen, 'WP_Screen' ) && tutor()->course_post_type === $wp_screen->post_type ) {
623 wp_enqueue_script( 'tutor-gutenberg', tutor()->url . 'assets/js/tutor-gutenberg.min.js', array(), TUTOR_VERSION, true );
624 $data = array(
625 'frontend_dashboard_url' => esc_url( trailingslashit( tutor_utils()->tutor_dashboard_url( 'create-course' ) ) ) . '?course_ID=' . get_the_ID(),
626 );
627
628 wp_add_inline_script(
629 'tutor-gutenberg',
630 'const tutorInlineData =' . json_encode( $data ),
631 'before'
632 );
633 }
634 }
635 }
636