From e2f577e074879b163ee2dff919a8e2ad8b972560 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Tue, 3 Jun 2014 15:38:06 +0800 Subject: [PATCH] MDL-45579 group: Prevent duplicate enrolment keys in course groups --- group/group_form.php | 19 ++++++++++++++++--- lang/en/group.php | 1 + 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/group/group_form.php b/group/group_form.php index 72e6849fa40..85b3e7556ff 100644 --- a/group/group_form.php +++ b/group/group_form.php @@ -111,11 +111,19 @@ class group_form extends moodleform { } } - if (!empty($CFG->groupenrolmentkeypolicy) and $data['enrolmentkey'] != '' and $group->enrolmentkey !== $data['enrolmentkey']) { - // enforce password policy only if changing password + if ($data['enrolmentkey'] != '') { $errmsg = ''; - if (!check_password_policy($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'); + } } } @@ -123,6 +131,11 @@ class group_form extends moodleform { $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'] != '') { + // Prevent twice the same enrolment key in course groups. + if ($DB->record_exists('groups', array('courseid' => $COURSE->id, 'enrolmentkey' => $data['enrolmentkey']))) { + $errors['enrolmentkey'] = get_string('enrolmentkeyalreadyinuse', 'group'); + } } return $errors; diff --git a/lang/en/group.php b/lang/en/group.php index 715634ef920..50001261906 100644 --- a/lang/en/group.php +++ b/lang/en/group.php @@ -61,6 +61,7 @@ $string['enrolmentkey'] = 'Enrolment key'; $string['enrolmentkey_help'] = 'An enrolment key enables access to the course to be restricted to only those who know the key. If a group enrolment key is specified, then not only will entering that key let the user into the course, but it will also automatically make them a member of this group. Note: Group enrolment keys must be enabled in the self enrolment settings and an enrolment key for the course must also be specified.'; +$string['enrolmentkeyalreadyinuse'] = 'This enrolment key is already used for another group.'; $string['erroraddremoveuser'] = 'Error adding/removing user {$a} to group'; $string['erroreditgroup'] = 'Error creating/updating group {$a}'; $string['erroreditgrouping'] = 'Error creating/updating grouping {$a}';