meraproject/module/core/user/admin/model.php
keboss-m 5c21d25d45 Initial commit: Merakomis portal, Docker stack and user-reader API.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 11:04:05 +03:00

148 lines
4.6 KiB
PHP

<?
use \core\db\structure\Column as C;
use \core\db\structure\eColumnType;
use core\lang\structure\LangVariable as V;
use core\user\admin\structure\adminLang as Vars;
new Admin();
class Admin extends \ModuleTable {
// Название таблицы
static $table_name = 'admin';
// Ссылка на самого себя
static $self;
// Ссылка на языковой пакет
// Переменные столбцов
static $ID = 'id';
static $SNAME = 'surname';
static $NAME = 'name';
static $FNAME = 'father_name';
static $ACCOUNT = 'account';
static $PASSWORD = 'password';
static $DATE = 'date';
static $BDATE = 'bdate';
static $cookieIDKey = 'aid';
static $cookieHashKey = 'ah';
static $data = [];
static function afterInstall() {
parent::afterInstall();
self::add([
self::$ACCOUNT=>'victor',
self::$PASSWORD=>1,
]);
}
static function init(){
define("IF_ADMIN",self::if_auth());
define("AID",IF_ADMIN ? self::$data[ self::$ID ] : 0);
}
static function exit(){
Core::setCookie(self::$cookieIDKey,'-');
Core::setCookie(self::$cookieHashKey,'-');
}
static function if_auth(){
if($uid = intval($_COOKIE[ self::$cookieIDKey ]) and $hash = $_COOKIE[ self::$cookieHashKey ]) {
$acc = self::getByID($uid);
$res = strcmp($acc[self::$PASSWORD],$hash)==0;
if($res) self::$data = $acc;
return $res;
} else return false;
}
static function getSystemLangValues():array{ return Vars::getArray();}
static function add($values){
$res = new stdClass();
$res->e = 0;
$res->m = '';
$admin = self::getByAccount($values[ self::$ACCOUNT ]);
if(!$admin) {
$r = self::insert($values);
$a = self::getByID($r->id);
$c[self::$PASSWORD] = self::hash($a);
self::updateById($r->id, $c);
$res->id = $r->id;
} else {
$res->e = 1;
$res->m = V::get(Vars::$ACCOUNT_BUSY);
}
return $res;
}
static function hash($acc){ return md5(\Config::$SALT.$acc[self::$ID].self::$DATE.\Config::$SALT.$acc[self::$PASSWORD]); }
static function checkPassword($acc,$pass):bool{
$hash = $acc[self::$PASSWORD];
$acc[self::$PASSWORD] = $pass;
return strcmp($hash, self::hash($acc) )===0;
}
static function getByAccount(string $account){
return DB::fetch(self::select( [Query::WHERE => new Where (Where::_operator(self::$ACCOUNT,'=',$account)) ] ));
}
static function prepareLogin($login) {return trim(strtolower((string)$login));}
static function preparePass($pass) {return trim((string)$pass);}
static function login($login,$pass){
$res = new stdClass();
$res->e = '';
$res->m = '';
$login = self::prepareLogin($login);
$pass = self::preparePass($pass);
$acc = self::getByAccount($login);
if($acc) {
if(self::checkPassword($acc,$pass)){
Core::setCookie(self::$cookieIDKey,$acc[self::$ID]);
Core::setCookie(self::$cookieHashKey,$acc[self::$PASSWORD]);
} else {
$res->e = V::get(Vars::$WRONG_PASSWORD);
}
} else {
$res->e = V::get(Vars::$ADMIN_NOT_FOUND);
}
return $res;
}
static function columnInfo() : array {
$common = [
C::TYPE => eColumnType::VARCHAR,
C::LENGTH => 63,
];
return [
new C([
C::VAR_NAME =>&self::$ID,
C::TYPE =>eColumnType::INT,
C::AUTO_INCREMENT =>true,
C::PRIMARY =>true,
C::DEFAULT =>0,
]),
new C($common + array(C::VAR_NAME => &self::$SNAME)),
new C($common + array(C::VAR_NAME => &self::$NAME)),
new C($common + array(C::VAR_NAME => &self::$FNAME)),
new C($common + array(C::VAR_NAME => &self::$ACCOUNT)),
new C($common + array(C::VAR_NAME => &self::$PASSWORD)),
new C([
C::VAR_NAME => &self::$BDATE,
C::TYPE => eColumnType::INT,
C::DEFAULT => 0,
]),
new C([
C::VAR_NAME => &self::$DATE,
C::TYPE => eColumnType::INT,
C::DEFAULT => time(),
]),
];
}
}