/**
  * @param CustomContextEvent $event
  */
 public function updateScore(CustomContextEvent $event)
 {
     $certification = $event->getCertification();
     $context = $certification->getContext();
     $metrics = $certification->getMetrics();
     //Define number of question automatically
     if (null === $context->getNumberOfQuestions()) {
         $context->setNumberOfQuestions($metrics->getQuestionCount());
     }
     //Define required score dynamically
     if (null === $context->getRequiredScore()) {
         $context->setRequiredScore(floor($metrics->getQuestionCount() / 2));
     }
 }
 /**
  * @param CustomContextEvent $event
  */
 public function removeCategories(CustomContextEvent $event)
 {
     $certification = $event->getCertification();
     $context = $certification->getContext();
     $metrics = $certification->getMetrics();
     $excludedCategories = $context->getExcludeCategories();
     if (empty($excludedCategories) || true !== $context->getAllowExcludeCategories()) {
         return;
     }
     foreach ($certification->getCategories() as $category) {
         if (!in_array($category->getName(), $excludedCategories)) {
             continue;
         }
         $metrics->decrement(Metrics::CATEGORY);
         foreach ($category->getQuestions() as $question) {
             $metrics->decrement(Metrics::QUESTION);
             $metrics->decrement(Metrics::ANSWER, count($question->getAnswers()));
         }
         $certification->removeCategory($category);
     }
     $event->setCertification($certification);
 }