PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7.1
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7.1
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
learnpress / inc / course / class-lp-course-section.php

class-lp-course-section.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.1.7.1, at inc/course/class-lp-course-section.php

326 lines 5.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Class LP_Course_Section
5 *
6 * @since 3.0.0
7 */
8 class LP_Course_Section extends LP_Abstract_Object_Data {
9 /**
10 * Store section data
11 *
12 * @var null
13 */
14 protected $data = null;
15 /**
16 * @var int
17 */
18 protected $course_id = 0;
19 /**
20 * @var int
21 */
22 protected $course = 0;
23
24 /**
25 * @var LP_Section_CURD
26 */
27 protected $_curd = null;
28
29 /**
30 * @var array
31 */
32 protected $items = array();
33
34 /**
35 * LP_Course_Section constructor.
36 *
37 * @param $data
38 */
39 public function __construct( $data ) {
40 $data = wp_parse_args(
41 $data,
42 array(
43 'section_id' => 0,
44 'section_name' => '0',
45 'section_course_id' => 0,
46 'section_order' => 1,
47 'section_description' => '',
48 'position' => 0,
49 'items' => array(),
50 )
51 );
52
53 // Set data
54 foreach ( $data as $k => $v ) {
55 $k = str_replace( 'section_', '', $k );
56
57 if ( $k === 'course_id' ) {
58 $this->course_id = absint( $v );
59 continue;
60 }
61 $this->_data[ $k ] = $v;
62 }
63
64 $this->course = learn_press_get_course( $this->course_id );
65
66 if ( ! $this->course ) {
67 return;
68 }
69
70 $this->_curd = new LP_Section_CURD( 0 );
71 $this->set_id( $this->_data['id'] );
72 // Load section items
73 $this->load_items();
74 }
75
76 /**
77 * Load items from course curriculum to it section
78 */
79 protected function load_items() {
80 if ( ! $this->get_id() ) {
81 return false;
82 }
83
84 $course = $this->course;
85 $section_id = $this->get_id();
86
87 // All items
88 $items = $course->get_item_ids( $section_id );
89
90 foreach ( $items as $item_id ) {
91 $item_class = $course->get_item( $item_id );
92
93 if ( $item_class instanceof LP_Course_Item ) {
94 $item_class->set_section( $this );
95 $this->items[ $item_id ] = $item_class;
96 }
97 }
98 }
99
100 /**
101 * Get item class from item data
102 *
103 * @param array $item
104 *
105 * @return bool|LP_Course_Item
106 * @depecated 4.1.6.9
107 */
108 /*protected function get_item( $item ) {
109 if ( ! is_numeric( $item ) ) {
110 $item_id = $item->item_id;
111 } else {
112 $item_id = absint( $item );
113 }
114
115 return LP_Course_Item::get_item( $item_id );
116 }*/
117
118 /**
119 * Get data to array.
120 *
121 * @return array
122 * @since 3.0.0
123 */
124 public function to_array() {
125 $data = array(
126 'id' => $this->get_id(),
127 'title' => $this->get_title(),
128 'course_id' => $this->get_course_id(),
129 'description' => $this->get_description(),
130 'items' => $this->get_items_array(),
131 'order' => $this->get_order(),
132 );
133
134 return $data;
135 }
136
137 /**
138 * Return section id
139 *
140 * @return int
141 */
142 public function get_id() {
143 return (int) $this->_data['id'];
144 }
145
146 /**
147 * Return section title
148 *
149 * @return mixed
150 */
151 public function get_title() {
152 return apply_filters( 'learn-press/section-title', $this->_data['name'], $this );
153 }
154
155 /**
156 * Return section course id
157 *
158 * @return mixed
159 */
160 public function get_course_id() {
161 return $this->course_id;
162 }
163
164 /**
165 * Return section order
166 *
167 * @return mixed
168 */
169 public function get_order() {
170 return $this->_data['order'];
171 }
172
173 /**
174 * Return section description
175 *
176 * @return mixed
177 */
178 public function get_description() {
179 return apply_filters( 'learn-press/section-description', $this->_data['description'], $this );
180 }
181
182 /**
183 * Get items in this section.
184 *
185 * @param string|array $type
186 * @param bool $preview
187 *
188 * @return array
189 */
190 public function get_items( $type = '', $preview = true ) {
191 /**
192 * @var LP_Course_Item[] $items
193 */
194 $items = apply_filters( 'learn-press/section-items', $this->items, $this );
195
196 if ( ! $items ) {
197 return $items;
198 }
199
200 if ( $type || ! $preview ) {
201 $filtered_items = array();
202
203 if ( $type ) {
204 settype( $type, 'array' );
205 }
206
207 foreach ( $items as $item ) {
208 if ( ! $preview ) {
209 if ( $item->is_preview() ) {
210
211 continue;
212 }
213 }
214 if ( ! $type || $type && in_array( learn_press_get_post_type( $item->get_id() ), $type ) ) {
215 $filtered_items[] = $item;
216 }
217 }
218
219 $items = $filtered_items;
220 }
221
222 return $items;
223 }
224
225 /**
226 * Get items in this section to array.
227 *
228 * @return array
229 * @since 3.0.0
230 */
231 public function get_items_array() {
232 $items = $this->get_items();
233
234 $data = array();
235 foreach ( $items as $item ) {
236 $data[] = $item->to_array();
237 }
238
239 return $data;
240 }
241
242 /**
243 * Get completed items of a specific user.
244 * If user does not pass into then get from current user.
245 *
246 * @param int $user_id
247 *
248 * @return mixed
249 */
250 public function get_completed_items( $user_id = 0 ) {
251 $items = array();
252
253 return $items;
254 }
255
256 /**
257 * Count number of items in section.
258 *
259 * @param string $type
260 * @param bool $preview
261 *
262 * @return int
263 */
264 public function count_items( $type = '', $preview = true ) {
265 $items = $this->get_items( $type, $preview );
266
267 return is_array( $items ) ? sizeof( $items ) : 0;
268 }
269
270 /**
271 * Check if a section contains an item.
272 *
273 * @param $item_id
274 *
275 * @return bool
276 */
277 public function has_item( $item_id ) {
278 $found = false;
279 $items = $this->get_items();
280
281 if ( $items ) {
282 $found = ! empty( $items[ $item_id ] );
283 }
284
285 return apply_filters(
286 'learn-press/section-has-item',
287 $found,
288 $item_id,
289 $this->get_id(),
290 $this->get_course_id()
291 );
292 }
293
294 public function get_slug() {
295 return $this->get_title() ? sanitize_title( $this->get_title() ) . '-' . $this->get_id() : $this->get_id();
296 }
297
298 /**
299 * Set class section
300 */
301 public function main_class() {
302 $class = array( 'section' );
303
304 if ( ! $this->count_items() ) {
305 $class[] = 'section-empty';
306 }
307
308 $closed = learn_press_cookie_get( 'closed-section-' . $this->get_course_id() );
309
310 if ( $closed && in_array( $this->get_id(), $closed ) ) {
311 $class[] = 'closed';
312 }
313
314 $output = 'class="' . esc_attr( implode( ' ', $class ) ) . '"';
315 echo ' ' . $output;
316 }
317
318 public function set_position( $position ) {
319 $this->_data['position'] = $position;
320 }
321
322 public function get_position() {
323 return ! empty( $this->_data['position'] ) ? absint( $this->_data['position'] ) : 0;
324 }
325 }
326