Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






End mymodule






Mymodule

Sends emails to the users about new quiz

$message = 'New test '. $quiz-> name. ' is created';

$subject = 'New test';

$enrols = $DB-> get_recordset_sql(" SELECT * FROM {user} WHERE id IN (SELECT c.id FROM {user_enrolments} a, {enrol} b, {user} c WHERE a.userid = c.id AND a.enrolid = b.id AND b.courseid =".$quiz-> course. ")");

send_mail($enrols, $subject, $message);

end mymodule

 

return $quiz-> id;

}

В строковые переменные message и subject записываются соответствующие значения, они и переменная enrols, которая содержит пользователей, подписанных на данный курс, отправляются в функцию send_mail из файла test. php. Выборка делается из базы данных сложным запросом. Выборка делается из следующих таблиц: user, user_enrolments, enrol:

Рисунок 7.1 – Таблица user

Рисунок 7.2 – Таблица enrol

Рисунок 7.3 – Таблица user_enrolments

Чтобы связать между собой файлы test.php и lib.php, необходимо подключить файл test к файлу lib следующим образом: require_once($CFG-> dirroot. '/mod/test/test.php');

Далее, как происходит проверка приближения дедлайна. После запуска файла check_date.php, представленного выше, происходит рассылка. Точно также, как в примере с добавлением теста, определяются соответствующим для происходящего события переменные message, subject и enrols, и вызывается функция send_mail из файла test.php. Все это происходит при выполнении следующих условий: разница между текущей датой (в днях от 1 января 1970 года) и датой окончания тестов должна быть меньше или равна семи, т.е. как только разница становится меньше недели, пользователи будут получать оповещения о приближении дедлайна:

foreach($quiz_list as $quiz){

if ((($quiz-> timeclose / 86400) - ($current_time / 86400)) < = 7) {

$time_left = ($quiz-> timeclose / 86400) - ($current_time / 86400);

if ($time_left > 0) {

$subject = 'Deadline for quiz';

$message = 'Course '. $c-> fullname. '. Deadline for quiz '. $quiz-> name. '! Only '. ceil($time_left). ' days left. ';

send_mail($enrols, $subject, $message);

}

}

}

Как отрабатывают оповещения об изменениях временных параметров тестов и об удалении тестов. Чтобы это проверить, необходимо изменить в созданном выше тесте timelimit с 90 на 60:

 

 

Рисунок 8 – Изменение timelimit

Проверка почты:

 

 

 

 

Рисунок 6.5 – Проверка почты

 

Рисунок 6.6 – Проверка почты

Успех! Два подписанных на этот курс пользователя получили уведомление об изменении длительности прохождения теста. Реализовано это способом, похожим на способ реализации оповещения пользователей о добавлении теста – мы добавляем (добавляется) несколько строк кода в файл quiz/lib.php в функцию quiz_update_instance, они выделены жирным:

function quiz_update_instance($quiz, $mform) {

global $CFG, $DB;

require_once($CFG-> dirroot. '/mod/quiz/locallib.php');

 

// Process the options from the form.

$result = quiz_process_options($quiz);

if ($result & & is_string($result)) {

return $result;

}

 

// Get the current value, so we can see what changed.

$oldquiz = $DB-> get_record('quiz', array('id' => $quiz-> instance));

 

// We need two values from the existing DB record that are not in the form,

// in some of the function calls below.

$quiz-> sumgrades = $oldquiz-> sumgrades;

$quiz-> grade = $oldquiz-> grade;

 

// Repaginate, if asked to.

if (! $quiz-> shufflequestions & &! empty($quiz-> repaginatenow)) {

$quiz-> questions = quiz_repaginate(quiz_clean_layout($oldquiz-> questions, true),

$quiz-> questionsperpage);

}

unset($quiz-> repaginatenow);

 

// Update the database.

$quiz-> id = $quiz-> instance;

$DB-> update_record('quiz', $quiz);

 

// Do the processing required after an add or an update.

quiz_after_add_or_update($quiz);

 

if ($oldquiz-> grademethod! = $quiz-> grademethod) {

quiz_update_all_final_grades($quiz);

quiz_update_grades($quiz);

}

 

$quizdateschanged = $oldquiz-> timelimit! = $quiz-> timelimit

|| $oldquiz-> timeclose! = $quiz-> timeclose

|| $oldquiz-> graceperiod! = $quiz-> graceperiod;

if ($quizdateschanged) {

quiz_update_open_attempts(array('quizid' => $quiz-> id));

}

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.