Exemple #1
0
    /**
     * 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();
    }
Exemple #2
0
 /**
  * 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();
 }