/** * Displays a form to enter in an email address; if this email address * is associated with a user then an email will be sent to them with * a reset code and details on how to reset their password (change it). * * @return string|bool */ public function forgotSection() { $this->setTitle(t('Forgotten your password?')); $form = new View_form('pwd/form_forgotten.html', 'session'); $form->addElement('session/email', null, t('Email'), new Validator_Email()); if ($form->hasInput() && $form->isValid()) { /** * Check users exists, get details and send email */ $pdoSt = $this->_sql->prepare('SELECT id FROM {PREFIX}users WHERE email = ?'); $pdoSt->execute(array($form->getValues('session/email'))); $uid = $pdoSt->fetchColumn(); $pdoSt->closeCursor(); try { $user = $this->_ugmanager->getUser($uid); // Generate a reset code that is unique $pdoSt = $this->_sql->prepare('SELECT COUNT(uid) FROM {PREFIX}users_meta WHERE name = "sessionResetCode" AND value = ?'); do { $resetCode = zula_create_key(); $pdoSt->execute(array($resetCode)); } while ($pdoSt->fetchColumn() >= 1); $pdoSt->closeCursor(); // Update user account and attempt to send the email $this->_ugmanager->editUser($user['id'], array('sessionResetCode' => $resetCode)); $msgView = $this->loadView('pwd/email_forgotten.txt'); $msgView->assign(array('code' => $resetCode, 'user' => $user)); $message = new Email_Message(t('Forgotten password'), $msgView->getOutput()); $message->setTo($user['email']); $email = new Email(); $email->send($message); $this->_event->success(t("An email has been sent to the users email address")); return zula_redirect($this->_router->makeUrl('session')); } catch (Ugmanager_UserNoExist $e) { $this->_event->error(t('The provided email does not exist')); } catch (Email_Exception $e) { $this->_event->error(t('An error occurred while sending the email. Please try again later')); } } return $form->getOutput(); }
/** * Displays all users awaiting validation, these can either be accepted * or declined. * * @return string */ public function validationsSection() { $this->setTitle(t('Manage validations')); $this->setOutputType(self::_OT_CONFIG); if (!$this->_acl->check('session_manage')) { throw new Module_NoPermission(); } // Build form validation $form = new View_form('config/validation.html', 'session'); $form->addElement('session/action', null, t('Action'), new Validator_InArray(array('accept', 'decline'))); $form->addElement('session/uids', null, t('Users'), new Validator_Is('array')); if ($form->hasInput() && $form->isValid()) { // Activate or Decline/Remove all selected users foreach ($form->getValues('session/uids') as $user) { try { $user = $this->_ugmanager->getUser($user, true, true); if ($user['activate_code']) { if ($form->getValues('session/action') == 'accept') { $this->_ugmanager->editUser($user['id'], array('status' => 'active', 'activate_code' => null)); $viewFile = 'config/validation_accepted.txt'; $eventMsg = t('Selected users are now active'); } else { $this->_ugmanager->deleteUser($user['id']); $viewFile = 'config/validation_declined.txt'; $eventMsg = t('Selected users have been declined'); } $msgView = $this->loadView($viewFile); $msgView->assign(array('USERNAME' => $user['username'])); // Send off the correct email to the user, to notify them. $message = new Email_Message(t('Account Status'), $msgView->getOutput()); $message->setTo($user['email']); $email = new Email(); $email->send($message); } } catch (Ugmanager_UserNoExist $e) { // We don't really care if it does not exist, do nothing. } catch (Email_Exception $e) { $this->_event->error(t('An error occurred when sending the validation email')); $this->_log->message('Unable to send validation email: ' . $e->getMessage(), Log::L_WARNING); } } $this->_event->success($eventMsg); return zula_redirect($this->_router->makeUrl('session', 'config', 'validations')); } $form->assign(array('VALIDATIONS' => $this->_model()->getAwaitingValidation())); return $form->getOutput(); }