File "Rewrite_Rules.php"

Full Path: /home/dcqnetm/intuns/wp-content/plugins/tutor/classes/Rewrite_Rules.php
File size: 4.8 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace TUTOR;

if (!defined('ABSPATH'))
	exit;

class Rewrite_Rules extends Tutor_Base {

	public function __construct() {
		parent::__construct();

		add_filter('query_vars', array($this, 'tutor_register_query_vars'));
		add_action('generate_rewrite_rules', array($this, 'add_rewrite_rules'));

		//Lesson Permalink
		add_filter('post_type_link', array($this, 'change_lesson_single_url'), 1, 2);
	}

	/**
	 * Prepare query vars
	 *
	 * @param sting $vars url structure.
	 */
	public function tutor_register_query_vars( $vars ) {
		$vars[] = 'course_subpage';
		$vars[] = 'lesson_video';
		$vars[] = 'tutor_dashboard_page';
		$vars[] = 'tutor_dashboard_sub_page';

		/**
		 * If public_profile_layout is not private then
		 * add rewrite rules
		 *
		 * @since v2.0.0
		 */
		// $enable_public_profile = tutor_utils()->get_option( 'public_profile_layout' );
		// if ( 'private' !== $enable_public_profile ) {
			$vars[] = 'tutor_profile_username';
		// }

		return $vars;
	}

	/**
	 * Tutor rewrite rules
	 *
	 * @param string $wp_rewrite get the rewrite rule.
	 */
	public function add_rewrite_rules( $wp_rewrite ) {
		$new_rules = array(
			//Lesson Permalink
			$this->course_post_type . "/(.+?)/{$this->lesson_base_permalink}/(.+?)/?$" => "index.php?post_type={$this->lesson_post_type}&name=" . $wp_rewrite->preg_index(2),
			//Quiz Permalink
			$this->course_post_type . "/(.+?)/tutor_quiz/(.+?)/?$" => "index.php?post_type=tutor_quiz&name=" . $wp_rewrite->preg_index(2),
			//Assignments URL
			$this->course_post_type . "/(.+?)/assignments/(.+?)/?$" => "index.php?post_type=tutor_assignments&name=" . $wp_rewrite->preg_index(2),
			//Zoom Meeting
			$this->course_post_type . "/(.+?)/zoom-meeting/(.+?)/?$" => "index.php?post_type=tutor_zoom_meeting&name=" . $wp_rewrite->preg_index(2),

			//Private Video URL
			"video-url/(.+?)/?$" => "index.php?post_type={$this->lesson_post_type}&lesson_video=true&name=" . $wp_rewrite->preg_index(1),
			//Student Public Profile URL
			"profile/(.+?)/?$" => "index.php?tutor_profile_username=" . $wp_rewrite->preg_index(1),
		);

		//Student Dashboard URL
		$dashboard_pages = tutor_utils()->tutor_dashboard_permalinks();
		$dashboard_page_id = (int) tutor_utils()->get_option('tutor_dashboard_page_id');
		$dashboard_page_slug = get_post_field('post_name', $dashboard_page_id);

		foreach ($dashboard_pages as $dashboard_key => $dashboard_page) {
			$new_rules["({$dashboard_page_slug})/{$dashboard_key}/?$"] = 'index.php?pagename=' . $wp_rewrite->preg_index(1) . '&tutor_dashboard_page=' . $dashboard_key;

			//Sub Page of dashboard sub page
			//regext = ([^/]*)
			$new_rules["({$dashboard_page_slug})/{$dashboard_key}/(.+?)/?$"] = 'index.php?pagename=' . $wp_rewrite->preg_index(1) . '&tutor_dashboard_page=' . $dashboard_key . '&tutor_dashboard_sub_page=' . $wp_rewrite->preg_index(2);
		}

		$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
	}

	/**
	 * @param $post_link
	 * @param int $id
	 *
	 * @return string
	 *
	 * Change the lesson permalink
	 */
	function change_lesson_single_url($post_link, $id = 0) {
		$post = get_post($id);

		global $wpdb;

		$course_base_slug = 'sample-course';

		if (is_object($post) && $post->post_type == $this->lesson_post_type) {
			//Lesson Permalink
			$course_id = tutor_utils()->get_course_id_by('lesson', $post->ID);

			if ($course_id) {
				$course = $wpdb->get_row($wpdb->prepare("SELECT post_name from {$wpdb->posts} where ID = %d ", $course_id));
				if ($course) {
					$course_base_slug = $course->post_name;
				}
				return home_url("/{$this->course_post_type}/{$course_base_slug}/{$this->lesson_base_permalink}/" . $post->post_name . '/');
			} else {
				return home_url("/{$this->course_post_type}/sample-course/{$this->lesson_base_permalink}/" . $post->post_name . '/');
			}
		} elseif (is_object($post) && $post->post_type === 'tutor_quiz') {
			//Quiz Permalink
			$course = $wpdb->get_row($wpdb->prepare("SELECT ID, post_name, post_type, post_parent from {$wpdb->posts} where ID = %d ", $post->post_parent));
			if ($course) {
				//Checking if this topic
				if ($course->post_type !== $this->course_post_type) {
					$course = $wpdb->get_row($wpdb->prepare("SELECT ID, post_name, post_type, post_parent from {$wpdb->posts} where ID = %d ", $course->post_parent));
				}
				//Checking if this lesson
				if (isset($course->post_type) && $course->post_type !== $this->course_post_type) {
					$course = $wpdb->get_row($wpdb->prepare("SELECT ID, post_name, post_type, post_parent from {$wpdb->posts} where ID = %d ", $course->post_parent));
				}

				$course_post_name = isset($course->post_name) ? $course->post_name : 'sample-course';
				return home_url("/{$this->course_post_type}/{$course_post_name}/tutor_quiz/{$post->post_name}/");
			} else {
				return home_url("/{$this->course_post_type}/sample-course/tutor_quiz/{$post->post_name}/");
			}
		}
		return $post_link;
	}
}