From e6416e3f12ff50142e1f74e1bd3a30003db12d91 Mon Sep 17 00:00:00 2001 From: vyshane Date: Fri, 18 Aug 2006 07:08:14 +0000 Subject: [PATCH] Updated upgrade to roles system --- mod/forum/db/mysql.php | 242 ++++++++++++++++++++++++----------------- 1 file changed, 143 insertions(+), 99 deletions(-) diff --git a/mod/forum/db/mysql.php b/mod/forum/db/mysql.php index 213b110423..9d638ef416 100644 --- a/mod/forum/db/mysql.php +++ b/mod/forum/db/mysql.php @@ -231,13 +231,11 @@ function forum_upgrade($oldversion) { /* // Upgrades for new roles and capabilities support. - if ($oldversion < 2006080800) { - + if ($oldversion < 2006081800) { $forummodid = get_record('modules', 'name', 'forum'); - // Convert old teacher forums to general forums, making sure the - // same behavior is implemented using the new Roles System. - if($teacherforums = get_records('forum', 'type', 'teacher')) { + + if ($forums = get_records('forum')) { if (!$studentroles = get_roles_with_capability('moodle/legacy:student', CAP_ALLOW)) { error('No default student role found'); @@ -246,115 +244,161 @@ function forum_upgrade($oldversion) { error('No default guest role found'); } - foreach ($teacherforums as $teacherforum) { + foreach ($forums as $forum) { - // Delete empty teacher forums. - if (count_records('forum_discussions', 'forum', $teacherforum->id) == 0) { - delete_records('forum', 'id', $teacherforum->id); - } + if ($forum->type == 'teacher') { + // Teacher forums should be converted to normal forums that + // use the Roles System to implement the old behavior. - // Create a course module for the forum and assign it to - // section 0 in the course. - $mod = new object; - $mod->course = $teacherforum->course; - $mod->module = $forummodid; - $mod->instance = $teacherforum->id; - $mod->section = 0; - $mod->visible = 0; - $mod->visibleold = 0; - $mod->groupmode = 0; + // Delete empty teacher forums. + if (count_records('forum_discussions', 'forum', $forum->id) == 0) { + delete_records('forum', 'id', $forum->id); + } - if (!$cmid = add_course_module($mod)) { - error('Could not create new course module instance for the teacher forum'); - } else { - $mod->coursemodule = $cmid; - if (!add_mod_to_section($mod)) { - error('Could not add new forum instance to section 0 in the course'); + // Create a course module for the forum and assign it to + // section 0 in the course. + $mod = new object; + $mod->course = $forum->course; + $mod->module = $forummodid; + $mod->instance = $forum->id; + $mod->section = 0; + $mod->visible = 0; + $mod->visibleold = 0; + $mod->groupmode = 0; + + if (!$cmid = add_course_module($mod)) { + error('Could not create new course module instance for the teacher forum'); + } else { + $mod->coursemodule = $cmid; + if (!add_mod_to_section($mod)) { + error('Could not add new forum instance to section 0 in the course'); + } } - } - // Change the forum type to general. - $teacherforum->type = 'general'; - if (!update_record('forum', $teacherforum)) { - error('Could not change forum from type teacher to type general'); - } + // Change the forum type to general. + $forum->type = 'general'; + if (!update_record('forum', $forum)) { + error('Could not change forum from type teacher to type general'); + } - $context = get_context_instance(CONTEXT_MODULE, $cmid); + $context = get_context_instance(CONTEXT_MODULE, $cmid); - // Create overrides for default student and guest roles (prevent). - foreach($studentroles as $studentrole) { - assign_capability('mod/forum:viewforum', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewdiscussion', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewhiddentimedposts', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:replypost', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewrating', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewanyrating', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:rate', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:deleteownpost', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:deleteanypost', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:splitdiscussions', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:movediscussions', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:editanypost', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewqandawithoutposting', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewsubscribers', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:managesubscriptions', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:throttlingapplies', CAP_PREVENT, $studentrole->id, $context->id); - } - foreach($guestroles as $guestrole) { - assign_capability('mod/forum:viewforum', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewdiscussion', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewhiddentimedposts', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:replypost', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewrating', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewanyrating', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:rate', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:deleteownpost', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:deleteanypost', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:splitdiscussions', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:movediscussions', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:editanypost', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewqandawithoutposting', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewsubscribers', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:managesubscriptions', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:throttlingapplies', CAP_PREVENT, $guestrole->id, $context->id); + // Create overrides for default student and guest roles (prevent). + foreach($studentroles as $studentrole) { + assign_capability('mod/forum:viewforum', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewdiscussion', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewhiddentimedposts', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:replypost', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewrating', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewanyrating', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:rate', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:deleteownpost', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:deleteanypost', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:splitdiscussions', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:movediscussions', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:editanypost', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewqandawithoutposting', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewsubscribers', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:managesubscriptions', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:throttlingapplies', CAP_PREVENT, $studentrole->id, $context->id); + } + foreach($guestroles as $guestrole) { + assign_capability('mod/forum:viewforum', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewdiscussion', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewhiddentimedposts', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:replypost', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewrating', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewanyrating', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:rate', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:deleteownpost', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:deleteanypost', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:splitdiscussions', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:movediscussions', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:editanypost', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewqandawithoutposting', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewsubscribers', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:managesubscriptions', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:throttlingapplies', CAP_PREVENT, $guestrole->id, $context->id); + } + } else { + // Non-teacher forum. + + if (!$cm = get_coursemodule_from_instance('forum', $forum->id)) { + error('Could not get the course module for the forum'); + } + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + + + // $forum->open defines what students can do: + // 0 = No discussions, no replies + // 1 = No discussions, but replies are allowed + // 2 = Discussions and replies are allowed + switch ($forum->open) { + case 0: + foreach ($studentroles as $studentrole) { + assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:replypost', CAP_PREVENT, $studentrole->id, $context->id); + } + break; + case 1: + foreach ($studentroles as $studentrole) { + assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:replypost', CAP_ALLOW, $studentrole->id, $context->id); + } + break; + case 2: + foreach ($studentroles as $studentrole) { + assign_capability('mod/forum:startdiscussion', CAP_ALLOW, $studentrole->id, $context->id); + assign_capability('mod/forum:replypost', CAP_ALLOW, $studentrole->id, $context->id); + } + break; + } + // Drop column forum.open. + modify_database('','ALTER TABLE prefix_forum DROP COLUMN open;'); + + + // $forum->assessed defines who can rate posts: + // 1 = Everyone can rate posts + // 2 = Only teachers can rate posts + switch ($forum->assessed) { + case 1: + foreach ($studentroles as $studentrole) { + assign_capability('mod/forum:rate', CAP_ALLOW, $studentrole->id, $context->id); + } + // The legacy teacher role can already rate forum posts by default. + break; + case 2: + // The legacy student role cannot rate forum posts by default. + // The legacy teacher role can already rate forum posts by default. + break; + } + + + // $forum->assesspublic defines whether students can see + // everybody's ratings: + // 0 = Students can only see their own ratings + // 1 = Students can see everyone's ratings + switch ($forum->assesspublic) { + case 0: + // This is already the behavior of the default legacy roles. + break; + case 1: + assign_capability('mod/forum:viewanyrating', CAP_ALLOW, $studentrole->id, $context->id); + break; + } + // Drop column forum.assesspublic. + modify_database('','ALTER TABLE prefix_forum DROP COLUMN assesspublic;'); } } // End foreach $teacherforums. } // End if. - - - // forum.open defines what students can do: - // 0 = No discussions, no replies - // 1 = No discussions, but replies are allowed - // 2 = Discussions and replies are allowed - - - // Delete column forum.open - - - // forum.assessed defines who can rate posts: - // 1 = Everyone can rate posts - // 2 = Only teachers can rate posts - - - // Delete column forum.assessed - - - // forum.assesspublic defines whether students can see everybody's - // ratings: - // 0 = Students can only see their own ratings - // 1 = Students can see everyone's ratings - - - // Delete column forum.assesspublic } - + */ return true; } -*/ ?> \ No newline at end of file -- 2.39.5