/**
  * @param Message $message
  * @param Ticket $ticket
  */
 private function processWatchers(Message $message, $ticket)
 {
     if (!$ticket) {
         return;
     }
     /** @var Message\MessageRecipient $recipient */
     foreach ($message->getRecipients() as $recipient) {
         $email = $recipient->getEmail();
         if ($email == $this->configManager->get(self::EMAIL_NOTIFIER_CONFIG_PATH)) {
             continue;
         }
         $diamanteUser = $this->diamanteUserRepository->findUserByEmail($email);
         $oroUser = $this->oroUserManager->findUserByEmail($email);
         if ($oroUser) {
             $user = new User($oroUser->getId(), User::TYPE_ORO);
         } elseif ($diamanteUser) {
             $user = new User($diamanteUser->getId(), User::TYPE_DIAMANTE);
         } else {
             $diamanteUser = $this->diamanteUserFactory->create($email, $recipient->getFirstName(), $recipient->getLastName());
             $this->diamanteUserRepository->store($diamanteUser);
             $user = new User($diamanteUser->getId(), User::TYPE_DIAMANTE);
         }
         $this->watchersService->addWatcher($ticket, $user);
     }
 }
 /**
  * @param Message $message
  * @param Ticket $ticket
  */
 private function processWatchers(Message $message, $ticket)
 {
     if (!$ticket) {
         return;
     }
     /** @var Message\MessageRecipient $recipient */
     foreach ($message->getRecipients() as $recipient) {
         $email = $recipient->getEmail();
         if ($email == $this->configManager->get(self::EMAIL_NOTIFIER_CONFIG_PATH)) {
             continue;
         }
         $user = $this->diamanteUserService->getUserByEmail($email);
         if (is_null($user)) {
             $user = $this->diamanteUserService->createDiamanteUser($this->prepareCreateUserCommand($message));
         }
         $this->watchersService->addWatcher($ticket, $user);
     }
 }
 /**
  * Add Watcher to Ticket
  *
  * @ApiDoc(
  *  description="Add watcher to ticket by email address",
  *  uri="/tickets/{id}/watchers.{_format}",
  *  method="POST",
  *  resource=true,
  *  requirements={
  *      {
  *          "name"="id",
  *          "dataType"="integer",
  *          "requirement"="\d+",
  *          "description"="Ticket Id"
  *      }
  *  },
  *  statusCodes={
  *      201="Returned when successful",
  *      403="Returned when the user is not authorized",
  *      404="Returned when the ticket not found"
  *  }
  * )
  *
  * @param Command\AddWatcherByEmailCommand $command
  * @return null
  */
 public function addWatcherByEmail(Command\AddWatcherByEmailCommand $command)
 {
     $ticket = $this->getTicket($command);
     $oroUser = $this->userManager->findUserByEmail($command->email);
     $diamanteUser = $this->diamanteUserRepository->findUserByEmail($command->email);
     // TODO: same login present in notification should be moved to one place
     if ($oroUser) {
         $user = new User($oroUser->getId(), User::TYPE_ORO);
     } elseif ($diamanteUser) {
         $user = new User($diamanteUser->getId(), User::TYPE_DIAMANTE);
     } else {
         $recipient = new MessageRecipient($command->email, null);
         $diamanteUser = $this->diamanteUserFactory->create($command->email, $recipient->getFirstName(), $recipient->getLastName());
         $this->diamanteUserRepository->store($diamanteUser);
         $user = new User($diamanteUser->getId(), User::TYPE_DIAMANTE);
     }
     parent::addWatcher($ticket, $user);
     return $this->userService->fetchUserDetails($user);
 }