mirror of
https://github.com/elyby/accounts.git
synced 2024-11-27 01:02:06 +05:30
86 lines
2.8 KiB
PHP
86 lines
2.8 KiB
PHP
|
<?php
|
|||
|
namespace common\behaviors;
|
|||
|
|
|||
|
use yii\base\Behavior;
|
|||
|
|
|||
|
/**
|
|||
|
* @property \common\models\EmailActivation $owner
|
|||
|
*/
|
|||
|
class EmailActivationExpirationBehavior extends Behavior {
|
|||
|
|
|||
|
/**
|
|||
|
* @var int количество секунд, прежде чем можно будет повторить отправку кода
|
|||
|
* @see EmailActivation::canRepeat()
|
|||
|
*/
|
|||
|
public $repeatTimeout;
|
|||
|
|
|||
|
/**
|
|||
|
* @var int количество секунд, прежде чем это подтверждение истечёт
|
|||
|
* @see EmailActivation::isExpired()
|
|||
|
*/
|
|||
|
public $expirationTimeout;
|
|||
|
|
|||
|
/**
|
|||
|
* Можно ли повторить отправку письма текущего типа?
|
|||
|
* Для проверки используется значение EmailActivation::$repeatTimeout и интерпретируется как:
|
|||
|
* - <0 запретит повторную отправку этого кода
|
|||
|
* - =0 позволит отправлять сообщения в любой момент
|
|||
|
* - >0 будет проверять, сколько секунд прошло с момента создания модели
|
|||
|
*
|
|||
|
* @see EmailActivation::compareTime()
|
|||
|
* @return bool
|
|||
|
*/
|
|||
|
public function canRepeat() : bool {
|
|||
|
return $this->compareTime($this->repeatTimeout);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Истёк ли срок кода?
|
|||
|
* Для проверки используется значение EmailActivation::$expirationTimeout и интерпретируется как:
|
|||
|
* - <0 означает, что код никогда не истечёт
|
|||
|
* - =0 всегда будет говорить, что код истёк
|
|||
|
* - >0 будет проверять, сколько секунд прошло с момента создания модели
|
|||
|
*
|
|||
|
* @see EmailActivation::compareTime()
|
|||
|
* @return bool
|
|||
|
*/
|
|||
|
public function isExpired() : bool {
|
|||
|
return $this->compareTime($this->expirationTimeout);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Вычисляет, во сколько можно будет выполнить повторную отправку кода
|
|||
|
*
|
|||
|
* @return int
|
|||
|
*/
|
|||
|
public function canRepeatIn() : int {
|
|||
|
return $this->calculateTime($this->repeatTimeout);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Вычисляет, во сколько код истечёт
|
|||
|
*
|
|||
|
* @return int
|
|||
|
*/
|
|||
|
public function expireIn() : int {
|
|||
|
return $this->calculateTime($this->expirationTimeout);
|
|||
|
}
|
|||
|
|
|||
|
protected function compareTime(int $value) : bool {
|
|||
|
if ($value < 0) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
if ($value === 0) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
return time() > $this->calculateTime($value);
|
|||
|
}
|
|||
|
|
|||
|
protected function calculateTime(int $value) : int {
|
|||
|
return $this->owner->created_at + $value;
|
|||
|
}
|
|||
|
|
|||
|
}
|