public function lostPasswordAction() { $viewModel = new ViewModel(); $form = new LostPasswordForm(); $accountFilter = new AccountFIlter(); $filter = new InputFilter(); $filter->add($accountFilter->get('email')); $form->setInputFilter($filter); $request = $this->getRequest(); if ($request->isPost()) { $data = $request->getPost(); $form->setData($data); if ($form->isValid()) { $em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default'); // 找到使用者 if ($user = $em->getRepository('Base\\Entity\\User')->findOneBy(array('email' => $form->get('email')->getValue()))) { $md5 = md5(time() . $user->getUserName() . $user->getEmail()); $user->setCheckCode($md5); $em->persist($user); $em->flush(); $view = new \Zend\View\Renderer\PhpRenderer(); $resolver = new \Zend\View\Resolver\TemplateMapResolver(); $resolver->setMap(array('mailLayout' => __DIR__ . '/../../../../Application/view/layout/layout-mail.phtml', 'mailTemplate' => __DIR__ . '/../../../view/user/sign/lost-password-mail.phtml')); $view->setResolver($resolver); $uri = $this->getRequest()->getUri(); $scheme = $uri->getScheme(); $host = $uri->getHost(); $base = sprintf('%s://%s%s', $scheme, $host, $this->getRequest()->getBasePath()); $viewModel->setTemplate('mailTemplate')->setVariables(array('user' => $user, 'url' => $base)); $content = $view->render($viewModel); $viewLayout = new ViewModel(); $viewLayout->setTemplate('mailLayout')->setVariables(array('content' => $content)); $body = $view->render($viewLayout); $bodyPart = new \Zend\Mime\Message(); $bodyMessage = new \Zend\Mime\Part($body); $bodyMessage->type = 'text/html'; $bodyPart->setParts(array($bodyMessage)); $message = new Mail\Message(); $message->addTo($user->getEmail(), $user->getusername()); $message->setFrom('*****@*****.**', '系統通知信'); $message->setSubject('重設密碼通知信'); $message->setBody($bodyPart); $message->setEncoding('UTF-8'); $transport = new Mail\Transport\Sendmail(); $transport->send($message); // $viewModel->setTemplate('user/login/send-mail.phtml'); $this->flashmessenger()->addMessage($user->getEmail()); return $this->redirect()->toRoute('user/default', array('controller' => 'sign', 'action' => 'send-mail')); // return $viewModel; } else { $this->flashmessenger()->addMessage('您輸入了錯誤的帳號或電子郵件'); } } } $viewModel->setVariable('form', $form); $viewModel->setVariable('flashMessages', $this->flashMessenger()->getMessages()); return $viewModel; }
public function changePasswordAction() { $viewModel = new ViewModel(); $username = $this->getAuthService()->getIdentity()->getUsername(); $registerForm = new RegisterForm(); $form = new \Zend\Form\Form('changePasswordForm'); $form->add($registerForm->get('password')); $form->add($registerForm->get('re_password')); // $form->add($registerForm->get('submit')->setAttribute('value', '修改密碼')); $accountFilter = new AccountFIlter(); $filter = new InputFilter(); $filter->add($accountFilter->get('password'))->add($accountFilter->get('re_password')); $form->setInputFilter($filter); if ($this->getRequest()->isPost()) { $data = $this->getRequest()->getPost(); $form->setData($data); if ($form->isValid()) { $em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default'); $user = $em->getRepository('Base\\Entity\\User')->findOneBy(array('username' => $username)); if ($user) { //$user->setPassword(md5($form->get('password')->getValue())); $user->setPassword(\Zend\Ldap\Attribute::createPassword($form->get('password')->getValue())); $em->persist($user); $em->flush(); $this->getServiceLocator()->get('Zend\\Log')->info($username . ' changed password'); $this->flashMessenger()->addSuccessMessage('更改密碼成功!'); return $this->redirect()->refresh(); } } } $viewModel->setVariable('form', $form); return $viewModel; }