PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.1.0
Tutor LMS – eLearning and online course solution v1.1.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 / Lesson.php
tutor / classes Last commit date
Addons.php 7 years ago Admin.php 7 years ago Ajax.php 7 years ago Assets.php 7 years ago Course.php 7 years ago Gutenberg.php 7 years ago Instructor.php 7 years ago Instructors_List.php 7 years ago Lesson.php 7 years ago Options.php 7 years ago Post_types.php 7 years ago Q_and_A.php 7 years ago Question.php 7 years ago Question_Answers_List.php 7 years ago Quiz.php 7 years ago Quiz_Attempts_List.php 7 years ago Rewrite_Rules.php 7 years ago Shortcode.php 7 years ago Student.php 7 years ago Students_List.php 7 years ago Template.php 7 years ago Theme_Compatibility.php 7 years ago Tools.php 7 years ago TutorEDD.php 7 years ago Tutor_Base.php 7 years ago Tutor_List_Table.php 7 years ago User.php 7 years ago Utils.php 7 years ago Video_Stream.php 7 years ago WooCommerce.php 7 years ago init.php 7 years ago
Lesson.php
277 lines
1 <?php
2 namespace TUTOR;
3
4 if ( ! defined( 'ABSPATH' ) )
5 exit;
6
7 class Lesson extends Tutor_Base {
8 public function __construct() {
9 parent::__construct();
10
11 add_action( 'add_meta_boxes', array($this, 'register_meta_box') );
12 add_action('save_post_'.$this->lesson_post_type, array($this, "save_lesson_meta"));
13
14 add_action('wp_ajax_tutor_load_edit_lesson_modal', array($this, "tutor_load_edit_lesson_modal"));
15 add_action('wp_ajax_tutor_modal_create_or_update_lesson', array($this, "tutor_modal_create_or_update_lesson"));
16 add_action('wp_ajax_tutor_delete_lesson_by_id', array($this, "tutor_delete_lesson_by_id"));
17
18 add_filter('get_sample_permalink', array($this, 'change_lesson_permalink'), 10, 2);
19 add_action('admin_init', array($this, 'flush_rewrite_rules'));
20
21 /**
22 * Add Column
23 */
24
25 add_filter( "manage_{$this->lesson_post_type}_posts_columns", array($this, 'add_column'), 10,1 );
26 add_action( "manage_{$this->lesson_post_type}_posts_custom_column" , array($this, 'custom_lesson_column'), 10, 2 );
27
28 //Frontend Action
29 add_action('template_redirect', array($this, 'mark_lesson_complete'));
30
31 add_action('wp_ajax_tutor_render_lesson_content', array($this, "tutor_render_lesson_content"));
32 }
33
34 /**
35 * Registering metabox
36 */
37 public function register_meta_box(){
38 $lesson_post_type = $this->lesson_post_type;
39
40 add_meta_box( 'tutor-course-select', __( 'Select Course', 'tutor' ), array($this, 'lesson_metabox'), $lesson_post_type );
41 add_meta_box( 'tutor-lesson-videos', __( 'Lesson Video', 'tutor' ), array($this, 'lesson_video_metabox'), $lesson_post_type );
42 add_meta_box( 'tutor-lesson-attachments', __( 'Attachments', 'tutor' ), array($this, 'lesson_attachments_metabox'), $lesson_post_type );
43 }
44
45 public function lesson_metabox(){
46 include tutor()->path.'views/metabox/lesson-metabox.php';
47 }
48
49 public function lesson_video_metabox(){
50 include tutor()->path.'views/metabox/video-metabox.php';
51 }
52
53 public function lesson_attachments_metabox(){
54 include tutor()->path.'views/metabox/lesson-attachments-metabox.php';
55 }
56
57 /**
58 * @param $post_ID
59 *
60 * Saving lesson meta and assets
61 *
62 */
63 public function save_lesson_meta($post_ID){
64 //Course
65 if (isset($_POST['selected_course'])) {
66 $course_id = (int) sanitize_text_field( $_POST['selected_course'] );
67 if ( $course_id ) {
68 update_post_meta( $post_ID, '_tutor_course_id_for_lesson', $course_id );
69 }
70 }
71
72 //Video
73 if ( ! empty($_POST['video']['source'])){
74 $video = tutor_utils()->sanitize_array($_POST['video']);
75 update_post_meta($post_ID, '_video', $video);
76 }
77
78 //Attachments
79 $attachments = array();
80 if ( ! empty($_POST['tutor_attachments'])){
81 $attachments = tutor_utils()->sanitize_array($_POST['tutor_attachments']);
82 $attachments = array_unique($attachments);
83 }
84 update_post_meta($post_ID, '_tutor_attachments', $attachments);
85 }
86
87 public function tutor_load_edit_lesson_modal(){
88 $lesson_id = (int) tutor_utils()->avalue_dot('lesson_id', $_POST);
89 $topic_id = (int) sanitize_text_field( $_POST['topic_id'] );
90
91 /**
92 * If Lesson Not Exists, create One
93 */
94 if ( ! $lesson_id){
95 $course_id = (int) sanitize_text_field( $_POST['course_id'] );
96
97 $post_arr = array(
98 'post_type' => $this->lesson_post_type,
99 'post_title' => __('Draft Lesson', 'tutor'),
100 'post_status' => 'publish',
101 'post_author' => get_current_user_id(),
102 'post_parent' => $topic_id,
103 );
104 $lesson_id = wp_insert_post( $post_arr );
105 if ($lesson_id ) {
106 update_post_meta( $lesson_id, '_tutor_course_id_for_lesson', $course_id );
107 }
108 }
109
110 $post = get_post($lesson_id);
111
112 ob_start();
113 include tutor()->path.'views/modal/edit-lesson.php';
114 $output = ob_get_clean();
115
116 wp_send_json_success(array('output' => $output));
117 }
118
119 public function tutor_modal_create_or_update_lesson(){
120 $lesson_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('lesson_id', $_POST));
121 $_lesson_thumbnail_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('_lesson_thumbnail_id', $_POST));
122
123 $title = sanitize_text_field($_POST['lesson_title']);
124 $lesson_content = wp_kses_post($_POST['lesson_content']);
125
126 $lesson_data = array(
127 'ID' => $lesson_id,
128 'post_title' => $title,
129 'post_name' => sanitize_title($title),
130 'post_content' => $lesson_content,
131 );
132
133 if ($_lesson_thumbnail_id){
134 $lesson_data['_thumbnail_id'] = $_lesson_thumbnail_id;
135 }
136 wp_update_post($lesson_data);
137
138 $course_id = tutor_utils()->get_course_id_by_lesson($lesson_id);
139 ob_start();
140 include tutor()->path.'views/metabox/course-contents.php';
141 $course_contents = ob_get_clean();
142
143 wp_send_json_success(array('course_contents' => $course_contents));
144 }
145
146 /**
147 * Delete Lesson from course builder
148 */
149 public function tutor_delete_lesson_by_id(){
150 $lesson_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('lesson_id', $_POST));
151 wp_delete_post($lesson_id, true);
152 delete_post_meta($lesson_id, '_tutor_course_id_for_lesson');
153 wp_send_json_success();
154 }
155
156
157 /**
158 * @param $uri
159 * @param $lesson_id
160 *
161 * @return mixed
162 *
163 * Changed the URI based
164 */
165
166 public function change_lesson_permalink($uri, $lesson_id){
167 $post = get_post($lesson_id);
168
169 if ($post && $post->post_type === $this->lesson_post_type){
170 $uri_base = trailingslashit(site_url());
171
172 $sample_course = "sample-course";
173 $is_course = get_post_meta(get_the_ID(), '_tutor_course_id_for_lesson', true);
174 if ($is_course){
175 $course = get_post($is_course);
176 if ($course){
177 $sample_course = $course->post_name;
178 }
179 }
180
181 $new_course_base = $uri_base."course/{$sample_course}/lesson/%pagename%/";
182 $uri[0] = $new_course_base;
183 }
184
185 return $uri;
186 }
187
188
189 public function flush_rewrite_rules(){
190 $is_required_flush = get_option('required_rewrite_flush');
191 if ($is_required_flush){
192 flush_rewrite_rules();
193 }
194 }
195
196
197 public function add_column($columns){
198 $date_col = $columns['date'];
199 unset($columns['date']);
200 $columns['course'] = __('Course', 'tutor');
201 $columns['date'] = $date_col;
202
203 return $columns;
204 }
205
206 /**
207 * @param $column
208 * @param $post_id
209 *
210 */
211 public function custom_lesson_column($column, $post_id ){
212 if ($column === 'course'){
213
214 $course_id = get_post_meta($post_id, '_tutor_course_id_for_lesson', true);
215 if ($course_id){
216 echo '<a href="'.admin_url('post.php?post='.$course_id.'&action=edit').'">'.get_the_title($course_id).'</a>';
217 }
218
219 }
220 }
221
222 /**
223 *
224 * Mark lesson completed
225 *
226 * @since v.1.0.0
227 */
228 public function mark_lesson_complete(){
229 if ( ! isset($_POST['tutor_action']) || $_POST['tutor_action'] !== 'tutor_complete_lesson' ){
230 return;
231 }
232 //Checking nonce
233 tutor_utils()->checking_nonce();
234
235 $user_id = get_current_user_id();
236
237 //TODO: need to show view if not signed_in
238 if ( ! $user_id){
239 die(__('Please Sign-In', 'tutor'));
240 }
241
242 $lesson_id = (int) sanitize_text_field($_POST['lesson_id']);
243
244 do_action('tutor_lesson_completed_before', $lesson_id);
245 /**
246 * Marking lesson at user meta, meta format, _tutor_completed_lesson_id_{id} and value = time();
247 */
248 tutor_utils()->mark_lesson_complete($lesson_id);
249
250 do_action('tutor_lesson_completed_after', $lesson_id);
251
252
253 wp_redirect(get_the_permalink($lesson_id));
254 }
255
256 /**
257 * Render the lesson content
258 */
259 public function tutor_render_lesson_content(){
260 $lesson_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('lesson_id', $_POST));
261
262 ob_start();
263 global $post;
264
265 $post = get_post($lesson_id);
266 setup_postdata($post);
267 tutor_lesson_content();
268 wp_reset_postdata();
269
270 $html = ob_get_clean();
271 wp_send_json_success(array('html' => $html));
272 }
273
274 }
275
276
277