You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
4.6 KiB
208 lines
4.6 KiB
8 years ago
|
<?php
|
||
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
||
|
|
||
|
class Users_model extends CI_Model {
|
||
|
|
||
|
protected $config_vars;
|
||
|
protected $cii;
|
||
|
|
||
|
public function __construct()
|
||
|
{
|
||
|
parent::__construct();
|
||
|
$this->cii = &get_instance();
|
||
|
$this->cii->config->load('aauth');
|
||
|
$this->cii->load->model('aauth/User_variables_model', 'user_variables');
|
||
|
$this->cii->load->model('aauth/Group_to_user_model', 'group_to_user');
|
||
|
$this->config_vars = $this->cii->config->item('aauth');
|
||
|
}
|
||
|
|
||
|
public function create($email, $pass, $username = '')
|
||
|
{
|
||
|
if (filter_var($email, FILTER_VALIDATE_EMAIL) && ! $this->exist_by_(array('email' => $email)) && ( ! empty($username) && ! $this->exist_by_(array('username' => $username))))
|
||
|
{
|
||
|
$data = array();
|
||
|
$data['email'] = $email;
|
||
|
$data['username'] = $username;
|
||
|
$data['password'] = password_hash($pass, $this->config_vars['password']['hash_algo'], $this->config_vars['password']['hash_options']);
|
||
|
$data['created_since'] = date('Y-m-d H:i:s');
|
||
|
$this->db->insert($this->config_vars['database']['users'], $data);
|
||
|
|
||
|
return $this->db->insert_id();
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
public function update($user_id, $data = array())
|
||
|
{
|
||
|
if ($this->exist_by_(array('id' => $user_id)))
|
||
|
{
|
||
|
return $this->db->update($this->config_vars['database']['users'], $data, array('id' => $user_id));
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
public function delete($user_id)
|
||
|
{
|
||
|
$this->cii->user_variables->delete($user_id);
|
||
|
$this->cii->group_to_user->delete_by_user($user_id);
|
||
|
return $this->db->delete($this->config_vars['database']['users'], array('id' => $user_id));
|
||
|
}
|
||
|
|
||
|
public function get_all($options = array())
|
||
|
{
|
||
|
$filters = array();
|
||
|
$args = array();
|
||
|
$filters['banned'] = '0';
|
||
|
|
||
|
if (isset($options['filters']))
|
||
|
{
|
||
|
$filters = $options['filters'];
|
||
|
}
|
||
|
if (isset($options['include_banneds']) && $options['include_banneds'])
|
||
|
{
|
||
|
unset($filters['banned']);
|
||
|
}
|
||
|
if (isset($options['only_banneds']) && $options['only_banneds'])
|
||
|
{
|
||
|
$filters['banned'] = '1';
|
||
|
}
|
||
|
if (isset($options['offset']))
|
||
|
{
|
||
|
$args['offset'] = $options['offset'];
|
||
|
}
|
||
|
if (isset($options['limit']))
|
||
|
{
|
||
|
$args['limit'] = $options['limit'];
|
||
|
}
|
||
|
|
||
|
$query = $this->get_by_($filters, $args);
|
||
|
return $query->result();
|
||
|
}
|
||
|
|
||
|
public function ban($user_id, $ver_code = NULL)
|
||
|
{
|
||
|
if ($this->exist_by_(array('id' => $user_id)))
|
||
|
{
|
||
|
if ($ver_code)
|
||
|
{
|
||
|
$this->cii->user_variables->update($user_id, 'verification_code', $ver_code);
|
||
|
}
|
||
|
|
||
|
$data['banned'] = '1';
|
||
|
return $this->update($user_id, $data);
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
public function unban($user_id, $ver_code = NULL)
|
||
|
{
|
||
|
if ($this->exist_by_(array('id' => $user_id)) && $this->is_($user_id, 'banned'))
|
||
|
{
|
||
|
if ( ! $this->is_($user_id, 'verified'))
|
||
|
{
|
||
|
if ($this->cii->user_variables->get($user_id, 'verification_code') !== $ver_code)
|
||
|
{
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
$this->cii->user_variables->delete($user_id, 'verification_code');
|
||
|
}
|
||
|
|
||
|
return $this->update($user_id, array('banned' => '0'));
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
public function update_($user_id, $type)
|
||
|
{
|
||
|
if ($this->exist_by_(array('id' => $user_id)))
|
||
|
{
|
||
|
if ($type === 'activity')
|
||
|
{
|
||
|
$data['last_activity'] = date('Y-m-d H:i:s');
|
||
|
}
|
||
|
else if ($type === 'last_login')
|
||
|
{
|
||
|
$data['last_login'] = date('Y-m-d H:i:s');
|
||
|
$data['last_ip_address'] = $this->input->ip_address();
|
||
|
}
|
||
|
|
||
|
return $this->update($user_id, $data);
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
public function exist_by_($filters = array())
|
||
|
{
|
||
|
if ($this->get_by_($filters)->num_rows() === 1)
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
public function get_($filters, $result_column)
|
||
|
{
|
||
|
$query = $this->get_by_($filters, array('select' => $result_column));
|
||
|
|
||
|
if ($query->num_rows() === 1)
|
||
|
{
|
||
|
return $query->row($result_column);
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
public function get_by_($filters, $options = NULL)
|
||
|
{
|
||
|
if ($filters)
|
||
|
{
|
||
|
foreach ($filters as $column => $value)
|
||
|
{
|
||
|
$this->db->where($column, $value);
|
||
|
}
|
||
|
}
|
||
|
if (isset($options['limit']))
|
||
|
{
|
||
|
$this->db->limit($options['limit']);
|
||
|
}
|
||
|
if (isset($options['offset']))
|
||
|
{
|
||
|
$this->db->offset($options['offset']);
|
||
|
}
|
||
|
if (isset($options['select']))
|
||
|
{
|
||
|
$this->db->select($options['select']);
|
||
|
}
|
||
|
|
||
|
return $this->db->get($this->config_vars['database']['users']);
|
||
|
}
|
||
|
|
||
|
public function is_($user_id, $type)
|
||
|
{
|
||
|
if ($this->exist_by_(array('id' => $user_id)))
|
||
|
{
|
||
|
$data['banned'] = '1';
|
||
|
$data['id'] = $user_id;
|
||
|
$query = $this->get_by_($data);
|
||
|
|
||
|
if ($type === 'banned' && $query->num_rows() === 1)
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
else if ($type === 'verified' && ! $this->cii->user_variables->get($user_id, 'verification_code'))
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|