wordygo/application/libraries/Ms.php
2013-11-26 12:54:17 +01:00

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 */
?>