/** * @param $data * @param UserInterface $user * @return bool */ public function addEmail($data, UserInterface $user) { $form = $this->getAddEmailForm(); $form->setData($data); if (!$form->isValid()) { foreach ($form->getElements() as $messages) { /** @var \Zend\Form\ElementInterface $messages */ foreach ($messages->getMessages() as $message) { $this->getFlashMessenger()->setNamespace(self::ERROR_NAMESPACE)->addMessage($message); } } return false; } $user = $this->getUser4Id($user->getId()); if ($user->getEmail()) { $this->getFlashMessenger()->setNamespace(self::ERROR_NAMESPACE)->addMessage('Email already exists in your Account'); return false; } $data = $form->getData(); $entityManager = $this->entityManager; if ($this->collectionOptions->getRegisterOptions()->isMailConfirmation()) { $userExtensionName = $this->collectionOptions->getEntityOptions()->getUserExtension(); /** @var \PServerCore\Entity\UserExtension $userExtension */ $userExtension = new $userExtensionName(); /** @var \PServerCore\Entity\Repository\UserExtension $extensionRepository */ $extensionRepository = $entityManager->getRepository($userExtensionName); $extensionRepository->deleteExtension($user, $userExtension::KEY_ADD_EMAIL); $userExtension->setKey($userExtension::KEY_ADD_EMAIL)->setUser($user)->setValue($data['email']); $entityManager->persist($userExtension); $entityManager->flush(); $code = $this->userCodeService->setCode4User($user, UserCodesEntity::TYPE_ADD_EMAIL); $user->setEmail($data['email']); $this->mailService->addEmail($user, $code); $this->getFlashMessenger()->setNamespace(self::SUCCESS_NAMESPACE)->addMessage('Success, please confirm your mail.'); } else { $user->setEmail($data['email']); $entityManager->persist($user); $entityManager->flush(); $this->authService->getStorage()->write($user); } return true; }
/** * RegisterFilter constructor. * @param Collection $collection * @param EntityManager $entityManager * @param DataServiceInterface $gameBackendService */ public function __construct(Collection $collection, EntityManager $entityManager, DataServiceInterface $gameBackendService) { $this->collection = $collection; $this->entityManager = $entityManager; $this->gameBackendService = $gameBackendService; $validationUsernameOptions = $this->collection->getValidationOptions()->getUsername(); $this->add(['name' => 'username', 'required' => true, 'filters' => [['name' => 'StringTrim']], 'validators' => [['name' => 'StringLength', 'options' => ['min' => $validationUsernameOptions['length']['min'], 'max' => $validationUsernameOptions['length']['max']]], ['name' => 'Alnum'], $this->getUsernameValidator(), $this->getUserNameBackendNotExistsValidator()]]); $this->add(['name' => 'email', 'required' => true, 'filters' => [['name' => 'StringTrim']], 'validators' => [['name' => 'EmailAddress', 'options' => ['allow' => Hostname::ALLOW_DNS, 'useMxCheck' => true, 'useDeepMxCheck' => true]], $this->getStriposValidator()]]); if (!$this->collection->getRegisterOptions()->isDuplicateEmail()) { $element = $this->get('email'); /** @var \Zend\Validator\ValidatorChain $chain */ $chain = $element->getValidatorChain(); $chain->attach($this->getEmailValidator()); $element->setValidatorChain($chain); } $this->add(['name' => 'emailVerify', 'required' => true, 'filters' => [['name' => 'StringTrim']], 'validators' => [['name' => 'StringLength', 'options' => ['min' => 6, 'max' => 255]], ['name' => 'Identical', 'options' => ['token' => 'email']]]]); $passwordLengthOptions = $this->collection->getPasswordOptions()->getLength(); $this->add(['name' => 'password', 'required' => true, 'filters' => [['name' => 'StringTrim']], 'validators' => [['name' => 'StringLength', 'options' => ['min' => $passwordLengthOptions['min'], 'max' => $passwordLengthOptions['max']]], new Validator\PasswordRules($this->collection->getPasswordOptions())]]); $this->add(['name' => 'passwordVerify', 'required' => true, 'filters' => [['name' => 'StringTrim']], 'validators' => [['name' => 'StringLength', 'options' => ['min' => $passwordLengthOptions['min'], 'max' => $passwordLengthOptions['max']]], ['name' => 'Identical', 'options' => ['token' => 'password']], new Validator\PasswordRules($this->collection->getPasswordOptions())]]); if ($this->collection->getPasswordOptions()->isSecretQuestion()) { $this->add(['name' => 'question', 'required' => true, 'validators' => [['name' => 'InArray', 'options' => ['haystack' => $this->getSecretQuestionList()]]]]); $this->add(['name' => 'answer', 'required' => true, 'filters' => [['name' => 'StringTrim']], 'validators' => [['name' => 'StringLength', 'options' => ['min' => 3, 'max' => 255]]]]); } }
/** * AddEmailFilter constructor. * @param EntityManager $entityManager * @param array $config * @param Collection $collection */ public function __construct(EntityManager $entityManager, array $config, Collection $collection) { $this->entityManager = $entityManager; $this->config = $config; $this->collectionOptions = $collection; $this->add(['name' => 'email', 'required' => true, 'filters' => [['name' => 'StringTrim']], 'validators' => [['name' => 'EmailAddress', 'options' => ['allow' => Hostname::ALLOW_DNS, 'useMxCheck' => true, 'useDeepMxCheck' => true]], $this->getStriposValidator()]]); if (!$collection->getRegisterOptions()->isDuplicateEmail()) { $element = $this->get('email'); /** @var \Zend\Validator\ValidatorChain $chain */ $chain = $element->getValidatorChain(); $chain->attach($this->getEmailValidator()); $element->setValidatorChain($chain); } $this->add(['name' => 'emailVerify', 'required' => true, 'filters' => [['name' => 'StringTrim']], 'validators' => [['name' => 'StringLength', 'options' => ['min' => 6, 'max' => 255]], ['name' => 'Identical', 'options' => ['token' => 'email']]]]); }
/** * read from the config if system works with mail confirmation * @return boolean */ public function isRegisterMailConfirmationOption() { return (bool) $this->collectionOptions->getRegisterOptions()->isMailConfirmation(); }