/** * @DI\Observe("claroline.log.create") * * @param \Claroline\CoreBundle\Event\LogCreateEvent $event */ public function onLog(LogCreateEvent $event) { /** @var \Icap\BadgeBundle\Repository\BadgeRuleRepository $badgeRuleRepository */ $badgeRuleRepository = $this->entityManager->getRepository('IcapBadgeBundle:BadgeRule'); /** @var \Icap\BadgeBundle\Entity\Badge[] $badges */ $badges = $badgeRuleRepository->findBadgeAutomaticallyAwardedFromAction($event->getLog()); if (0 < count($badges)) { $doer = $event->getLog()->getDoer(); $receiver = $event->getLog()->getReceiver(); foreach ($badges as $badge) { $nbRules = count($badge->getRules()); if (null !== $doer && !$this->userHasBadge($doer, $badge)) { $resources = $this->ruleValidator->validate($badge, $doer); if (0 < $resources['validRules'] && $resources['validRules'] >= $nbRules) { $this->badgeManager->addBadgeToUser($badge, $doer); } } if (null !== $receiver && !$this->userHasBadge($receiver, $badge)) { $resources = $this->ruleValidator->validate($badge, $receiver); if (0 < $resources['validRules'] && $resources['validRules'] >= $nbRules) { $this->badgeManager->addBadgeToUser($badge, $receiver); } } } } }