/**
  * Get link to redirect on
  * @param string $linkId
  * @param string $securKey
  */
 public function getLink($linkId, $securKey)
 {
     $link4mailing = $this->link4mailingRepository->find($linkId);
     if ($link4mailing instanceof Link4mailing && $link4mailing->getIsActive() === true) {
         $date = new \DateTime();
         $expirationDate = $link4mailing->getExpirationDate();
         if (!is_null($expirationDate) && $expirationDate < $date) {
             throw new \Exception('This link has expired');
         }
         if ($securKey === md5($link4mailing->getRouteNameOrUri() . $link4mailing->getToken() . json_encode($link4mailing->getRouteParams()))) {
             if ($link4mailing->getIsExternalLink()) {
                 $url = $link4mailing->getRouteNameOrUri();
             } else {
                 $url = $this->router->generate($link4mailing->getRouteNameOrUri(), $link4mailing->getRouteParams());
             }
             if ($link4mailing->getUserId() !== 0) {
                 $this->autologin->autologin($url, $link4mailing->getUserId());
             }
             return $url;
         } else {
             throw new \Exception('This link is not valid');
         }
     } else {
         throw new \Exception('Not found link');
     }
 }
 /**
  * Generate link
  * @param string $routeNameOrUri
  * @param mixed $routeParams
  * @param boolean $isExternalLink
  * @param int $userId
  * @param int $duration
  */
 public function generateLink($routeNameOrUri, $routeParams = array(), $isExternalLink = false, $userId = 0, $duration = 0)
 {
     $link4mailing = new Link4mailing();
     if ($isExternalLink === true) {
         if ($this->checkExternalLink($routeNameOrUri)) {
             $routeParams = array();
         } else {
             throw new \Exception('This link "' . $routeNameOrUri . '" is not valid');
         }
     } else {
         if (is_array($routeParams)) {
             $this->router->generate($routeNameOrUri, $routeParams, true);
         } else {
             throw new \LogicException('$routeName must be an array');
         }
     }
     if (!is_int($userId)) {
         throw new \LogicException('$userId must be an integer');
     }
     if (!is_int($duration)) {
         throw new \LogicException('$duration must be an integer');
     } elseif ($duration > 0) {
         $time = strtotime('+' . $duration . ' hour');
         $expirationDate = new \DateTime();
         $expirationDate->setTimestamp($time);
         $link4mailing->setExpirationDate($expirationDate);
     }
     $token = md5(substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!:;,§/.?*ùµ%|_-#=()'), 0, 30));
     $link4mailing->setRouteNameOrUri($routeNameOrUri)->setRouteParams($routeParams)->setToken($token)->setUserId($userId)->setIsExternalLink($isExternalLink)->setIsActive(1);
     $this->em->persist($link4mailing);
     $this->em->flush();
     return str_replace('/app_dev.php', '', $this->router->generate('zaeder.link4mailing', array('linkId' => $link4mailing->getId(), 'securKey' => md5($routeNameOrUri . $token . json_encode($routeParams))), true));
 }