Files
yii2-usuario/src/User/Model/SessionHistory.php
2019-11-14 20:55:18 +03:00

111 lines
2.5 KiB
PHP
Executable File

<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Model;
use Da\User\Module;
use Da\User\Query\SessionHistoryQuery;
use Da\User\Traits\ModuleAwareTrait;
use Yii;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\db\ActiveQuery;
/**
* @property int $user_id
* @property string $session_id
* @property string $user_agent
* @property string $ip
* @property int $created_at
* @property int $updated_at
*
* @property User $user
* @property bool $isActive
*
* Dependencies:
* @property-read Module $module
*/
class SessionHistory extends ActiveRecord
{
use ModuleAwareTrait;
/**
* {@inheritdoc}
*/
public static function tableName()
{
return '{{%session_history}}';
}
/** @inheritdoc */
public function behaviors()
{
return [
[
'class' => TimestampBehavior::class,
'updatedAtAttribute' => false,
]
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'user_id' => Yii::t('usuario', 'User ID'),
'session_id' => Yii::t('usuario', 'Session ID'),
'user_agent' => Yii::t('usuario', 'User agent'),
'ip' => Yii::t('usuario', 'IP'),
'created_at' => Yii::t('usuario', 'Created at'),
'updated_at' => Yii::t('usuario', 'Last activity'),
];
}
/**
* @return bool Whether the session is an active or not.
*/
public function getIsActive()
{
return isset($this->session_id) && $this->updated_at + $this->getModule()->rememberLoginLifespan > time();
}
/**
* @return ActiveQuery
*/
public function getUser()
{
return $this->hasOne($this->module->classMap['User'], ['id' => 'user_id']);
}
/** @inheritdoc */
public function beforeSave($insert)
{
if ($insert && empty($this->session_id)) {
$this->setAttribute('session_id', Yii::$app->session->getId());
}
return parent::beforeSave($insert);
}
/** @inheritdoc */
public static function primaryKey()
{
return ['user_id', 'session_id'];
}
public static function find()
{
return new SessionHistoryQuery(static::class);
}
}