Я создаю сайт Moodle. Я уже настроил свои курсы с их конкретными ключами регистрации и т. Д. Но я хочу знать, в каком файле .php и где в этом файле (в файлах moodle) Moodle проверяет, соответствует ли введенный пользователем ключ регистрации тому, что я установил в качестве ключа регистрации на курс …
Спасибо за вашу помощь!
ОБНОВИТЬ———
Я сделал так, как предложил Рассел Инглэнд, но когда я перехожу на страницу, где я набираю свой регистрационный ключ, страница не загружается или страница перенаправляется на мою домашнюю страницу Moodle. Моя таблица, в которой я храню ключи регистрации, — user_enrolment_keys.
Вот обновленная функция проверки:
public function validation($data, $files) {
global $DB, $CFG, $USER;
$errors = parent::validation($data, $files);
$instance = $this->instance;
if ($this->toomany) {
$errors['notice'] = get_string('error');
return $errors;
}
//--------Russell's suggestion--------------
if ($instance->password) {
$params = array('user_email' => $USER->email, 'course_id' => $instance->courseid, 'enrolment_key' => $data['enrolpassword']);
if (!$DB->record_exists('user_enrolment_keys', $params)) {
$errors['enrolpassword'] = get_string('passwordinvalid', 'enrol_self');
return $errors;
}
}
//What I tried last (did not work either)...
/*$uemail = $USER->email;
$userscoursekey = 'testing';
$connecty = mysqli_connect("localhost", "...", "...", "...");
mysql_select_db('user_enrolment_keys', $connecty);
$var2 = $instance->courseid;
$resulty = mysqli_query($connecty, "SELECT * FROM user_enrolment_keys WHERE user_email='$uemail' AND course_id='$var2'");
$numrows = $resulty->num_rows;
if($numrows > 0)
{
while($row = mysqli_fetch_assoc($resulty))
{
$userscoursekey = $row['enrolment_key'];
}
}$instance->password = $userscoursekey;
my_sqli_close($connecty); //Close the database connection.*/
if ($instance->password) {
if ($data['enrolpassword'] !== $instance->password) {
if ($instance->customint1) {
$groups = $DB->get_records('groups', array('courseid'=>$instance->courseid), 'id ASC', 'id, enrolmentkey');
$found = false;
foreach ($groups as $group) {
if (empty($group->enrolmentkey)) {
continue;
}
if ($group->enrolmentkey === $data['enrolpassword']) {
$found = true;
break;
}
}
if (!$found) {
// We can not hint because there are probably multiple passwords.
$errors['enrolpassword'] = get_string('passwordinvalid', 'enrol_self');
}
} else {
$plugin = enrol_get_plugin('self');
if ($plugin->get_config('showhint')) {
$hint = core_text::substr($instance->password, 0, 1);
$errors['enrolpassword'] = get_string('passwordinvalidhint', 'enrol_self', $hint);
} else {
$errors['enrolpassword'] = get_string('passwordinvalid', 'enrol_self');
}
}
}
}
return $errors;// END DEFAULT BLOCK
}
Это подтверждено в пользовательской форме самостоятельной регистрации
В функции validation () в файле /enrol/self/locallib.php он проверяет, совпадает ли пароль, и отображает ошибку, если нет.
ОБНОВИТЬ:
Я бы, наверное, сделал это в функции проверки
Добавьте переменную $ USER вверху
global $DB, $CFG, $USER;
Затем проверьте, существует ли комбинация пользователя, курса и пароля в вашей только что созданной таблице лицензий;)
$params = array('userid' => $USER->id, 'courseid' => $instance->courseid, 'password' => $data['enrolpassword']);
if (!$DB->record_exists('local_licence_table', $params)) {
$errors['enrolpassword'] = get_string('passwordinvalid', 'enrol_self');
return $errors;
}
Других решений пока нет …