PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.3.7
Tutor LMS – eLearning and online course solution v1.3.7
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 / Options.php
tutor / classes Last commit date
Addons.php 6 years ago Admin.php 6 years ago Ajax.php 6 years ago Assets.php 6 years ago Course.php 6 years ago Course_Widget.php 6 years ago Dashboard.php 6 years ago Gutenberg.php 6 years ago Instructor.php 6 years ago Instructors_List.php 6 years ago Lesson.php 6 years ago Options.php 6 years ago Post_types.php 6 years ago Q_and_A.php 6 years ago Question.php 6 years ago Question_Answers_List.php 6 years ago Quiz.php 6 years ago Quiz_Attempts_List.php 6 years ago Rewrite_Rules.php 6 years ago Shortcode.php 6 years ago Student.php 6 years ago Students_List.php 6 years ago Taxonomies.php 6 years ago Template.php 6 years ago Theme_Compatibility.php 6 years ago Tools.php 6 years ago Tutor.php 6 years ago TutorEDD.php 6 years ago Tutor_Base.php 6 years ago Tutor_List_Table.php 6 years ago Upgrader.php 6 years ago User.php 6 years ago Utils.php 6 years ago Video_Stream.php 6 years ago Withdraw.php 6 years ago Withdraw_Requests_List.php 6 years ago WooCommerce.php 6 years ago
Options.php
540 lines
1 <?php
2 namespace Tutor;
3
4 if ( ! defined( 'ABSPATH' ) )
5 exit;
6
7 class Options {
8
9 public $option;
10 public $options_attr;
11
12 public function __construct() {
13 $this->option = (array) maybe_unserialize(get_option('tutor_option'));
14 $this->options_attr = $this->options_attr();
15
16 //Saving option
17 add_action('wp_ajax_tutor_option_save', array($this, 'tutor_option_save'));
18 }
19
20 private function get($key = null, $default = false){
21 $option = $this->option;
22 if (empty($option) || ! is_array($option)){
23 return $default;
24 }
25 if ( ! $key){
26 return $option;
27 }
28 if (array_key_exists($key, $option)){
29 return apply_filters($key, $option[$key]);
30 }
31 //Access array value via dot notation, such as option->get('value.subvalue')
32 if (strpos($key, '.')){
33 $option_key_array = explode('.', $key);
34 $new_option = $option;
35 foreach ($option_key_array as $dotKey){
36 if (isset($new_option[$dotKey])){
37 $new_option = $new_option[$dotKey];
38 }else{
39 return $default;
40 }
41 }
42 return apply_filters($key, $new_option);
43 }
44
45 return $default;
46 }
47
48 public function tutor_option_save(){
49 if ( ! isset($_POST['_wpnonce']) || ! wp_verify_nonce( $_POST['_wpnonce'], 'tutor_option_save' ) ){
50 exit();
51 }
52
53 do_action('tutor_option_save_before');
54
55 $option = (array) isset($_POST['tutor_option']) ? $_POST['tutor_option'] : array();
56 $option = apply_filters('tutor_option_input', $option);
57 update_option('tutor_option', $option);
58
59 do_action('tutor_option_save_after');
60 //re-sync settings
61 //init::tutor_activate();
62
63 wp_send_json_success( array('msg' => __('Option Updated', 'tutor') ) );
64 }
65
66 public function options_attr(){
67 $pages = tutor_utils()->get_pages();
68
69 //$course_base = tutor_utils()->course_archive_page_url();
70 $lesson_url = site_url().'/course/'.'sample-course/<code>lessons</code>/sample-lesson/';
71 $student_url = tutor_utils()->profile_url();
72 $attempts_allowed = array();
73 $attempts_allowed['unlimited'] = __('Unlimited' , 'tutor');
74 $attempts_allowed = array_merge($attempts_allowed, array_combine(range(1,20), range(1,20)));
75
76 $attr = array(
77 'general' => array(
78 'label' => __('General', 'tutor'),
79 'sections' => array(
80 'general' => array(
81 'label' => __('General', 'tutor'),
82 'desc' => __('General Settings', 'tutor'),
83 'fields' => array(
84 'tutor_dashboard_page_id' => array(
85 'type' => 'select',
86 'label' => __('Dashboard Page', 'tutor'),
87 'default' => '0',
88 'options' => $pages,
89 'desc' => __('This page will be used for student and instructor dashboard', 'tutor'),
90 ),
91 'enable_public_profile' => array(
92 'type' => 'checkbox',
93 'label' => __('Public Profile', 'tutor'),
94 'label_title' => __('Enable', 'tutor'),
95 'default' => '0',
96 'desc' => __('Enable this to make a profile publicly visible', 'tutor')."<br />" .$student_url,
97 ),
98 'load_tutor_css' => array(
99 'type' => 'checkbox',
100 'label' => __('Load Tutor CSS', 'tutor'),
101 'label_title' => __('Enable', 'tutor'),
102 'default' => '1',
103 'desc' => __('If your theme has its own styling, then you can turn it off to load CSS from the plugin directory', 'tutor'),
104 ),
105 'load_tutor_js' => array(
106 'type' => 'checkbox',
107 'label' => __('Load Tutor JavaScript', 'tutor'),
108 'label_title' => __('Enable', 'tutor'),
109 'default' => '1',
110 'desc' => __('If you have put required script in your theme javascript file, then you can turn it off to load JavaScript from the plugin directory', 'tutor'),
111 ),
112 'student_must_login_to_view_course' => array(
113 'type' => 'checkbox',
114 'label' => __('Course Visibility', 'tutor'),
115 'label_title' => __('Logged in only', 'tutor'),
116 'desc' => __('Students must be logged in to view course', 'tutor'),
117 ),
118 'delete_on_uninstall' => array(
119 'type' => 'checkbox',
120 'label' => __('Erase upon uninstallation', 'tutor'),
121 'label_title' => __('Enable', 'tutor'),
122 'desc' => __('Delete all data during uninstall', 'tutor'),
123 ),
124
125 'enable_spotlight_mode' => array(
126 'type' => 'checkbox',
127 'label' => __('Spotlight mode', 'tutor'),
128 'label_title' => __('Enable', 'tutor'),
129 'default' => '0',
130 'desc' => __('This will hide the header & footer and enable Spotlight (full-screen) mode for the course learning interface.', 'tutor'),
131 ),
132 'disable_default_player_youtube' => array(
133 'type' => 'checkbox',
134 'label' => __('YouTube Player', 'tutor'),
135 'label_title' => __('Disable default video player on the youtube video', 'tutor'),
136 'default' => '0',
137 'desc' => __('', 'tutor'),
138 ),
139 'disable_default_player_vimeo' => array(
140 'type' => 'checkbox',
141 'label' => __('Vimeo Player', 'tutor'),
142 'label_title' => __('Disable default video player on the vimeo video', 'tutor'),
143 'default' => '0',
144 'desc' => __('', 'tutor'),
145 ),
146 )
147 )
148 ),
149 ),
150 'course' => array(
151 'label' => __('Course', 'tutor'),
152 'sections' => array(
153 'general' => array(
154 'label' => __('General', 'tutor'),
155 'desc' => __('Course Settings', 'tutor'),
156 'fields' => array(
157 'enable_gutenberg_course_edit' => array(
158 'type' => 'checkbox',
159 'label' => __('Gutenberg Editor', 'tutor'),
160 'label_title' => __('Enable', 'tutor'),
161 'desc' => __('Use Gutenberg editor on course description area.', 'tutor'),
162 ),
163 'display_course_instructors' => array(
164 'type' => 'checkbox',
165 'label' => __('Display Instructor Info', 'tutor'),
166 'label_title' => __('Enable', 'tutor'),
167 'desc' => __('Show tutor bio on each course page.', 'tutor'),
168 ),
169 'enable_q_and_a_on_course' => array(
170 'type' => 'checkbox',
171 'label' => __('Question and Answer', 'tutor'),
172 'label_title' => __('Enable','tutor'),
173 'default' => '0',
174 'desc' => __('Enabling this feature will add a Q&amp;A section on every course.', 'tutor'),
175 ),
176 ),
177 ),
178 'archive' => array(
179 'label' => __('Archive', 'tutor'),
180 'desc' => __('Course Archive Settings', 'tutor'),
181 'fields' => array(
182 'course_archive_page' => array(
183 'type' => 'select',
184 'label' => __('Course Archive Page', 'tutor'),
185 'default' => '0',
186 'options' => $pages,
187 'desc' => __('This page will be used to list all the published courses.', 'tutor'),
188 ),
189 'courses_col_per_row' => array(
190 'type' => 'slider',
191 'label' => __('Column per row', 'tutor'),
192 'default' => '4',
193 'options' => array('min'=> 1, 'max' => 6),
194 'desc' => __('Define how many column you want to show on the course single page', 'tutor'),
195 ),
196 'courses_per_page' => array(
197 'type' => 'slider',
198 'label' => __('Courses Per Page', 'tutor'),
199 'default' => '12',
200 'options' => array('min'=> 1, 'max' => 20),
201 'desc' => __('Define how many courses you want to show per page', 'tutor'),
202 ),
203 ),
204 ),
205 ),
206 ),
207 'lesson' => array(
208 'label' => __('Lessons', 'tutor'),
209 'sections' => array(
210 'lesson_settings' => array(
211 'label' => __('Lesson Settings', 'tutor'),
212 'desc' => __('Lesson settings will be here', 'tutor'),
213 'fields' => array(
214 'lesson_permalink_base' => array(
215 'type' => 'text',
216 'label' => __('Lesson Permalink Base', 'tutor'),
217 'default' => 'lessons',
218 'desc' => $lesson_url,
219 ),
220
221 ),
222 ),
223
224 ),
225 ),
226 'quiz' => array(
227 'label' => __('Quiz', 'tutor'),
228 'sections' => array(
229 'general' => array(
230 'label' => __('Quiz', 'tutor'),
231 'desc' => __('The values you set here define the default values that are used in the settings form when you create a new quiz.', 'tutor'),
232 'fields' => array(
233 'quiz_time_limit' => array(
234 'type' => 'group_fields',
235 'label' => __('Time Limit', 'tutor'),
236 'desc' => __('Default time limit for quizzes. 0 means no time limit.', 'tutor'),
237 'group_fields' => array(
238 'value' => array(
239 'type' => 'text',
240 'default' => '0',
241 ),
242 'time' => array(
243 'type' => 'select',
244 'default' => 'minutes',
245 'select_options' => false,
246 'options' => array(
247 'weeks' => __('Weeks', 'tutor'),
248 'days' => __('Days', 'tutor'),
249 'hours' => __('Hours', 'tutor'),
250 'minutes' => __('Minutes', 'tutor'),
251 'seconds' => __('Seconds', 'tutor'),
252 ),
253 ),
254 ),
255 ),
256 'quiz_when_time_expires' => array(
257 'type' => 'radio',
258 'label' => __('When time expires', 'tutor'),
259 'default' => 'minutes',
260 'select_options' => false,
261 'options' => array(
262 'autosubmit' => __('Current attempts are submitted automatically', 'tutor'),
263 'graceperiod' => __('There is a grace period when current attempts can be submitted, but no more questions answered', 'tutor'),
264 'autoabandon' => __('Attempts must be submitted before time expires, otherwise they will not be counted', 'tutor'),
265 ),
266 'desc' => __('What should happen by default if a student does not submit the quiz before time expires.', 'tutor'),
267 ),
268 'quiz_attempts_allowed' => array(
269 'type' => 'number',
270 'label' => __('Attempts allowed', 'tutor'),
271 'default' => '10',
272 'desc' => __('Restriction on the number of attempts students are allowed to take for a quiz. 0 for no limit', 'tutor'),
273 ),
274 'quiz_grade_method' => array(
275 'type' => 'select',
276 'label' => __('Grading method', 'tutor'),
277 'default' => 'minutes',
278 'select_options' => false,
279 'options' => array(
280 'highest_grade' => __('Highest Grade', 'tutor'),
281 'average_grade' => __('Average Grade', 'tutor'),
282 'first_attempt' => __('First Attempt', 'tutor'),
283 'last_attempt' => __('Last Attempt', 'tutor'),
284 ),
285 'desc' => __('When multiple attempts are allowed, which method should be used to calculate a student\'s final grade for the quiz.', 'tutor'),
286 ),
287 )
288 )
289 ),
290 ),
291 'instructors' => array(
292 'label' => __('Instructors', 'tutor'),
293 'sections' => array(
294 'general' => array(
295 'label' => __('Instructor Profile Settings', 'tutor'),
296 'desc' => __('Enable Disable Option to on/off notification on various event', 'tutor'),
297 'fields' => array(
298 'enable_course_marketplace' => array(
299 'type' => 'checkbox',
300 'label' => __('Course Marketplace', 'tutor'),
301 'label_title' => __('Enable', 'tutor'),
302 'default' => '0',
303 'desc' => __('By enabling this settings will allow multiple instructors can upload their course.', 'tutor'),
304 ),
305 'instructor_register_page' => array(
306 'type' => 'select',
307 'label' => __('Instructor Registration Page', 'tutor'),
308 'default' => '0',
309 'options' => $pages,
310 'desc' => __('This page will be used to sign up new instructors.', 'tutor'),
311 ),
312 'instructor_can_publish_course' => array(
313 'type' => 'checkbox',
314 'label' => __('Can publish course', 'tutor'),
315 'default' => '0',
316 'desc' => __('Define if a instructor can publish his courses directly or not, if unchecked, they can still add courses, but it will go to admin for review', 'tutor'),
317 ),
318 'enable_become_instructor_btn' => array(
319 'type' => 'checkbox',
320 'label' => __('Become Instructor Button', 'tutor'),
321 'label_title' => __('Enable', 'tutor'),
322 'default' => '0',
323 'desc' => __('Uncheck this option to hide the button from student dashboard.', 'tutor'),
324 ),
325 ),
326 ),
327 ),
328 ),
329 'students' => array(
330 'label' => __('Students', 'tutor'),
331 'sections' => array(
332 'general' => array(
333 'label' => __('Student Profile settings', 'tutor'),
334 'desc' => __('Enable Disable Option to on/off notification on various event', 'tutor'),
335 'fields' => array(
336 'student_register_page' => array(
337 'type' => 'select',
338 'label' => __('Student Registration Page', 'tutor'),
339 'default' => '0',
340 'options' => $pages,
341 'desc' => __('Choose the page for student registration page', 'tutor'),
342 ),
343 'students_own_review_show_at_profile' => array(
344 'type' => 'checkbox',
345 'label' => __('Show reviews on profile', 'tutor'),
346 'label_title' => __('Enable', 'tutor'),
347 'default' => '0',
348 'desc' => __('Enabling this will show the reviews written by each student on their profile', 'tutor')."<br />" .$student_url,
349 ),
350 'show_courses_completed_by_student' => array(
351 'type' => 'checkbox',
352 'label' => __('Show Completed Courses', 'tutor'),
353 'label_title' => __('Enable', 'tutor'),
354 'default' => '0',
355 'desc' => __('Completed courses will be show on student profile', 'tutor')."<br />".$student_url,
356 ),
357 ),
358 ),
359 ),
360 ),
361 'tutor_earning' => array(
362 'label' => __('Earning', 'tutor'),
363 'sections' => array(
364 'general' => array(
365 'label' => __('Earning and commission allocation', 'tutor'),
366 'desc' => __('Enable Disable Option to on/off notification on various event', 'tutor'),
367 'fields' => array(
368 'enable_tutor_earning' => array(
369 'type' => 'checkbox',
370 'label' => __('Earning', 'tutor'),
371 'label_title' => __('Enable', 'tutor'),
372 'default' => '0',
373 'desc' => __('If disabled, the Admin will receive 100% of the earning', 'tutor'),
374 ),
375 'earning_admin_commission' => array(
376 'type' => 'number',
377 'label' => __('Admin Commission Percentage', 'tutor'),
378 'default' => '20',
379 'desc' => __('Define the commission of the Admin from each sale.(after deducting fees)', 'tutor'),
380 ),
381 'earning_instructor_commission' => array(
382 'type' => 'number',
383 'label' => __('Instructor Commission Percentage', 'tutor'),
384 'default' => '80',
385 'desc' => __('Define the commission for instructors from each sale.(after deducting fees)', 'tutor'),
386 ),
387 'tutor_earning_fees' => array(
388 'type' => 'group_fields',
389 'label' => __('Fee Deduction', 'tutor'),
390 'desc' => __('Fees are charged from the entire sales amount. The remaining amount will be divided among admin and instructors.', 'tutor'),
391 'group_fields' => array(
392
393 'enable_fees_deducting' => array(
394 'type' => 'checkbox',
395 'label' => __('Enable', 'tutor'),
396 'default' => '0',
397 ),
398 'fees_name' => array(
399 'type' => 'text',
400 'label' => __('Fee Name', 'tutor'),
401 'default' => '',
402 ),
403 'fees_amount' => array(
404 'type' => 'number',
405 'label' => __('Fee Amount', 'tutor'),
406 'default' => '',
407 ),
408 'fees_type' => array(
409 'type' => 'select',
410 'default' => 'minutes',
411 'select_options' => false,
412 'options' => array(
413 '' => __('Select Fees Type', 'tutor'),
414 'percent' => __('Percent', 'tutor'),
415 'fixed' => __('Fixed', 'tutor'),
416 ),
417 ),
418
419 ),
420 ),
421 'statement_show_per_page' => array(
422 'type' => 'number',
423 'label' => __('Show Statement Per Page', 'tutor'),
424 'default' => '20',
425 'desc' => __('Define the number of statement should show.', 'tutor'),
426 ),
427 ),
428 ),
429 ),
430 ),
431 'tutor_withdraw' => array(
432 'label' => __('Withdraw', 'tutor'),
433 'sections' => array(
434 'general' => array(
435 'label' => __('Withdrawal Settings', 'tutor'),
436 'fields' => array(
437 'min_withdraw_amount' => array(
438 'type' => 'number',
439 'label' => __('Minimum Withdraw Amount', 'tutor'),
440 'default' => '80',
441 'desc' => __('Define the withdraw amount, anyone can make withdraw request if their earning above or equal this amount.', 'tutor'),
442 ),
443 ),
444 ),
445
446 'withdraw_methods' => array(
447 'label' => __('Withdraw Methods', 'tutor'),
448 'desc' => __('Set withdraw settings', 'tutor'),
449 ),
450 ),
451 ),
452
453 'tutor_style' => array(
454 'label' => __('Style', 'tutor'),
455 'sections' => array(
456 'general' => array(
457 'label' => __('Color Style', 'tutor'),
458 'fields' => array(
459 'tutor_primary_color' => array(
460 'type' => 'color',
461 'label' => __('Primary Color', 'tutor'),
462 'default' => '',
463 ),
464 'tutor_primary_hover_color' => array(
465 'type' => 'color',
466 'label' => __('Primary Hover Color', 'tutor'),
467 'default' => '',
468 ),
469 'tutor_text_color' => array(
470 'type' => 'color',
471 'label' => __('Text color', 'tutor'),
472 'default' => '',
473 ),
474 'tutor_light_color' => array(
475 'type' => 'color',
476 'label' => __('Light color', 'tutor'),
477 'default' => '',
478 ),
479 ),
480 ),
481
482 ),
483 ),
484
485 'monetization' => array(
486 'label' => __('Monetization', 'tutor'),
487 'sections' => array(
488 'general' => array(
489 'label' => __('Monetization', 'tutor'),
490 'desc' => __('You can monetize your LMS website by selling courses in a various way.', 'tutor'),
491 'fields' => array(
492
493 'monetize_by' => array(
494 'type' => 'radio',
495 'label' => __('Monetize Option', 'tutor'),
496 'default' => 'free',
497 'select_options' => false,
498 'options' => apply_filters('tutor_monetization_options', array(
499 'free' => __('Disable Monetization', 'tutor'),
500 )),
501 'desc' => __('Select a monetization option to generate revenue by selling courses. Supports: WooCommerce, Easy Digital Downloads, Paid Memberships Pro', 'tutor'),
502 ),
503
504 )
505 )
506 ),
507 ),
508
509
510 );
511
512 return apply_filters('tutor/options/attr', $attr);
513 }
514
515 /**
516 * @param array $field
517 *
518 * @return string
519 *
520 * Generate Option Field
521 */
522 public function generate_field($field = array()){
523 ob_start();
524 include tutor()->path.'views/options/option_field.php';
525 return ob_get_clean();
526 }
527
528 public function field_type($field = array()){
529 ob_start();
530 include tutor()->path."views/options/field-types/{$field['type']}.php";
531 return ob_get_clean();
532 }
533
534 public function generate(){
535 ob_start();
536 include tutor()->path.'views/options/options_generator.php';
537 return ob_get_clean();
538 }
539
540 }