meraproject/module/core/verify/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

104 lines
3.3 KiB
PHP

<?
namespace core;
use core\db\structure\Column as C;
use core\db\structure\eColumnType;
use core\Verify\structure\eVerifyType;
use ui\form\structure\eInputType;
use ui\Form;
use ui\input\Input;
use core\lang\structure\LangVariable as V;
use ms\ms\structure\msModuleTable;
use core\verify\structure\verifyLang as Vars;
use core\site\Theme;
class Verify extends msModuleTable {
static $self;
static $table_name = 'verify';
static $controller = 'verify';
static $ID = 'id';
static $CODE = 'code';
static $TYPE = 'type';
static $PROFILE = 'profile';
static $CREATED = 'created';
static function getCode($x = 5):string{
return str_pad(rand(0,pow(10,$x)-1), $x, '0', STR_PAD_LEFT);
}
static function checkCode($code_id,$_code){
$res = ['e'=>1,'m'=>''];
$code_id = intval($code_id);
$code = self::getByID($code_id);
if($code){
if( ($code[self::$CREATED] + 60*15) > time() ){
if(strcmp($code[self::$CODE],$_code)==0){
$res['e'] = 0;
$res['m'] = 'Указан правильный код';
$res['key'] = $key = time();
$profile = \Profile::getByID($code[self::$PROFILE]);
$res['hash'] = \Site::$theme::getProfileHash($key,$profile);
} else {
$res['m'] = 'Присланный код не верен. Введите тот, который был Вам отправлен.';
}
} else {
$res['m'] = 'Время действия кода истекло. Запросите новый код.';
}
} else {
$res['m'] = 'Код не найден. Запросите новый код.';
}
return $res;
}
static function createCode($profile_id,$length = 5,$type = eVerifyType::EMAIL){
$r = self::insert([
self::$CODE => $code = self::getCode($length),
self::$TYPE => $type,
self::$PROFILE => $profile_id,
]);
return [
'id' => $r->id,
'code' => $code,
];
}
static function columnInfo() : array {
return [
new C([
C::VAR_NAME =>&self::$ID,
C::TYPE =>eColumnType::INT,
C::AUTO_INCREMENT =>true,
C::PRIMARY =>true,
C::DEFAULT =>0,
C::HIDDEN =>true,
]),
new C([
C::VAR_NAME => &self::$CODE,
C::TYPE => eColumnType::VARCHAR,
C::LENGTH => 15,
]),
new C([
C::VAR_NAME => &self::$TYPE,
C::TYPE => eColumnType::TINYINT,
]),
new C([
C::VAR_NAME => &self::$PROFILE,
C::TYPE => eColumnType::INT,
]),
new C([
C::VAR_NAME => &self::$CREATED,
C::TYPE => eColumnType::INT,
C::DEFAULT => time(),
c::HIDDEN=>true,
]),
];
}
}
new Verify();