/** * Notifies professors of missing exam files * @param int $days The number of days prior to the exam to notify */ private final function notifyMissingExamFiles($days = PROFESSOR_DAYS_BEFORE_EXAM_SEND_REMINDER) { if (!is_int($days) || $days < 0) { throw new \InvalidArgumentException('Days must be a nonnegative integer'); } $emailsSql = "SELECT DISTINCT p.confirmation_key, p.exam_request_id\n FROM org_courses c\n JOIN ventus_professor_exam_requests p \n ON p.course_code = c.code\n AND p.course_section = c.section\n AND p.session = c.session\n WHERE p.is_confirmed = 1\n AND p.cron_logged = 0\n AND p.exam_type <> 'final'\n AND p.exam_date <= CURDATE() + INTERVAL :days1 DAY\n AND CURDATE() <= p.exam_date\n AND p.deleted = 0\n AND (p.exam_request_id NOT IN\n (\n SELECT DISTINCT request_id\n FROM ventus_faculty_files AS f\n LEFT JOIN ventus_professor_exam_requests AS p1\n ON f.request_id = p1.exam_request_id\n WHERE p1.is_confirmed = 1\n AND p1.deleted = 0\n AND p1.exam_date <= CURDATE() + INTERVAL :days2 DAY\n AND CURDATE() <= p1.exam_date)\n OR p.exam_request_id NOT IN\n (\n SELECT DISTINCT request_id\n FROM ventus_faculty_control_sheets AS cs\n LEFT JOIN ventus_professor_exam_requests AS p2\n ON cs.request_id = p2.exam_request_id\n WHERE p2.is_confirmed = 1\n AND p2.deleted = 0\n AND p2.exam_date <= CURDATE() + INTERVAL :days3 DAY\n AND CURDATE() <= p2.exam_date\n ));"; $requests = $this->db->query($emailsSql, array('days1' => $days, 'days2' => $days, 'days3' => $days))->fetchAll(); $uSql = "UPDATE ventus_professor_exam_requests p\n JOIN org_courses c \n ON p.course_code = c.code\n AND p.course_section = c.section\n AND p.session = c.session\n SET p.cron_logged = 1, p.updated_on = NOW()\n WHERE p.is_confirmed = 1\n AND p.cron_logged = 0\n AND p.exam_type <> 'final'\n AND p.deleted = 0\n AND p.exam_date <= CURDATE() + INTERVAL :days1 DAY\n AND (p.exam_request_id NOT IN\n (\n SELECT DISTINCT request_id\n FROM ventus_faculty_files AS f\n LEFT JOIN (SELECT exam_request_id, is_confirmed, exam_date, deleted FROM ventus_professor_exam_requests) AS p1\n ON f.request_id = p1.exam_request_id\n WHERE p1.is_confirmed = 1\n AND p1.deleted = 0\n AND p1.exam_date <= CURDATE() + INTERVAL :days2 DAY)\n OR exam_request_id NOT IN\n (\n SELECT DISTINCT request_id\n FROM ventus_faculty_control_sheets AS cs\n LEFT JOIN (SELECT exam_request_id, is_confirmed, exam_date, deleted FROM ventus_professor_exam_requests) AS p2\n ON cs.request_id = p2.exam_request_id\n WHERE p2.is_confirmed = 1\n AND p2.deleted = 0\n AND p2.exam_date <= CURDATE() + INTERVAL :days3 DAY\n ) );"; $this->db->query($uSql, array('days1' => $days, 'days2' => $days, 'days3' => $days)); $noe = new RequestForm($this->db); $reminder['source'] = "prof"; foreach ($requests as $r) { if ($this->checkIfStudentsBelongToNOE((int) $r['exam_request_id'])) { $reminder['cid'] = $r['confirmation_key']; $noe->reminderToProfessors($reminder, true); } } }
$_POST['prof_name'] = $course_exists; $insert_id = $model->addRequest($_POST); $loggers['audit']->info("NOE {$insert_id} added"); $model->sendEmailConfirmation($_POST, $insert_id); } else { echo "invalid-course"; $loggers['audit']->notice("Attempted to add NOE for invalid course {$_POST['course_code']}{$_POST['course_section']} {$_POST['teach_method']} {$_POST['session']}"); $model->sendInvalidInformationEmail($_POST); } } elseif ($_GET['page'] === "crequest") { $id = $model->verifyConfirmationLink($_GET['cid']); //If the confirmation link has been successfully verified, then send an email to all AS students in that course if ($id === 1) { $loggers['audit']->info("Confirmed NOE with confirmation ID {$_GET['cid']}"); $model->reminderToAccessServiceStudents($_GET['cid']); $model->reminderToProfessors($_GET); } $l10n->addResource(__DIR__ . '/l10n/header-external.json'); $l10n->addResource(__DIR__ . '/l10n/confirm-request.json'); require_once FS_PHP . '/header-external.php'; require_once 'views/confirm-request.php'; require_once FS_PHP . '/footer-external.php'; } elseif ($_GET['page'] === "outlook-reminder") { $l10n->addResource(__DIR__ . '/l10n/request-form.json'); $l10n->addResource(FS_L10N . '/filenames.json'); $reminder_end = \DateTime::createFromFormat(DATETIME_MYSQL, $_GET['exam_date']); $reminder_end->setTime(21, 0); $reminder_end->modify('-' . FACULTY_BUSINESS_DAYS_BEFORE_EXAM_BLOCK_CHANGES_CONTROL_SHEET . ' days'); header("Content-Type: text/calendar"); header("Content-Disposition: inline; filename=" . $l10n->_f('file.professor_exam_request_reminder', date('Y-m-d'), null) . ".ics"); echo "BEGIN:VCALENDAR\n";