LLMS_Roles
Description Description
Source Source
File: includes/class.llms.roles.php
class LLMS_Roles { /** * Retrieve an array of all capabilities for a role * @param string $role name of the role * @return array * @since 3.13.0 * @version 3.13.0 */ private static function get_all_caps( $role ) { $caps = array(); $caps['core'] = self::get_core_caps( $role ); $caps['wp'] = self::get_wp_caps( $role ); $caps = array_merge( $caps, self::get_post_type_caps( $role ) ); return apply_filters( 'llms_get_all_' . $role . '_caps', $caps ); } /** * Get an array of registered core lifterlms caps * @return array * @since 3.13.0 * @version 3.14.0 */ public static function get_all_core_caps() { return apply_filters( 'llms_get_all_core_caps', array( 'lifterlms_instructor', 'manage_lifterlms', 'view_lifterlms_reports', 'view_others_lifterlms_reports', 'enroll', 'unenroll', ) ); } /** * Retrieve the LifterLMS core capabilities for a give role * @param string $role name of the role * @return array * @since 3.13.0 * @version 3.13.0 */ private static function get_core_caps( $role ) { $all_caps = array_fill_keys( array_values( self::get_all_core_caps() ), true ); switch ( $role ) { case 'instructor': case 'instructors_assistant': $caps = $all_caps; unset( $caps['enroll'] ); unset( $caps['unenroll'] ); unset( $caps['manage_lifterlms'] ); unset( $caps['view_others_lifterlms_reports'] ); break; case 'administrator': case 'lms_manager': $caps = $all_caps; break; default : $caps = array(); } return apply_filters( 'llms_get_' . $role . '_core_caps', $caps, $all_caps ); } /** * Retrieve the post type specific capabilities for a give role * @param string $role name of the role * @return array * @since 3.13.0 * @version 3.13.0 */ private static function get_post_type_caps( $role ) { $caps = array(); // students get nothing if ( 'student' !== $role ) { $post_types = array( 'course' => 'course', 'lesson' => 'lesson', 'llms_quiz' => array( 'quiz', 'quizzes' ), 'llms_question' => 'question', 'llms_membership' => 'membership', ); foreach ( $post_types as $post_type => $names ) { $post_caps = LLMS_Post_Types::get_post_type_caps( $names ); // filter the caps down for these roles if ( in_array( $role, array( 'instructor', 'instructors_assistant' ) ) ) { $allowed = array( 'instructor' => array( 'delete_posts', 'delete_published_posts', 'edit_post', 'edit_posts', 'edit_published_posts', 'publish_posts', 'create_posts', ), 'instructors_assistant' => array( 'edit_post', 'edit_posts', 'edit_published_posts', ), ); foreach ( $post_caps as $post_cap => $cpt_cap ) { if ( ! in_array( $post_cap, $allowed[ $role ] ) ) { unset( $post_caps[ $post_cap ] ); } } } $caps[ $post_type ] = array_fill_keys( array_values( $post_caps ), true ); }// End foreach(). $taxes = array( 'course_cat' => 'course_cat', 'course_difficulty' => array( 'course_difficulty', 'course_difficulties' ), 'course_tag' => 'course_tag', 'course_track' => 'course_track', 'membership_cat' => 'membership_cat', 'membership_tag' => 'membership_tag', ); foreach ( $taxes as $tax => $names ) { $tax_caps = LLMS_Post_Types::get_tax_caps( $names ); // filter the caps down for these roles if ( in_array( $role, array( 'instructor', 'instructors_assistant' ) ) ) { $allowed = array( 'assign_terms', ); foreach ( $tax_caps as $tax_cap => $ct_cap ) { if ( ! in_array( $tax_cap, $allowed ) ) { unset( $tax_caps[ $tax_cap ] ); } } } $caps[ $tax ] = array_fill_keys( array_values( $tax_caps ), true ); } }// End if(). return apply_filters( 'llms_get_' . $role . '_post_type_caps', $caps ); } /** * Retrieve the core WP capabilities for a give role * @param string $role name of the role * @return array * @since 3.13.0 * @version 3.13.0 */ private static function get_wp_caps( $role ) { $caps = array( 'read' => true, ); switch ( $role ) { case 'instructor' : $add = array( 'create_users' => true, 'edit_users' => true, 'promote_users' => true, 'read' => true, 'upload_files' => true, // see WP Core issue(s) // https://core.trac.wordpress.org/ticket/22895 // https://core.trac.wordpress.org/ticket/16808 'edit_posts' => true, ); break; case 'instructors_assistant' : $add = array( 'read' => true, 'upload_files' => true, // see WP Core issue(s) // https://core.trac.wordpress.org/ticket/22895 // https://core.trac.wordpress.org/ticket/16808 'edit_posts' => true, ); break; case 'lms_manager' : $add = array( 'read_private_pages' => true, 'read_private_posts' => true, 'edit_posts' => true, 'edit_pages' => true, 'edit_published_posts' => true, 'edit_published_pages' => true, 'edit_private_pages' => true, 'edit_private_posts' => true, 'edit_others_posts' => true, 'edit_others_pages' => true, 'publish_posts' => true, 'publish_pages' => true, 'delete_posts' => true, 'delete_pages' => true, 'delete_private_pages' => true, 'delete_private_posts' => true, 'delete_published_pages' => true, 'delete_published_posts' => true, 'delete_others_posts' => true, 'delete_others_pages' => true, 'manage_categories' => true, 'manage_links' => true, 'moderate_comments' => true, 'upload_files' => true, 'export' => true, 'import' => true, 'edit_users' => true, 'create_users' => true, 'list_users' => true, 'promote_users' => true, 'delete_users' => true, ); break; default : $add = array(); }// End switch(). return apply_filters( 'llms_get_' . $role . '_wp_caps', array_merge( $add, $caps ) ); } /** * Retrieve LifterLMS roles and role names * @return array * @since 3.13.0 * @version 3.13.0 */ public static function get_roles() { return apply_filters( 'llms_get_roles', array( 'lms_manager' => __( 'LMS Manager', 'lifterlms' ), 'instructor' => __( 'Instructor', 'lifterlms' ), 'instructors_assistant' => __( 'Instructor\'s Assistant', 'lifterlms' ), 'student' => __( 'Student', 'lifterlms' ), ) ); } /** * Install custom roles and related capabilities * Called from LLMS_Install during installation and upgrades * @return [type] [description] * @since 3.13.0 * @version 3.13.0 */ public static function install() { global $wp_roles; if ( ! class_exists( 'WP_Roles' ) ) { return; } // self::remove_roles(); // @todo remove, this is here for dev reasons only $roles = self::get_roles(); $roles['administrator'] = __( 'Administrator', 'lifterlms' ); $wp_roles = wp_roles(); foreach ( $roles as $role => $name ) { $role_obj = $wp_roles->get_role( $role ); if ( ! $role_obj ) { $role_obj = $wp_roles->add_role( $role, $name ); } self::update_caps( $role_obj, 'add' ); } } /** * Uninstall custom roles and remove custom caps from default WP roles * @return void * @since 3.13.0 * @version 3.13.0 */ public static function remove_roles() { if ( ! class_exists( 'WP_Roles' ) ) { return; } $wp_roles = wp_roles(); // delete all our custom roles foreach ( array_keys( self::get_roles() ) as $role ) { $wp_roles->remove_role( $role ); } // remove custom caps from the WP core admin role self::update_caps( $wp_roles->get_role( 'administrator' ), 'remove' ); } /** * Update the capabilities for a given role * @param obj $role instance of a WP_Role * @param string $type update type [add|remove] * @return void * @since 3.13.0 * @version 3.13.0 */ private static function update_caps( $role, $type = 'add' ) { foreach ( self::get_all_caps( $role->name ) as $group => $caps ) { foreach ( array_keys( $caps ) as $cap ) { if ( 'add' === $type ) { $role->add_cap( $cap ); } elseif ( 'remove' === $type ) { $role->remove_cap( $cap ); } } } } }
Expand full source code Collapse full source code View on GitHub
Methods Methods
- get_all_caps — Retrieve an array of all capabilities for a role
- get_all_core_caps — Get an array of registered core lifterlms caps
- get_core_caps — Retrieve the LifterLMS core capabilities for a give role
- get_post_type_caps — Retrieve the post type specific capabilities for a give role
- get_roles — Retrieve LifterLMS roles and role names
- get_wp_caps — Retrieve the core WP capabilities for a give role
- install — Install custom roles and related capabilities Called from LLMS_Install during installation and upgrades
- remove_roles — Uninstall custom roles and remove custom caps from default WP roles
- update_caps — Update the capabilities for a given role