Files
AtomicOld/api/Users.php
2026-02-14 19:34:54 +03:00

212 lines
6.3 KiB
PHP

<?php
/**
* Simpla CMS
*
* @copyright 2011 Denis Pikusov
* @link http://simplacms.ru
* @author Denis Pikusov
*
* @editor 2014 Vitaly Raevsky
* @link http://bwdesign.ru
* @email vitaly.raevsky@gmail.com
*
*/
require_once('Simpla.php');
class Users extends Simpla
{
// осторожно, при изменении соли испортятся текущие пароли пользователей
private $salt = '8e86a279d6e182b3c811c559e6b15484';
function get_users($filter = array())
{
$limit = 1000;
$page = 1;
$group_id_filter = '';
$keyword_filter = '';
if(isset($filter['limit']))
$limit = max(1, intval($filter['limit']));
if(isset($filter['page']))
$page = max(1, intval($filter['page']));
if(isset($filter['group_id']))
$group_id_filter = $this->db->placehold('AND u.group_id in(?@)', (array)$filter['group_id']);
if(isset($filter['keyword']))
{
$keywords = explode(' ', $filter['keyword']);
foreach($keywords as $keyword)
$keyword_filter .= $this->db->placehold('AND (u.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" OR u.email LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" OR u.last_ip LIKE "%'.mysql_real_escape_string(trim($keyword)).'%")');
}
$order = 'u.name';
if(!empty($filter['sort']))
switch ($filter['sort'])
{
case 'date':
$order = 'u.created DESC';
break;
case 'name':
$order = 'u.name';
break;
}
$sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit);
// Выбираем пользователей
$query = $this->db->placehold("SELECT u.id, u.email, u.password, u.name, u.group_id, u.enabled, u.last_ip, u.created, g.discount, g.name as group_name, u.name2, u.phone, u.country, u.region, u.city, u.indx, u.adress FROM __users u
LEFT JOIN __groups g ON u.group_id=g.id
WHERE 1 $group_id_filter $keyword_filter ORDER BY $order $sql_limit");
$this->db->query($query);
return $this->db->results();
}
function count_users($filter = array())
{
$group_id_filter = '';
$keyword_filter = '';
if(isset($filter['group_id']))
$group_id_filter = $this->db->placehold('AND u.group_id in(?@)', (array)$filter['group_id']);
if(isset($filter['keyword']))
{
$keywords = explode(' ', $filter['keyword']);
foreach($keywords as $keyword)
$keyword_filter .= $this->db->placehold('AND u.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" OR u.email LIKE "%'.mysql_real_escape_string(trim($keyword)).'%"');
}
// Выбираем пользователей
$query = $this->db->placehold("SELECT count(*) as count FROM __users u
LEFT JOIN __groups g ON u.group_id=g.id
WHERE 1 $group_id_filter $keyword_filter ORDER BY u.name");
$this->db->query($query);
return $this->db->result('count');
}
function get_user($id)
{
if(gettype($id) == 'string')
$where = $this->db->placehold(' WHERE u.email=? ', $id);
else
$where = $this->db->placehold(' WHERE u.id=? ', intval($id));
// Выбираем пользователя
$query = $this->db->placehold("SELECT u.id, u.email, u.password, u.name, u.group_id, u.enabled, u.last_ip, u.created, g.discount, g.name as group_name, u.name2, u.phone, u.country, u.region, u.city, u.indx, u.adress FROM __users u LEFT JOIN __groups g ON u.group_id=g.id $where LIMIT 1", $id);
$this->db->query($query);
$user = $this->db->result();
if(empty($user))
return false;
$user->discount *= 1; // Убираем лишние нули, чтобы было 5 вместо 5.00
return $user;
}
public function add_user($user)
{
$user = (array)$user;
if(isset($user['password']))
$user['password'] = md5($this->salt.$user['password'].md5($user['password']));
$query = $this->db->placehold("SELECT count(*) as count FROM __users WHERE email=?", $user['email']);
$this->db->query($query);
if($this->db->result('count') > 0)
return false;
$query = $this->db->placehold("INSERT INTO __users SET ?%", $user);
$this->db->query($query);
return $this->db->insert_id();
}
public function update_user($id, $user)
{
$user = (array)$user;
if(isset($user['password']))
$user['password'] = md5($this->salt.$user['password'].md5($user['password']));
$query = $this->db->placehold("UPDATE __users SET ?% WHERE id=? LIMIT 1", $user, intval($id));
$this->db->query($query);
return $id;
}
/*
*
* Удалить пользователя
* @param $post
*
*/
public function delete_user($id)
{
if(!empty($id))
{
$query = $this->db->placehold("UPDATE __orders SET user_id=NULL WHERE id=? LIMIT 1", intval($id));
$this->db->query($query);
$query = $this->db->placehold("DELETE FROM __users WHERE id=? LIMIT 1", intval($id));
if($this->db->query($query))
return true;
}
return false;
}
function get_groups()
{
// Выбираем группы
$query = $this->db->placehold("SELECT g.id, g.name, g.discount FROM __groups AS g ORDER BY g.discount");
$this->db->query($query);
return $this->db->results();
}
function get_group($id)
{
// Выбираем группу
$query = $this->db->placehold("SELECT * FROM __groups WHERE id=? LIMIT 1", $id);
$this->db->query($query);
$group = $this->db->result();
return $group;
}
public function add_group($group)
{
$query = $this->db->placehold("INSERT INTO __groups SET ?%", $group);
$this->db->query($query);
return $this->db->insert_id();
}
public function update_group($id, $group)
{
$query = $this->db->placehold("UPDATE __groups SET ?% WHERE id=? LIMIT 1", $group, intval($id));
$this->db->query($query);
return $id;
}
public function delete_group($id)
{
if(!empty($id))
{
$query = $this->db->placehold("UPDATE __users SET group_id=NULL WHERE group_id=? LIMIT 1", intval($id));
$this->db->query($query);
$query = $this->db->placehold("DELETE FROM __groups WHERE id=? LIMIT 1", intval($id));
if($this->db->query($query))
return true;
}
return false;
}
public function check_password($email, $password)
{
$encpassword = md5($this->salt.$password.md5($password));
$query = $this->db->placehold("SELECT id FROM __users WHERE email=? AND password=? LIMIT 1", $email, $encpassword);
$this->db->query($query);
if($id = $this->db->result('id'))
return $id;
return false;
}
}