/*
// 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');
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