PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.9.10
Tutor LMS – eLearning and online course solution v1.9.10
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 5 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
390 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 if (tutor_utils()->get_option('load_tutor_css')){
161 wp_enqueue_style('tutor-frontend', tutor()->url."assets/css/tutor-front{$suffix}.css", array(), tutor()->version);
162 }
163
164 /**
165 * dependency wp-i18n added for
166 * translate js file
167 * @since 1.9.0
168 */
169 wp_enqueue_script( 'tutor-frontend', tutor()->url . 'assets/js/tutor-front.js', array( 'jquery', 'wp-i18n'), tutor()->version, true );
170
171
172 /**
173 * Load frontend dashboard style
174 * @since v1.9.8
175 */
176 if(tutor_utils()->is_tutor_frontend_dashboard()) {
177 wp_enqueue_style('tutor-frontend-dashboard-css', tutor()->url . 'assets/css/tutor-frontend-dashboard.min.css', tutor()->version);
178 }
179
180 // Load date picker for announcement at frontend
181 wp_enqueue_script('jquery-ui-datepicker');
182 }
183
184 public function modify_localize_data( $localize_data ) {
185 global $post;
186
187 if ( is_admin() ) {
188 if ( ! empty($_GET['taxonomy']) && ( $_GET['taxonomy'] === 'course-category' || $_GET['taxonomy'] === 'course-tag') ){
189 $localize_data['open_tutor_admin_menu'] = true;
190 }
191 } else {
192
193 // Assign quiz option
194 if ( ! empty($post->post_type) && $post->post_type === 'tutor_quiz'){
195 $single_quiz_options = (array) tutor_utils()->get_quiz_option($post->ID);
196 $saved_quiz_options = array(
197 'quiz_when_time_expires' => tutils()->get_option('quiz_when_time_expires'),
198 );
199
200 $quiz_options = array_merge($single_quiz_options, $saved_quiz_options);
201
202 $previous_attempts = tutor_utils()->quiz_attempts();
203
204 if ($previous_attempts && count($previous_attempts)) {
205 $quiz_options['quiz_auto_start'] = 0;
206 }
207
208 $localize_data['quiz_options'] = $quiz_options;
209 }
210
211 //Including player assets if video exists
212 if (tutor_utils()->has_video_in_single()) {
213 $localize_data['post_id'] = get_the_ID();
214 $localize_data['best_watch_time'] = 0;
215
216 $best_watch_time = tutor_utils()->get_lesson_reading_info(get_the_ID(), 0, 'video_best_watched_time');
217 if ($best_watch_time > 0){
218 $localize_data['best_watch_time'] = $best_watch_time;
219 }
220 }
221 }
222
223 return $localize_data;
224 }
225
226 public function common_scripts() {
227 // Load course builder resources
228 if($this->get_course_builder_screen()) {
229 wp_enqueue_script( 'tutor-course-builder', tutor()->url . 'assets/js/tutor-course-builder.js', array( 'jquery', 'wp-i18n'), tutor()->version, true );
230 wp_enqueue_style( 'tutor-course-builder-css', tutor()->url . 'assets/css/tutor-course-builder.css', array(), tutor()->version );
231 }
232
233 // Localize scripts
234 $localize_data = apply_filters( 'tutor_localize_data', $this->get_default_localized_data() );
235 wp_localize_script('tutor-frontend', '_tutorobject', $localize_data);
236 wp_localize_script('tutor-admin', '_tutorobject', $localize_data);
237 wp_localize_script('tutor-course-builder', '_tutorobject', $localize_data);
238
239 // Inline styles
240 wp_add_inline_style('tutor-frontend', $this->load_color_palette() );
241 wp_add_inline_style('tutor-admin', $this->load_color_palette() );
242 }
243
244 private function load_color_palette() {
245
246 /**
247 * Default Color
248 */
249 $tutor_css = ":root{";
250 $tutor_primary_color = tutor_utils()->get_option('tutor_primary_color');
251 $tutor_primary_hover_color = tutor_utils()->get_option('tutor_primary_hover_color');
252 $tutor_text_color = tutor_utils()->get_option('tutor_text_color');
253 $tutor_light_color = tutor_utils()->get_option('tutor_light_color');
254
255 /**
256 * tutor buttons style
257 */
258 $tutor_button_primary = tutor_utils()->get_option('tutor_button_primary');
259 $tutor_button_danger = tutor_utils()->get_option('tutor_button_danger');
260 $tutor_button_success = tutor_utils()->get_option('tutor_button_success');
261 $tutor_button_warning = tutor_utils()->get_option('tutor_button_warning');
262
263 if ($tutor_primary_color){
264 $tutor_css .= " --tutor-primary-color: {$tutor_primary_color};";
265 }
266 if ($tutor_primary_hover_color){
267 $tutor_css .= " --tutor-primary-hover-color: {$tutor_primary_hover_color};";
268 }
269 if ($tutor_text_color){
270 $tutor_css .= " --tutor-text-color: {$tutor_text_color};";
271 }
272 if ($tutor_light_color){
273 $tutor_css .= " --tutor-light-color: {$tutor_light_color};";
274 }
275
276 /**
277 * check if button style setup
278 */
279 if($tutor_button_primary){
280 $tutor_css .= " --tutor-primary-button-color: {$tutor_button_primary}; ";
281 }
282 if($tutor_button_danger){
283 $tutor_css .= " --tutor-danger-button-color: {$tutor_button_danger}; ";
284 }
285 if($tutor_button_success){
286 $tutor_css .= " --tutor-success-button-color: {$tutor_button_success}; ";
287 }
288 if($tutor_button_warning){
289 $tutor_css .= " --tutor-warning-button-color: {$tutor_button_warning}; ";
290 }
291
292 $tutor_css .= "}";
293
294 return $tutor_css;
295 }
296
297 /**
298 * Add Tinymce button for placing shortcode
299 */
300 function tutor_add_mce_button() {
301 // check user permissions
302 if ( !current_user_can( 'edit_posts' ) && !current_user_can( 'edit_pages' ) ) {
303 return;
304 }
305 // check if WYSIWYG is enabled
306 if ( 'true' == get_user_option( 'rich_editing' ) ) {
307 add_filter( 'mce_external_plugins', array($this, 'tutor_add_tinymce_js') );
308 add_filter( 'mce_buttons', array($this, 'tutor_register_mce_button') );
309 }
310 }
311 // Declare script for new button
312 function tutor_add_tinymce_js( $plugin_array ) {
313 $plugin_array['tutor_button'] = tutor()->url .'assets/js/mce-button.js';
314 return $plugin_array;
315 }
316 // Register new button in the editor
317 function tutor_register_mce_button( $buttons ) {
318 array_push( $buttons, 'tutor_button' );
319 return $buttons;
320 }
321
322 /**
323 * Output generator tag to aid debugging.
324 *
325 * @param string $gen Generator.
326 * @param string $type Type.
327 * @return string
328 */
329 function tutor_generator_tag( $gen, $type ) {
330 switch ( $type ) {
331 case 'html':
332 $gen .= "\n" . '<meta name="generator" content="TutorLMS ' . esc_attr( TUTOR_VERSION ) . '">';
333 break;
334 case 'xhtml':
335 $gen .= "\n" . '<meta name="generator" content="TutorLMS ' . esc_attr( TUTOR_VERSION ) . '" />';
336 break;
337 }
338 return $gen;
339 }
340
341 /**
342 * load text domain handled script after all enqueue_scripts
343 * registered functions
344 * @since 1.9.0
345 */
346 function tutor_script_text_domain() {
347 wp_set_script_translations( 'tutor-frontend', 'tutor', tutor()->path.'languages/' );
348 wp_set_script_translations( 'tutor-admin', 'tutor', tutor()->path.'languages/' );
349 wp_set_script_translations( 'tutor-course-builder', 'tutor', tutor()->path.'languages/' );
350 }
351
352 /**
353 * Add translation support for external tinyMCE button
354 *
355 * @since 1.9.7
356 */
357 function tutor_tinymce_translate() {
358 $locales['tutor_button'] = tutor()->path.'includes/tinymce_translate.php';
359 return $locales;
360 }
361
362 private function get_course_builder_screen() {
363
364 // Add course editor identifier class
365 if(is_admin()) {
366 $screen = get_current_screen();
367 if(is_object($screen) && $screen->base=='post' && $screen->id=='courses') {
368 return $screen->is_block_editor ? 'gutenberg' : 'classic';
369 }
370 } else if(tutor_utils()->is_tutor_frontend_dashboard('create-course')) {
371 return 'frontend';
372 }
373
374 return null;
375 }
376
377 public function add_identifier_class_to_body($classes) {
378 $course_builder_screen = $this->get_course_builder_screen();
379 $to_add = array();
380
381 // Add course editor identifier class
382 if($course_builder_screen) {
383 $to_add[] = ' tutor-screen-course-builder tutor-screen-course-builder-' . $course_builder_screen . ' ';
384 }
385
386 is_array($classes) ? $classes=array_merge($classes, $to_add) : $classes.=implode('', $to_add);
387
388 return $classes;
389 }
390 }