Merge branch 'MDL-27164-master' of git://github.com/micaherne/moodle
authorDan Poltawski <dan@moodle.com>
Tue, 22 Jan 2013 04:51:51 +0000 (12:51 +0800)
committerDan Poltawski <dan@moodle.com>
Tue, 22 Jan 2013 04:51:51 +0000 (12:51 +0800)
1  2 
group/lib.php

diff --combined group/lib.php
@@@ -254,9 -254,6 +254,9 @@@ function groups_create_group($data, $ed
          groups_update_group_icon($group, $data, $editform);
      }
  
 +    // Invalidate the grouping cache for the course
 +    cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($course->id));
 +
      //trigger groups events
      events_trigger('groups_group_created', $group);
  
@@@ -301,9 -298,6 +301,9 @@@ function groups_create_grouping($data, 
          $DB->update_record('groupings', $description);
      }
  
 +    // Invalidate the grouping cache for the course
 +    cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($data->courseid));
 +
      events_trigger('groups_grouping_created', $data);
  
      return $id;
@@@ -335,8 -329,6 +335,8 @@@ function groups_update_group_icon($grou
                  $group->picture = 0;
              }
              @unlink($iconfile);
 +            // Invalidate the group data as we've updated the group record.
 +            cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($group->courseid));
          }
      }
  }
@@@ -369,9 -361,6 +369,9 @@@ function groups_update_group($data, $ed
  
      $DB->update_record('groups', $data);
  
 +    // Invalidate the group data.
 +    cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($data->courseid));
 +
      $group = $DB->get_record('groups', array('id'=>$data->id));
  
      if ($editform) {
@@@ -406,10 -395,6 +406,10 @@@ function groups_update_grouping($data, 
          $data = file_postupdate_standard_editor($data, 'description', $editoroptions, $editoroptions['context'], 'grouping', 'description', $data->id);
      }
      $DB->update_record('groupings', $data);
 +
 +    // Invalidate the group data.
 +    cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($data->courseid));
 +
      //trigger groups events
      events_trigger('groups_grouping_updated', $data);
  
@@@ -453,9 -438,6 +453,9 @@@ function groups_delete_group($grouporid
      $fs->delete_area_files($context->id, 'group', 'description', $groupid);
      $fs->delete_area_files($context->id, 'group', 'icon', $groupid);
  
 +    // Invalidate the grouping cache for the course
 +    cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($group->courseid));
 +
      //trigger groups events
      events_trigger('groups_group_deleted', $group);
  
@@@ -498,9 -480,6 +498,9 @@@ function groups_delete_grouping($groupi
          $file->delete();
      }
  
 +    // Invalidate the grouping cache for the course
 +    cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($grouping->courseid));
 +
      //trigger groups events
      events_trigger('groups_grouping_deleted', $grouping);
  
@@@ -561,9 -540,6 +561,9 @@@ function groups_delete_groupings_groups
      $groupssql = "SELECT id FROM {groups} g WHERE g.courseid = ?";
      $DB->delete_records_select('groupings_groups', "groupid IN ($groupssql)", array($courseid));
  
 +    // Invalidate the grouping cache for the course
 +    cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($courseid));
 +
      //trigger groups events
      events_trigger('groups_groupings_groups_removed', $courseid);
  
@@@ -602,9 -578,6 +602,9 @@@ function groups_delete_groups($courseid
  
      $DB->delete_records('groups', array('courseid'=>$courseid));
  
 +    // Invalidate the grouping cache for the course
 +    cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($courseid));
 +
      // trigger groups events
      events_trigger('groups_groups_deleted', $courseid);
  
@@@ -642,9 -615,6 +642,9 @@@ function groups_delete_groupings($cours
  
      $DB->delete_records('groupings', array('courseid'=>$courseid));
  
 +    // Invalidate the grouping cache for the course
 +    cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($courseid));
 +
      // trigger groups events
      events_trigger('groups_groupings_deleted', $courseid);
  
@@@ -743,11 -713,9 +743,11 @@@ function groups_parse_name($format, $gr
   *
   * @param int groupingid
   * @param int groupid
 + * @param int $timeadded  The time the group was added to the grouping.
 + * @param bool $invalidatecache If set to true the course group cache will be invalidated as well.
   * @return bool true or exception
   */
 -function groups_assign_grouping($groupingid, $groupid) {
 +function groups_assign_grouping($groupingid, $groupid, $timeadded = null, $invalidatecache = true) {
      global $DB;
  
      if ($DB->record_exists('groupings_groups', array('groupingid'=>$groupingid, 'groupid'=>$groupid))) {
      $assign = new stdClass();
      $assign->groupingid = $groupingid;
      $assign->groupid    = $groupid;
 -    $assign->timeadded  = time();
 +    if ($timeadded != null) {
 +        $assign->timeadded = (integer)$timeadded;
 +    } else {
 +        $assign->timeadded = time();
 +    }
      $DB->insert_record('groupings_groups', $assign);
  
 +    if ($invalidatecache) {
 +        // Invalidate the grouping cache for the course
 +        $courseid = $DB->get_field('groupings', 'courseid', array('id' => $groupingid));
 +        cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($courseid));
 +    }
 +
      return true;
  }
  
  /**
 - * Unassigns group grom grouping
 + * Unassigns group from grouping
   *
   * @param int groupingid
   * @param int groupid
 + * @param bool $invalidatecache If set to true the course group cache will be invalidated as well.
   * @return bool success
   */
 -function groups_unassign_grouping($groupingid, $groupid) {
 +function groups_unassign_grouping($groupingid, $groupid, $invalidatecache = true) {
      global $DB;
      $DB->delete_records('groupings_groups', array('groupingid'=>$groupingid, 'groupid'=>$groupid));
  
 +    if ($invalidatecache) {
 +        // Invalidate the grouping cache for the course
 +        $courseid = $DB->get_field('groupings', 'courseid', array('id' => $groupingid));
 +        cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($courseid));
 +    }
 +
      return true;
  }
  
@@@ -895,7 -846,7 +895,7 @@@ function groups_calculate_role_people($
                  $roles[$roledata->id] = $roledata;
              }
              // Record that user has role
-             $users[$rec->userid]->roles[] = $roles[$rec->roleid];
+             $users[$rec->userid]->roles[$rec->roleid] = $roles[$rec->roleid];
          }
      }
      $rs->close();
          } else if($rolecount > 1) {
              $roleid = '*';
          } else {
-             $roleid = $userdata->roles[0]->id;
+             $userrole = reset($userdata->roles);
+             $roleid = $userrole->id;
          }
          $roles[$roleid]->users[$userid] = $userdata;
      }