![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
End mymoduleСтр 1 из 2Следующая ⇒
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); } } }
Рисунок 8 – Изменение timelimit Проверка почты:
Рисунок 6.5 – Проверка почты
Рисунок 6.6 – Проверка почты Успех! Два подписанных на этот курс пользователя получили уведомление об изменении длительности прохождения теста. Реализовано это способом, похожим на способ реализации оповещения пользователей о добавлении теста – 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)); }
|