/** * Checks user's answers. * * @param Request $request * @param Application $app * @return string */ public function checkAction(Request $request, Application $app) { // an associative array of filenames => contents $inputFiles = $request->request->get('files', array()); $challengeClassContents = $request->request->get('challengeClassContents'); $challengeClassName = $request->request->get('challengeClassName'); $activity = new Activity($challengeClassName, $challengeClassContents); foreach ($inputFiles as $filename => $inputFileSource) { $activity->addInputFile($filename, $inputFileSource); } /** @var ActivityRunner $activityRunner */ $activityRunner = $app['activity_runner']; $result = $activityRunner->run($activity); $data = array('output' => $result->getOutput(), 'isCorrect' => $result->isCorrect(), 'errors' => array('validation' => $result->getGradingError(), 'language' => $result->getLanguageError())); return new JsonResponse($data); }
/** * Grading endpoint - similar to ActivityController::checkAction(), but * loads the file dynamically from the filesystem, which is handy for * tweaking grading without refreshing * * @param Request $request * @param Application $app * @return JsonResponse */ public function gradeAction(Request $request, Application $app) { // an associative array of filenames => contents $inputFiles = $request->request->get('files', array()); $path = $request->request->get('path'); $challenge = $this->createChallengeFromPath($path); $activity = new Activity(get_class($challenge), file_get_contents($path)); foreach ($inputFiles as $filename => $inputFileSource) { $activity->addInputFile($filename, $inputFileSource); } /** @var ActivityRunner $activityRunner */ $activityRunner = $app['activity_runner']; $result = $activityRunner->run($activity); $data = array('output' => $result->getOutput(), 'isCorrect' => $result->isCorrect(), 'errors' => array('validation' => $result->getGradingError(), 'language' => $result->getLanguageError())); return new JsonResponse($data); }