Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/Users/src/Controller/UsersController.php
<?php

namespace Croogo\Users\Controller;

use
Croogo\Core\Croogo;
use
Croogo\Users\Model\Table\UsersTable;

/**
 * Users Controller
 *
 * @property UsersTable Users
 * @category Controller
 * @package  Croogo.Users.Controller
 * @version  1.0
 * @author   Fahad Ibnay Heylaal <contact@fahad19.com>
 * @license  http://www.opensource.org/licenses/mit-license.php The MIT License
 * @link     http://www.croogo.org
 */
class UsersController extends AppController
{

   
/**
     * {inheritdoc}
     */
   
public function initialize()
    {
       
parent::initialize();
       
$this->Auth->allow(['logout']);
    }

   
/**
     * Index
     *
     * @return void
     * @access public
     */
   
public function index()
    {
       
$this->set('title_for_layout', __d('croogo', 'Users'));
    }

   
/**
     * Add
     *
     * @return void
     * @access public
     */
   
public function add()
    {
       
$user = $this->Users->newEntity();

       
$this->set('user', $user);

        if (!
$this->getRequest()->is('post')) {
            return;
        }

       
$user = $this->Users->register($user, $this->getRequest()->getData());
        if (!
$user) {
           
$this->Flash->error(__d('croogo', 'The User could not be saved. Please, try again.'));

            return;
        }

       
$this->Flash->success(__d('croogo', 'You have successfully registered an account. An email has been sent with further instructions.'));

        return
$this->redirect(['action' => 'login']);
    }

   
/**
     * Activate
     *
     * @param string $username
     * @param string $activationKey
     * @return \Cake\Http\Response|void
     * @access public
     */
   
public function activate($username, $activationKey)
    {
       
// Get the user with the activation key from the database
       
$user = $this->Users
           
->find()
            ->
where([
               
'username' => $username,
               
'activation_key' => $activationKey
           
])
            ->
first();
        if (!
$user) {
           
$this->Flash->error(__d('croogo', 'Could not activate your account.'));

            return
$this->redirect(['action' => 'login']);
        }

       
// Activate the user
       
$user = $this->Users->activate($user);
        if (!
$user) {
           
$this->Flash->error(__d('croogo', 'Could not activate your account'));

            return
$this->redirect(['action' => 'login']);
        }

       
$this->Flash->success(__d('croogo', 'Account activated successfully.'));

        return
$this->redirect(['action' => 'login']);
    }

   
/**
     * Edit
     *
     * @return void
     * @access public
     */
   
public function edit()
    {
    }

   
/**
     * Forgot
     *
     * @return void
     * @access public
     */
   
public function forgot()
    {
        if (!
$this->getRequest()->is('post')) {
            return;
        }

       
$user = $this->Users
           
->findByUsername($this->getRequest()->data('username'))
            ->
first();
        if (!
$user) {
           
$this->Flash->error(__d('croogo', 'Invalid username.'));

            return
$this->redirect(['action' => 'forgot']);
        }

        if (empty(
$user->email)) {
           
$this->Flash->error(__d('croogo', 'Invalid email.'));

            return;
        }

       
$options = [
           
'prefix' => $this->getRequest()->getParam('prefix'),
        ];
       
$success = $this->Users->resetPassword($user, $options);
        if (!
$success) {
           
$this->Flash->error(__d('croogo', 'An error occurred. Please try again.'));

            return;
        }

       
$this->Flash->success(__d('croogo', 'An email has been sent with instructions for resetting your password.'));

        return
$this->redirect(['action' => 'login']);
    }

   
/**
     * Reset
     *
     * @param string $username
     * @param string $activationKey
     * @return \Cake\Http\Response|void
     * @access public
     */
   
public function reset($username, $activationKey)
    {
       
// Get the user with the activation key from the database
       
$user = $this->Users->find()->where([
           
'username' => $username,
           
'activation_key' => $activationKey
       
])->first();
        if (!
$user) {
           
$this->Flash->error(__d('croogo', 'An error occurred.'));

            return
$this->redirect(['action' => 'login']);
        }

       
$this->set('user', $user);

        if (!
$this->getRequest()->is('put')) {
            return;
        }

       
// Change the password of the user entity
       
$user = $this->Users->changePasswordFromReset($user, $this->getRequest()->getData());

       
// Save the user with changed password
       
$user = $this->Users->save($user);
        if (!
$user) {
           
$this->Flash->error(__d('croogo', 'An error occurred. Please try again.'));

            return;
        }

       
$this->Flash->success(__d('croogo', 'Your password has been reset successfully.'));

        return
$this->redirect(['action' => 'login']);
    }

   
/**
     * Login
     *
     * @return \Cake\Http\Response|void
     * @access public
     */
   
public function login()
    {
       
$session = $this->getRequest()->session();
        if (!
$this->getRequest()->is('post')) {
           
$redirectUrl = $this->Auth->redirectUrl();
            if (
$redirectUrl != '/' && !$session->check('Croogo.redirect')) {
               
$session->write('Croogo.redirect', $redirectUrl);
            }

            return;
        }

       
Croogo::dispatchEvent('Controller.Users.beforeLogin', $this);

       
$user = $this->Auth->identify();
        if (!
$user) {
           
Croogo::dispatchEvent('Controller.Users.loginFailure', $this);

           
$this->Flash->error($this->Auth->config('authError'));

            return
$this->redirect($this->Auth->loginAction);
        }

        if (
$session->check('Croogo.redirect')) {
           
$redirectUrl = $session->read('Croogo.redirect');
           
$session->delete('Croogo.redirect');
        } else {
           
$redirectUrl = $this->Auth->redirectUrl();
        }

        if (!
$this->Access->isUrlAuthorized($user, $redirectUrl)) {
           
Croogo::dispatchEvent('Controller.Users.loginFailure', $this);
           
$this->Auth->config('authError', __d('croogo', 'Authorization error'));
           
$this->Flash->error($this->Auth->config('authError'));

            return
$this->redirect($this->Auth->loginRedirect);
        }

       
$this->Auth->setUser($user);

       
Croogo::dispatchEvent('Controller.Users.loginSuccessful', $this);

        return
$this->redirect($redirectUrl);
    }

   
/**
     * Logout
     *
     * @access public
     */
   
public function logout()
    {
       
Croogo::dispatchEvent('Controller.Users.beforeLogout', $this);
       
$this->getRequest()->session()->delete('Croogo.redirect');

       
$this->Flash->success(__d('croogo', 'Log out successful.'), 'auth');

       
$logoutUrl = $this->Auth->logout();
       
Croogo::dispatchEvent('Controller.Users.afterLogout', $this);

        return
$this->redirect($logoutUrl);
    }

   
/**
     * View
     *
     * @param string $username
     * @return \Cake\Http\Response|void
     * @access public
     */
   
public function view($username = null)
    {
        if (
$username == null) {
           
$username = $this->Auth->user('username');
        }
       
$user = $this->Users->findByUsername($username)->first();
        if (!
$user) {
           
$this->Flash->error(__d('croogo', 'Invalid User.'));

            return
$this->redirect('/');
        }
       
$this->set('title_for_layout', $user->name);
       
$this->set(compact('user'));
    }

    protected function
_getSenderEmail()
    {
        return
'croogo@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
    }
}