/** * @param Certification $certification * * @return Certification */ public function compute(Certification $certification) { $result = $certification->getResult()->getResults(); $score = 0; foreach ($certification->getCategories() as $category) { foreach ($category->getQuestions() as $question) { foreach ($question->getAnswers() as $answer) { if (in_array(self::getHash($category, $question, $answer), $result)) { $answer->setAsAnswered(); } } if ($question->isValid()) { $validEvent = new CertificationComputeEvent($question); $this->eventDispatcher->dispatch(CertificationEvents::CERTIFICATION_VALID_QUESTION, $validEvent); if (true === $validEvent->isSkipped()) { if (null !== $this->logger) { $this->logger->info(sprintf('Question %s skipped', $question->getLabel())); } continue; } $score++; } else { $invalidEvent = new CertificationComputeEvent($question); $this->eventDispatcher->dispatch(CertificationEvents::CERTIFICATION_INVALID_QUESTION, $invalidEvent); } } $certification->getMetrics()->addReportMetrics($category); } $certification->getResult()->setScore($score); return $certification; }
/** * @param Certification $certification * * @return bool */ public function process(Certification $certification) { $this->createForm($certification->getContext(), ['certification' => $certification]); return $this->handle('POST'); }
/** * @param array $data * * @return Certification */ public static function __set_state(array $data) { $certification = new Certification(); $certification->setCategories($data['categories']); $certification->setContext($data['context']); $certification->setMetrics($data['metrics']); return $certification; }