public function checkDatePass(PassModule $pass) { $nowDate = new \DateTime(); $dateEstimate = $pass->getTimeStart()->modify("+{$pass->getTimePeriod()} minutes"); if ($nowDate > $dateEstimate) { $this->deactivation->deactivation($pass); return false; } $interval = date_diff($nowDate, $dateEstimate, true); return $interval->format('%H:%I:%S'); }
public function deactivation(PassModule $passModule, $finishTime = null) { $em = $this->doctrine->getManager(); $moduleUser = $em->getRepository('AppBundle:ModuleUser')->find($passModule->getModuleUser()); $module = $em->getRepository('AppBundle:Module')->find($moduleUser->getModule()); if ($finishTime) { $passModule->setTimeFinish($finishTime); } $passModule->setIsActive(false); $em->flush(); if ($passModule->getPercentResult() >= $module->getPersentSuccess()) { $moduleUser->setStatus(ModuleUser::STATUS_SUCCESS); $moduleUser->setRating($passModule->getRating()); } else { if ($moduleUser->getCountPassModules() >= $module->getAttempts()) { $moduleUser->setStatus(ModuleUser::STATUS_FAILED); } } $em->flush(); }
public function getNextQuestionForPass(PassModule $passModule) { return $this->createQueryBuilder('question')->leftJoin('question.module', 'module')->leftJoin('module.modulesUser', 'module_user')->leftJoin('module_user.passModules', 'pass_module')->orderBy('question.sort')->andWhere('pass_module.id = :idPassModule')->andWhere("question.id NOT IN(:questionIds)")->setParameter('idPassModule', $passModule->getId())->setParameter('questionIds', array_values($passModule->getAnsweredQuestionIds()))->setMaxResults(1)->getQuery()->getOneOrNullResult(); }