/**
  * 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()));
 }