diff --git a/changelog/fix-capability-issue b/changelog/fix-capability-issue new file mode 100644 index 0000000000..33077391a1 --- /dev/null +++ b/changelog/fix-capability-issue @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Change some taxonomy capabilities to fix some behaviors diff --git a/includes/class-sensei-data-cleaner.php b/includes/class-sensei-data-cleaner.php index b421ac6406..4ceafc23a7 100644 --- a/includes/class-sensei-data-cleaner.php +++ b/includes/class-sensei-data-cleaner.php @@ -210,6 +210,8 @@ class Sensei_Data_Cleaner { // Teacher caps. 'manage_lesson_categories', 'manage_course_categories', + 'manage_question_categories', + 'manage_modules', 'publish_quizzes', 'edit_quizzes', 'edit_published_quizzes', diff --git a/includes/class-sensei-modules.php b/includes/class-sensei-modules.php index 808d42c079..14849972f5 100644 --- a/includes/class-sensei-modules.php +++ b/includes/class-sensei-modules.php @@ -2180,9 +2180,9 @@ public function setup_modules_taxonomy() { 'hierarchical' => true, 'show_admin_column' => false, 'capabilities' => array( - 'manage_terms' => 'manage_categories', - 'edit_terms' => 'edit_courses', - 'delete_terms' => 'manage_categories', + 'manage_terms' => 'manage_modules', + 'edit_terms' => 'manage_modules', + 'delete_terms' => 'manage_modules', 'assign_terms' => 'edit_courses', ), 'show_in_nav_menus' => false, diff --git a/includes/class-sensei-posttypes.php b/includes/class-sensei-posttypes.php index 9f4c085b43..aae8e5a870 100755 --- a/includes/class-sensei-posttypes.php +++ b/includes/class-sensei-posttypes.php @@ -687,9 +687,9 @@ public function setup_course_category_taxonomy() { 'query_var' => true, 'show_in_nav_menus' => true, 'capabilities' => array( - 'manage_terms' => 'manage_categories', - 'edit_terms' => 'edit_courses', - 'delete_terms' => 'manage_categories', + 'manage_terms' => 'manage_course_categories', + 'edit_terms' => 'manage_course_categories', + 'delete_terms' => 'manage_course_categories', 'assign_terms' => 'edit_courses', ), 'rewrite' => array( @@ -839,9 +839,9 @@ public function setup_question_category_taxonomy() { 'show_admin_column' => true, 'show_in_rest' => true, 'capabilities' => array( - 'manage_terms' => 'manage_categories', - 'edit_terms' => 'edit_questions', - 'delete_terms' => 'manage_categories', + 'manage_terms' => 'manage_question_categories', + 'edit_terms' => 'manage_question_categories', + 'delete_terms' => 'manage_question_categories', 'assign_terms' => 'edit_questions', ), 'rewrite' => array( @@ -892,9 +892,9 @@ public function setup_lesson_tag_taxonomy() { 'query_var' => true, 'show_in_nav_menus' => true, 'capabilities' => array( - 'manage_terms' => 'manage_categories', - 'edit_terms' => 'edit_lessons', - 'delete_terms' => 'manage_categories', + 'manage_terms' => 'manage_lesson_categories', + 'edit_terms' => 'manage_lesson_categories', + 'delete_terms' => 'manage_lesson_categories', 'assign_terms' => 'edit_lessons', ), 'rewrite' => array( diff --git a/includes/class-sensei-teacher.php b/includes/class-sensei-teacher.php index c4e4caa856..8a843c837a 100755 --- a/includes/class-sensei-teacher.php +++ b/includes/class-sensei-teacher.php @@ -195,6 +195,9 @@ protected function add_capabilities() { 'read_private_courses' => true, 'delete_published_courses' => true, + // Modules + 'manage_modules' => true, + // Quiz 'publish_quizzes' => true, 'edit_quizzes' => true, @@ -204,6 +207,7 @@ protected function add_capabilities() { // Questions 'publish_questions' => true, + 'manage_question_categories' => true, 'edit_questions' => true, 'edit_published_questions' => true, 'edit_private_questions' => true, @@ -227,7 +231,7 @@ protected function add_capabilities() { foreach ( $caps as $cap => $grant ) { - // load the capability on to the teacher role + // load the capability on to the teacher role. $this->teacher_role->add_cap( $cap, $grant ); } diff --git a/includes/class-sensei-updates.php b/includes/class-sensei-updates.php index 2605b1231b..b5cfbb2a8a 100755 --- a/includes/class-sensei-updates.php +++ b/includes/class-sensei-updates.php @@ -88,11 +88,26 @@ public function run_updates() { $this->v4_10_update_install_time(); $this->v4_12_create_default_emails(); $this->v4_19_2_update_legacy_quiz_data(); + $this->v4_24_1_update_capabilities(); // Flush rewrite cache. Sensei()->initiate_rewrite_rules_flush(); } + /** + * Update capabilities. + * + * @since 4.24.1 + */ + private function v4_24_1_update_capabilities() { + // Add new `manage_question_categories` capabilitiy to teacher. + Sensei()->teacher->create_role(); + + // Update the other roles capabilities. + Sensei()->add_sensei_admin_caps(); + Sensei()->add_editor_caps(); + } + /** * Enqueue job to update the legacy quiz data. * diff --git a/includes/class-sensei.php b/includes/class-sensei.php index 31d87e8b0e..1169fb55eb 100644 --- a/includes/class-sensei.php +++ b/includes/class-sensei.php @@ -1844,6 +1844,11 @@ public function add_editor_caps() { if ( ! is_null( $role ) ) { $role->add_cap( 'manage_sensei_grades' ); + + $role->add_cap( 'manage_lesson_categories' ); + $role->add_cap( 'manage_course_categories' ); + $role->add_cap( 'manage_question_categories' ); + $role->add_cap( 'manage_modules' ); } return true; @@ -1860,6 +1865,11 @@ public function add_sensei_admin_caps() { if ( ! is_null( $role ) ) { $role->add_cap( 'manage_sensei' ); $role->add_cap( 'manage_sensei_grades' ); + + $role->add_cap( 'manage_lesson_categories' ); + $role->add_cap( 'manage_course_categories' ); + $role->add_cap( 'manage_question_categories' ); + $role->add_cap( 'manage_modules' ); } return true;