<?PHP
require_once("Consts.php");
require_once("DBCtrls.php");
//Базовый класс для управления пользователями
class UserControl extends Core_BaseClass {
//Уникальный идентифкатор пользователя используется
//для автоматичесой идентифкации пользователя
public $UniID;
//Имя пользователя (неизменно) (совпадает с личным счетом)
public $UserName;
//Пароль (хеш)
public $Password;
//Указатель на объект клиента
public $ClientID;
//Авторизирован ли пользователь в данный момент
public $IsLogin = false;
//Дата последнего входа
public $LastLogin;
//Сохранен ли объект
public $IsSave = false;
//конструктор
public function __construct($ID="") {
debug_str("UserControl::__construct()");
parent::__construct(_USER_AUTH_TABLE_);
$this->ID=$ID;
if ($ID<>"") {
$this->LoadData();
}
}
//деструктор
public function __destruct() {
debug_str("UserControl::__destruct()");
if (!$this->IsDelete) {
if (!$this->IsSave) {
$this->SaveData();
}
}
parent::__destruct();
}
//Закрываем таблицу
public function CloseTable(){
debug_str("UserControl::CloseTable()");
}
//Ищем пользователя по его имени
public function FindByName($UserName, $SetID=false) {
debug_str("UserControl::FindByName()");
$IsExists=true;
$res=DBCtrl()->Query("select * from
"._USER_AUTH_TABLE_." where UserName='".$UserName."' limit 1");
debug_str("<br />");
debug_str("<br />");
debug_str("Имя в массиве $result[2] = $UserName <br
/>");
if ($result[2]===$UserName) {
debug_str("Пользователь в БД <br />");
$IsExists=true;
if ($SetID) {
$this->ID=$result[0];
}
} else {
debug_str("Пользователя $UserName в БД
нет <br />");
$IsExists=false;
}
return $IsExists;
}
//Загружаем сведения
public function LoadData(){
debug_str("UserControll::LoadData()");
if (isset($this->ID) and
($this->ID!==-1)) { //загружаем сведения
$res=DBCtrl()->Query("select * from
"._USER_AUTH_TABLE_." where ID=".$this->ID);
// Разбираем результат
$this->ClientID=$row["ClientID"];
$this->IsLogin=$row["IsLogin"];
$this->Password=$row["Password"];
$this->UserName=$row["UserName"];
$this->UniID=$row["UniID"];
$this->LastLogin=$row["LastLogin"];
$this->IsSave=True;
}
}
}
//Сохраняем сведения
public function SaveData(){
debug_str("UserControl::SaveData()");
if (!$this->IsSave) {
$new=false;
if (!isset($this->ID) or
($this->ID===-1)) { //Пользователя еще нет в БД
//Пытаемся найти его в БД по
имени
if
($this->FindByName($this->UserName, true)) {
//Пользователь с таким
именем уже существует в БД
debug_str("пользователь
существует его ID=$this->ID <br />");
$new=false;
} else {
debug_str("Новый <br
/>");
$new=true;
}
}
if ($new) {
$query="insert into
"._USER_AUTH_TABLE_." (UinID, UserName, UserPassword, ClientID, LastLogin)
values('".
$this->UniID."',
'".$this->UserName."', '".$this->Password."', '".$this->ClientID."', '".$this->LastLogin."')";
} else {
$query="update
"._USER_AUTH_TABLE_." set UinID='$this->UniID', UserName='$this->UserName', ".
"UserPassword='$this->Password', ClientID='$this->ClientID',
LastLogin='$this->LastLogin' where ID=$this->ID";
}
debug_str("Получившийся запрос $query
<br />");
DBCtrl()->Query($query);
$this->IsSave=true;
if ($new) {$this->ID=DBCtrl()->GetInsertID();}
debug_str("Наш ID = $this->ID <br />");
}
}
//Удаление объекта из БД
public function DeleteData(){
debug_str("UserControl::DeleteData()");
if (isset($this->ID) and
($this->ID!==-1
)) { $query="delete from
"._USER_AUTH_TABLE_." where ID='$this->ID'";
DBCtrl()->Query($query);
}
}
}
//Список пользователей
class UserList extends Core_BaseList {
//Создание нового пользователя
// [in] $UserPassword - пароль в простом виде
// [in] $UserClient - ссылка на объект клиента
// [out] - ссылка на объект пользователя класса UserControl
public function CreateUser($UserPassword, $UserClient){
//echo "Создаем пользователя";
$result=new UserControl();
//echo "создали";
$result->ID=-1;
$result->Password=$UserPassword;
if (isset($UserClient)) { $result->ClientID=$UserClient->ID;
} else
{ $result->ClientID=-1;}
$result->IsDelete=False;
$result->IsLogin=False;
//echo "пытаемся добавить";
$this->Add($result);
//echo "добавили";
return $result;
}
//Авторизация пользователя
// [in] $UserName - имя пользователя
// [in] $UserPassword - пароль пользователя (как хеш)
// [out] - объект пользователя
public function Login($UserName, $UserPassword){
$result=true;
for ($i=0; $i < $this->GetCount(); $i++) {
$obj=$this->Items($i);
if (($UserName===$obj->UserName) and
($UserPassword===$obj->Password)) {
$obj->IsLogin=True;
$result=$obj;
break;
}
}
return $result;
}
//Выход пользователя
// [in] - идентифкатор пользователя
public function Logout($UserID) {
$obj=$this->FindByID($UserID);
if ($obj->IsLogin) {
$obj->IsLogin=false;
}
}
}
}
//Ищет пользователя по его UinID
public function FindByUinID($UinID) {
$result=NULL;
foreach ($this->List as $Obj) {
if ($Obj->UniID === $UinID) {
$result=$Obj;
break;
}
}
}
return $result;
}
}
?>