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