/** * 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); }
/** * Gets the full list of files to be created - by looking at the file * builder + any input files that should override those. * * @param Activity $activity * @return array */ private function getFilesToCreate(Activity $activity) { $challenge = $activity->getChallengeObject(); $fileBuilder = $challenge->getFileBuilder(); $files = array(); // loop through *all* of the files in the builder - this should be the full set foreach ($fileBuilder->getFilenames() as $filename) { // look first to see if an input file was sent if ($activity->hasInputFile($filename)) { $files[$filename] = $activity->getInputFileContents($filename); } else { // fallback to get the original file contents $fileBuilder->getFileObject($filename); } } return $files; }
public function getInlineCodeToExecute(\Twig_Environment $twig, Activity $activity) { $challenge = $activity->getChallengeObject(); return $twig->render('twig_worker.php.twig', array('entryPointFilename' => $challenge->getFileBuilder()->getEntryPointFilename())); }