Example #1
0
 /**
  * @param Badge     $badge
  * @param User      $user
  * @param string    $comment
  * @param User|null $issuer
  *
  * @throws \Exception
  *
  * @return bool
  */
 public function addBadgeToUser(Badge $badge, User $user, $comment = null, $issuer = null, $delayFlushAndEvent = false)
 {
     $badgeAwarded = false;
     /** @var \Icap\BadgeBundle\Repository\UserBadgeRepository $userBadgeRepository */
     $userBadgeRepository = $this->entityManager->getRepository('IcapBadgeBundle:UserBadge');
     $userBadge = $userBadgeRepository->findOneByBadgeAndUser($badge, $user);
     if (null === $userBadge) {
         try {
             $userBadge = new UserBadge();
             $userBadge->setBadge($badge)->setUser($user)->setComment($comment)->setIssuer($issuer);
             if ($badge->isExpiring()) {
                 $userBadge->setExpiredAt($this->generateExpireDate($badge));
             }
             $badge->addUserBadge($userBadge);
             $badgeAwarded = true;
             $this->entityManager->persist($badge);
             if (!$delayFlushAndEvent) {
                 $this->entityManager->flush();
                 $this->dispatchBadgeAwardingEvent($badge, $user, $issuer);
             }
         } catch (\Exception $exception) {
             throw $exception;
         }
     }
     return $badgeAwarded;
 }