public function single_lesson_handler() { global $post; // Preview Lessons shouldn't ignore this rule. if (WooThemes_Sensei_Utils::is_preview_lesson($post->ID)) { return; } $course_id = get_post_meta($post->ID, '_lesson_course', true); // User already started this course, so ideally, we shouldn't restrict access. if (WooThemes_Sensei_Utils::user_started_course($post->ID, wp_get_current_user()->ID)) { return; } // This happens if the lesson isn't locked itself. if (memberful_can_user_access_post(wp_get_current_user()->ID, $post->ID)) { if (!memberful_can_user_access_post(wp_get_current_user()->ID, $course_id)) { // The user doesn't have access to this post, so he shouldn't have actions on it. remove_all_actions('sensei_lesson_single_meta'); // Now the funky filtering part. remove_action('the_content', 'memberful_wp_protect_content'); add_action('the_content', array($this, 'single_lesson_special_content_filter'), -10); } } else { // The user doesn't have access to this post, so he shouldn't have actions on it. remove_all_actions('sensei_lesson_single_meta'); } }
/** * check_user_permissions function. * * @access public * @param string $page (default: '') * @param array $data (default: array()) * @return void */ public function check_user_permissions($page = '', $data = array()) { // REFACTOR global $current_user, $post; if (!isset($current_user)) { return; } // Get User Meta get_currentuserinfo(); $user_allowed = false; switch ($page) { case 'course-single': // check for prerequisite course or lesson, $course_prerequisite_id = (int) get_post_meta($post->ID, '_course_prerequisite', true); $update_course = $this->woocommerce_course_update($post->ID); // Count completed lessons if (0 < absint($course_prerequisite_id)) { $prerequisite_complete = WooThemes_Sensei_Utils::user_completed_course($course_prerequisite_id, $current_user->ID); } else { $prerequisite_complete = true; } // End If Statement // Handles restrictions if (!$prerequisite_complete && 0 < absint($course_prerequisite_id)) { $this->permissions_message['title'] = get_the_title($post->ID) . ': ' . __('Restricted Access', 'woothemes-sensei'); $course_link = '<a href="' . esc_url(get_permalink($course_prerequisite_id)) . '">' . __('course', 'woothemes-sensei') . '</a>'; $this->permissions_message['message'] = sprintf(__('Please complete the previous %1$s before taking this course.', 'woothemes-sensei'), $course_link); } else { $user_allowed = true; } // End If Statement break; case 'lesson-single': // Check for WC purchase $lesson_course_id = get_post_meta($post->ID, '_lesson_course', true); $update_course = $this->woocommerce_course_update($lesson_course_id); $is_preview = WooThemes_Sensei_Utils::is_preview_lesson($post->ID); if ($this->access_settings() && WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID)) { $user_allowed = true; } elseif ($this->access_settings() && false == $is_preview) { $user_allowed = true; } else { $this->permissions_message['title'] = get_the_title($post->ID) . ': ' . __('Restricted Access', 'woothemes-sensei'); $course_link = '<a href="' . esc_url(get_permalink($lesson_course_id)) . '">' . __('course', 'woothemes-sensei') . '</a>'; $wc_post_id = get_post_meta($lesson_course_id, '_course_woocommerce_product', true); if (WooThemes_Sensei_Utils::sensei_is_woocommerce_activated() && 0 < $wc_post_id) { if ($is_preview) { $this->permissions_message['message'] = sprintf(__('This is a preview lesson. Please purchase the %1$s to access all lessons.', 'woothemes-sensei'), $course_link); } else { $this->permissions_message['message'] = apply_filters('sensei_please_purchase_course_text', sprintf(__('Please purchase the %1$s before starting this Lesson.', 'woothemes-sensei'), $course_link)); } } else { if ($is_preview) { $this->permissions_message['message'] = sprintf(__('This is a preview lesson. Please sign up for the %1$s to access all lessons.', 'woothemes-sensei'), $course_link); } else { /** This filter is documented in class-woothemes-sensei-frontend.php */ $this->permissions_message['message'] = apply_filters('sensei_please_sign_up_text', sprintf(__('Please sign up for the %1$s before starting the lesson.', 'woothemes-sensei'), $course_link)); } } // End If Statement } // End If Statement break; case 'quiz-single': $lesson_id = get_post_meta($post->ID, '_quiz_lesson', true); $lesson_course_id = get_post_meta($lesson_id, '_lesson_course', true); $update_course = $this->woocommerce_course_update($lesson_course_id); if ($this->access_settings() && WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID) || sensei_all_access()) { // Check for prerequisite lesson for this quiz $lesson_prerequisite_id = (int) get_post_meta($lesson_id, '_lesson_prerequisite', true); $user_lesson_prerequisite_complete = WooThemes_Sensei_Utils::user_completed_lesson($lesson_prerequisite_id, $current_user->ID); // Handle restrictions if (sensei_all_access()) { $user_allowed = true; } else { if (0 < absint($lesson_prerequisite_id) && !$user_lesson_prerequisite_complete) { $this->permissions_message['title'] = get_the_title($post->ID) . ': ' . __('Restricted Access', 'woothemes-sensei'); $lesson_link = '<a href="' . esc_url(get_permalink($lesson_prerequisite_id)) . '">' . __('lesson', 'woothemes-sensei') . '</a>'; $this->permissions_message['message'] = sprintf(__('Please complete the previous %1$s before taking this Quiz.', 'woothemes-sensei'), $lesson_link); } else { $user_allowed = true; } // End If Statement } // End If Statement } elseif ($this->access_settings()) { // Check if the user has started the course if (is_user_logged_in() && !WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID) && (isset($this->settings->settings['access_permission']) && true == $this->settings->settings['access_permission'])) { $user_allowed = false; $this->permissions_message['title'] = get_the_title($post->ID) . ': ' . __('Restricted Access', 'woothemes-sensei'); $course_link = '<a href="' . esc_url(get_permalink($lesson_course_id)) . '">' . __('course', 'woothemes-sensei') . '</a>'; $wc_post_id = get_post_meta($lesson_course_id, '_course_woocommerce_product', true); if (WooThemes_Sensei_Utils::sensei_is_woocommerce_activated() && 0 < $wc_post_id) { $this->permissions_message['message'] = sprintf(__('Please purchase the %1$s before starting this Quiz.', 'woothemes-sensei'), $course_link); } else { $this->permissions_message['message'] = sprintf(__('Please sign up for the %1$s before starting this Quiz.', 'woothemes-sensei'), $course_link); } // End If Statement } else { $user_allowed = true; } // End If Statement } else { $this->permissions_message['title'] = get_the_title($post->ID) . ': ' . __('Restricted Access', 'woothemes-sensei'); $course_link = '<a href="' . esc_url(get_permalink(get_post_meta(get_post_meta($post->ID, '_quiz_lesson', true), '_lesson_course', true))) . '">' . __('course', 'woothemes-sensei') . '</a>'; $this->permissions_message['message'] = sprintf(__('Please sign up for the %1$s before taking this Quiz.', 'woothemes-sensei'), $course_link); } // End If Statement break; default: $user_allowed = true; break; } // End Switch Statement /** * filter the permissions message shown on sensei post types. * * @since 1.8.7 * * @param array $permissions_message{ * * @type string $title * @type string $message * * } * @param string $post_id */ $this->permissions_message = apply_filters('sensei_permissions_message', $this->permissions_message, $post->ID); if (sensei_all_access() || WooThemes_Sensei_Utils::is_preview_lesson($post->ID)) { $user_allowed = true; } return apply_filters('sensei_access_permissions', $user_allowed); }
$single_lesson_complete = WooThemes_Sensei_Utils::user_completed_lesson($lesson_item->ID, $current_user->ID); if ($single_lesson_complete) { $post_classes[] = 'lesson-completed'; } // End If Statement } // End If Statement // Get Lesson data $complexity_array = $woothemes_sensei->post_types->lesson->lesson_complexities(); $lesson_length = get_post_meta($lesson_item->ID, '_lesson_length', true); $lesson_complexity = get_post_meta($lesson_item->ID, '_lesson_complexity', true); if ('' != $lesson_complexity) { $lesson_complexity = $complexity_array[$lesson_complexity]; } $user_info = get_userdata(absint($lesson_item->post_author)); $is_preview = WooThemes_Sensei_Utils::is_preview_lesson($lesson_item->ID); $preview_label = ''; if ($is_preview && !$is_user_taking_course) { $preview_label = $woothemes_sensei->frontend->sensei_lesson_preview_title_text($post->ID); $preview_label = '<span class="preview-heading">' . $preview_label . '</span>'; $post_classes[] = 'lesson-preview'; } $html .= '<article class="' . esc_attr(join(' ', get_post_class($post_classes, $lesson_item->ID))) . '">'; $html .= '<header>'; $html .= '<h2><a href="' . esc_url(get_permalink($lesson_item->ID)) . '" title="' . esc_attr(sprintf(__('Start %s', 'woothemes-sensei'), $lesson_item->post_title)) . '">'; if (apply_filters('sensei_show_lesson_numbers', $show_lesson_numbers)) { $html .= '<span class="lesson-number">' . $lesson_count . '. </span>'; } $html .= esc_html(sprintf(__('%s', 'woothemes-sensei'), $lesson_item->post_title)) . $preview_label . '</a></h2>'; $html .= '<p class="lesson-meta">'; if ('' != $lesson_length) {
public function sensei_course_preview_titles($title, $lesson_id) { global $post, $current_user, $woothemes_sensei; $course_id = $post->ID; $title_text = ''; if (method_exists('WooThemes_Sensei_Utils', 'is_preview_lesson') && WooThemes_Sensei_Utils::is_preview_lesson($lesson_id)) { $is_user_taking_course = WooThemes_Sensei_Utils::sensei_check_for_activity(array('post_id' => $course_id, 'user_id' => $current_user->ID, 'type' => 'sensei_course_status')); if (!$is_user_taking_course) { if (method_exists('WooThemes_Sensei_Frontend', 'sensei_lesson_preview_title_text')) { $title_text = $woothemes_sensei->frontend->sensei_lesson_preview_title_text($course_id); // Remove brackets for display here $title_text = str_replace('(', '', $title_text); $title_text = str_replace(')', '', $title_text); $title_text = '<span class="preview-label">' . $title_text . '</span>'; } $title .= ' ' . $title_text; } } return $title; }
<?php $view_lesson = true; wp_get_current_user(); $lesson_prerequisite = absint(get_post_meta($post->ID, '_lesson_prerequisite', true)); if ($lesson_prerequisite > 0) { // Check for prerequisite lesson completions $view_lesson = WooThemes_Sensei_Utils::user_completed_lesson($lesson_prerequisite, $current_user->ID); } $lesson_course_id = get_post_meta($post->ID, '_lesson_course', true); $user_taking_course = WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID); if (current_user_can('administrator')) { $view_lesson = true; $user_taking_course = true; } $is_preview = false; if (WooThemes_Sensei_Utils::is_preview_lesson($post->ID)) { $is_preview = true; $view_lesson = true; } if ($view_lesson) { ?> <section class="entry fix"> <?php if ($is_preview && !$user_taking_course) { ?> <div class="sensei-message alert"><?php echo $woothemes_sensei->permissions_message['message']; ?> </div> <?php
public function sensei_lesson_preview_title($title = '', $id = 0) { global $post, $current_user; // Limit to lessons and check if lesson ID matches filtered post ID // @see https://github.com/woothemes/sensei/issues/574 if (isset($post->ID) && $id == $post->ID && 'lesson' == get_post_type($post)) { // Limit to main query only if (is_main_query()) { // Get the course ID $course_id = get_post_meta($post->ID, '_lesson_course', true); // Check if the user is taking the course if (is_singular('lesson') && WooThemes_Sensei_Utils::is_preview_lesson($post->ID) && !WooThemes_Sensei_Utils::user_started_course($course_id, $current_user->ID) && $post->ID == $id) { $title .= ' ' . $this->sensei_lesson_preview_title_text($course_id); } } } return $title; }
function widget($args, $instance) { global $woothemes_sensei, $post, $current_user, $view_lesson, $user_taking_course; $allmodules = 'off'; if (isset($instance['allmodules'])) { $allmodules = $instance['allmodules']; } // If not viewing a lesson/quiz, don't display the widget if (!(is_singular('lesson') || is_singular('quiz'))) { return; } extract($args); if (is_singular('quiz')) { $current_lesson_id = absint(get_post_meta($post->ID, '_quiz_lesson', true)); } else { $current_lesson_id = $post->ID; } // get the course for the current lesson/quiz $lesson_course_id = get_post_meta($current_lesson_id, '_lesson_course', true); // Check if the user is taking the course $is_user_taking_course = WooThemes_Sensei_Utils::user_started_course($lesson_course_id, $current_user->ID); //Check for preview lesson $is_preview = false; if (method_exists('WooThemes_Sensei_Utils', 'is_preview_lesson')) { $is_preview = WooThemes_Sensei_Utils::is_preview_lesson($post->ID); } $course_title = get_the_title($lesson_course_id); $course_url = get_the_permalink($lesson_course_id); $in_module = false; $lesson_module = ''; $lesson_array = array(); if (0 < $current_lesson_id) { // get an array of lessons in the module if there is one if (isset(Sensei()->modules) && has_term('', Sensei()->modules->taxonomy, $current_lesson_id)) { // Get all modules $course_modules = Sensei()->modules->get_course_modules($lesson_course_id); $lesson_module = Sensei()->modules->get_lesson_module($current_lesson_id); $in_module = true; $current_module_title = htmlspecialchars($lesson_module->name); // Display all modules if ('on' == $allmodules) { foreach ($course_modules as $module) { // get all lessons in the module $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($lesson_course_id), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => intval($module->term_id))), 'meta_key' => '_order_module_' . intval($module->term_id), 'orderby' => 'meta_value_num date', 'order' => 'ASC'); $lesson_array = array_merge($lesson_array, get_posts($args)); } } else { // Only display current module // get all lessons in the current module $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($lesson_course_id), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => $lesson_module)), 'meta_key' => '_order_module_' . intval($lesson_module->term_id), 'orderby' => 'meta_value_num date', 'order' => 'ASC'); $lesson_array = get_posts($args); } } else { // if there's no module, get all lessons in the course $lesson_array = Sensei()->course->course_lessons($lesson_course_id); } } echo $before_widget; ?> <header> <h2 class="course-title"><a href="<?php echo $course_url; ?> "><?php echo $course_title; ?> </a></h2> <?php if ($in_module && 'on' != $allmodules) { ?> <h3 class="module-title"><?php echo $current_module_title; ?> </h3> <?php } ?> </header> <?php $nav_id_array = sensei_get_prev_next_lessons($current_lesson_id); $previous_lesson_id = absint($nav_id_array['prev_lesson']); $next_lesson_id = absint($nav_id_array['next_lesson']); if (0 < $previous_lesson_id || 0 < $next_lesson_id) { ?> <ul class="course-progress-navigation"> <?php if (0 < $previous_lesson_id) { ?> <li class="prev"><a href="<?php echo esc_url(get_permalink($previous_lesson_id)); ?> " title="<?php echo get_the_title($previous_lesson_id); ?> "><span><?php _e('Previous', 'sensei-course-progress'); ?> </span></a></li><?php } ?> <?php if (0 < $next_lesson_id) { ?> <li class="next"><a href="<?php echo esc_url(get_permalink($next_lesson_id)); ?> " title="<?php echo get_the_title($next_lesson_id); ?> "><span><?php _e('Next', 'sensei-course-progress'); ?> </span></a></li><?php } ?> </ul> <?php } ?> <ul class="course-progress-lessons"> <?php $old_module = ''; foreach ($lesson_array as $lesson) { $lesson_id = $lesson->ID; $lesson_title = htmlspecialchars($lesson->post_title); $lesson_url = get_the_permalink($lesson_id); // add 'completed' class to completed lessons $classes = "not-completed"; if (WooThemes_Sensei_Utils::user_completed_lesson($lesson->ID, $current_user->ID)) { $classes = "completed"; } // Lesson Quiz Meta $lesson_quiz_id = Sensei()->lesson->lesson_quizzes($lesson_id); // add 'current' class on the current lesson/quiz if ($lesson_id == $post->ID || $lesson_quiz_id == $post->ID) { $classes .= " current"; } if (isset(Sensei()->modules) && 'on' == $allmodules) { $new_module = Sensei()->modules->get_lesson_module($lesson_id); if ($old_module != $new_module) { ?> <li class="course-progress-module"><h3><?php echo $new_module->name; ?> </h3></li> <?php $old_module = $new_module; } } ?> <li class="course-progress-lesson <?php echo $classes; ?> "> <?php if ($lesson->ID == $post->ID || $lesson_quiz_id == $post->ID) { echo '<span>' . $lesson_title . '</span>'; } else { echo '<a href="' . $lesson_url . '">' . $lesson_title . '</a>'; } ?> </li> <?php } ?> </ul> <?php echo $after_widget; }