public function test_groups_get_group_by_idnumber() { $this->resetAfterTest(true); $generator = $this->getDataGenerator(); // Create a course category and course. $cat = $generator->create_category(array('parent' => 0)); $course = $generator->create_course(array('category' => $cat->id)); $idnumber1 = 'idnumber1'; $idnumber2 = 'idnumber2'; /* * Test with an empty and a null idnumber. */ // An empty idnumber should always return a false value. $this->assertFalse(groups_get_group_by_idnumber($course->id, '')); $this->assertFalse(groups_get_group_by_idnumber($course->id, null)); // Even when a group exists which also has an empty idnumber. $generator->create_group(array('courseid' => $course->id)); $this->assertFalse(groups_get_group_by_idnumber($course->id, '')); $this->assertFalse(groups_get_group_by_idnumber($course->id, null)); /* * Test with a valid idnumber. */ // There is no matching idnumber at present. $this->assertFalse(groups_get_group_by_idnumber($course->id, $idnumber1)); // We should now have a valid group returned by the idnumber search. $group = $generator->create_group(array('courseid' => $course->id, 'idnumber' => $idnumber1)); $this->assertEquals($group, groups_get_group_by_idnumber($course->id, $idnumber1)); // An empty idnumber should still return false. $this->assertFalse(groups_get_group_by_idnumber($course->id, '')); $this->assertFalse(groups_get_group_by_idnumber($course->id, null)); /* * Test with another idnumber. */ // There is no matching idnumber at present. $this->assertFalse(groups_get_group_by_idnumber($course->id, $idnumber2)); // We should now have a valid group returned by the idnumber search. $group = $generator->create_group(array('courseid' => $course->id, 'idnumber' => $idnumber2)); $this->assertEquals($group, groups_get_group_by_idnumber($course->id, $idnumber2)); /* * Group idnumbers are unique within a course so test that we don't * retrieve groups for the first course. */ // Create a second course. $course = $generator->create_course(array('category' => $cat->id)); // An empty idnumber should always return a false value. $this->assertFalse(groups_get_group_by_idnumber($course->id, '')); $this->assertFalse(groups_get_group_by_idnumber($course->id, null)); // Our existing idnumbers shouldn't be returned here as we're in a different course. $this->assertFalse(groups_get_group_by_idnumber($course->id, $idnumber1)); $this->assertFalse(groups_get_group_by_idnumber($course->id, $idnumber2)); // We should be able to reuse the idnumbers again since this is a different course. $group = $generator->create_group(array('courseid' => $course->id, 'idnumber' => $idnumber1)); $this->assertEquals($group, groups_get_group_by_idnumber($course->id, $idnumber1)); $group = $generator->create_group(array('courseid' => $course->id, 'idnumber' => $idnumber2)); $this->assertEquals($group, groups_get_group_by_idnumber($course->id, $idnumber2)); }
public function process_group($data) { global $DB; $data = (object) $data; // handy $data->courseid = $this->get_courseid(); // Only allow the idnumber to be set if the user has permission and the idnumber is not already in use by // another a group in the same course $context = context_course::instance($data->courseid); if (isset($data->idnumber) and has_capability('moodle/course:changeidnumber', $context, $this->task->get_userid())) { if (groups_get_group_by_idnumber($data->courseid, $data->idnumber)) { unset($data->idnumber); } } else { unset($data->idnumber); } $oldid = $data->id; // need this saved for later $restorefiles = false; // Only if we end creating the group // Search if the group already exists (by name & description) in the target course $description_clause = ''; $params = array('courseid' => $this->get_courseid(), 'grname' => $data->name); if (!empty($data->description)) { $description_clause = ' AND ' . $DB->sql_compare_text('description') . ' = ' . $DB->sql_compare_text(':description'); $params['description'] = $data->description; } if (!($groupdb = $DB->get_record_sql("SELECT *\n FROM {groups}\n WHERE courseid = :courseid\n AND name = :grname {$description_clause}", $params))) { // group doesn't exist, create $newitemid = $DB->insert_record('groups', $data); $restorefiles = true; // We'll restore the files } else { // group exists, use it $newitemid = $groupdb->id; } // Save the id mapping $this->set_mapping('group', $oldid, $newitemid, $restorefiles); // Invalidate the course group data cache just in case. cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($data->courseid)); }
//if courseid is set if (isset($newgroup->courseid)) { $linenum++; $groupname = $newgroup->name; $newgrpcoursecontext = context_course::instance($newgroup->courseid); ///Users cannot upload groups in courses they cannot update. if (!has_capability('moodle/course:managegroups', $newgrpcoursecontext) or !is_enrolled($newgrpcoursecontext) and !has_capability('moodle/course:view', $newgrpcoursecontext)) { echo $OUTPUT->notification(get_string('nopermissionforcreation', 'group', $groupname)); } else { if (isset($newgroup->groupidnumber)) { // The CSV field for the group idnumber is groupidnumber rather than // idnumber as that field is already in use for the course idnumber. $newgroup->groupidnumber = trim($newgroup->groupidnumber); if (has_capability('moodle/course:changeidnumber', $newgrpcoursecontext)) { $newgroup->idnumber = $newgroup->groupidnumber; if ($existing = groups_get_group_by_idnumber($newgroup->courseid, $newgroup->idnumber)) { // idnumbers must be unique to a course but we shouldn't ignore group creation for duplicates $existing->name = s($existing->name); $existing->idnumber = s($existing->idnumber); $existing->problemgroup = $groupname; echo $OUTPUT->notification(get_string('groupexistforcoursewithidnumber', 'error', $existing)); unset($newgroup->idnumber); } } // Always drop the groupidnumber key. It's not a valid database field unset($newgroup->groupidnumber); } if ($groupid = groups_get_group_by_name($newgroup->courseid, $groupname)) { echo $OUTPUT->notification("{$groupname} :" . get_string('groupexistforcourse', 'error', $groupname)); } else { if ($groupid = groups_create_group($newgroup)) {
/** * Update group * * @param stdClass $data group properties (with magic quotes) * @param stdClass $editform * @param array $editoroptions * @return bool true or exception */ function groups_update_group($data, $editform = false, $editoroptions = false) { global $CFG, $DB; $context = context_course::instance($data->courseid); $data->timemodified = time(); $data->name = trim($data->name); if (isset($data->idnumber)) { $data->idnumber = trim($data->idnumber); if (($existing = groups_get_group_by_idnumber($data->courseid, $data->idnumber)) && $existing->id != $data->id) { throw new moodle_exception('idnumbertaken'); } } if ($editform and $editoroptions) { $data = file_postupdate_standard_editor($data, 'description', $editoroptions, $context, 'group', 'description', $data->id); } $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) { groups_update_group_icon($group, $data, $editform); } //trigger groups events events_trigger('groups_group_updated', $group); return true; }
/** * Form validation * * @param array $data * @param array $files * @return array $errors An array of errors */ function validation($data, $files) { global $COURSE, $DB, $CFG; $errors = parent::validation($data, $files); $name = trim($data['name']); if (isset($data['idnumber'])) { $idnumber = trim($data['idnumber']); } else { $idnumber = ''; } if ($data['id'] and $group = $DB->get_record('groups', array('id' => $data['id']))) { if (textlib::strtolower($group->name) != textlib::strtolower($name)) { if (groups_get_group_by_name($COURSE->id, $name)) { $errors['name'] = get_string('groupnameexists', 'group', $name); } } if (!empty($idnumber) && $group->idnumber != $idnumber) { if (groups_get_group_by_idnumber($COURSE->id, $idnumber)) { $errors['idnumber'] = get_string('idnumbertaken'); } } if (!empty($CFG->groupenrolmentkeypolicy) and $data['enrolmentkey'] != '' and $group->enrolmentkey !== $data['enrolmentkey']) { // enforce password policy only if changing password $errmsg = ''; if (!check_password_policy($data['enrolmentkey'], $errmsg)) { $errors['enrolmentkey'] = $errmsg; } } } else { if (groups_get_group_by_name($COURSE->id, $name)) { $errors['name'] = get_string('groupnameexists', 'group', $name); } else { if (!empty($idnumber) && groups_get_group_by_idnumber($COURSE->id, $idnumber)) { $errors['idnumber'] = get_string('idnumbertaken'); } } } return $errors; }
/** * Form validation * * @param array $data * @param array $files * @return array $errors An array of errors */ function validation($data, $files) { global $COURSE, $DB, $CFG; $errors = parent::validation($data, $files); $name = trim($data['name']); if (isset($data['idnumber'])) { $idnumber = trim($data['idnumber']); } else { $idnumber = ''; } if ($data['id'] and $group = $DB->get_record('groups', array('id' => $data['id']))) { if (core_text::strtolower($group->name) != core_text::strtolower($name)) { if (groups_get_group_by_name($COURSE->id, $name)) { $errors['name'] = get_string('groupnameexists', 'group', $name); } } if (!empty($idnumber) && $group->idnumber != $idnumber) { if (groups_get_group_by_idnumber($COURSE->id, $idnumber)) { $errors['idnumber'] = get_string('idnumbertaken'); } } if ($data['enrolmentkey'] != '') { $errmsg = ''; if (!empty($CFG->groupenrolmentkeypolicy) && $group->enrolmentkey !== $data['enrolmentkey'] && !check_password_policy($data['enrolmentkey'], $errmsg)) { // Enforce password policy when the password is changed. $errors['enrolmentkey'] = $errmsg; } else { // Prevent twice the same enrolment key in course groups. $sql = "SELECT id FROM {groups} WHERE id <> :groupid AND courseid = :courseid AND enrolmentkey = :key"; $params = array('groupid' => $data['id'], 'courseid' => $COURSE->id, 'key' => $data['enrolmentkey']); if ($DB->record_exists_sql($sql, $params)) { $errors['enrolmentkey'] = get_string('enrolmentkeyalreadyinuse', 'group'); } } } } else { if (groups_get_group_by_name($COURSE->id, $name)) { $errors['name'] = get_string('groupnameexists', 'group', $name); } else { if (!empty($idnumber) && groups_get_group_by_idnumber($COURSE->id, $idnumber)) { $errors['idnumber'] = get_string('idnumbertaken'); } else { if ($data['enrolmentkey'] != '') { $errmsg = ''; if (!empty($CFG->groupenrolmentkeypolicy) && !check_password_policy($data['enrolmentkey'], $errmsg)) { // Enforce password policy. $errors['enrolmentkey'] = $errmsg; } else { if ($DB->record_exists('groups', array('courseid' => $COURSE->id, 'enrolmentkey' => $data['enrolmentkey']))) { // Prevent the same enrolment key from being used multiple times in course groups. $errors['enrolmentkey'] = get_string('enrolmentkeyalreadyinuse', 'group'); } } } } } } return $errors; }