PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.0.5
Tutor LMS – eLearning and online course solution v1.0.5
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 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 init.php 7 years ago
Lesson.php
276 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_content' => $lesson_content,
130 );
131
132 if ($_lesson_thumbnail_id){
133 $lesson_data['_thumbnail_id'] = $_lesson_thumbnail_id;
134 }
135 wp_update_post($lesson_data);
136
137 $course_id = tutor_utils()->get_course_id_by_lesson($lesson_id);
138 ob_start();
139 include tutor()->path.'views/metabox/course-contents.php';
140 $course_contents = ob_get_clean();
141
142 wp_send_json_success(array('course_contents' => $course_contents));
143 }
144
145 /**
146 * Delete Lesson from course builder
147 */
148 public function tutor_delete_lesson_by_id(){
149 $lesson_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('lesson_id', $_POST));
150 wp_delete_post($lesson_id, true);
151 delete_post_meta($lesson_id, '_tutor_course_id_for_lesson');
152 wp_send_json_success();
153 }
154
155
156 /**
157 * @param $uri
158 * @param $lesson_id
159 *
160 * @return mixed
161 *
162 * Changed the URI based
163 */
164
165 public function change_lesson_permalink($uri, $lesson_id){
166 $post = get_post($lesson_id);
167
168 if ($post && $post->post_type === $this->lesson_post_type){
169 $uri_base = trailingslashit(site_url());
170
171 $sample_course = "sample-course";
172 $is_course = get_post_meta(get_the_ID(), '_tutor_course_id_for_lesson', true);
173 if ($is_course){
174 $course = get_post($is_course);
175 if ($course){
176 $sample_course = $course->post_name;
177 }
178 }
179
180 $new_course_base = $uri_base."course/{$sample_course}/lesson/%pagename%/";
181 $uri[0] = $new_course_base;
182 }
183
184 return $uri;
185 }
186
187
188 public function flush_rewrite_rules(){
189 $is_required_flush = get_option('required_rewrite_flush');
190 if ($is_required_flush){
191 flush_rewrite_rules();
192 }
193 }
194
195
196 public function add_column($columns){
197 $date_col = $columns['date'];
198 unset($columns['date']);
199 $columns['course'] = __('Course', 'tutor');
200 $columns['date'] = $date_col;
201
202 return $columns;
203 }
204
205 /**
206 * @param $column
207 * @param $post_id
208 *
209 */
210 public function custom_lesson_column($column, $post_id ){
211 if ($column === 'course'){
212
213 $course_id = get_post_meta($post_id, '_tutor_course_id_for_lesson', true);
214 if ($course_id){
215 echo '<a href="'.admin_url('post.php?post='.$course_id.'&action=edit').'">'.get_the_title($course_id).'</a>';
216 }
217
218 }
219 }
220
221 /**
222 *
223 * Mark lesson completed
224 *
225 * @since v.1.0.0
226 */
227 public function mark_lesson_complete(){
228 if ( ! isset($_POST['tutor_action']) || $_POST['tutor_action'] !== 'tutor_complete_lesson' ){
229 return;
230 }
231 //Checking nonce
232 tutor_utils()->checking_nonce();
233
234 $user_id = get_current_user_id();
235
236 //TODO: need to show view if not signed_in
237 if ( ! $user_id){
238 die(__('Please Sign-In', 'tutor'));
239 }
240
241 $lesson_id = (int) sanitize_text_field($_POST['lesson_id']);
242
243 do_action('tutor_lesson_completed_before', $lesson_id);
244 /**
245 * Marking lesson at user meta, meta format, _tutor_completed_lesson_id_{id} and value = time();
246 */
247 tutor_utils()->mark_lesson_complete($lesson_id);
248
249 do_action('tutor_lesson_completed_after', $lesson_id);
250
251
252 wp_redirect(get_the_permalink($lesson_id));
253 }
254
255 /**
256 * Render the lesson content
257 */
258 public function tutor_render_lesson_content(){
259 $lesson_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('lesson_id', $_POST));
260
261 ob_start();
262 global $post;
263
264 $post = get_post($lesson_id);
265 setup_postdata($post);
266 tutor_lesson_content();
267 wp_reset_postdata();
268
269 $html = ob_get_clean();
270 wp_send_json_success(array('html' => $html));
271 }
272
273 }
274
275
276