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