PluginProbe
Tutor LMS – eLearning and online course solution / 2.0.8
Tutor LMS – eLearning and online course solution v2.0.8
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 3.9.15 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 All 191 releases
← All changes | classes/Private_Course_Access.php +29 -105 4.0.42.0.8 View file →
@@ -1,117 +1,41 @@
1 1 <?php
2 -/**
3 - * Private Course Access
4 - *
5 - * @package Tutor\Course
6 - * @author Themeum <support@themeum.com>
7 - * @link https://themeum.com
8 - * @since 1.0.0
9 - */
10 -
11 2 namespace TUTOR;
12 3
13 -use Tutor\Cache\TutorCache;
14 -use Tutor\Models\CourseModel;
15 -use Tutor\Models\EnrollmentModel;
16 -
17 -if ( ! defined( 'ABSPATH' ) ) {
4 +if ( ! defined( 'ABSPATH' ) )
18 5 exit;
19 -}
20 6
21 -/**
22 - * Register Tutor's post types
23 - *
24 - * @since 1.0.0
25 - */
26 -class Private_Course_Access extends Tutor_Base {
27 7
28 - /**
29 - * Allow empty
30 - *
31 - * @var boolean
32 - */
33 - private $allow_empty = false;
8 +class Private_Course_Access {
9 +
10 + private $allow_empty=false;
34 11
35 - /**
36 - * Register hooks
37 - *
38 - * @since 1.0.0
39 - */
40 - public function __construct() {
41 - parent::__construct();
12 + public function __construct() {
13 + add_action('pre_get_posts', array($this, 'enable_private_access'));
14 + }
42 15
43 - add_action( 'pre_get_posts', array( $this, 'enable_private_access' ) );
44 - add_filter( 'post_type_link', array( $this, 'permalink_for_private_course' ), 10, 2 );
45 - }
16 + public function enable_private_access($query=null){
46 17
47 - /**
48 - * Enable private course access
49 - *
50 - * @param mixed $query query.
51 - *
52 - * @return void
53 - */
54 - public function enable_private_access( $query = null ) {
18 + if(!is_admin() && is_user_logged_in() ){
55 19
56 - if ( ! is_admin() && is_user_logged_in() ) {
20 + global $wpdb;
21 + $p_name = isset($query->query['name']) ? $query->query['name'] : '';
22 + $p_name = esc_sql($p_name);
57 23
58 - global $wpdb;
59 - $p_name = isset( $query->query['name'] ) ? $query->query['name'] : '';
60 - $p_name = esc_sql( $p_name );
24 + if($this->allow_empty && empty($p_name)){
25 + $query->set('post_status', array('private', 'publish'));
26 + return;
27 + }
61 28
62 - if ( $this->allow_empty && empty( $p_name ) ) {
63 - $query->set( 'post_status', array( 'private', 'publish' ) );
64 - return;
65 - }
66 -
67 - // Get using raw query to speed up.
68 - $course_post_type = tutor()->course_post_type;
69 -
70 - // Get data from cache.
71 - $cache_key = "tutor_private_query_{$course_post_type}_{$p_name}";
72 - $result = TutorCache::get( $cache_key );
73 -
74 - if ( false === $result ) {
75 - $private_query = $wpdb->prepare(
76 - "SELECT ID, post_parent
77 - FROM {$wpdb->posts}
78 - WHERE post_type = %s
79 - AND post_name = %s
80 - AND post_status = %s
81 - ",
82 - $course_post_type,
83 - $p_name,
84 - 'private'
85 - );
86 - $result = $wpdb->get_results( $private_query ); //phpcs:ignore
87 - // Set cache data.
88 - TutorCache::set( $cache_key, $result );
89 - }
90 -
91 - $private_course_id = ( is_array( $result ) && isset( $result[0] ) ) ? $result[0]->ID : 0;
92 -
93 - if ( $private_course_id > 0 && EnrollmentModel::is_enrolled( $private_course_id ) ) {
94 - $this->allow_empty = true;
95 - $query->set( 'post_status', array( 'private', 'publish' ) );
96 - }
97 - }
98 - }
99 -
100 - /**
101 - * Make permalink for private course.
102 - *
103 - * @since 3.0.0
104 - *
105 - * @param string $url permalink.
106 - * @param WP_Post $post post object.
107 - *
108 - * @return string
109 - */
110 - public function permalink_for_private_course( $url, $post ) {
111 - if ( CourseModel::STATUS_PRIVATE === $post->post_status && $this->course_post_type === $post->post_type ) {
112 - $url = home_url( $this->course_base_permalink . '/' . $post->post_name );
113 - }
114 -
115 - return $url;
116 - }
117 -}
29 + // Get using raw query to speed up
30 + $course_post_type = tutor()->course_post_type;
31 + $private_query = "SELECT ID, post_parent FROM {$wpdb->posts} WHERE post_type='{$course_post_type}' AND post_name='{$p_name}' AND post_status='private'";
32 + $result = $wpdb->get_results($private_query);
33 + $private_course_id = (is_array($result) && isset($result[0])) ? $result[0]->ID : 0;
34 +
35 + if($private_course_id>0 && tutor_utils()->is_enrolled($private_course_id)){
36 + $this->allow_empty = true;
37 + $query->set('post_status', array('private', 'publish'));
38 + }
39 + }
40 + }
41 +}