Files
php_task_1/application/controllers/Member/Member_login_controller.php
T
2022-06-30 05:46:02 -04:00

145 lines
5.6 KiB
PHP
Executable File

<?php defined('BASEPATH') OR exit('No direct script access allowed');
include_once __DIR__ . '/../../services/User_service.php';
include_once 'Member_controller.php';
/*Powered By: Manaknightdigital Inc. https://manaknightdigital.com/ Year: 2021*/
/**
* Login Controller
* @copyright 2019 Manaknightdigital Inc.
* @link https://manaknightdigital.com
* @license Proprietary Software licensing
* @author Ryan Wong
*
*/
class Member_login_controller extends Manaknight_Controller
{
protected $_redirect = '/sell';
public $_valid_roles = [1];
public function __construct()
{
parent::__construct();
}
public function index ()
{
$this->load->model('credential_model');
$this->load->model('user_model');
$this->load->helper('cookie');
$service = new User_service($this->credential_model, $this->user_model);
if($this->input->cookie('member_remember_me_token', TRUE) !== null && $this->input->cookie('member_remember_me_token', TRUE) !== '')
{
$this->_remember_me_login();
exit();
}
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->_data['portal'] = 'member';
if ($this->form_validation->run() === FALSE)
{
echo $this->load->view('Member/Login', $this->_data, TRUE);
exit;
}
$email = $this->input->post('email');
$password = $this->input->post('password');
$redirect = $service->get_redirect($this->input->cookie('redirect', TRUE), $this->_redirect);
$role = $this->_valid_roles[0];
$authenticated_user = $service->login_by_role($email, $password, $role);
if ($authenticated_user)
{
delete_cookie('redirect');
$user_id = $authenticated_user->user_id;
if(!empty($this->input->post("remember_me"))) {
$this->load->helper('string');
$remember_cookie = [
'user_id' => $user_id,
'name' => 'member_remember_me_token',
'value' => random_string('alnum', 16),
'expire' => time()+$this->config->item('cookie_expire'),
'domain' => base_url()
];
$this->load->model('cookies_model');
$check_cookie = $this->cookies_model->get_by_field('user_id', $user_id);
if($check_cookie)
{
$cookie = $this->cookies_model->edit($remember_cookie, $check_cookie->id);
}
else
{
$cookie = $this->cookies_model->create($remember_cookie);
}
if($cookie)
{
setcookie($remember_cookie['name'], $remember_cookie['value'], $remember_cookie['expire'], $remember_cookie['domain']);
}
}
$this->set_session('credential_id', (int) $authenticated_user->id);
$this->set_session('user_id', (int) $user_id);
$this->set_session('email', (string) $authenticated_user->email);
$this->set_session('role', (string) $authenticated_user->role_id);
if( isset($_POST['return_url']) && $_POST['return_url'] =='buy')
{
return $this->redirect('buy');
}
return $this->redirect($redirect);
}
$this->error('Wrong email or password.');
return $this->redirect('member/login');
}
public function _remember_me_login()
{
$this->load->helper('string');
$this->load->model('user_model');
$this->load->model('credential_model');
$this->load->model('cookies_model');
$token_value = $this->input->cookie('member_remember_me_token', TRUE);
$cookie = $this->cookies_model->get_by_fields(['value' => $token_value]);
$service = new User_service($this->credential_model, $this->user_model);
$redirect = $service->get_redirect($this->input->cookie('redirect', TRUE), $this->_redirect);
if($cookie)
{
$user_id = $cookie->user_id;
$credential = $this->credential_model->get_by_field('user_id', $user_id);
$role = $this->_valid_roles[0];
if($credential->role_id != $role)
{
setcookie('member_remember_me_token', '', 1, base_url());
return $this->redirect('admin/login');
}
$random_string = random_string('alnum', 30);
$this->cookies_model->edit(['value' => $random_string, 'expire' => time()+$this->config->item('cookie_expire')], $cookie->id);
setcookie('member_remember_me_token', $random_string, time()+$this->config->item('cookie_expire'), base_url());
$this->set_session('credential_id', (int) $credential->id);
$this->set_session('user_id', (int) $user_id);
$this->set_session('email', (string) $credential->email);
$this->set_session('role', (string) $credential->role_id);
return $this->redirect($redirect);
}
else
{
setcookie('member_remember_me_token', '', 1, base_url());
return $this->redirect('admin/login');
}
$this->error('Wrong email or password.');
return $this->redirect('member/login');
}
public function logout ()
{
$this->load->helper('cookie');
setcookie('member_remember_me_token', '', 1, base_url());
$this->destroy_session();
return $this->redirect('member/login');
}
}