public function submit($problem_id) { try { $problem = new Problem($problem_id); $language = fRequest::get('language', 'integer'); if (!array_key_exists($language, static::$languages)) { throw new fValidationException('Invalid language.'); } fSession::set('last_language', $language); $code = trim(fRequest::get('code', 'string')); if (strlen($code) == 0) { throw new fValidationException('Code cannot be empty.'); } if ($problem->isSecretNow()) { if (!User::can('view-any-problem')) { throw new fAuthorizationException('Problem is secret now. You are not allowed to submit this problem.'); } } $record = new Record(); $record->setOwner(fAuthorization::getUserToken()); $record->setProblemId($problem->getId()); $record->setSubmitCode($code); $record->setCodeLanguage($language); $record->setSubmitDatetime(Util::currentTime()); $record->setJudgeStatus(JudgeStatus::PENDING); $record->setJudgeMessage('Judging... PROB=' . $problem->getId() . ' LANG=' . static::$languages[$language]); $record->setVerdict(Verdict::UNKNOWN); $record->store(); Util::redirect('/status'); } catch (fException $e) { fMessaging::create('error', $e->getMessage()); fMessaging::create('code', '/submit', fRequest::get('code', 'string')); Util::redirect("/submit?problem={$problem_id}"); } }
public function newQuestion($id) { try { $report = new Report($id); if (!$report->allowQuestion()) { throw new fValidationException('Not allowed to ask question.'); } $category = fRequest::get('category', 'integer'); if ($category == 0) { throw new fValidationException('Please choose a category.'); } $question = new Question(); $question->setUsername(fAuthorization::getUserToken()); $question->setReportId($report->getId()); if ($category < 0) { $question->setCategory($category); } else { $question->setCategory(Question::ABOUT_PROBLEM_HIDDEN); $problem = new Problem($category); $question->setProblemId($problem->getId()); } $question->setAskTime(new fTimestamp()); $question->setQuestion(trim(fRequest::get('question'))); if (strlen($question->getQuestion()) < 10) { throw new fValidationException('Question too short (minimum 10 bytes).'); } if (strlen($question->getQuestion()) > 500) { throw new fValidationException('Question too long (maximum 500 bytes).'); } $question->store(); fMessaging::create('success', 'Question saved.'); } catch (fExpectedException $e) { fMessaging::create('warning', $e->getMessage()); } catch (fUnexpectedException $e) { fMessaging::create('error', $e->getMessage()); } Util::redirect("/contest/{$id}"); }