PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.9.12
Tutor LMS – eLearning and online course solution v1.9.12
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 Assets.php 4 years ago Course.php 4 years ago Course_Filter.php 4 years ago Course_Settings_Tabs.php 5 years ago Course_Widget.php 5 years ago Custom_Validation.php 5 years ago Dashboard.php 4 years ago Email.php 5 years ago FormHandler.php 5 years ago Frontend.php 5 years ago Gutenberg.php 4 years ago Instructor.php 4 years ago Instructors_List.php 4 years ago Lesson.php 4 years ago Options.php 4 years ago Post_types.php 4 years ago Private_Course_Access.php 5 years ago Q_and_A.php 5 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 Rewrite_Rules.php 4 years ago Shortcode.php 4 years ago Student.php 4 years ago Students_List.php 4 years ago Taxonomies.php 5 years ago Template.php 4 years ago Theme_Compatibility.php 5 years ago Tools.php 4 years ago Tutor.php 4 years ago TutorEDD.php 5 years ago Tutor_Base.php 5 years ago Tutor_List_Table.php 4 years ago Tutor_Setup.php 4 years ago Upgrader.php 5 years ago User.php 4 years ago Utils.php 4 years ago Video_Stream.php 5 years ago Withdraw.php 5 years ago Withdraw_Requests_List.php 4 years ago WooCommerce.php 4 years ago
Assets.php
389 lines
1 <?php
2 namespace TUTOR;
3
4 if ( ! defined( 'ABSPATH' ) )
5 exit;
6
7 class Assets{
8
9 public function __construct() {
10 /**
11 * Front and backend script enqueue
12 */
13 add_action('admin_enqueue_scripts', array($this, 'admin_scripts'));
14 add_action('wp_enqueue_scripts', array($this, 'frontend_scripts'));
15
16 /**
17 * Common scripts loading
18 */
19 add_action('admin_enqueue_scripts', array($this, 'common_scripts'));
20 add_action('wp_enqueue_scripts', array($this, 'common_scripts'));
21
22 /**
23 * Text domain loading
24 */
25 add_action('admin_enqueue_scripts', array($this, 'tutor_script_text_domain'), 100);
26 add_action('wp_enqueue_scripts', array($this, 'tutor_script_text_domain'), 100);
27 add_filter('tutor_localize_data', array($this, 'modify_localize_data') );
28
29 /**
30 * register translateable function to load
31 * handled script with text domain attached to
32 * @since 1.9.0
33 */
34 add_action( 'admin_head', array($this, 'tutor_add_mce_button'));
35 add_filter( 'get_the_generator_html', array($this, 'tutor_generator_tag'), 10, 2 );
36 add_filter( 'get_the_generator_xhtml', array($this, 'tutor_generator_tag'), 10, 2 );
37
38 /**
39 * Add translation support for external tinyMCE button
40 *
41 * @since 1.9.7
42 */
43 add_filter( 'mce_external_languages', array( $this, 'tutor_tinymce_translate' ) );
44
45 /**
46 * Identifier class to body tag
47 *
48 * @since v1.9.9
49 */
50 add_filter( 'body_class', array($this, 'add_identifier_class_to_body') );
51 add_filter( 'admin_body_class', array($this, 'add_identifier_class_to_body') );
52 }
53
54 private function get_default_localized_data() {
55 return array(
56 'ajaxurl' => admin_url('admin-ajax.php'),
57 'home_url' => get_home_url(),
58 'base_path' => tutor()->basepath,
59 'tutor_url' => tutor()->url,
60 'tutor_pro_url' => function_exists('tutor_pro') ? tutor_pro()->url : null,
61 'nonce_key' => tutor()->nonce,
62 tutor()->nonce => wp_create_nonce( tutor()->nonce_action ),
63 'loading_icon_url' => get_admin_url() . 'images/wpspin_light.gif',
64 'placeholder_img_src' => tutor_placeholder_img_src(),
65 'enable_lesson_classic_editor' => get_tutor_option('enable_lesson_classic_editor'),
66 'tutor_frontend_dashboard_url' => tutor_utils()->get_tutor_dashboard_page_permalink(),
67 'wp_date_format' => tutor_js_date_format_against_wp(),
68 'is_admin' => is_admin(),
69 'is_admin_bar_showing' => is_admin_bar_showing()
70 );
71 }
72
73 public function admin_scripts(){
74 wp_enqueue_style('tutor-select2', tutor()->url.'assets/packages/select2/select2.min.css', array(), tutor()->version);
75 wp_enqueue_style('tutor-admin', tutor()->url.'assets/css/tutor-admin.min.css', array(), tutor()->version);
76 wp_enqueue_style('tutor-icon', tutor()->url.'assets/icons/css/tutor-icon.css', array(), tutor()->version);
77
78 /**
79 * Scripts
80 */
81 wp_enqueue_media();
82
83 wp_enqueue_script( 'wp-color-picker' );
84 wp_enqueue_style( 'wp-color-picker' );
85
86 wp_enqueue_script('jquery-ui-slider');
87 wp_enqueue_script('jquery-ui-datepicker');
88
89 wp_enqueue_script('tutor-select2', tutor()->url.'assets/packages/select2/select2.full.min.js', array('jquery'), tutor()->version, true );
90 wp_enqueue_script('tutor-admin', tutor()->url.'assets/js/tutor-admin.js', array('jquery', 'wp-color-picker', 'wp-i18n'), tutor()->version, true );
91 }
92
93 /**
94 * Load frontend scripts
95 */
96 public function frontend_scripts(){
97 global $post, $wp_query;
98
99 $is_script_debug = tutor_utils()->is_script_debug();
100 $suffix = $is_script_debug ? '' : '.min';
101
102 /**
103 * We checked wp_enqueue_editor() in condition because it conflicting with Divi Builder
104 * condition updated @since v.1.7.4
105 */
106
107 if (is_single()){
108 if (function_exists('et_pb_is_pagebuilder_used')) {
109 $is_page_builder_used = et_pb_is_pagebuilder_used(get_the_ID());
110 if (!$is_page_builder_used) {
111 wp_enqueue_editor();
112 }
113 } else {
114 wp_enqueue_editor();
115 }
116 }
117
118 /**
119 * Initializing quicktags script to use in wp_editor();
120 */
121 wp_enqueue_script( 'quicktags');
122
123 $tutor_dashboard_page_id = (int) tutor_utils()->get_option('tutor_dashboard_page_id');
124 if ($tutor_dashboard_page_id === get_the_ID()){
125 wp_enqueue_media();
126 }
127
128 /**
129 * Enabling Sorting, draggable, droppable...
130 */
131 wp_enqueue_script('jquery-ui-sortable');
132 /**
133 * Tutor Icon
134 */
135 wp_enqueue_style('tutor-icon', tutor()->url.'assets/icons/css/tutor-icon.css', array(), tutor()->version);
136
137
138 //Plyr
139 wp_enqueue_style( 'tutor-plyr', tutor()->url . 'assets/packages/plyr/plyr.css', array(), tutor()->version );
140 wp_enqueue_script( 'tutor-plyr', tutor()->url . 'assets/packages/plyr/plyr.polyfilled.min.js', array( 'jquery' ), tutor()->version, true );
141
142 //Social Share
143 wp_enqueue_script( 'tutor-social-share', tutor()->url . 'assets/packages/SocialShare/SocialShare.min.js', array( 'jquery' ), tutor()->version, true );
144
145 /**
146 * Chart Data
147 */
148 if ( ! empty($wp_query->query_vars['tutor_dashboard_page']) ) {
149 wp_enqueue_script('jquery-ui-slider');
150
151 wp_enqueue_style('tutor-select2', tutor()->url.'assets/packages/select2/select2.min.css', array(), tutor()->version);
152 wp_enqueue_script('tutor-select2', tutor()->url.'assets/packages/select2/select2.full.min.js', array('jquery'), tutor()->version, true );
153
154 if ($wp_query->query_vars['tutor_dashboard_page'] === 'earning'){
155 wp_enqueue_script( 'tutor-front-chart-js', tutor()->url . 'assets/js/Chart.bundle.min.js', array(), tutor()->version );
156 wp_enqueue_script( 'jquery-ui-datepicker' );
157 }
158 }
159 //End: chart data
160
161 wp_enqueue_style('tutor-frontend', tutor()->url."assets/css/tutor-front{$suffix}.css", array(), tutor()->version);
162
163 /**
164 * dependency wp-i18n added for
165 * translate js file
166 * @since 1.9.0
167 */
168 wp_enqueue_script( 'tutor-frontend', tutor()->url . 'assets/js/tutor-front.js', array( 'jquery', 'wp-i18n'), tutor()->version, true );
169
170
171 /**
172 * Load frontend dashboard style
173 * @since v1.9.8
174 */
175 if(tutor_utils()->is_tutor_frontend_dashboard()) {
176 wp_enqueue_style('tutor-frontend-dashboard-css', tutor()->url . 'assets/css/tutor-frontend-dashboard.min.css', tutor()->version);
177 }
178
179 // Load date picker for announcement at frontend
180 wp_enqueue_script('jquery-ui-datepicker');
181 }
182
183 public function modify_localize_data( $localize_data ) {
184 global $post;
185
186 if ( is_admin() ) {
187 if ( ! empty($_GET['taxonomy']) && ( $_GET['taxonomy'] === 'course-category' || $_GET['taxonomy'] === 'course-tag') ){
188 $localize_data['open_tutor_admin_menu'] = true;
189 }
190 } else {
191
192 // Assign quiz option
193 if ( ! empty($post->post_type) && $post->post_type === 'tutor_quiz'){
194 $single_quiz_options = (array) tutor_utils()->get_quiz_option($post->ID);
195 $saved_quiz_options = array(
196 'quiz_when_time_expires' => tutils()->get_option('quiz_when_time_expires'),
197 );
198
199 $quiz_options = array_merge($single_quiz_options, $saved_quiz_options);
200
201 $previous_attempts = tutor_utils()->quiz_attempts();
202
203 if ($previous_attempts && count($previous_attempts)) {
204 $quiz_options['quiz_auto_start'] = 0;
205 }
206
207 $localize_data['quiz_options'] = $quiz_options;
208 }
209
210 //Including player assets if video exists
211 if (tutor_utils()->has_video_in_single()) {
212 $localize_data['post_id'] = get_the_ID();
213 $localize_data['best_watch_time'] = 0;
214
215 $best_watch_time = tutor_utils()->get_lesson_reading_info(get_the_ID(), 0, 'video_best_watched_time');
216 if ($best_watch_time > 0){
217 $localize_data['best_watch_time'] = $best_watch_time;
218 }
219 }
220 }
221
222 return $localize_data;
223 }
224
225 public function common_scripts() {
226 // Load course builder resources
227 if($this->get_course_builder_screen()) {
228 wp_enqueue_script( 'tutor-course-builder', tutor()->url . 'assets/js/tutor-course-builder.js', array( 'jquery', 'wp-i18n'), tutor()->version, true );
229 wp_enqueue_style( 'tutor-course-builder-css', tutor()->url . 'assets/css/tutor-course-builder.css', array(), tutor()->version );
230 }
231
232 // Localize scripts
233 $localize_data = apply_filters( 'tutor_localize_data', $this->get_default_localized_data() );
234 wp_localize_script('tutor-frontend', '_tutorobject', $localize_data);
235 wp_localize_script('tutor-admin', '_tutorobject', $localize_data);
236 wp_localize_script('tutor-course-builder', '_tutorobject', $localize_data);
237
238 // Inline styles
239 wp_add_inline_style('tutor-frontend', $this->load_color_palette() );
240 wp_add_inline_style('tutor-admin', $this->load_color_palette() );
241 }
242
243 private function load_color_palette() {
244
245 /**
246 * Default Color
247 */
248 $tutor_css = ":root{";
249 $tutor_primary_color = tutor_utils()->get_option('tutor_primary_color');
250 $tutor_primary_hover_color = tutor_utils()->get_option('tutor_primary_hover_color');
251 $tutor_text_color = tutor_utils()->get_option('tutor_text_color');
252 $tutor_light_color = tutor_utils()->get_option('tutor_light_color');
253
254 /**
255 * tutor buttons style
256 */
257 $tutor_button_primary = tutor_utils()->get_option('tutor_button_primary');
258 $tutor_button_danger = tutor_utils()->get_option('tutor_button_danger');
259 $tutor_button_success = tutor_utils()->get_option('tutor_button_success');
260 $tutor_button_warning = tutor_utils()->get_option('tutor_button_warning');
261
262 if ($tutor_primary_color){
263 $tutor_css .= " --tutor-primary-color: {$tutor_primary_color};";
264 }
265 if ($tutor_primary_hover_color){
266 $tutor_css .= " --tutor-primary-hover-color: {$tutor_primary_hover_color};";
267 }
268 if ($tutor_text_color){
269 $tutor_css .= " --tutor-text-color: {$tutor_text_color};";
270 }
271 if ($tutor_light_color){
272 $tutor_css .= " --tutor-light-color: {$tutor_light_color};";
273 }
274
275 /**
276 * check if button style setup
277 */
278 if($tutor_button_primary){
279 $tutor_css .= " --tutor-primary-button-color: {$tutor_button_primary}; ";
280 }
281 if($tutor_button_danger){
282 $tutor_css .= " --tutor-danger-button-color: {$tutor_button_danger}; ";
283 }
284 if($tutor_button_success){
285 $tutor_css .= " --tutor-success-button-color: {$tutor_button_success}; ";
286 }
287 if($tutor_button_warning){
288 $tutor_css .= " --tutor-warning-button-color: {$tutor_button_warning}; ";
289 }
290
291 $tutor_css .= "}";
292
293 return $tutor_css;
294 }
295
296 /**
297 * Add Tinymce button for placing shortcode
298 */
299 function tutor_add_mce_button() {
300 // check user permissions
301 if ( !current_user_can( 'edit_posts' ) && !current_user_can( 'edit_pages' ) ) {
302 return;
303 }
304 // check if WYSIWYG is enabled
305 if ( 'true' == get_user_option( 'rich_editing' ) ) {
306 add_filter( 'mce_external_plugins', array($this, 'tutor_add_tinymce_js') );
307 add_filter( 'mce_buttons', array($this, 'tutor_register_mce_button') );
308 }
309 }
310 // Declare script for new button
311 function tutor_add_tinymce_js( $plugin_array ) {
312 $plugin_array['tutor_button'] = tutor()->url .'assets/js/mce-button.js';
313 return $plugin_array;
314 }
315 // Register new button in the editor
316 function tutor_register_mce_button( $buttons ) {
317 array_push( $buttons, 'tutor_button' );
318 return $buttons;
319 }
320
321 /**
322 * Output generator tag to aid debugging.
323 *
324 * @param string $gen Generator.
325 * @param string $type Type.
326 * @return string
327 */
328 function tutor_generator_tag( $gen, $type ) {
329 switch ( $type ) {
330 case 'html':
331 $gen .= "\n" . '<meta name="generator" content="TutorLMS ' . esc_attr( TUTOR_VERSION ) . '">';
332 break;
333 case 'xhtml':
334 $gen .= "\n" . '<meta name="generator" content="TutorLMS ' . esc_attr( TUTOR_VERSION ) . '" />';
335 break;
336 }
337 return $gen;
338 }
339
340 /**
341 * load text domain handled script after all enqueue_scripts
342 * registered functions
343 * @since 1.9.0
344 */
345 function tutor_script_text_domain() {
346 wp_set_script_translations( 'tutor-frontend', 'tutor', tutor()->path.'languages/' );
347 wp_set_script_translations( 'tutor-admin', 'tutor', tutor()->path.'languages/' );
348 wp_set_script_translations( 'tutor-course-builder', 'tutor', tutor()->path.'languages/' );
349 }
350
351 /**
352 * Add translation support for external tinyMCE button
353 *
354 * @since 1.9.7
355 */
356 function tutor_tinymce_translate() {
357 $locales['tutor_button'] = tutor()->path.'includes/tinymce_translate.php';
358 return $locales;
359 }
360
361 private function get_course_builder_screen() {
362
363 // Add course editor identifier class
364 if(is_admin()) {
365 $screen = get_current_screen();
366 if(is_object($screen) && $screen->base=='post' && $screen->id=='courses') {
367 return $screen->is_block_editor ? 'gutenberg' : 'classic';
368 }
369 } else if(tutor_utils()->is_tutor_frontend_dashboard('create-course')) {
370 return 'frontend';
371 }
372
373 return null;
374 }
375
376 public function add_identifier_class_to_body($classes) {
377 $course_builder_screen = $this->get_course_builder_screen();
378 $to_add = array();
379
380 // Add course editor identifier class
381 if($course_builder_screen) {
382 $to_add[] = ' tutor-screen-course-builder tutor-screen-course-builder-' . $course_builder_screen . ' ';
383 }
384
385 is_array($classes) ? $classes=array_merge($classes, $to_add) : $classes.=implode('', $to_add);
386
387 return $classes;
388 }
389 }