public function test_grouping_updated_event_does_not_require_names() { global $DB; $this->resetAfterTest(); $course = $this->getDataGenerator()->create_course(); $grouping = $this->getDataGenerator()->create_grouping(array('courseid' => $course->id)); $sink = $this->redirectEvents(); $data = new stdClass(); $data->id = $grouping->id; $data->courseid = $course->id; $this->setCurrentTimeStart(); groups_update_grouping($data); $events = $sink->get_events(); $this->assertCount(1, $events); $event = reset($events); $this->assertInstanceOf('\\core\\event\\grouping_updated', $event); // Get the timemodified from DB for comparison with snapshot. $data->timemodified = $DB->get_field('groupings', 'timemodified', array('id' => $grouping->id)); $this->assertTimeCurrent($data->timemodified); // Following fields were not updated so the snapshot should have them the same as in original group. $data->description = $grouping->description; $data->descriptionformat = $grouping->descriptionformat; $data->configdata = $grouping->configdata; $data->idnumber = $grouping->idnumber; $data->name = $grouping->name; $data->timecreated = $grouping->timecreated; // Assert legacy event data. $this->assertEventLegacyData($data, $event); $this->assertSame('groups_grouping_updated', $event->get_legacy_eventname()); $this->assertEquals(context_course::instance($course->id), $event->get_context()); $this->assertEquals($grouping->id, $event->objectid); $url = new moodle_url('/group/grouping.php', array('id' => $event->objectid)); $this->assertEquals($url, $event->get_url()); }
} if ($editform->is_cancelled()) { redirect(groups_home_url($courseid, false, $id, false)); } elseif ($data = $editform->get_data()) { $success = true; if (empty($grouping)) { // New grouping if (!($id = groups_create_grouping($course->id, $data))) { print_error('erroreditgrouping'); } else { $success = (bool) $id; $data->id = $id; } } else { // Updating grouping if (!groups_update_grouping($data, $course->id)) { print_error('groupingnotupdated'); } } if ($success) { redirect(groups_home_url($courseid, false, $id, false)); } else { print_error('erroreditgrouping', 'group', groups_home_url($courseid)); } } else { // Prepare and output form $strgroups = get_string('groups'); $strparticipants = get_string('participants'); if ($id) { $strheading = get_string('editgroupingsettings', 'group'); } else {
/** * Update groupings * * @param array $groupings array of grouping description arrays (with keys groupname and courseid) * @return array of newly updated groupings * @since Moodle 2.3 */ public static function update_groupings($groupings) { global $CFG, $DB; require_once "{$CFG->dirroot}/group/lib.php"; $params = self::validate_parameters(self::update_groupings_parameters(), array('groupings' => $groupings)); $transaction = $DB->start_delegated_transaction(); foreach ($params['groupings'] as $grouping) { $grouping = (object) $grouping; if (trim($grouping->name) == '') { throw new invalid_parameter_exception('Invalid grouping name'); } if (!($currentgrouping = $DB->get_record('groupings', array('id' => $grouping->id)))) { throw new invalid_parameter_exception("Grouping {$grouping->id} does not exist in the course"); } // Check if the new modified grouping name already exists in the course. if ($grouping->name != $currentgrouping->name and $DB->count_records('groupings', array('courseid' => $currentgrouping->courseid, 'name' => $grouping->name))) { throw new invalid_parameter_exception('A different grouping with the same name already exists in the course'); } $grouping->courseid = $currentgrouping->courseid; // Now security checks. $context = context_course::instance($grouping->courseid); try { self::validate_context($context); } catch (Exception $e) { $exceptionparam = new stdClass(); $exceptionparam->message = $e->getMessage(); $exceptionparam->courseid = $grouping->courseid; throw new moodle_exception('errorcoursecontextnotvalid', 'webservice', '', $exceptionparam); } require_capability('moodle/course:managegroups', $context); // We must force allways FORMAT_HTML. $grouping->descriptionformat = external_validate_format($grouping->descriptionformat); // Finally update the grouping. groups_update_grouping($grouping); } $transaction->allow_commit(); return null; }
function blended_update_group($courseid, $teamname, $mem, $groupid, $ya) { global $DB; $data = new object(); $data->courseid = $courseid; $data->name = $teamname; $data->description_editor['text'] = ' '; $data->description_editor['format'] = 1; $data->id = $groupid; groups_update_group($data); $oldmems = $DB->get_records('groups_members', array('groupid' => $groupid)); if ($ya == null) { foreach ($oldmems as $oldmem) { groups_remove_member($groupid, $oldmem->userid); } $us = $DB->get_records('user'); for ($y = 0; $y < count($mem); $y++) { $use = array(); foreach ($us as $f => $u) { $use[$f] = blended_clean_idnumber($u->idnumber); if ($use[$f] == $mem[$y]) { groups_add_member($groupid, $u->id); } } } } else { if ($ya == true) { $memid = $DB->get_records('user'); foreach ($memid as $mid) { if ($mem == substr($mid->idnumber, 0, 8)) { groups_add_member($groupid, $mid->id); $DB->insert_record_raw('blended_member', array('userid' => $mid->id, 'id_member' => $mem, 'id_team' => $groupid, 'leader' => 0)); break; } } } } groups_update_grouping($data); }
} else { $grouping = file_prepare_standard_editor($grouping, 'description', $editoroptions, $context, 'grouping', 'description', null); } /// First create the form $editform = new grouping_form(null, compact('editoroptions')); $editform->set_data($grouping); if ($editform->is_cancelled()) { redirect($returnurl); } elseif ($data = $editform->get_data()) { $success = true; if (!has_capability('moodle/course:changeidnumber', $context)) { // Remove the idnumber if the user doesn't have permission to modify it unset($data->idnumber); } if ($data->id) { groups_update_grouping($data, $editoroptions); } else { groups_create_grouping($data, $editoroptions); } redirect($returnurl); } $strgroupings = get_string('groupings', 'group'); $strparticipants = get_string('participants'); if ($id) { $strheading = get_string('editgroupingsettings', 'group'); } else { $strheading = get_string('creategrouping', 'group'); } $PAGE->navbar->add($strparticipants, new moodle_url('/user/index.php', array('id' => $courseid))); $PAGE->navbar->add($strgroupings, new moodle_url('/group/groupings.php', array('id' => $courseid))); $PAGE->navbar->add($strheading);
redirect($returnurl); } else { print_error('erroreditgrouping', 'group', $returnurl); } } } } /// First create the form $editform = new grouping_form(); $editform->set_data($grouping); if ($editform->is_cancelled()) { redirect($returnurl); } elseif ($data = $editform->get_data()) { $success = true; if ($data->id) { if (!groups_update_grouping($data)) { error('Error updating grouping'); } } else { if (!groups_create_grouping($data)) { error('Error creating grouping'); } } redirect($returnurl); } $strgroupings = get_string('groupings', 'group'); $strparticipants = get_string('participants'); if ($id) { $strheading = get_string('editgroupingsettings', 'group'); } else { $strheading = get_string('creategrouping', 'group');
redirect($returnurl); } else { print_error('erroreditgrouping', 'group', $returnurl); } } } } /// First create the form $editform = new grouping_form(); $editform->set_data($grouping); if ($editform->is_cancelled()) { redirect($returnurl); } elseif ($data = $editform->get_data()) { $success = true; if ($data->id) { groups_update_grouping($data); } else { groups_create_grouping($data); } redirect($returnurl); } $strgroupings = get_string('groupings', 'group'); $strparticipants = get_string('participants'); if ($id) { $strheading = get_string('editgroupingsettings', 'group'); } else { $strheading = get_string('creategrouping', 'group'); } $navlinks = array(array('name' => $strparticipants, 'link' => $CFG->wwwroot . '/user/index.php?id=' . $courseid, 'type' => 'misc'), array('name' => $strgroupings, 'link' => $CFG->wwwroot . '/group/groupings.php?id=' . $courseid, 'type' => 'misc'), array('name' => $strheading, 'link' => '', 'type' => 'misc')); $navigation = build_navigation($navlinks); /// Print header
public function test_grouping_updated_event() { global $DB; $this->resetAfterTest(); $course = $this->getDataGenerator()->create_course(); $grouping = $this->getDataGenerator()->create_grouping(array('courseid' => $course->id)); $sink = $this->redirectEvents(); $data = new stdClass(); $data->id = $grouping->id; $data->courseid = $course->id; $data->name = 'Backend team'; $this->setCurrentTimeStart(); groups_update_grouping($data); $events = $sink->get_events(); $this->assertCount(1, $events); $event = reset($events); $this->assertInstanceOf('\\core\\event\\grouping_updated', $event); // 'Repairing' the object for comparison because of type of variables being wrong. $data->id = (int) $grouping->id; $data->timemodified = $DB->get_field('groupings', 'timemodified', array('id' => $grouping->id)); $this->assertTimeCurrent($data->timemodified); $this->assertEventLegacyData($data, $event); $this->assertSame('groups_grouping_updated', $event->get_legacy_eventname()); $this->assertEquals(context_course::instance($course->id), $event->get_context()); $this->assertEquals($grouping->id, $event->objectid); }