]> git.mjollnir.org Git - moodle.git/commitdiff
Updated upgrade to roles system
authorvyshane <vyshane>
Fri, 18 Aug 2006 07:08:14 +0000 (07:08 +0000)
committervyshane <vyshane>
Fri, 18 Aug 2006 07:08:14 +0000 (07:08 +0000)
mod/forum/db/mysql.php

index 213b110423c0d1b2064a2376dd89cf9b63faff9f..9d638ef4164d3ed625d0feb6af6053e8ac581851 100644 (file)
@@ -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