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