예제 #1
0
 /**
  * @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);
                 }
             }
         }
     }
 }