/** * @param UserInterface $userEntity * @param string $type * @param int|null $expire * * @return string */ public function setCode4User(UserInterface $userEntity, $type, $expire = null) { $entityManager = $this->entityManager; $this->getRepositoryManager()->deleteCodes4User($userEntity->getId(), $type); do { $found = false; $code = $this->formatService->getCode(); if ($this->getRepositoryManager()->getCode($code)) { $found = true; } } while ($found); $userCodesEntity = new Entity(); $userCodesEntity->setCode($code)->setUser($userEntity)->setType($type); if (!$expire) { $expireOption = $this->collectionOptions->getUserCodesOptions()->getExpire(); if (isset($expireOption[$type])) { $expire = $expireOption[$type]; } else { $expire = $expireOption['general']; } } if ($expire) { $dateTime = new DateTime(); $userCodesEntity->setExpire($dateTime->setTimestamp(time() + $expire)); } $entityManager->persist($userCodesEntity); $entityManager->flush(); return $code; }
/** * @param UserInterface $user * @param $answer * * @return bool */ public function isAnswerAllowed(UserInterface $user, $answer) { $answerEntity = $this->getEntityManagerAnswer()->getAnswer4UserId($user->getId()); if (!$answerEntity) { return true; } // @TODO better workflow, with ZendFilter $realAnswer = strtolower(trim($answerEntity->getAnswer())); $plainAnswer = strtolower(trim($answer)); return $realAnswer === $plainAnswer; }
/** * @param UserInterface $user * @return bool */ protected function isCountryAllowed(UserInterface $user) { $result = true; $entityManager = $this->entityManager; /** @var CountryList $countryList */ $countryList = $entityManager->getRepository($this->collectionOptions->getEntityOptions()->getCountryList()); $country = $countryList->getCountryCode4Ip($this->ipService->getIp2Decimal()); /** @var RepositoryAvailableCountries $availableCountries */ $availableCountries = $entityManager->getRepository($this->collectionOptions->getEntityOptions()->getAvailableCountries()); if (!$availableCountries->isCountryAllowedForUser($user->getId(), $country)) { $code = $this->userCodeService->setCode4User($user, UserCodesEntity::TYPE_CONFIRM_COUNTRY); $this->mailService->confirmCountry($user, $code); $this->getFlashMessenger()->setNamespace($this::ERROR_NAME_SPACE)->addMessage('Please confirm your new ip with your email'); $result = false; } return $result; }