181 lines
6.0 KiB
PHP
181 lines
6.0 KiB
PHP
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
|
|
/**
|
|
* CodeIgniter
|
|
*
|
|
* An open source application development framework for PHP 4.3.2 or newer
|
|
*
|
|
* @package CodeIgniter
|
|
* @author ExpressionEngine Dev Team
|
|
* @copyright Copyright (c) 2006, EllisLab, Inc.
|
|
* @license http://codeigniter.com/user_guide/license.html
|
|
* @link http://codeigniter.com
|
|
* @since Version 1.0
|
|
* @current Version 2.1.3
|
|
* @filesource
|
|
*/
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
/**
|
|
* CodeIgniter MS Class
|
|
*
|
|
* This class implements membership & role based user authentication
|
|
*
|
|
* @package CodeIgniter
|
|
* @author Linus Miller
|
|
* @subpackage Libraries
|
|
* @category Libraries
|
|
* @link None
|
|
* @copyright Copyright (c) 2013, Linus Miller.
|
|
* @version 0.0.1
|
|
*
|
|
*/
|
|
class CI_MS {
|
|
var $CI;
|
|
var $config;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @access public
|
|
*/
|
|
|
|
function CI_MS()
|
|
{
|
|
// Copy an instance of CI so we can use the entire framework.
|
|
$this->CI =& get_instance();
|
|
|
|
// Load the template config file and setup our master template and regions
|
|
include(APPPATH.'config/ms'.EXT);
|
|
if (isset($ms))
|
|
{
|
|
$this->config = $ms;
|
|
}
|
|
}
|
|
public function is_authenticated() {
|
|
return $this->CI->session->userdata('is_authenticated') == true;
|
|
}
|
|
public function is_in_role($role_id) {
|
|
return in_array($role_id, $this->CI->session->userdata('roles'));
|
|
}
|
|
public function get_user_login_information($username) {
|
|
$sql = 'CALL ms_get_user_login_information(?)';
|
|
$params = array($username);
|
|
$query = $this->CI->db->query($sql, $params);
|
|
return $query->row_array();
|
|
}
|
|
public function get_user_by_id($username) {
|
|
$sql = 'CALL ms_get_user_by_id(?)';
|
|
$params = array($username);
|
|
$query = $this->CI->db->query($sql, $params);
|
|
return $query->row_array();
|
|
}
|
|
public function get_user_by_username($username) {
|
|
$sql = 'CALL ms_get_user_by_username(?)';
|
|
$params = array($username);
|
|
$query = $this->CI->db->query($sql, $params);
|
|
return $query->row_array();
|
|
}
|
|
public function get_roles_by_user_id($user_id) {
|
|
$sql = 'CALL ms_get_roles_by_user_id(?)';
|
|
$params = array($user_id);
|
|
$query = $this->CI->db->query($sql, $params);
|
|
$result = $query->result_array();
|
|
$array = array();
|
|
foreach($result as $r) {
|
|
array_push($array, $r['id']);
|
|
}
|
|
return $array;
|
|
}
|
|
public function get_all_users() {
|
|
$sql = 'CALL ms_get_all_users()';
|
|
$query = $this->CI->db->query($sql);
|
|
return $query->result_array();
|
|
}
|
|
public function update_user($user_id, $username, $first_name, $last_name, $email, $mobile, $social_security) {
|
|
$first_name = $first_name == "" ? null : $first_name;
|
|
$last_name = $last_name == "" ? null : $last_name;
|
|
$mobile = $mobile == "" ? null : $mobile;
|
|
$social_security = $social_security == "" ? null : $social_security;
|
|
$sql = 'CALL ms_update_user(?,?,?,?,?,?,?)';
|
|
$params = array($user_id, $username, $email, $first_name, $last_name, $mobile, $social_security);
|
|
$query = $this->CI->db->query($sql, $params);
|
|
return $this->CI->db->affected_rows();
|
|
}
|
|
public function update_user_password($user_id, $old_password, $new_password) {
|
|
$sql = 'CALL ms_update_user_password(?,?,?)';
|
|
$params = array($user_id, $old_password, $new_password);
|
|
$query = $this->CI->db->query($sql, $params);
|
|
return reset($query->row_array());
|
|
}
|
|
public function login($username, $password) {
|
|
if($this->CI->ms->is_authenticated()) {
|
|
return true;
|
|
}
|
|
$user = self::authenticate_user($username,self::generate_password_hash($password));
|
|
if($user != null) {
|
|
$user_data = array(
|
|
'is_authenticated' => true,
|
|
'user_id' => $user['id'],
|
|
'username' => $username,
|
|
'roles' => self::get_roles_by_user_id($user['id'])
|
|
);
|
|
$this->CI->session->set_userdata($user_data);
|
|
$sql = 'CALL ms_update_user_last_login (?)';
|
|
$params = array($user['id']);
|
|
$query = $this->CI->db->query($sql, $params);
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
public function authenticate_user($username, $password) {
|
|
$user = self::get_user_login_information($username);
|
|
if(count($user) > 0) {
|
|
if($user['pass'] == $password) {
|
|
return $user;
|
|
} else {
|
|
return null;
|
|
}
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
public function logout() {
|
|
$user_data = array(
|
|
'is_authenticated' => '',
|
|
'user_id' => '',
|
|
'username' => '',
|
|
'roles' => ''
|
|
);
|
|
$this->CI->session->unset_userdata($user_data);
|
|
return true;
|
|
}
|
|
public function generate_password_hash($password){
|
|
$this->CI->load->helper('security');
|
|
return do_hash($this->CI->config->item('salt') . $password);
|
|
}
|
|
public function block_login() {
|
|
$this->CI->load->library('form_validation');
|
|
$this->CI->form_validation->set_error_delimiters('<span class="error">', '</span>');
|
|
$this->CI->form_validation->set_rules('username', 'lang:username', 'trim|required|alpha_numeric|max_length[32]');
|
|
$this->CI->form_validation->set_rules('password', 'lang:password', 'trim|required');
|
|
if($this->CI->form_validation->run() == TRUE) {
|
|
$username = $_POST['username'];
|
|
$password = $_POST['password'];
|
|
if($this->CI->ms->login($username, $password)) {
|
|
return $this->CI->load->view('ms/block-login-success', '', true);
|
|
} else {
|
|
return $this->CI->load->view('ms/block-login-frm', '', true);
|
|
}
|
|
} else {
|
|
return $this->CI->load->view('ms/block-login-frm', '', true);
|
|
}
|
|
}
|
|
}
|
|
// END MS Class
|
|
|
|
/* End of file Ms.php */
|
|
/* Location: ./system/application/libraries/MS.php */
|
|
?>
|