This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly |
||
3 | |||
4 | /** |
||
5 | * Handles all admin views, assets and navigation. |
||
6 | * |
||
7 | * @package Views |
||
8 | * @author Automattic |
||
9 | * @since 1.0.0 |
||
10 | */ |
||
11 | class Sensei_Admin { |
||
12 | |||
13 | /** |
||
14 | * Constructor. |
||
15 | * @since 1.0.0 |
||
16 | */ |
||
17 | public function __construct () { |
||
18 | |||
19 | //register admin styles |
||
20 | add_action( 'admin_enqueue_scripts', array( $this, 'admin_styles_global' ) ); |
||
21 | |||
22 | //register admin scripts |
||
23 | add_action( 'admin_enqueue_scripts', array( $this, 'register_scripts' ) ); |
||
24 | |||
25 | add_action( 'admin_print_styles', array( $this, 'admin_notices_styles' ) ); |
||
26 | add_action( 'settings_before_form', array( $this, 'install_pages_output' ) ); |
||
27 | add_action( 'admin_menu', array( $this, 'admin_menu' ), 10 ); |
||
28 | add_action( 'menu_order', array( $this, 'admin_menu_order' ) ); |
||
29 | add_action( 'admin_head', array( $this, 'admin_menu_highlight' ) ); |
||
30 | add_action( 'admin_init', array( $this, 'page_redirect' ) ); |
||
31 | add_action( 'admin_init', array( $this, 'sensei_add_custom_menu_items' ) ); |
||
32 | add_action( 'admin_init', array( __CLASS__, 'install_pages' )); |
||
33 | |||
34 | // Duplicate lesson & courses |
||
35 | add_filter( 'post_row_actions', array( $this, 'duplicate_action_link' ), 10, 2 ); |
||
36 | add_action( 'admin_action_duplicate_lesson', array( $this, 'duplicate_lesson_action' ) ); |
||
37 | add_action( 'admin_action_duplicate_course', array( $this, 'duplicate_course_action' ) ); |
||
38 | add_action( 'admin_action_duplicate_course_with_lessons', array( $this, 'duplicate_course_with_lessons_action' ) ); |
||
39 | |||
40 | // Handle lessons list table filtering |
||
41 | add_action( 'restrict_manage_posts', array( $this, 'lesson_filter_options' ) ); |
||
42 | add_filter( 'request', array( $this, 'lesson_filter_actions' ) ); |
||
43 | |||
44 | // Add Sensei items to 'at a glance' widget |
||
45 | add_filter( 'dashboard_glance_items', array( $this, 'glance_items' ), 10, 1 ); |
||
46 | |||
47 | // Handle course and lesson deletions |
||
48 | add_action( 'trash_course', array( $this, 'delete_content' ), 10, 2 ); |
||
49 | add_action( 'trash_lesson', array( $this, 'delete_content' ), 10, 2 ); |
||
50 | |||
51 | // Delete user activity when user is deleted |
||
52 | add_action( 'deleted_user', array( $this, 'delete_user_activity' ), 10, 1 ); |
||
53 | |||
54 | // Add notices to WP dashboard |
||
55 | add_action( 'admin_notices', array( $this, 'theme_compatibility_notices' ) ); |
||
56 | |||
57 | // Reset theme notices when switching themes |
||
58 | add_action( 'switch_theme', array( $this, 'reset_theme_check_notices' ) ); |
||
59 | |||
60 | // Allow Teacher access the admin area |
||
61 | add_filter( 'woocommerce_prevent_admin_access', array( $this, 'admin_access' ) ); |
||
62 | |||
63 | } // End __construct() |
||
64 | |||
65 | /** |
||
66 | * Add items to admin menu |
||
67 | * @since 1.4.0 |
||
68 | * @return void |
||
69 | */ |
||
70 | public function admin_menu() { |
||
71 | global $menu; |
||
72 | $menu_cap = ''; |
||
73 | if( current_user_can( 'manage_sensei' ) ) { |
||
74 | $menu_cap = 'manage_sensei'; |
||
75 | } else { |
||
76 | if( current_user_can( 'manage_sensei_grades' ) ) { |
||
77 | $menu_cap = 'manage_sensei_grades'; |
||
78 | } |
||
79 | } |
||
80 | |||
81 | if( $menu_cap ) { |
||
82 | $menu[] = array( '', 'read', 'separator-sensei', '', 'wp-menu-separator sensei' ); |
||
83 | add_menu_page( 'Sensei', 'Sensei', $menu_cap, 'sensei' , array( Sensei()->analysis, 'analysis_page' ) , '', '50' ); |
||
84 | } |
||
85 | |||
86 | add_submenu_page( 'edit.php?post_type=course', __( 'Order Courses', 'woothemes-sensei' ), __( 'Order Courses', 'woothemes-sensei' ), 'manage_sensei', 'course-order', array( $this, 'course_order_screen' ) ); |
||
87 | add_submenu_page( 'edit.php?post_type=lesson', __( 'Order Lessons', 'woothemes-sensei' ), __( 'Order Lessons', 'woothemes-sensei' ), 'edit_lessons', 'lesson-order', array( $this, 'lesson_order_screen' ) ); |
||
88 | } |
||
89 | |||
90 | /** |
||
91 | * [admin_menu_order description] |
||
92 | * @since 1.4.0 |
||
93 | * @param array $menu_order Existing menu order |
||
94 | * @return array Modified menu order for Sensei |
||
95 | */ |
||
96 | public function admin_menu_order( $menu_order ) { |
||
97 | |||
98 | // Initialize our custom order array |
||
99 | $sensei_menu_order = array(); |
||
100 | |||
101 | // Get the index of our custom separator |
||
102 | $sensei_separator = array_search( 'separator-sensei', $menu_order ); |
||
103 | |||
104 | // Loop through menu order and do some rearranging |
||
105 | foreach ( $menu_order as $index => $item ) : |
||
106 | |||
107 | if ( ( ( 'sensei' ) == $item ) ) : |
||
108 | $sensei_menu_order[] = 'separator-sensei'; |
||
109 | $sensei_menu_order[] = $item; |
||
110 | unset( $menu_order[$sensei_separator] ); |
||
111 | elseif ( !in_array( $item, array( 'separator-sensei' ) ) ) : |
||
112 | $sensei_menu_order[] = $item; |
||
113 | endif; |
||
114 | |||
115 | endforeach; |
||
116 | |||
117 | // Return order |
||
118 | return $sensei_menu_order; |
||
119 | } |
||
120 | |||
121 | /** |
||
122 | * Handle highlighting of admin menu items |
||
123 | * @since 1.4.0 |
||
124 | * @return void |
||
125 | */ |
||
126 | public function admin_menu_highlight() { |
||
127 | global $menu, $submenu, $parent_file, $submenu_file, $self, $post_type, $taxonomy; |
||
128 | |||
129 | $screen = get_current_screen(); |
||
130 | |||
131 | if( empty( $screen ) ){ |
||
132 | return; |
||
133 | } |
||
134 | |||
135 | if ( $screen->base == 'post' && $post_type == 'course' ) { |
||
136 | |||
137 | $parent_file = 'edit.php?post_type=course'; |
||
138 | |||
139 | } elseif ( $screen->base == 'edit-tags' && $taxonomy == 'course-category' ) { |
||
140 | |||
141 | $submenu_file = 'edit-tags.php?taxonomy=course-category&post_type=course'; |
||
142 | $parent_file = 'edit.php?post_type=course'; |
||
143 | |||
144 | } elseif ( $screen->base == 'edit-tags' && $taxonomy == 'module' ) { |
||
145 | |||
146 | $submenu_file = 'edit-tags.php?taxonomy=module'; |
||
147 | $parent_file = 'edit.php?post_type=course'; |
||
148 | |||
149 | } elseif ( in_array( $screen->id, array( 'sensei_message', 'edit-sensei_message' ) ) ) { |
||
150 | |||
151 | $submenu_file = 'edit.php?post_type=sensei_message'; |
||
152 | $parent_file = 'sensei'; |
||
153 | |||
154 | } |
||
155 | } |
||
156 | |||
157 | /** |
||
158 | * Redirect Sensei menu item to Analysis page |
||
159 | * @since 1.4.0 |
||
160 | * @return void |
||
161 | */ |
||
162 | public function page_redirect() { |
||
163 | if( isset( $_GET['page'] ) && $_GET['page'] == 'sensei' ) { |
||
164 | wp_safe_redirect( 'admin.php?page=sensei_analysis' ); |
||
165 | exit; |
||
166 | } |
||
167 | } |
||
168 | |||
169 | /** |
||
170 | * install_pages_output function. |
||
171 | * |
||
172 | * Handles installation of the 2 pages needs for courses and my courses |
||
173 | * |
||
174 | * @access public |
||
175 | * @return void |
||
176 | */ |
||
177 | function install_pages_output() { |
||
178 | |||
179 | if( isset($_GET['sensei_install_complete']) && 'true' == $_GET['sensei_install_complete']) { |
||
180 | |||
181 | ?> |
||
182 | <div id="message" class="updated sensei-message sensei-connect"> |
||
183 | <p><?php _e( '<strong>Congratulations!</strong> – Sensei has been installed and set up.', 'woothemes-sensei' ); ?></p> |
||
184 | <p><a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.woothemes.com/sensei/" data-text="A premium Learning Management plugin for #WordPress that helps you create courses. Beautifully." data-via="WooThemes" data-size="large" data-hashtags="Sensei">Tweet</a> |
||
185 | <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script></p> |
||
186 | </div> |
||
187 | <?php |
||
188 | |||
189 | } |
||
190 | |||
191 | } // End install_pages_output() |
||
192 | |||
193 | |||
194 | /** |
||
195 | * create_page function. |
||
196 | * |
||
197 | * @access public |
||
198 | * @param mixed $slug |
||
199 | * @param mixed $option |
||
200 | * @param string $page_title (default: '') |
||
201 | * @param string $page_content (default: '') |
||
202 | * @param int $post_parent (default: 0) |
||
203 | * @return integer $page_id |
||
204 | */ |
||
205 | function create_page( $slug, $page_title = '', $page_content = '', $post_parent = 0 ) { |
||
206 | global $wpdb; |
||
207 | |||
208 | $page_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM " . $wpdb->posts . " WHERE post_name = %s LIMIT 1;", $slug ) ); |
||
209 | if ( $page_id ) : |
||
210 | return $page_id; |
||
211 | endif; |
||
212 | |||
213 | $page_data = array( |
||
214 | 'post_status' => 'publish', |
||
215 | 'post_type' => 'page', |
||
216 | 'post_author' => 1, |
||
217 | 'post_name' => $slug, |
||
218 | 'post_title' => $page_title, |
||
219 | 'post_content' => $page_content, |
||
220 | 'post_parent' => $post_parent, |
||
221 | 'comment_status' => 'closed' |
||
222 | ); |
||
223 | |||
224 | $page_id = wp_insert_post( $page_data ); |
||
225 | |||
226 | return $page_id; |
||
227 | |||
228 | } // End create_page() |
||
229 | |||
230 | |||
231 | /** |
||
232 | * create_pages function. |
||
233 | * |
||
234 | * @access public |
||
235 | * @return void |
||
236 | */ |
||
237 | function create_pages() { |
||
238 | |||
239 | // Courses page |
||
240 | $new_course_page_id = $this->create_page( esc_sql( _x('courses-overview', 'page_slug', 'woothemes-sensei') ), __('Courses', 'woothemes-sensei'), '' ); |
||
241 | Sensei()->settings->set( 'course_page', $new_course_page_id ); |
||
242 | |||
243 | // User Dashboard page |
||
244 | $new_my_course_page_id = $this->create_page( esc_sql( _x('my-courses', 'page_slug', 'woothemes-sensei') ), __('My Courses', 'woothemes-sensei'), '[sensei_user_courses]' ); |
||
245 | Sensei()->settings->set( 'my_course_page',$new_my_course_page_id ); |
||
246 | |||
247 | } // End create_pages() |
||
248 | |||
249 | /** |
||
250 | * Load the global admin styles for the menu icon and the relevant page icon. |
||
251 | * @access public |
||
252 | * @since 1.0.0 |
||
253 | * @return void |
||
254 | */ |
||
255 | public function admin_styles_global ( $hook ) { |
||
256 | global $post_type; |
||
257 | |||
258 | $allowed_post_types = apply_filters( 'sensei_scripts_allowed_post_types', array( 'lesson', 'course', 'question' ) ); |
||
259 | $allowed_post_type_pages = apply_filters( 'sensei_scripts_allowed_post_type_pages', array( 'edit.php', 'post-new.php', 'post.php', 'edit-tags.php' ) ); |
||
260 | $allowed_pages = apply_filters( 'sensei_scripts_allowed_pages', array( 'sensei_grading', 'sensei_analysis', 'sensei_learners', 'sensei_updates', 'woothemes-sensei-settings', 'lesson-order', 'course-order' ) ); |
||
261 | |||
262 | // Global Styles for icons and menu items |
||
263 | wp_register_style( 'woothemes-sensei-global', Sensei()->plugin_url . 'assets/css/global.css', '', Sensei()->version, 'screen' ); |
||
264 | wp_enqueue_style( 'woothemes-sensei-global' ); |
||
265 | |||
266 | // Select 2 styles |
||
267 | wp_enqueue_style( 'sensei-core-select2', Sensei()->plugin_url . 'assets/css/select2/select2.css', '', Sensei()->version, 'screen' ); |
||
268 | |||
269 | // Test for Write Panel Pages |
||
270 | View Code Duplication | if ( ( ( isset( $post_type ) && in_array( $post_type, $allowed_post_types ) ) && ( isset( $hook ) && in_array( $hook, $allowed_post_type_pages ) ) ) || ( isset( $_GET['page'] ) && in_array( $_GET['page'], $allowed_pages ) ) ) { |
|
271 | |||
272 | wp_register_style( 'woothemes-sensei-admin-custom', Sensei()->plugin_url . 'assets/css/admin-custom.css', '', Sensei()->version, 'screen' ); |
||
273 | wp_enqueue_style( 'woothemes-sensei-admin-custom' ); |
||
274 | |||
275 | } |
||
276 | |||
277 | } // End admin_styles_global() |
||
278 | |||
279 | |||
280 | /** |
||
281 | * Globally register all scripts needed in admin. |
||
282 | * |
||
283 | * The script users should enqueue the script when needed. |
||
284 | * |
||
285 | * @since 1.8.2 |
||
286 | * @access public |
||
287 | */ |
||
288 | public function register_scripts( $hook ){ |
||
0 ignored issues
–
show
|
|||
289 | |||
290 | $screen = get_current_screen(); |
||
291 | |||
292 | // Allow developers to load non-minified versions of scripts |
||
293 | $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; |
||
294 | |||
295 | // Select2 script used to enhance all select boxes |
||
296 | wp_register_script( 'sensei-core-select2', Sensei()->plugin_url . '/assets/js/select2/select2' . $suffix . '.js', array( 'jquery' ), Sensei()->version ); |
||
297 | |||
298 | // load edit module scripts |
||
299 | if( 'edit-module' == $screen->id ){ |
||
300 | |||
301 | wp_enqueue_script( 'sensei-chosen-ajax', Sensei()->plugin_url . 'assets/chosen/ajax-chosen.jquery.min.js', array( 'jquery', 'sensei-chosen' ), Sensei()->version, true ); |
||
302 | |||
303 | } |
||
304 | |||
305 | } |
||
306 | |||
307 | |||
308 | /** |
||
309 | * admin_install_notice function. |
||
310 | * |
||
311 | * @access public |
||
312 | * @return void |
||
313 | */ |
||
314 | function admin_install_notice() { |
||
315 | ?> |
||
316 | <div id="message" class="updated sensei-message sensei-connect"> |
||
317 | |||
318 | <p> |
||
319 | <?php _e( '<strong>Welcome to Sensei</strong> – You\'re almost ready to create some courses!', 'woothemes-sensei' ); ?> |
||
320 | </p> |
||
321 | |||
322 | <p class="submit"> |
||
323 | |||
324 | <a href="<?php echo esc_url( add_query_arg('install_sensei_pages', 'true', admin_url('admin.php?page=woothemes-sensei-settings') ) ); ?>" |
||
325 | class="button-primary"> |
||
326 | |||
327 | <?php _e( 'Install Sensei Pages', 'woothemes-sensei' ); ?> |
||
328 | |||
329 | </a> |
||
330 | |||
331 | <a class="skip button" href="<?php echo esc_url( add_query_arg( 'skip_install_sensei_pages', 'true', admin_url('admin.php?page=woothemes-sensei-settings' ) ) ); ?>"> |
||
332 | |||
333 | <?php _e('Skip setup', 'woothemes-sensei'); ?> |
||
334 | |||
335 | </a> |
||
336 | |||
337 | </p> |
||
338 | </div> |
||
339 | <?php |
||
340 | } // End admin_install_notice() |
||
341 | |||
342 | |||
343 | /** |
||
344 | * admin_installed_notice function. |
||
345 | * |
||
346 | * @access public |
||
347 | * @return void |
||
348 | */ |
||
349 | function admin_installed_notice() { |
||
350 | ?> |
||
351 | <div id="message" class="updated sensei-message sensei-connect"> |
||
352 | |||
353 | <p> |
||
354 | <?php _e( '<strong>Sensei has been installed</strong> – You\'re ready to start creating courses!', 'woothemes-sensei' ); ?> |
||
355 | </p> |
||
356 | |||
357 | <p class="submit"> |
||
358 | <a href="<?php echo admin_url('admin.php?page=woothemes-sensei-settings'); ?>" class="button-primary"><?php _e( 'Settings', 'woothemes-sensei' ); ?></a> <a class="docs button" href="http://www.woothemes.com/sensei-docs/"> |
||
359 | <?php _e('Documentation', 'woothemes-sensei'); ?> |
||
360 | </a> |
||
361 | </p> |
||
362 | |||
363 | <p> |
||
364 | |||
365 | <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.woothemes.com/sensei/" data-text="A premium Learning Management plugin for #WordPress that helps you teach courses online. Beautifully." data-via="WooThemes" data-size="large" data-hashtags="Sensei"> |
||
366 | <?php _e('Tweet', 'woothemes-sensei'); ?> |
||
367 | </a> |
||
368 | |||
369 | <script> |
||
370 | !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs"); |
||
371 | </script> |
||
372 | |||
373 | </p> |
||
374 | |||
375 | </div> |
||
376 | <?php |
||
377 | |||
378 | // Set installed option |
||
379 | update_option('sensei_installed', 0); |
||
380 | } // End admin_installed_notice() |
||
381 | |||
382 | |||
383 | /** |
||
384 | * Language pack install notice. |
||
385 | * |
||
386 | * @since 1.9.0 |
||
387 | */ |
||
388 | public function language_pack_install_notice() { |
||
389 | ?> |
||
390 | <div id="message" class="updated sensei-message sensei-connect"> |
||
391 | <p><?php _e( '<strong>Sensei in your language</strong> – There is a translation available for your language.', 'woothemes-sensei' ); ?><p> |
||
392 | |||
393 | <p class="submit"> |
||
394 | <a href="<?php echo esc_url( Sensei_Language_Pack_Manager::get_install_uri() ); ?>" class="button-primary"><?php _e( 'Install', 'woothemes-sensei' ); ?></a> |
||
395 | <a href="<?php echo esc_url( Sensei_Language_Pack_Manager::get_dismiss_uri() ) ?>" class="docs button"><?php _e( 'Hide this notice', 'woothemes-sensei' ); ?></a> |
||
396 | </p> |
||
397 | </div> |
||
398 | <?php |
||
399 | } |
||
400 | |||
401 | |||
402 | /** |
||
403 | * admin_notices_styles function. |
||
404 | * |
||
405 | * @access public |
||
406 | * @return void |
||
407 | */ |
||
408 | function admin_notices_styles() { |
||
409 | |||
410 | // Installed notices |
||
411 | if ( 1 == get_option( 'sensei_installed' ) ) { |
||
412 | |||
413 | wp_enqueue_style( 'sensei-activation', plugins_url( '/assets/css/activation.css', dirname( __FILE__ ) ), '', Sensei()->version ); |
||
414 | |||
415 | if (get_option('skip_install_sensei_pages')!=1 && Sensei()->get_page_id('course')<1 && !isset($_GET['install_sensei_pages']) && !isset($_GET['skip_install_sensei_pages'])) { |
||
416 | add_action( 'admin_notices', array( $this, 'admin_install_notice' ) ); |
||
417 | } elseif ( !isset($_GET['page']) || $_GET['page']!='woothemes-sensei-settings' ) { |
||
418 | add_action( 'admin_notices', array( $this, 'admin_installed_notice' ) ); |
||
419 | } // End If Statement |
||
420 | |||
421 | } // End If Statement |
||
422 | |||
423 | if ( Sensei_Language_Pack_Manager::has_language_pack_available() ) { |
||
424 | add_action( 'admin_notices', array( $this, 'language_pack_install_notice' ) ); |
||
425 | } |
||
426 | |||
427 | } // End admin_notices_styles() |
||
428 | |||
429 | /** |
||
430 | * Add links for duplicating lessons & courses |
||
431 | * @param array $actions Default actions |
||
432 | * @param object $post Current post |
||
433 | * @return array Modified actions |
||
434 | */ |
||
435 | public function duplicate_action_link( $actions, $post ) { |
||
436 | switch( $post->post_type ) { |
||
437 | case 'lesson': |
||
438 | $confirm = __( 'This will duplicate the lesson quiz and all of its questions. Are you sure you want to do this?', 'woothemes-sensei' ); |
||
439 | $actions['duplicate'] = "<a onclick='return confirm(\"" . $confirm . "\");' href='" . $this->get_duplicate_link( $post->ID ) . "' title='" . esc_attr(__( 'Duplicate this lesson', 'woothemes-sensei' ) ) . "'>" . __('Duplicate', 'woothemes-sensei' ) . "</a>"; |
||
440 | break; |
||
441 | |||
442 | case 'course': |
||
443 | $confirm = __( 'This will duplicate the course lessons along with all of their quizzes and questions. Are you sure you want to do this?', 'woothemes-sensei' ); |
||
444 | $actions['duplicate'] = '<a href="' . $this->get_duplicate_link( $post->ID ) . '" title="' . esc_attr(__( 'Duplicate this course', 'woothemes-sensei' ) ) . '">' . __('Duplicate', 'woothemes-sensei' ) . '</a>'; |
||
445 | $actions['duplicate_with_lessons'] = '<a onclick="return confirm(\'' . $confirm . '\');" href="' . $this->get_duplicate_link( $post->ID, true ) . '" title="' . esc_attr(__( 'Duplicate this course with its lessons', 'woothemes-sensei' ) ) . '">' . __('Duplicate (with lessons)', 'woothemes-sensei' ) . '</a>'; |
||
446 | break; |
||
447 | } |
||
448 | |||
449 | return $actions; |
||
450 | } |
||
451 | |||
452 | /** |
||
453 | * Generate duplicationlink |
||
454 | * @param integer $post_id Post ID |
||
455 | * @param boolean $with_lessons Include lessons or not |
||
456 | * @return string Duplication link |
||
457 | */ |
||
458 | private function get_duplicate_link( $post_id = 0, $with_lessons = false ) { |
||
459 | |||
460 | $post = get_post( $post_id ); |
||
461 | |||
462 | $action = 'duplicate_' . $post->post_type; |
||
463 | |||
464 | if( 'course' == $post->post_type && $with_lessons ) { |
||
465 | $action .= '_with_lessons'; |
||
466 | } |
||
467 | |||
468 | return apply_filters( $action . '_link', admin_url( 'admin.php?action=' . $action . '&post=' . $post_id ), $post_id ); |
||
469 | } |
||
470 | |||
471 | /** |
||
472 | * Duplicate lesson |
||
473 | * @return void |
||
474 | */ |
||
475 | public function duplicate_lesson_action() { |
||
476 | $this->duplicate_content( 'lesson' ); |
||
477 | } |
||
478 | |||
479 | /** |
||
480 | * Duplicate course |
||
481 | * @return void |
||
482 | */ |
||
483 | public function duplicate_course_action() { |
||
484 | $this->duplicate_content( 'course' ); |
||
485 | } |
||
486 | |||
487 | /** |
||
488 | * Duplicate course with lessons |
||
489 | * @return void |
||
490 | */ |
||
491 | public function duplicate_course_with_lessons_action() { |
||
492 | $this->duplicate_content( 'course', true ); |
||
493 | } |
||
494 | |||
495 | /** |
||
496 | * Duplicate content |
||
497 | * @param string $post_type Post type being duplicated |
||
498 | * @param boolean $with_lessons Include lessons or not |
||
499 | * @return void |
||
500 | */ |
||
501 | private function duplicate_content( $post_type = 'lesson', $with_lessons = false ) { |
||
502 | if ( ! isset( $_GET['post'] ) ) { |
||
503 | wp_die( sprintf( __( 'Please supply a %1$s ID.', 'woothemes-sensei' ) ), $post_type ); |
||
504 | } |
||
505 | |||
506 | $post_id = $_GET['post']; |
||
507 | $post = get_post( $post_id ); |
||
508 | |||
509 | if( ! is_wp_error( $post ) ) { |
||
510 | |||
511 | $new_post = $this->duplicate_post( $post ); |
||
512 | |||
513 | if( $new_post && ! is_wp_error( $new_post ) ) { |
||
514 | |||
515 | if( 'lesson' == $new_post->post_type ) { |
||
516 | $this->duplicate_lesson_quizzes( $post_id, $new_post->ID ); |
||
517 | } |
||
518 | |||
519 | if( 'course' == $new_post->post_type && $with_lessons ) { |
||
520 | $this->duplicate_course_lessons( $post_id, $new_post->ID ); |
||
521 | } |
||
522 | |||
523 | $redirect_url = admin_url( 'post.php?post=' . $new_post->ID . '&action=edit' ); |
||
524 | } else { |
||
525 | $redirect_url = admin_url( 'edit.php?post_type=' . $post->post_type . '&message=duplicate_failed' ); |
||
526 | } |
||
527 | |||
528 | wp_safe_redirect( esc_url_raw( $redirect_url ) ); |
||
529 | exit; |
||
530 | } |
||
531 | } |
||
532 | |||
533 | /** |
||
534 | * Duplicate quizzes inside lessons |
||
535 | * @param integer $old_lesson_id ID of original lesson |
||
536 | * @param integer $new_lesson_id ID of duplicate lesson |
||
537 | * @return void |
||
538 | */ |
||
539 | private function duplicate_lesson_quizzes( $old_lesson_id, $new_lesson_id ) { |
||
540 | |||
541 | $old_quiz_id = Sensei()->lesson->lesson_quizzes( $old_lesson_id ); |
||
542 | $old_quiz_questions = Sensei()->lesson->lesson_quiz_questions( $old_quiz_id ); |
||
543 | |||
544 | // duplicate the generic wp post information |
||
545 | $new_quiz = $this->duplicate_post( get_post( $old_quiz_id ), '' ); |
||
546 | |||
547 | //update the new lesson data |
||
548 | add_post_meta( $new_lesson_id, '_lesson_quiz', $new_quiz->ID ); |
||
549 | |||
550 | //update the new quiz data |
||
551 | add_post_meta( $new_quiz->ID, '_quiz_lesson', $new_lesson_id ); |
||
552 | wp_update_post( |
||
553 | array( |
||
554 | 'ID' => $new_quiz->ID, |
||
555 | 'post_parent' => $new_lesson_id |
||
556 | ) |
||
557 | ); |
||
558 | |||
559 | foreach( $old_quiz_questions as $question ) { |
||
560 | |||
561 | // copy the question order over to the new quiz |
||
562 | $old_question_order = get_post_meta( $question->ID, '_quiz_question_order'. $old_quiz_id, true ); |
||
563 | $new_question_order = str_ireplace( $old_quiz_id, $new_quiz->ID , $old_question_order ); |
||
564 | add_post_meta( $question->ID, '_quiz_question_order' . $new_quiz->ID, $new_question_order ); |
||
565 | |||
566 | // Add question to quiz |
||
567 | add_post_meta( $question->ID, '_quiz_id', $new_quiz->ID, false ); |
||
568 | |||
569 | } |
||
570 | } |
||
571 | |||
572 | /** |
||
573 | * Duplicate lessons inside a course |
||
574 | * @param integer $old_course_id ID of original course |
||
575 | * @param integer $new_course_id ID of duplicated course |
||
576 | * @return void |
||
577 | */ |
||
578 | private function duplicate_course_lessons( $old_course_id, $new_course_id ) { |
||
579 | $lesson_args = array( |
||
580 | 'post_type' => 'lesson', |
||
581 | 'posts_per_page' => -1, |
||
582 | 'meta_key' => '_lesson_course', |
||
583 | 'meta_value' => $old_course_id, |
||
584 | 'suppress_filters' => 0 |
||
585 | ); |
||
586 | $lessons = get_posts( $lesson_args ); |
||
587 | |||
588 | foreach( $lessons as $lesson ) { |
||
589 | $new_lesson = $this->duplicate_post( $lesson, '', true ); |
||
590 | add_post_meta( $new_lesson->ID, '_lesson_course', $new_course_id ); |
||
591 | |||
592 | $this->duplicate_lesson_quizzes( $lesson->ID, $new_lesson->ID ); |
||
593 | } |
||
594 | } |
||
595 | |||
596 | /** |
||
597 | * Duplicate post |
||
598 | * @param object $post Post to be duplicated |
||
599 | * @param string $suffix Suffix for duplicated post title |
||
600 | * @param boolean $ignore_course Ignore lesson course when dulicating |
||
601 | * @return object Duplicate post object |
||
602 | */ |
||
603 | private function duplicate_post( $post, $suffix = ' (Duplicate)', $ignore_course = false ) { |
||
604 | |||
605 | $new_post = array(); |
||
606 | |||
607 | foreach( $post as $k => $v ) { |
||
608 | if( ! in_array( $k, array( 'ID', 'post_status', 'post_date', 'post_date_gmt', 'post_name', 'post_modified', 'post_modified_gmt', 'guid', 'comment_count' ) ) ) { |
||
609 | $new_post[ $k ] = $v; |
||
610 | } |
||
611 | } |
||
612 | |||
613 | $new_post['post_title'] .= __( $suffix, 'woothemes-sensei' ); |
||
614 | |||
615 | $new_post['post_date'] = current_time( 'mysql' ); |
||
616 | $new_post['post_date_gmt'] = get_gmt_from_date( $new_post['post_date'] ); |
||
617 | $new_post['post_modified'] = $new_post['post_date']; |
||
618 | $new_post['post_modified_gmt'] = $new_post['post_date_gmt']; |
||
619 | |||
620 | switch( $post->post_type ) { |
||
621 | case 'course': $new_post['post_status'] = 'draft'; break; |
||
622 | case 'lesson': $new_post['post_status'] = 'draft'; break; |
||
623 | case 'quiz': $new_post['post_status'] = 'publish'; break; |
||
624 | case 'question': $new_post['post_status'] = 'publish'; break; |
||
625 | } |
||
626 | |||
627 | // As per wp_update_post() we need to escape the data from the db. |
||
628 | $new_post = wp_slash( $new_post ); |
||
629 | |||
630 | $new_post_id = wp_insert_post( $new_post ); |
||
631 | |||
632 | if( ! is_wp_error( $new_post_id ) ) { |
||
633 | |||
634 | $post_meta = get_post_custom( $post->ID ); |
||
635 | if( $post_meta && count( $post_meta ) > 0 ) { |
||
636 | |||
637 | $ignore_meta = array( '_quiz_lesson', '_quiz_id', '_lesson_quiz' ); |
||
638 | |||
639 | if( $ignore_course ) { |
||
640 | $ignore_meta[] = '_lesson_course'; |
||
641 | } |
||
642 | |||
643 | foreach( $post_meta as $key => $meta ) { |
||
644 | foreach( $meta as $value ) { |
||
645 | $value = maybe_unserialize( $value ); |
||
646 | if( ! in_array( $key, $ignore_meta ) ) { |
||
647 | add_post_meta( $new_post_id, $key, $value ); |
||
648 | } |
||
649 | } |
||
650 | } |
||
651 | } |
||
652 | |||
653 | add_post_meta( $new_post_id, '_duplicate', $post->ID ); |
||
654 | |||
655 | $taxonomies = get_object_taxonomies( $post->post_type, 'objects' ); |
||
656 | |||
657 | foreach ( $taxonomies as $slug => $tax ) { |
||
658 | $terms = get_the_terms( $post->ID, $slug ); |
||
659 | if( isset( $terms ) && is_array( $terms ) && 0 < count( $terms ) ) { |
||
660 | foreach( $terms as $term ) { |
||
661 | wp_set_object_terms( $new_post_id, $term->term_id, $slug, true ); |
||
662 | } |
||
663 | } |
||
664 | } |
||
665 | |||
666 | $new_post = get_post( $new_post_id ); |
||
667 | |||
668 | return $new_post; |
||
669 | } |
||
670 | |||
671 | return false; |
||
672 | } |
||
673 | |||
674 | /** |
||
675 | * Add options to filter lessons |
||
676 | * @return void |
||
677 | */ |
||
678 | public function lesson_filter_options() { |
||
679 | global $typenow; |
||
680 | |||
681 | if( is_admin() && 'lesson' == $typenow ) { |
||
682 | |||
683 | $args = array( |
||
684 | 'post_type' => 'course', |
||
685 | 'post_status' => array('publish', 'pending', 'draft', 'future', 'private'), |
||
686 | 'posts_per_page' => -1, |
||
687 | 'suppress_filters' => 0, |
||
688 | 'orderby' => 'menu_order date', |
||
689 | 'order' => 'ASC', |
||
690 | ); |
||
691 | $courses = get_posts( $args ); |
||
692 | |||
693 | $selected = isset( $_GET['lesson_course'] ) ? $_GET['lesson_course'] : ''; |
||
694 | $course_options = ''; |
||
695 | foreach( $courses as $course ) { |
||
696 | $course_options .= '<option value="' . esc_attr( $course->ID ) . '" ' . selected( $selected, $course->ID, false ) . '>' . get_the_title( $course->ID ) . '</option>'; |
||
697 | } |
||
698 | |||
699 | $output = '<select name="lesson_course" id="dropdown_lesson_course">'; |
||
700 | $output .= '<option value="">'.__( 'Show all courses', 'woothemes-sensei' ).'</option>'; |
||
701 | $output .= $course_options; |
||
702 | $output .= '</select>'; |
||
703 | |||
704 | echo $output; |
||
705 | } |
||
706 | } |
||
707 | |||
708 | /** |
||
709 | * Filter lessons |
||
710 | * @param array $request Current request |
||
711 | * @return array Modified request |
||
712 | */ |
||
713 | public function lesson_filter_actions( $request ) { |
||
714 | global $typenow; |
||
715 | |||
716 | if( is_admin() && 'lesson' == $typenow ) { |
||
717 | $lesson_course = isset( $_GET['lesson_course'] ) ? $_GET['lesson_course'] : ''; |
||
718 | |||
719 | if( $lesson_course ) { |
||
720 | $request['meta_key'] = '_lesson_course'; |
||
721 | $request['meta_value'] = $lesson_course; |
||
722 | $request['meta_compare'] = '='; |
||
723 | } |
||
724 | } |
||
725 | |||
726 | return $request; |
||
727 | } |
||
728 | |||
729 | /** |
||
730 | * Adding Sensei items to 'At a glance' dashboard widget |
||
731 | * @param array $items Existing items |
||
732 | * @return array Updated items |
||
733 | */ |
||
734 | public function glance_items( $items = array() ) { |
||
735 | |||
736 | $types = array( 'course', 'lesson', 'question' ); |
||
737 | |||
738 | foreach( $types as $type ) { |
||
739 | if( ! post_type_exists( $type ) ) continue; |
||
740 | |||
741 | $num_posts = wp_count_posts( $type ); |
||
742 | |||
743 | if( $num_posts ) { |
||
744 | |||
745 | $published = intval( $num_posts->publish ); |
||
746 | $post_type = get_post_type_object( $type ); |
||
747 | |||
748 | $text = _n( '%s ' . $post_type->labels->singular_name, '%s ' . $post_type->labels->name, $published, 'woothemes-sensei' ); |
||
749 | $text = sprintf( $text, number_format_i18n( $published ) ); |
||
750 | |||
751 | if ( current_user_can( $post_type->cap->edit_posts ) ) { |
||
752 | $items[] = sprintf( '<a class="%1$s-count" href="edit.php?post_type=%1$s">%2$s</a>', $type, $text ) . "\n"; |
||
753 | } else { |
||
754 | $items[] = sprintf( '<span class="%1$s-count">%2$s</span>', $type, $text ) . "\n"; |
||
755 | } |
||
756 | } |
||
757 | } |
||
758 | |||
759 | return $items; |
||
760 | } |
||
761 | |||
762 | /** |
||
763 | * Process lesson and course deletion |
||
764 | * @param integer $post_id Post ID |
||
765 | * @param object $post Post object |
||
766 | * @return void |
||
767 | */ |
||
768 | public function delete_content( $post_id, $post ) { |
||
769 | |||
770 | $type = $post->post_type; |
||
771 | |||
772 | if( in_array( $type, array( 'lesson', 'course' ) ) ) { |
||
773 | |||
774 | $meta_key = '_' . $type . '_prerequisite'; |
||
775 | |||
776 | $args = array( |
||
777 | 'post_type' => $type, |
||
778 | 'post_status' => 'any', |
||
779 | 'posts_per_page' => -1, |
||
780 | 'meta_key' => $meta_key, |
||
781 | 'meta_value' => $post_id |
||
782 | ); |
||
783 | |||
784 | $posts = get_posts( $args ); |
||
785 | |||
786 | foreach( $posts as $post ) { |
||
787 | delete_post_meta( $post->ID, $meta_key ); |
||
788 | } |
||
789 | } |
||
790 | } |
||
791 | |||
792 | /** |
||
793 | * Delete all user activity when user is deleted |
||
794 | * @param integer $user_id User ID |
||
795 | * @return void |
||
796 | */ |
||
797 | public function delete_user_activity( $user_id = 0 ) { |
||
798 | if( $user_id ) { |
||
799 | Sensei_Utils::delete_all_user_activity( $user_id ); |
||
800 | } |
||
801 | } |
||
802 | |||
803 | public function render_settings( $settings = array(), $post_id = 0, $group_id = '' ) { |
||
804 | |||
805 | $html = ''; |
||
806 | |||
807 | if( 0 == count( $settings ) ) return $html; |
||
808 | |||
809 | $html .= '<div class="sensei-options-panel">' . "\n"; |
||
810 | |||
811 | $html .= '<div class="options_group" id="' . esc_attr( $group_id ) . '">' . "\n"; |
||
812 | |||
813 | foreach( $settings as $field ) { |
||
814 | |||
815 | $data = ''; |
||
816 | |||
817 | if( $post_id ) { |
||
818 | $data = get_post_meta( $post_id, '_' . $field['id'], true ); |
||
819 | if( ! $data && isset( $field['default'] ) ) { |
||
820 | $data = $field['default']; |
||
821 | } |
||
822 | } else { |
||
823 | $option = get_option( $field['id'] ); |
||
824 | if( isset( $field['default'] ) ) { |
||
825 | $data = $field['default']; |
||
826 | if( $option ) { |
||
827 | $data = $option; |
||
828 | } |
||
829 | } |
||
830 | } |
||
831 | |||
832 | $disabled = ''; |
||
833 | if( isset( $field['disabled'] ) && $field['disabled'] ) { |
||
834 | $disabled = disabled( $field['disabled'], true, false ); |
||
835 | } |
||
836 | |||
837 | if( 'hidden' != $field['type'] ) { |
||
838 | |||
839 | $class_tail = ''; |
||
840 | |||
841 | if( isset( $field['class'] ) ) { |
||
842 | $class_tail .= $field['class']; |
||
843 | } |
||
844 | |||
845 | if( isset( $field['disabled'] ) && $field['disabled'] ) { |
||
846 | $class_tail .= ' disabled'; |
||
847 | } |
||
848 | |||
849 | $html .= '<p class="form-field ' . esc_attr( $field['id'] ) . ' ' . esc_attr( $class_tail ) . '">' . "\n"; |
||
850 | } |
||
851 | |||
852 | if( ! in_array( $field['type'], array( 'hidden', 'checkbox_multi', 'radio' ) ) ) { |
||
853 | $html .= '<label for="' . esc_attr( $field['id'] ) . '">' . "\n"; |
||
854 | } |
||
855 | |||
856 | if( $field['label'] ) { |
||
857 | $html .= '<span class="label">' . esc_html( $field['label'] ) . '</span>'; |
||
858 | } |
||
859 | |||
860 | switch( $field['type'] ) { |
||
861 | case 'text': |
||
862 | case 'password': |
||
863 | $html .= '<input id="' . esc_attr( $field['id'] ) . '" type="' . $field['type'] . '" name="' . esc_attr( $field['id'] ) . '" placeholder="' . esc_attr( $field['placeholder'] ) . '" value="' . $data . '" ' . $disabled . ' />' . "\n"; |
||
864 | break; |
||
865 | |||
866 | case 'number': |
||
867 | |||
868 | $min = ''; |
||
869 | View Code Duplication | if( isset( $field['min'] ) ) { |
|
870 | $min = 'min="' . esc_attr( $field['min'] ) . '"'; |
||
871 | } |
||
872 | |||
873 | $max = ''; |
||
874 | View Code Duplication | if( isset( $field['max'] ) ) { |
|
875 | $max = 'max="' . esc_attr( $field['max'] ) . '"'; |
||
876 | } |
||
877 | |||
878 | $html .= '<input id="' . esc_attr( $field['id'] ) . '" type="' . $field['type'] . '" name="' . esc_attr( $field['id'] ) . '" placeholder="' . esc_attr( $field['placeholder'] ) . '" value="' . $data . '" ' . $min . ' ' . $max . ' class="small-text" ' . $disabled . ' />' . "\n"; |
||
879 | break; |
||
880 | |||
881 | View Code Duplication | case 'textarea': |
|
882 | $html .= '<textarea id="' . esc_attr( $field['id'] ) . '" rows="5" cols="50" name="' . esc_attr( $field['id'] ) . '" placeholder="' . esc_attr( $field['placeholder'] ) . '" ' . $disabled . '>' . $data . '</textarea><br/>'. "\n"; |
||
883 | break; |
||
884 | |||
885 | case 'checkbox': |
||
886 | //backwards compatibility |
||
887 | if( empty( $data ) || 'on' == $data ){ |
||
888 | $checked_value = 'on'; |
||
889 | }elseif( 'yes' == $data ) { |
||
890 | |||
891 | $checked_value = 'yes'; |
||
892 | |||
893 | }elseif( 'auto' == $data ) { |
||
894 | |||
895 | $checked_value = 'auto'; |
||
896 | |||
897 | } else { |
||
898 | $checked_value = 1; |
||
899 | $data = intval( $data ); |
||
900 | } |
||
901 | $checked = checked( $checked_value, $data, false ); |
||
902 | $html .= '<input id="' . esc_attr( $field['id'] ) . '" type="' . $field['type'] . '" name="' . esc_attr( $field['id'] ) . '" ' . $checked . ' ' . $disabled . '/>' . "\n"; |
||
903 | break; |
||
904 | |||
905 | View Code Duplication | case 'checkbox_multi': |
|
906 | foreach( $field['options'] as $k => $v ) { |
||
907 | $checked = false; |
||
908 | if( in_array( $k, $data ) ) { |
||
909 | $checked = true; |
||
910 | } |
||
911 | $html .= '<label for="' . esc_attr( $field['id'] . '_' . $k ) . '"><input type="checkbox" ' . checked( $checked, true, false ) . ' name="' . esc_attr( $field['id'] ) . '[]" value="' . esc_attr( $k ) . '" id="' . esc_attr( $field['id'] . '_' . $k ) . '" ' . $disabled . ' /> ' . $v . '</label> ' . "\n"; |
||
912 | } |
||
913 | break; |
||
914 | |||
915 | View Code Duplication | case 'radio': |
|
916 | foreach( $field['options'] as $k => $v ) { |
||
917 | $checked = false; |
||
918 | if( $k == $data ) { |
||
919 | $checked = true; |
||
920 | } |
||
921 | $html .= '<label for="' . esc_attr( $field['id'] . '_' . $k ) . '"><input type="radio" ' . checked( $checked, true, false ) . ' name="' . esc_attr( $field['id'] ) . '" value="' . esc_attr( $k ) . '" id="' . esc_attr( $field['id'] . '_' . $k ) . '" ' . $disabled . ' /> ' . $v . '</label> ' . "\n"; |
||
922 | } |
||
923 | break; |
||
924 | |||
925 | View Code Duplication | case 'select': |
|
926 | $html .= '<select name="' . esc_attr( $field['id'] ) . '" id="' . esc_attr( $field['id'] ) . '" ' . $disabled . '>' . "\n"; |
||
927 | foreach( $field['options'] as $k => $v ) { |
||
928 | $selected = false; |
||
929 | if( $k == $data ) { |
||
930 | $selected = true; |
||
931 | } |
||
932 | $html .= '<option ' . selected( $selected, true, false ) . ' value="' . esc_attr( $k ) . '">' . $v . '</option>' . "\n"; |
||
933 | } |
||
934 | $html .= '</select><br/>' . "\n"; |
||
935 | break; |
||
936 | |||
937 | View Code Duplication | case 'select_multi': |
|
938 | $html .= '<select name="' . esc_attr( $field['id'] ) . '[]" id="' . esc_attr( $field['id'] ) . '" multiple="multiple" ' . $disabled . '>' . "\n"; |
||
939 | foreach( $field['options'] as $k => $v ) { |
||
940 | $selected = false; |
||
941 | if( in_array( $k, $data ) ) { |
||
942 | $selected = true; |
||
943 | } |
||
944 | $html .= '<option ' . selected( $selected, true, false ) . ' value="' . esc_attr( $k ) . '" />' . $v . '</option>' . "\n"; |
||
945 | } |
||
946 | $html .= '</select> . "\n"'; |
||
947 | break; |
||
948 | |||
949 | View Code Duplication | case 'hidden': |
|
950 | $html .= '<input id="' . esc_attr( $field['id'] ) . '" type="' . $field['type'] . '" name="' . esc_attr( $field['id'] ) . '" value="' . $data . '" ' . $disabled . '/>' . "\n"; |
||
951 | break; |
||
952 | |||
953 | } |
||
954 | |||
955 | if( $field['description'] ) { |
||
956 | $html .= ' <span class="description">' . esc_html( $field['description'] ) . '</span>' . "\n"; |
||
957 | } |
||
958 | |||
959 | if( ! in_array( $field['type'], array( 'hidden', 'checkbox_multi', 'radio' ) ) ) { |
||
960 | $html .= '</label>' . "\n"; |
||
961 | } |
||
962 | |||
963 | if( 'hidden' != $field['type'] ) { |
||
964 | $html .= '</p>' . "\n"; |
||
965 | } |
||
966 | |||
967 | } |
||
968 | |||
969 | $html .= '</div>' . "\n"; |
||
970 | |||
971 | $html .= '</div>' . "\n"; |
||
972 | |||
973 | return $html; |
||
974 | } |
||
975 | |||
976 | /** |
||
977 | * Dsplay Course Order screen |
||
978 | * @return void |
||
979 | */ |
||
980 | public function course_order_screen() { |
||
981 | |||
982 | $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; |
||
983 | wp_enqueue_script( 'woothemes-sensei-settings', esc_url( Sensei()->plugin_url . 'assets/js/settings' . $suffix . '.js' ), array( 'jquery', 'jquery-ui-sortable' ), Sensei()->version ); |
||
984 | |||
985 | ?><div id="course-order" class="wrap course-order"> |
||
986 | <h2><?php _e( 'Order Courses', 'woothemes-sensei' ); ?></h2><?php |
||
987 | |||
988 | $html = ''; |
||
989 | |||
990 | View Code Duplication | if( isset( $_POST['course-order'] ) && 0 < strlen( $_POST['course-order'] ) ) { |
|
991 | $ordered = $this->save_course_order( esc_attr( $_POST['course-order'] ) ); |
||
992 | |||
993 | if( $ordered ) { |
||
994 | $html .= '<div class="updated fade">' . "\n"; |
||
995 | $html .= '<p>' . __( 'The course order has been saved.', 'woothemes-sensei' ) . '</p>' . "\n"; |
||
996 | $html .= '</div>' . "\n"; |
||
997 | } |
||
998 | } |
||
999 | |||
1000 | $courses = Sensei()->course->get_all_courses(); |
||
1001 | |||
1002 | if( 0 < count( $courses ) ) { |
||
1003 | |||
1004 | // order the courses as set by the users |
||
1005 | $all_course_ids = array(); |
||
1006 | foreach( $courses as $course ){ |
||
1007 | |||
1008 | $all_course_ids[] = (string)$course->ID; |
||
1009 | |||
1010 | } |
||
1011 | $order_string = $this->get_course_order(); |
||
1012 | |||
1013 | if( !empty( $order_string ) ){ |
||
1014 | $ordered_course_ids = explode(',' , $order_string ); |
||
1015 | $all_course_ids = array_unique( array_merge( $ordered_course_ids , $all_course_ids ) ); |
||
1016 | } |
||
1017 | |||
1018 | |||
1019 | $html .= '<form id="editgrouping" method="post" action="" class="validate">' . "\n"; |
||
1020 | $html .= '<ul class="sortable-course-list">' . "\n"; |
||
1021 | $count = 0; |
||
1022 | foreach ( $all_course_ids as $course_id ) { |
||
1023 | $course = get_post( $course_id ); |
||
1024 | $count++; |
||
1025 | $class = 'course'; |
||
1026 | if ( $count == 1 ) { $class .= ' first'; } |
||
1027 | if ( $count == count( $course ) ) { $class .= ' last'; } |
||
1028 | if ( $count % 2 != 0 ) { |
||
1029 | $class .= ' alternate'; |
||
1030 | } |
||
1031 | $html .= '<li class="' . esc_attr( $class ) . '"><span rel="' . esc_attr( $course->ID ) . '" style="width: 100%;"> ' . $course->post_title . '</span></li>' . "\n"; |
||
1032 | } |
||
1033 | $html .= '</ul>' . "\n"; |
||
1034 | |||
1035 | $html .= '<input type="hidden" name="course-order" value="' . esc_attr( $order_string ) . '" />' . "\n"; |
||
1036 | $html .= '<input type="submit" class="button-primary" value="' . __( 'Save course order', 'woothemes-sensei' ) . '" />' . "\n"; |
||
1037 | } |
||
1038 | |||
1039 | echo $html; |
||
1040 | |||
1041 | ?></div><?php |
||
1042 | } |
||
1043 | |||
1044 | public function get_course_order() { |
||
1045 | return get_option( 'sensei_course_order', '' ); |
||
1046 | } |
||
1047 | |||
1048 | public function save_course_order( $order_string = '' ) { |
||
1049 | $order = explode( ',', $order_string ); |
||
1050 | |||
1051 | update_option( 'sensei_course_order', $order_string ); |
||
1052 | |||
1053 | $i = 1; |
||
1054 | foreach( $order as $course_id ) { |
||
1055 | |||
1056 | if( $course_id ) { |
||
1057 | |||
1058 | $update_args = array( |
||
1059 | 'ID' => $course_id, |
||
1060 | 'menu_order' => $i, |
||
1061 | ); |
||
1062 | |||
1063 | wp_update_post( $update_args ); |
||
1064 | |||
1065 | ++$i; |
||
1066 | } |
||
1067 | } |
||
1068 | |||
1069 | return true; |
||
1070 | } |
||
1071 | |||
1072 | /** |
||
1073 | * Dsplay Lesson Order screen |
||
1074 | * @return void |
||
1075 | */ |
||
1076 | public function lesson_order_screen() { |
||
1077 | |||
1078 | $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; |
||
1079 | wp_enqueue_script( 'woothemes-sensei-settings', esc_url( Sensei()->plugin_url . 'assets/js/settings' . $suffix . '.js' ), array( 'jquery', 'jquery-ui-sortable' ), Sensei()->version ); |
||
1080 | |||
1081 | ?><div id="lesson-order" class="wrap lesson-order"> |
||
1082 | <h2><?php _e( 'Order Lessons', 'woothemes-sensei' ); ?></h2><?php |
||
1083 | |||
1084 | $html = ''; |
||
1085 | |||
1086 | View Code Duplication | if( isset( $_POST['lesson-order'] ) ) { |
|
1087 | |||
1088 | $ordered = $this->save_lesson_order( esc_attr( $_POST['lesson-order'] ), esc_attr( $_POST['course_id'] ) ); |
||
1089 | |||
1090 | if( $ordered ) { |
||
1091 | $html .= '<div class="updated fade">' . "\n"; |
||
1092 | $html .= '<p>' . __( 'The lesson order has been saved.', 'woothemes-sensei' ) . '</p>' . "\n"; |
||
1093 | $html .= '</div>' . "\n"; |
||
1094 | } |
||
1095 | } |
||
1096 | |||
1097 | $args = array( |
||
1098 | 'post_type' => 'course', |
||
1099 | 'post_status' => array('publish', 'draft', 'future', 'private'), |
||
1100 | 'posts_per_page' => -1, |
||
1101 | 'orderby' => 'name', |
||
1102 | 'order' => 'ASC', |
||
1103 | ); |
||
1104 | $courses = get_posts( $args ); |
||
1105 | |||
1106 | $html .= '<form action="' . admin_url( 'edit.php' ) . '" method="get">' . "\n"; |
||
1107 | $html .= '<input type="hidden" name="post_type" value="lesson" />' . "\n"; |
||
1108 | $html .= '<input type="hidden" name="page" value="lesson-order" />' . "\n"; |
||
1109 | $html .= '<select id="lesson-order-course" name="course_id">' . "\n"; |
||
1110 | $html .= '<option value="">' . __( 'Select a course', 'woothemes-sensei' ) . '</option>' . "\n"; |
||
1111 | |||
1112 | foreach( $courses as $course ) { |
||
1113 | $course_id = ''; |
||
1114 | if( isset( $_GET['course_id'] ) ) { |
||
1115 | $course_id = intval( $_GET['course_id'] ); |
||
1116 | } |
||
1117 | $html .= '<option value="' . esc_attr( intval( $course->ID ) ) . '" ' . selected( $course->ID, $course_id, false ) .'>' . get_the_title( $course->ID ) . '</option>' . "\n"; |
||
1118 | } |
||
1119 | |||
1120 | $html .= '</select>' . "\n"; |
||
1121 | $html .= '<input type="submit" class="button-primary lesson-order-select-course-submit" value="' . __( 'Select', 'woothemes-sensei' ) . '" />' . "\n"; |
||
1122 | $html .= '</form>' . "\n"; |
||
1123 | |||
1124 | $html .= '<script type="text/javascript">' . "\n"; |
||
1125 | $html .= 'jQuery( \'#lesson-order-course\' ).select2({width:"resolve"});' . "\n"; |
||
1126 | $html .= '</script>' . "\n"; |
||
1127 | |||
1128 | if( isset( $_GET['course_id'] ) ) { |
||
1129 | $course_id = intval( $_GET['course_id'] ); |
||
1130 | if( $course_id > 0 ) { |
||
1131 | |||
1132 | $order_string = $this->get_lesson_order( $course_id ); |
||
1133 | |||
1134 | $html .= '<form id="editgrouping" method="post" action="" class="validate">' . "\n"; |
||
1135 | |||
1136 | $displayed_lessons = array(); |
||
1137 | |||
1138 | $modules = Sensei()->modules->get_course_modules( intval( $course_id ) ); |
||
1139 | |||
1140 | foreach( $modules as $module ) { |
||
1141 | |||
1142 | $args = array( |
||
1143 | 'post_type' => 'lesson', |
||
1144 | 'post_status' => 'publish', |
||
1145 | 'posts_per_page' => -1, |
||
1146 | 'meta_query' => array( |
||
1147 | array( |
||
1148 | 'key' => '_lesson_course', |
||
1149 | 'value' => intval( $course_id ), |
||
1150 | 'compare' => '=' |
||
1151 | ) |
||
1152 | ), |
||
1153 | 'tax_query' => array( |
||
1154 | array( |
||
1155 | 'taxonomy' => Sensei()->modules->taxonomy, |
||
1156 | 'field' => 'id', |
||
1157 | 'terms' => intval( $module->term_id ) |
||
1158 | ) |
||
1159 | ), |
||
1160 | 'meta_key' => '_order_module_' . $module->term_id, |
||
1161 | 'orderby' => 'meta_value_num date', |
||
1162 | 'order' => 'ASC', |
||
1163 | 'suppress_filters' => 0 |
||
1164 | ); |
||
1165 | |||
1166 | $lessons = get_posts( $args ); |
||
1167 | |||
1168 | if( count( $lessons ) > 0 ) { |
||
1169 | $html .= '<h3>' . $module->name . '</h3>' . "\n"; |
||
1170 | $html .= '<ul class="sortable-lesson-list" data-module_id="' . $module->term_id . '">' . "\n"; |
||
1171 | |||
1172 | $count = 0; |
||
1173 | View Code Duplication | foreach( $lessons as $lesson ) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
1174 | $count++; |
||
1175 | $class = 'lesson'; |
||
1176 | if ( $count == 1 ) { $class .= ' first'; } |
||
1177 | if ( $count == count( $lesson ) ) { $class .= ' last'; } |
||
1178 | if ( $count % 2 != 0 ) { |
||
1179 | $class .= ' alternate'; |
||
1180 | } |
||
1181 | |||
1182 | $html .= '<li class="' . esc_attr( $class ) . '"><span rel="' . esc_attr( $lesson->ID ) . '" style="width: 100%;"> ' . $lesson->post_title . '</span></li>' . "\n"; |
||
1183 | |||
1184 | $displayed_lessons[] = $lesson->ID; |
||
1185 | } |
||
1186 | |||
1187 | $html .= '</ul>' . "\n"; |
||
1188 | |||
1189 | $html .= '<input type="hidden" name="lesson-order-module-' . $module->term_id . '" value="" />' . "\n"; |
||
1190 | } |
||
1191 | } |
||
1192 | |||
1193 | |||
1194 | $lessons = Sensei()->course->course_lessons( $course_id ); |
||
1195 | |||
1196 | if( 0 < count( $lessons ) ) { |
||
1197 | |||
1198 | //get module term ids, will be used to exclude lessons |
||
1199 | $module_items_ids = array(); |
||
1200 | if( ! empty( $modules ) ) { |
||
1201 | foreach ($modules as $module) { |
||
1202 | $module_items_ids[] = $module->term_id; |
||
1203 | } |
||
1204 | } |
||
1205 | |||
1206 | View Code Duplication | if( 0 < count( $displayed_lessons ) ) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
1207 | $html .= '<h3>' . __( 'Other Lessons', 'woothemes-sensei' ) . '</h3>' . "\n"; |
||
1208 | } |
||
1209 | |||
1210 | $html .= '<ul class="sortable-lesson-list" data-module_id="0">' . "\n"; |
||
1211 | $count = 0; |
||
1212 | foreach ( $lessons as $lesson ) { |
||
1213 | |||
1214 | // if lesson belongs to one fo the course modules then exclude it here |
||
1215 | // as it is listed above |
||
1216 | if( has_term( $module_items_ids, 'module', $lesson->ID ) ){ |
||
1217 | |||
1218 | continue; |
||
1219 | |||
1220 | } |
||
1221 | |||
1222 | $count++; |
||
1223 | $class = 'lesson'; |
||
1224 | if ( $count == 1 ) { $class .= ' first'; } |
||
1225 | if ( $count == count( $lesson ) ) { $class .= ' last'; } |
||
1226 | if ( $count % 2 != 0 ) { |
||
1227 | |||
1228 | $class .= ' alternate'; |
||
1229 | |||
1230 | } |
||
1231 | $html .= '<li class="' . esc_attr( $class ) . '"><span rel="' . esc_attr( $lesson->ID ) . '" style="width: 100%;"> ' . $lesson->post_title . '</span></li>' . "\n"; |
||
1232 | |||
1233 | $displayed_lessons[] = $lesson->ID; |
||
1234 | } |
||
1235 | $html .= '</ul>' . "\n"; |
||
1236 | View Code Duplication | } else { |
|
1237 | if( 0 == count( $displayed_lessons ) ) { |
||
1238 | $html .= '<p><em>' . __( 'There are no lessons in this course.', 'woothemes-sensei' ) . '</em></p>'; |
||
1239 | } |
||
1240 | } |
||
1241 | |||
1242 | if( 0 < count( $displayed_lessons ) ) { |
||
1243 | $html .= '<input type="hidden" name="lesson-order" value="' . esc_attr( $order_string ) . '" />' . "\n"; |
||
1244 | $html .= '<input type="hidden" name="course_id" value="' . $course_id . '" />' . "\n"; |
||
1245 | $html .= '<input type="submit" class="button-primary" value="' . __( 'Save lesson order', 'woothemes-sensei' ) . '" />' . "\n"; |
||
1246 | } |
||
1247 | } |
||
1248 | } |
||
1249 | |||
1250 | echo $html; |
||
1251 | |||
1252 | ?></div><?php |
||
1253 | } |
||
1254 | |||
1255 | public function get_lesson_order( $course_id = 0 ) { |
||
1256 | $order_string = get_post_meta( $course_id, '_lesson_order', true ); |
||
1257 | return $order_string; |
||
1258 | } |
||
1259 | |||
1260 | public function save_lesson_order( $order_string = '', $course_id = 0 ) { |
||
1261 | |||
1262 | if( $course_id ) { |
||
1263 | |||
1264 | $modules = Sensei()->modules->get_course_modules( intval( $course_id ) ); |
||
1265 | |||
1266 | foreach( $modules as $module ) { |
||
1267 | |||
1268 | |||
1269 | if( isset( $_POST[ 'lesson-order-module-' . $module->term_id ] ) |
||
1270 | && $_POST[ 'lesson-order-module-' . $module->term_id ] ) { |
||
1271 | |||
1272 | $order = explode( ',', $_POST[ 'lesson-order-module-' . $module->term_id ] ); |
||
1273 | $i = 1; |
||
1274 | foreach( $order as $lesson_id ) { |
||
1275 | |||
1276 | if( $lesson_id ) { |
||
1277 | update_post_meta( $lesson_id, '_order_module_' . $module->term_id, $i ); |
||
1278 | ++$i; |
||
1279 | } |
||
1280 | |||
1281 | }// end for each order |
||
1282 | |||
1283 | }// end if |
||
1284 | |||
1285 | } // end for each modules |
||
1286 | |||
1287 | |||
1288 | if( $order_string ) { |
||
1289 | update_post_meta( $course_id, '_lesson_order', $order_string ); |
||
1290 | |||
1291 | $order = explode( ',', $order_string ); |
||
1292 | |||
1293 | $i = 1; |
||
1294 | foreach( $order as $lesson_id ) { |
||
1295 | if( $lesson_id ) { |
||
1296 | update_post_meta( $lesson_id, '_order_' . $course_id, $i ); |
||
1297 | ++$i; |
||
1298 | } |
||
1299 | } |
||
1300 | } |
||
1301 | |||
1302 | return true; |
||
1303 | } |
||
1304 | |||
1305 | return false; |
||
1306 | } |
||
1307 | |||
1308 | function sensei_add_custom_menu_items() { |
||
1309 | global $pagenow; |
||
1310 | |||
1311 | if( 'nav-menus.php' == $pagenow ) { |
||
1312 | add_meta_box( 'add-sensei-links', 'Sensei', array( $this, 'wp_nav_menu_item_sensei_links_meta_box' ), 'nav-menus', 'side', 'low' ); |
||
1313 | } |
||
1314 | } |
||
1315 | |||
1316 | function wp_nav_menu_item_sensei_links_meta_box( $object ) { |
||
1317 | global $nav_menu_selected_id; |
||
1318 | |||
1319 | $menu_items = array( |
||
1320 | '#senseicourses' => __( 'Courses', 'woothemes-sensei' ), |
||
1321 | '#senseilessons' => __( 'Lessons', 'woothemes-sensei' ), |
||
1322 | '#senseimycourses' => __( 'My Courses', 'woothemes-sensei' ), |
||
1323 | '#senseilearnerprofile' => __( 'My Profile', 'woothemes-sensei' ), |
||
1324 | '#senseimymessages' => __( 'My Messages', 'woothemes-sensei' ), |
||
1325 | '#senseiloginlogout' => __( 'Login', 'woothemes-sensei' ) . '|' . __( 'Logout', 'woothemes-sensei' ) |
||
1326 | ); |
||
1327 | |||
1328 | $menu_items_obj = array(); |
||
1329 | foreach ( $menu_items as $value => $title ) { |
||
1330 | $menu_items_obj[$title] = new stdClass; |
||
1331 | $menu_items_obj[$title]->object_id = esc_attr( $value ); |
||
1332 | $menu_items_obj[$title]->title = esc_attr( $title ); |
||
1333 | $menu_items_obj[$title]->url = esc_attr( $value ); |
||
1334 | $menu_items_obj[$title]->description = 'description'; |
||
1335 | $menu_items_obj[$title]->db_id = 0; |
||
1336 | $menu_items_obj[$title]->object = 'sensei'; |
||
1337 | $menu_items_obj[$title]->menu_item_parent = 0; |
||
1338 | $menu_items_obj[$title]->type = 'custom'; |
||
1339 | $menu_items_obj[$title]->target = ''; |
||
1340 | $menu_items_obj[$title]->attr_title = ''; |
||
1341 | $menu_items_obj[$title]->classes = array(); |
||
1342 | $menu_items_obj[$title]->xfn = ''; |
||
1343 | } |
||
1344 | |||
1345 | $walker = new Walker_Nav_Menu_Checklist( array() ); |
||
1346 | ?> |
||
1347 | |||
1348 | <div id="sensei-links" class="senseidiv taxonomydiv"> |
||
1349 | <div id="tabs-panel-sensei-links-all" class="tabs-panel tabs-panel-view-all tabs-panel-active"> |
||
1350 | |||
1351 | <ul id="sensei-linkschecklist" class="list:sensei-links categorychecklist form-no-clear"> |
||
1352 | <?php echo walk_nav_menu_tree( array_map( 'wp_setup_nav_menu_item', $menu_items_obj ), 0, (object)array( 'walker' => $walker ) ); ?> |
||
1353 | </ul> |
||
1354 | |||
1355 | </div> |
||
1356 | <p class="button-controls"> |
||
1357 | <span class="add-to-menu"> |
||
1358 | <input type="submit"<?php disabled( $nav_menu_selected_id, 0 ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e( 'Add to Menu', 'woothemes-sensei' ); ?>" name="add-sensei-links-menu-item" id="submit-sensei-links" /> |
||
1359 | <span class="spinner"></span> |
||
1360 | </span> |
||
1361 | </p> |
||
1362 | </div><!-- .senseidiv --> |
||
1363 | <?php |
||
1364 | } |
||
1365 | |||
1366 | /** |
||
1367 | * Adding admin notice if the current |
||
1368 | * installed theme is not compatible |
||
1369 | * |
||
1370 | * @return void |
||
1371 | */ |
||
1372 | public function theme_compatibility_notices() { |
||
1373 | |||
1374 | if( isset( $_GET['sensei_hide_notice'] ) ) { |
||
1375 | switch( esc_attr( $_GET['sensei_hide_notice'] ) ) { |
||
1376 | case 'menu_settings': add_user_meta( get_current_user_id(), 'sensei_hide_menu_settings_notice', true ); break; |
||
1377 | case 'theme_check': add_user_meta( get_current_user_id(), 'sensei_hide_theme_check_notice', true ); break; |
||
1378 | } |
||
1379 | } |
||
1380 | |||
1381 | // white list templates that are already support by default and do not show notice for them |
||
1382 | $template = get_option( 'template' ); |
||
1383 | |||
1384 | $white_list = array( 'twentyeleven', |
||
1385 | 'twentytwelve', |
||
1386 | 'twentyfourteen', |
||
1387 | 'twentyfifteen', |
||
1388 | 'twentysixteen', |
||
1389 | 'storefront', |
||
1390 | ); |
||
1391 | |||
1392 | if ( in_array( $template, $white_list ) ) { |
||
1393 | |||
1394 | return; |
||
1395 | |||
1396 | } |
||
1397 | |||
1398 | // don't show the notice if the user chose to hide it |
||
1399 | $hide_theme_check_notice = get_user_meta( get_current_user_id(), 'sensei_hide_theme_check_notice', true ); |
||
1400 | if( $hide_theme_check_notice ) { |
||
1401 | |||
1402 | return; |
||
1403 | |||
1404 | } |
||
1405 | |||
1406 | // show the notice for themes not supporting sensei |
||
1407 | if ( ! current_theme_supports( 'sensei' ) ) { |
||
1408 | ?> |
||
1409 | |||
1410 | <div id="message" class="error sensei-message sensei-connect"> |
||
1411 | <p> |
||
1412 | <strong> |
||
1413 | |||
1414 | <?php _e('Your theme does not declare Sensei support', 'woothemes-sensei' ); ?> |
||
1415 | |||
1416 | </strong> – |
||
1417 | |||
1418 | <?php _e( 'if you encounter layout issues please read our integration guide or choose a ', 'woothemes-sensei' ); ?> |
||
1419 | |||
1420 | <a href="http://www.woothemes.com/product-category/themes/sensei-themes/"> <?php _e( 'Sensei theme', 'woothemes-sensei' ) ?> </a> |
||
1421 | |||
1422 | :) |
||
1423 | |||
1424 | </p> |
||
1425 | <p class="submit"> |
||
1426 | <a href="<?php echo esc_url( apply_filters( 'sensei_docs_url', 'http://docs.woothemes.com/document/sensei-and-theme-compatibility/', 'theme-compatibility' ) ); ?>" class="button-primary"> |
||
1427 | |||
1428 | <?php _e( 'Theme Integration Guide', 'woothemes-sensei' ); ?></a> <a class="skip button" href="<?php echo esc_url( add_query_arg( 'sensei_hide_notice', 'theme_check' ) ); ?>"><?php _e( 'Hide this notice', 'woothemes-sensei' ); ?> |
||
1429 | |||
1430 | </a> |
||
1431 | </p> |
||
1432 | </div> |
||
1433 | <?php |
||
1434 | } |
||
1435 | } |
||
1436 | |||
1437 | /** |
||
1438 | * Reset theme check notice |
||
1439 | * @return void |
||
1440 | */ |
||
1441 | public function reset_theme_check_notices() { |
||
1442 | global $current_user; |
||
1443 | wp_get_current_user(); |
||
1444 | $user_id = $current_user->ID; |
||
1445 | |||
1446 | delete_user_meta( $user_id, 'sensei_hide_theme_check_notice' ); |
||
1447 | } |
||
1448 | |||
1449 | /** |
||
1450 | * Set Sensei users access to the admin area when WooCommerce is installed |
||
1451 | * Allow Teachers to access the admin area |
||
1452 | * |
||
1453 | * @param bool $prevent_access |
||
1454 | * @return bool |
||
1455 | */ |
||
1456 | public function admin_access( $prevent_access ) { |
||
1457 | if ( current_user_can( 'manage_sensei_grades' ) ) { |
||
1458 | return false; |
||
1459 | } |
||
1460 | |||
1461 | return $prevent_access; |
||
1462 | } |
||
1463 | |||
1464 | /** |
||
1465 | * Hooked onto admin_init. Listens for install_sensei_pages and skip_install_sensei_pages query args |
||
1466 | * on the sensei settings page. |
||
1467 | * |
||
1468 | * The function |
||
1469 | * |
||
1470 | * @since 1.8.7 |
||
1471 | */ |
||
1472 | public static function install_pages(){ |
||
1473 | |||
1474 | // only fire on the settings page |
||
1475 | if( ! isset( $_GET['page'] ) |
||
1476 | || 'woothemes-sensei-settings' != $_GET['page'] |
||
1477 | || 1 == get_option('skip_install_sensei_pages') ){ |
||
1478 | |||
1479 | return; |
||
1480 | |||
1481 | } |
||
1482 | |||
1483 | // Install/page installer |
||
1484 | $install_complete = false; |
||
1485 | |||
1486 | // Add pages button |
||
1487 | $settings_url = ''; |
||
1488 | if (isset($_GET['install_sensei_pages']) && $_GET['install_sensei_pages']) { |
||
1489 | |||
1490 | Sensei()->admin->create_pages(); |
||
1491 | |||
1492 | update_option('skip_install_sensei_pages', 1); |
||
1493 | |||
1494 | $install_complete = true; |
||
1495 | $settings_url = remove_query_arg('install_sensei_pages'); |
||
1496 | |||
1497 | // Skip button |
||
1498 | } elseif (isset($_GET['skip_install_sensei_pages']) && $_GET['skip_install_sensei_pages']) { |
||
1499 | |||
1500 | update_option('skip_install_sensei_pages', 1); |
||
1501 | $install_complete = true; |
||
1502 | $settings_url = remove_query_arg('skip_install_sensei_pages'); |
||
1503 | |||
1504 | } |
||
1505 | |||
1506 | if ($install_complete) { |
||
1507 | |||
1508 | // refresh the rewrite rules on init |
||
1509 | update_option('sensei_flush_rewrite_rules', '1'); |
||
1510 | |||
1511 | // Set installed option |
||
1512 | update_option('sensei_installed', 0); |
||
1513 | |||
1514 | $complete_url = add_query_arg( 'sensei_install_complete', 'true', $settings_url ); |
||
1515 | wp_redirect( $complete_url ); |
||
1516 | |||
1517 | } |
||
1518 | |||
1519 | }// end install_pages |
||
1520 | |||
1521 | } // End Class |
||
1522 | |||
1523 | /** |
||
1524 | * Legacy Class WooThemes_Sensei_Admin |
||
1525 | * @ignore only for backward compatibility |
||
1526 | * @since 1.9.0 |
||
1527 | * @ignore |
||
1528 | */ |
||
1529 | class WooThemes_Sensei_Admin extends Sensei_Admin{ } |
||
1530 |
This check looks from parameters that have been defined for a function or method, but which are not used in the method body.