Admin


Source

File: classes/Admin.php

class Admin {

	public function __construct() {
		add_action( 'admin_menu', [ $this, 'register_admin_menu' ] );
		add_action( 'admin_init', [ $this, 'filter_courses_for_instructors' ] );

		add_filter( 'plugin_action_links_' . DOZENT_BASENAME, [ $this, 'insert_plugin_settings_link' ], 10, 2 );
	}

	public function insert_plugin_settings_link( $links, $file ) {
		if ( $file === DOZENT_BASENAME ) {
			$links[] = '<a href="' . admin_url( 'options-general.php?page=dozent' ) . '">' . __( 'Settings', 'dozent' )
			           . '</a>';
		}

		return $links;
	}

	public function register_admin_menu() {
		//todo: manage_options will be instructor_permission
		add_menu_page( __( 'Dozent LMS', 'dozent' ), __( 'Dozent LMS', 'dozent' ), 'manage_options', 'dozent', null, 'dashicons-welcome-learn-more', 4 );

		add_submenu_page( 'dozent', __( 'Categories', 'dozent' ), __( 'Categories', 'dozent' ), 'manage_options', 'edit-tags.php?taxonomy=course_category&post_type=dozent_course', null );

		add_submenu_page( 'dozent', __( 'Instructors', 'dozent' ), __( 'Instructors', 'dozent' ), 'manage_options', 'dozent_instructors', [ $this, 'instructors' ] );

		add_submenu_page( 'dozent', __( 'Withdrawals', 'dozent' ), __( 'Withdrawals', 'dozent' ), 'manage_options', 'dozent_withdrawals', array( $this, 'withdrawals' ) );


		$optionClass = new Options();
		add_submenu_page( 'dozent', __( 'Settings', 'dozent' ), __( 'Settings', 'dozent' ), 'manage_options', 'dozent-options', [ &$optionClass, 'option_panel' ] );
	}

	public function instructors() {
		$sub_page = dozent_input_text( 'sub_page' );

		if ( $sub_page ) {
			include DOZENT_ABSPATH . "views/users/{$sub_page}.php";
		} else {
			include DOZENT_ABSPATH . "views/users/instructors.php";
		}
	}

	/**
	 * Show all withdrawals from the instructors
	 *
	 * @since DozentLMS 1.0.0
	 */

	public function withdrawals() {
		include DOZENT_ABSPATH . 'views/admin/withdrawals.php';
	}

	/**
	 * Filter posts for the current instructor if insructor role is not administrator
	 *
	 * @since DozentLMS 1.0.0
	 */
	public function filter_courses_for_instructors() {
		if ( ! current_user_can( 'administrator' ) && is_dozent_instructor() ) {
			remove_menu_page( 'edit-comments.php' ); //Comments
			add_filter( 'posts_clauses_request', [ $this, 'posts_clauses_request' ] );
		}
	}

	public function posts_clauses_request( $clauses ) {
		global $wpdb;

		$user_id = get_current_user_id();
		
		$courses_ids = $wpdb->get_col( "SELECT course_id from {$wpdb->dozent_instructor_courses} WHERE instructor_id = {$user_id}  " );

		$custom_author_query = "AND {$wpdb->posts}.post_author = {$user_id}";
		if ( dozent_count( $courses_ids ) ) {
			$in_query_pre = implode( ',', $courses_ids );
			$custom_author_query = "  AND ( {$wpdb->posts}.post_author = {$user_id} OR {$wpdb->posts}.ID IN({$in_query_pre}) ) ";
		}

		$clauses['where'] .= $custom_author_query;

		return $clauses;
	}


}

Methods