accounts/common/behaviors/EmailActivationExpirationBehavior.php

86 lines
2.8 KiB
PHP
Raw Normal View History

<?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;
}
}