public function startAttempt($quiz, $studentId = null) { db()->beginTransaction(); if (empty($studentId)) { $studentId = studentId(); } if (!empty($quiz['maxAttemptNum'])) { $numAttemptsUsed = field_sql('SELECT COUNT(quizAttemptId) FROM quiz_attempt WHERE quizId=:quizId AND studentId=:studentId', array('quizId' => $quiz['quizId'], 'studentId' => $studentId)); if ($numAttemptsUsed >= $quiz['maxAttemptNum']) { throw new Exception('Attempt limit consumed', 403); } } $numAttemptsInproc = field_sql('SELECT COUNT(quizAttemptId) FROM quiz_attempt WHERE quizId=:quizId AND studentId=:studentId AND status=:status', array('quizId' => $quiz['quizId'], 'studentId' => $studentId, 'status' => STATUS_INPROC)); if ($numAttemptsInproc > 0) { throw new Exception('Already started', 403); } entry_change('quiz_attempt', array('quizId' => $quiz['quizId'], 'studentId' => $studentId, 'status' => STATUS_INPROC, 'timeStart' => date('Y-m-d H:i:s'))); $attemptId = db()->lastInsertId(); $questions = entries_sql('SELECT questionId FROM question WHERE questionBaseId=:questionBaseId', array('questionBaseId' => $quiz['questionBaseId'])); if (empty($questions)) { throw new Exception('Questions not found', 404); } shuffle($questions); $num = 1; foreach ($questions as $q) { if (!empty($quiz['numQuestion']) && $num > $quiz['numQuestion']) { break; } entry_change('question_session', array('num' => $num++, 'quizAttemptId' => $attemptId, 'questionId' => $q['questionId'], 'status' => STATUS_NEW)); } db()->commit(); return $attemptId; }
public function login() { if (studentId()) { redirect('c=up'); } $login = val($_REQUEST, 'login'); $passw = val($_REQUEST, 'passw'); if (!empty($passw)) { $studentId = field_sql('SELECT studentId FROM student WHERE login=:login AND passw=:passw', array('login' => $login, 'passw' => md5($passw))); if (empty($studentId)) { env('warning', lng('main:loginfailed')); } else { $_SESSION['studentId'] = $studentId; redirect('c=up'); } } env('breadcrumbs', array(lng('main:loginpage'))); tpl('login_form', array('login' => $login, 'passw' => '')); }
function get_fields() { # no sense in doing all this so many times if (isset($GLOBALS['gotten_fields'])) { return $GLOBALS['gotten_fields']; } $fields_str = unix_newlines($_REQUEST['fields']); $GLOBALS['gotten_fields'] = array(); $fields_str = rtrim($fields_str); $fields = split("\n", $fields_str); foreach ($fields as $field) { list($name, $type, $options) = split(' *', $field); if ($options) { $options = split(',', $options); } if (!$type) { $type = $name; } $input = field_input($type); $format = field_format($type); $sql = field_sql($type); $GLOBALS['gotten_fields'][] = array($name, $type, $input, $format, $sql, $options); } return $GLOBALS['gotten_fields']; }