/** * validate data and register user in DB * * @return ViewModel */ public function processAction() { if ($this->request->isPost()) { $form = new RegisterForm(); $data = $this->params()->fromPost(); $viewModel = new ViewModel(); $viewModel->setTemplate('user/register/index'); $viewModel->setVariable("registerForm", $form); $form->setData($data); if ($form->isValid()) { if ($data["password"] == $data["confirm_password"]) { $em = $this->getServiceLocator()->get('Doctrine\\ORM\\EntityManager'); $user = $em->getRepository('Application\\Entity\\User')->findByEmail($data['email']); if ($user) { $viewModel->setVariable('accountExistError', true); return $viewModel; } $user = new User(); $user->setFirstname($data['firstname']); $user->setLastname($data['lastname']); $user->setEmail($data['email']); $user->setPhone($data['phone']); $user->setPassword($data['password']); $user->setGender($data['gender']); $user->setBlocked(0); $user->setEmailVerified(0); $user->setPhoneVerified(0); $user->setBanned(0); $user->setRole('u'); $user->setExperience(0); $user->setBirthYear($data['birthyear']); $user->setRegistredDate(time()); $em->persist($user); $em->flush(); $params = ["email" => $user->getEmail()]; //$eventManager = $this->getEventManager()->trigger('sendMail', null, ); //TODO continue and send mail by Listener class $this->redirect()->toRoute('user', ['controller' => 'register', 'action' => 'success']); } else { $viewModel->setVariable('passwordError', true); return $viewModel; } } else { $viewModel->setVariable('formError', true); return $viewModel; } } else { $this->redirect()->toRoute('user', ['controller' => "register", "action" => "index"]); } }
/** * Register new User * @return array */ public function registerAction() { $formManager = $this->serviceLocator->get('FormElementManager'); $form = $formManager->get('registerForm'); $form->setInputFilter(new Form\RegisterFilter($this->getObjectManager())); $request = $this->getRequest(); if ($request->isPost()) { $form->setData($request->getPost()); if ($form->isValid()) { //CREATE NEW USER $user = new User(); $user->setCompany($this->getRequest()->getPost('company')); $user->setFirstName($this->getRequest()->getPost('first_name')); $user->setLastName($this->getRequest()->getPost('last_name')); $user->setEmail($this->getRequest()->getPost('email')); $bcrypt = new Bcrypt(); $securePass = $bcrypt->create($this->getRequest()->getPost('password')); $user->setPassword($securePass); $user->setStatus(0); $token = md5(uniqid(mt_rand(), true)); $user->setToken($token); $user->setAddress(""); $user->setZipcode(""); $user->setCity(""); $user->setCountry(""); $user->setPhone(""); $user->setCreated(new \DateTime("now")); $user->setLastModified(new \DateTime("now")); //AND SAVE USER TO DB $this->getObjectManager()->persist($user); $this->getObjectManager()->flush(); // $newId = $user->getId(); //COMPOSE AND SEND ACTIVATION MAIL //@TODO move hostname/baseurl to config $url = "http://www.example.net/login?token=" . $token; $translator = $this->getServiceLocator()->get('translator'); //Create text part of mail $textContent = sprintf($translator->translate("registration_mail_text"), $url); $text = new MimePart($textContent); $text->type = "text/plain"; //Create html part of mail $htmlMarkup = sprintf($translator->translate("registration_mail_html"), $url); $html = new MimePart($htmlMarkup); $html->type = "text/html"; //Compose mail $body = new MimeMessage(); $body->setParts(array($text, $html)); $message = new Message(); //@TODO move email address etc. to config $message->addFrom("*****@*****.**", "example.net")->addTo($user->getEmail(), $user->getFirstName() . " " . $user->getLastName())->setSubject($translator->translate("registration_mail_subject")); $message->setBody($body); $message->setEncoding("UTF-8"); //Debug mail: echo $message->toString(); //Depending on how you send mail.. /*$transport = new SmtpTransport(); $options = new SmtpOptions(array( 'name' => 'localhost.localdomain', 'host' => '127.0.0.1', 'connection_class' => 'login', 'connection_config' => array( 'username' => 'user', 'password' => 'pass', ), )); $transport->setOptions($options);*/ //Send email $transport = new SendmailTransport(); $transport->send($message); //REDIRECT TO SENT-PAGE return $this->redirect()->toRoute('home'); } } return array('form' => $form); }