From 102bcb1d46d85aba4e85e3d35998d963101ab3f0 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Tue, 17 Apr 2012 18:16:10 +0200 Subject: [PATCH] CC-3416 : Create password reset form --- airtime_mvc/application/Bootstrap.php | 2 +- airtime_mvc/application/configs/ACL.php | 2 - .../controllers/AuthController.php | 90 ------------------- .../controllers/LoginController.php | 85 +++++++++++++++++- airtime_mvc/application/forms/Login.php | 17 +++- .../application/forms/PasswordChange.php | 18 +++- .../application/forms/PasswordRestore.php | 12 ++- .../application/layouts/scripts/login.phtml | 8 +- .../views/scripts/auth/password-change.phtml | 1 - .../scripts/auth/password-restore-after.phtml | 1 - .../views/scripts/auth/password-restore.phtml | 1 - .../views/scripts/form/login.phtml | 33 +++++++ .../views/scripts/form/password-change.phtml | 25 ++++++ .../views/scripts/form/password-restore.phtml | 18 ++++ .../views/scripts/login/index.phtml | 2 - .../views/scripts/login/password-change.phtml | 9 ++ .../login/password-restore-after.phtml | 8 ++ .../scripts/login/password-restore.phtml | 9 ++ 18 files changed, 235 insertions(+), 106 deletions(-) delete mode 100644 airtime_mvc/application/controllers/AuthController.php delete mode 100644 airtime_mvc/application/views/scripts/auth/password-change.phtml delete mode 100644 airtime_mvc/application/views/scripts/auth/password-restore-after.phtml delete mode 100644 airtime_mvc/application/views/scripts/auth/password-restore.phtml create mode 100644 airtime_mvc/application/views/scripts/form/login.phtml create mode 100644 airtime_mvc/application/views/scripts/form/password-change.phtml create mode 100644 airtime_mvc/application/views/scripts/form/password-restore.phtml create mode 100644 airtime_mvc/application/views/scripts/login/password-change.phtml create mode 100644 airtime_mvc/application/views/scripts/login/password-restore-after.phtml create mode 100644 airtime_mvc/application/views/scripts/login/password-restore.phtml diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index aa84142cb..4b0f7e35d 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -144,7 +144,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 'password-change', new Zend_Controller_Router_Route('password-change/:user_id/:token', array( 'module' => 'default', - 'controller' => 'auth', + 'controller' => 'login', 'action' => 'password-change', ))); } diff --git a/airtime_mvc/application/configs/ACL.php b/airtime_mvc/application/configs/ACL.php index fa1c6bd91..f2f685a02 100644 --- a/airtime_mvc/application/configs/ACL.php +++ b/airtime_mvc/application/configs/ACL.php @@ -22,7 +22,6 @@ $ccAcl->add(new Zend_Acl_Resource('library')) ->add(new Zend_Acl_Resource('dashboard')) ->add(new Zend_Acl_Resource('preference')) ->add(new Zend_Acl_Resource('showbuilder')) - ->add(new Zend_Acl_Resource('auth')) ->add(new Zend_Acl_Resource('playouthistory')) ->add(new Zend_Acl_Resource('usersettings')) ->add(new Zend_Acl_Resource('audiopreview')); @@ -33,7 +32,6 @@ $ccAcl->allow('G', 'index') ->allow('G', 'error') ->allow('G', 'showbuilder') ->allow('G', 'api') - ->allow('G', 'auth') ->allow('G', 'schedule') ->allow('G', 'dashboard') ->allow('H', 'usersettings') diff --git a/airtime_mvc/application/controllers/AuthController.php b/airtime_mvc/application/controllers/AuthController.php deleted file mode 100644 index e2b33fe3d..000000000 --- a/airtime_mvc/application/controllers/AuthController.php +++ /dev/null @@ -1,90 +0,0 @@ -_helper->layout->setLayout('bare'); - - $form = new Application_Form_PasswordRestore(); - - $request = $this->getRequest(); - if ($request->isPost() && $form->isValid($request->getPost())) { - $user = CcSubjsQuery::create() - ->filterByDbEmail($form->email->getValue()) - ->findOne(); - - if (!empty($user)) { - $auth = new Application_Model_Auth(); - - $auth->sendPasswordRestoreLink($user, $this->view); - $this->_helper->redirector('password-restore-after', 'auth'); - } - else { - $form->email->addError($this->view->translate("Given email not found.")); - } - } - - $this->view->form = $form; - } - - public function passwordRestoreAfterAction() - { - //uses separate layout without a navigation. - $this->_helper->layout->setLayout('bare'); - } - - public function passwordChangeAction() - { - //uses separate layout without a navigation. - $this->_helper->layout->setLayout('bare'); - - $request = $this->getRequest(); - $token = $request->getParam("token", false); - $user_id = $request->getParam("user_id", 0); - - $form = new Application_Form_PasswordChange(); - $auth = new Application_Model_Auth(); - $user = CcSubjsQuery::create()->findPK($user_id); - - //check validity of token - if (!$auth->checkToken($user_id, $token, 'password.restore')) { - echo "token not valid"; - $this->_helper->redirector('index', 'login'); - } - - if ($request->isPost() && $form->isValid($request->getPost())) { - - $user->setDbPass(md5($form->password->getValue())); - $user->save(); - - $auth->invalidateTokens($user, 'password.restore'); - - $zend_auth = Zend_Auth::getInstance(); - $zend_auth->clearIdentity(); - - $authAdapter = Application_Model_Auth::getAuthAdapter(); - $authAdapter->setIdentity($user->getDbLogin()) - ->setCredential($form->password->getValue()); - - $result = $zend_auth->authenticate($authAdapter); - - //all info about this user from the login table omit only the password - $userInfo = $authAdapter->getResultRowObject(null, 'password'); - - //the default storage is a session with namespace Zend_Auth - $authStorage = $zend_auth->getStorage(); - $authStorage->write($userInfo); - - $this->_helper->redirector('index', 'showbuilder'); - } - - $this->view->form = $form; - } -} \ No newline at end of file diff --git a/airtime_mvc/application/controllers/LoginController.php b/airtime_mvc/application/controllers/LoginController.php index 5906ef814..fee77faac 100644 --- a/airtime_mvc/application/controllers/LoginController.php +++ b/airtime_mvc/application/controllers/LoginController.php @@ -12,9 +12,9 @@ class LoginController extends Zend_Controller_Action { global $CC_CONFIG; - if(Zend_Auth::getInstance()->hasIdentity()) + if (Zend_Auth::getInstance()->hasIdentity()) { - $this->_redirect('Nowplaying'); + $this->_redirect('Showbuilder'); } //uses separate layout without a navigation. @@ -97,6 +97,87 @@ class LoginController extends Zend_Controller_Action Zend_Auth::getInstance()->clearIdentity(); $this->_redirect('showbuilder/index'); } + + public function passwordRestoreAction() + { + //uses separate layout without a navigation. + $this->_helper->layout->setLayout('login'); + + $form = new Application_Form_PasswordRestore(); + + $request = $this->getRequest(); + if ($request->isPost() && $form->isValid($request->getPost())) { + $user = CcSubjsQuery::create() + ->filterByDbEmail($form->email->getValue()) + ->findOne(); + + if (!empty($user)) { + $auth = new Application_Model_Auth(); + + $auth->sendPasswordRestoreLink($user, $this->view); + $this->_helper->redirector('password-restore-after', 'auth'); + } + else { + $form->email->addError($this->view->translate("Given email not found.")); + } + } + + $this->view->form = $form; + } + + public function passwordRestoreAfterAction() + { + //uses separate layout without a navigation. + $this->_helper->layout->setLayout('login'); + } + + public function passwordChangeAction() + { + //uses separate layout without a navigation. + $this->_helper->layout->setLayout('login'); + + $request = $this->getRequest(); + $token = $request->getParam("token", false); + $user_id = $request->getParam("user_id", 0); + + $form = new Application_Form_PasswordChange(); + $auth = new Application_Model_Auth(); + $user = CcSubjsQuery::create()->findPK($user_id); + + //check validity of token + if (!$auth->checkToken($user_id, $token, 'password.restore')) { + echo "token not valid"; + $this->_helper->redirector('index', 'login'); + } + + if ($request->isPost() && $form->isValid($request->getPost())) { + + $user->setDbPass(md5($form->password->getValue())); + $user->save(); + + $auth->invalidateTokens($user, 'password.restore'); + + $zend_auth = Zend_Auth::getInstance(); + $zend_auth->clearIdentity(); + + $authAdapter = Application_Model_Auth::getAuthAdapter(); + $authAdapter->setIdentity($user->getDbLogin()) + ->setCredential($form->password->getValue()); + + $result = $zend_auth->authenticate($authAdapter); + + //all info about this user from the login table omit only the password + $userInfo = $authAdapter->getResultRowObject(null, 'password'); + + //the default storage is a session with namespace Zend_Auth + $authStorage = $zend_auth->getStorage(); + $authStorage->write($userInfo); + + $this->_helper->redirector('index', 'showbuilder'); + } + + $this->view->form = $form; + } } diff --git a/airtime_mvc/application/forms/Login.php b/airtime_mvc/application/forms/Login.php index c288b8b37..c23e9ee84 100644 --- a/airtime_mvc/application/forms/Login.php +++ b/airtime_mvc/application/forms/Login.php @@ -9,6 +9,10 @@ class Application_Form_Login extends Zend_Form // Set the method for the display form to POST $this->setMethod('post'); + + $this->setDecorators(array( + array('ViewScript', array('viewScript' => 'form/login.phtml')) + )); // Add username element $this->addElement('text', 'username', array( @@ -19,9 +23,12 @@ class Application_Form_Login extends Zend_Form 'filters' => array('StringTrim'), 'validators' => array( 'NotEmpty', + ), + 'decorators' => array( + 'ViewHelper' ) )); - + // Add password element $this->addElement('password', 'password', array( 'label' => 'Password:', @@ -31,6 +38,9 @@ class Application_Form_Login extends Zend_Form 'filters' => array('StringTrim'), 'validators' => array( 'NotEmpty', + ), + 'decorators' => array( + 'ViewHelper' ) )); @@ -47,7 +57,10 @@ class Application_Form_Login extends Zend_Form $this->addElement('submit', 'submit', array( 'ignore' => true, 'label' => 'Login', - 'class' => 'ui-button ui-widget ui-state-default ui-button-text-only center' + 'class' => 'ui-button ui-widget ui-state-default ui-button-text-only center', + 'decorators' => array( + 'ViewHelper' + ) )); } diff --git a/airtime_mvc/application/forms/PasswordChange.php b/airtime_mvc/application/forms/PasswordChange.php index 7b937c396..333ef2bab 100644 --- a/airtime_mvc/application/forms/PasswordChange.php +++ b/airtime_mvc/application/forms/PasswordChange.php @@ -6,6 +6,10 @@ class Application_Form_PasswordChange extends Zend_Form { public function init() { + $this->setDecorators(array( + array('ViewScript', array('viewScript' => 'form/password-change.phtml')) + )); + $this->addElement('password', 'password', array( 'label' => 'Password', 'required' => true, @@ -13,10 +17,13 @@ class Application_Form_PasswordChange extends Zend_Form 'validators' => array( array('stringLength', false, array(6, 80)), ), + 'decorators' => array( + 'ViewHelper' + ) )); $this->addElement('password', 'password_confirm', array( - 'label' => 'Password Confirmation', + 'label' => 'Confirm new password', 'required' => true, 'filters' => array('stringTrim'), 'validators' => array( @@ -25,11 +32,18 @@ class Application_Form_PasswordChange extends Zend_Form }), ), 'errorMessages' => array("Password confirmation does not match your password."), + 'decorators' => array( + 'ViewHelper' + ) )); $this->addElement('submit', 'submit', array( - 'label' => 'Set password', + 'label' => 'Get new password', 'ignore' => true, + 'class' => 'ui-button ui-widget ui-state-default ui-button-text-only center', + 'decorators' => array( + 'ViewHelper' + ) )); } } diff --git a/airtime_mvc/application/forms/PasswordRestore.php b/airtime_mvc/application/forms/PasswordRestore.php index 410fc0565..54bfbd47a 100644 --- a/airtime_mvc/application/forms/PasswordRestore.php +++ b/airtime_mvc/application/forms/PasswordRestore.php @@ -6,18 +6,28 @@ class Application_Form_PasswordRestore extends Zend_Form { public function init() { + $this->setDecorators(array( + array('ViewScript', array('viewScript' => 'form/password-restore.phtml')) + )); + $this->addElement('text', 'email', array( 'label' => 'E-mail', 'required' => true, 'filters' => array( 'stringTrim', ), + 'decorators' => array( + 'ViewHelper' + ) )); $this->addElement('submit', 'submit', array( 'label' => 'Restore password', 'ignore' => true, - 'class' => 'ui-button ui-state-default' + 'class' => 'ui-button ui-widget ui-state-default ui-button-text-only center', + 'decorators' => array( + 'ViewHelper' + ) )); } } \ No newline at end of file diff --git a/airtime_mvc/application/layouts/scripts/login.phtml b/airtime_mvc/application/layouts/scripts/login.phtml index e91b735ee..56a71bfcc 100644 --- a/airtime_mvc/application/layouts/scripts/login.phtml +++ b/airtime_mvc/application/layouts/scripts/login.phtml @@ -9,7 +9,13 @@ -
layout()->content ?>
+
+ layout()->content ?> +
+ diff --git a/airtime_mvc/application/views/scripts/auth/password-change.phtml b/airtime_mvc/application/views/scripts/auth/password-change.phtml deleted file mode 100644 index 7c0a490fd..000000000 --- a/airtime_mvc/application/views/scripts/auth/password-change.phtml +++ /dev/null @@ -1 +0,0 @@ -
form ?>
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/auth/password-restore-after.phtml b/airtime_mvc/application/views/scripts/auth/password-restore-after.phtml deleted file mode 100644 index 686d7cb83..000000000 --- a/airtime_mvc/application/views/scripts/auth/password-restore-after.phtml +++ /dev/null @@ -1 +0,0 @@ -
Email sent
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/auth/password-restore.phtml b/airtime_mvc/application/views/scripts/auth/password-restore.phtml deleted file mode 100644 index 7c0a490fd..000000000 --- a/airtime_mvc/application/views/scripts/auth/password-restore.phtml +++ /dev/null @@ -1 +0,0 @@ -
form ?>
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/form/login.phtml b/airtime_mvc/application/views/scripts/form/login.phtml new file mode 100644 index 000000000..39c42cd59 --- /dev/null +++ b/airtime_mvc/application/views/scripts/form/login.phtml @@ -0,0 +1,33 @@ +
+
+ +
+ +
+
+ element->getElement('username') ?> +
+ +
+ +
+
+ element->getElement('password') ?> +
+ + +
+ Reset password +
+ +
 
+
+ element->getElement('submit') ?> +
+ +
+
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/form/password-change.phtml b/airtime_mvc/application/views/scripts/form/password-change.phtml new file mode 100644 index 000000000..fdd380884 --- /dev/null +++ b/airtime_mvc/application/views/scripts/form/password-change.phtml @@ -0,0 +1,25 @@ +
+
+
+ +
+
+ element->getElement('password') ?> +
+
+ +
+
+ element->getElement('password_confirm') ?> +
+ +
 
+
+ element->getElement('submit') ?> +
+
+
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/form/password-restore.phtml b/airtime_mvc/application/views/scripts/form/password-restore.phtml new file mode 100644 index 000000000..ce8d84edd --- /dev/null +++ b/airtime_mvc/application/views/scripts/form/password-restore.phtml @@ -0,0 +1,18 @@ +
+
+
+ +
+
+ element->getElement('email') ?> +
+ + +
 
+
+ element->getElement('submit') ?> +
+
+
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/login/index.phtml b/airtime_mvc/application/views/scripts/login/index.phtml index bde3fb9f9..7aba40c29 100644 --- a/airtime_mvc/application/views/scripts/login/index.phtml +++ b/airtime_mvc/application/views/scripts/login/index.phtml @@ -9,5 +9,3 @@ form; ?> - diff --git a/airtime_mvc/application/views/scripts/login/password-change.phtml b/airtime_mvc/application/views/scripts/login/password-change.phtml new file mode 100644 index 000000000..8be481cea --- /dev/null +++ b/airtime_mvc/application/views/scripts/login/password-change.phtml @@ -0,0 +1,9 @@ +
+
 
+

New password

+ + +
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/login/password-restore-after.phtml b/airtime_mvc/application/views/scripts/login/password-restore-after.phtml new file mode 100644 index 000000000..c99394212 --- /dev/null +++ b/airtime_mvc/application/views/scripts/login/password-restore-after.phtml @@ -0,0 +1,8 @@ +
+
 
+

Email sent

+ + +
diff --git a/airtime_mvc/application/views/scripts/login/password-restore.phtml b/airtime_mvc/application/views/scripts/login/password-restore.phtml new file mode 100644 index 000000000..63d265c65 --- /dev/null +++ b/airtime_mvc/application/views/scripts/login/password-restore.phtml @@ -0,0 +1,9 @@ +
+
 
+

Reset password

+ + +
\ No newline at end of file