/**
  * Send the grading of a project to its project manager if the submission is complete
  *
  * @param string $submissionFormIdentifier
  * @param boolean $testMode
  */
 public function sendGradingToProjectManagerAction($submissionFormIdentifier, $testMode = TRUE)
 {
     $this->checkAdministratorAndDenyIfNeeded();
     $projects = $this->projectRepository->findBySubmissionFormIdentifier($submissionFormIdentifier);
     foreach ($projects as $project) {
         /** @var \GIB\GradingTool\Domain\Model\Project $project */
         if (!is_null($project->getSubmissionLastUpdated()) && !empty($project->getSubmissionContent())) {
             $message = 'Send Grading for Project ' . $project->getProjectTitle() . ' to ' . $project->getProjectManager()->getPrimaryElectronicAddress()->getIdentifier() . '.';
             if (!$testMode) {
                 $this->submissionService->sendGradingToProjectManager($project);
                 print '[!!!] ' . $message . PHP_EOL;
             } else {
                 print '[TEST] ' . $message . PHP_EOL;
             }
         }
     }
     die;
 }
 /**
  * Executes this finisher
  * @see AbstractFinisher::execute()
  *
  * @return void
  * @throws \TYPO3\Flow\Mvc\Exception\StopActionException();
  */
 protected function executeInternal()
 {
     /** @var \TYPO3\Form\Core\Runtime\FormRuntime $formRuntime */
     $formRuntime = $this->finisherContext->getFormRuntime();
     // The corresponding project
     $projectIdentifier = $formRuntime->getRequest()->getParentRequest()->getArgument('project');
     /** @var \GIB\GradingTool\Domain\Model\Project $project */
     $project = $this->projectRepository->findByIdentifier($projectIdentifier);
     $sendGradingToProjectManager = FALSE;
     if (is_null($project->getSubmissionLastUpdated())) {
         $sendGradingToProjectManager = TRUE;
     }
     // update the project with the data from the form
     $formValueArray = $formRuntime->getFormState()->getFormValues();
     $project->setSubmissionContent(serialize($formValueArray));
     $project->setSubmissionLastUpdated(new \TYPO3\Flow\Utility\Now());
     $this->projectRepository->update($project);
     $this->persistenceManager->persistAll();
     // add a flash message
     $message = new \TYPO3\Flow\Error\Message('Thank you for submitting the data for your project "%s".', \TYPO3\Flow\Error\Message::SEVERITY_OK, array($project->getProjectTitle()));
     $this->flashMessageContainer->addMessage($message);
     // send notification mail
     $templateIdentifierOverlay = $this->templateService->getTemplateIdentifierOverlay('newSubmissionNotification', $project);
     $this->notificationMailService->sendNotificationMail($templateIdentifierOverlay, $project, $project->getProjectManager());
     if ($sendGradingToProjectManager) {
         // The grading was completed for the first time, so we send the grading to the project manager
         $this->submissionService->sendGradingToProjectManager($project);
     }
     // redirect to dashboard
     $formRuntime = $this->finisherContext->getFormRuntime();
     $request = $formRuntime->getRequest()->getMainRequest();
     $uriBuilder = new \TYPO3\Flow\Mvc\Routing\UriBuilder();
     $uriBuilder->setRequest($request);
     $uriBuilder->reset();
     $uri = $uriBuilder->uriFor('index', NULL, 'Standard');
     $response = $formRuntime->getResponse();
     $mainResponse = $response;
     while ($response = $response->getParentResponse()) {
         $mainResponse = $response;
     }
     $mainResponse->setStatus(303);
     $mainResponse->setHeader('Location', (string) $uri);
     throw new \TYPO3\Flow\Mvc\Exception\StopActionException();
 }