Commit 9f22bddf authored by Shakarim Sapa's avatar Shakarim Sapa

- Добавлены изменения в архитектуру модуля;

- Конфигурационный файл вынесен в отдельный каталог (config);
- Файлы родительских классов вынесены в отдельный каталог (vendor);
- Добавлен класс для обработки условий в целом;
parent ba34c529
<?php
namespace common\modules\triggers\components\conditions;
class ConditionBase {
protected static $conditionClass;
public static function init($conditionName=__CLASS__){
return self::$conditionClass=new $conditionName(null);
}
public function getId(){
$class=self::$conditionClass;
if (defined('static::CONDITION_ID')) {
return $class::CONDITION_ID;
} else {
throw new \yii\web\BadRequestHttpException('Condition ID in class "'.get_class($class).'" has not found', 400);
}
}
}
\ No newline at end of file
<?php
namespace common\modules\triggers\components\conditions;
interface ConditionInterface {
public static function init($conditionName=null);
}
\ No newline at end of file
<?php
/**
* Класс является "центром действия";
* К данному классу нужно будет обращатся для произведениями операций с условиями в целом.
* Тут будут осуществляться такие алгоритмы как:
* - Загрузка и обработка файла параметров условий;
* - Обработка основных операций: получение списка всех условий, получение конкретного условия по id и т.п.
*/
namespace common\modules\triggers\components\conditions;
use yii\web\ServerErrorHttpException;
class Conditions {
private static $config;
/**
* Все действия с условиями производятся через метод init
* @return $this Conditions
*/
public static function init(){
// Переопределили переменную конфиг (чтобы в дальнейшем было проще обращатся)
self::$config = require(__DIR__.'\config\main.php');
// Сначала производится проверка всех классов условий на наличие необходимых констант и переменных
self::createConditions();
// Если до этого момента скрипт не остановился и не вернул ошибку, значит возвращаем экземпляр класса
return new Conditions();
}
/**
* @return bool
* @throws \yii\web\ServerErrorHttpException
*/
public static function createConditions(){
// Перебираем все условия что указаны в конфиге
foreach(self::$config as $condition) {
// Если путь к классу указан, и файл по этому пути существует
if (isset($condition['class']) && file_exists(\Yii::getAlias('@mainRoot').DIRECTORY_SEPARATOR.$condition['class'].'.php')) {
// Занесли класс в переменную
$class = $condition['class']::init();
// Проверяем наличие обязательных констант
// Проверили существование идентификатора
if ($class::defined('CONDITION_ID')===false)
throw new ServerErrorHttpException('Condition ID in class "'.get_class($class).'" has not found', 500);
} else {
throw new ServerErrorHttpException('Condition class file or path not found. Please check configuration file', 500);
}
}
// Если все условия верны, возвращаем true
return true;
}
}
\ No newline at end of file
<?php <?php
namespace common\modules\triggers\components\conditions\conditions; namespace common\modules\triggers\components\conditions\conditions;
use common\modules\triggers\components\conditions\ConditionBase; use common\modules\triggers\components\conditions\vendor\ConditionBase;
use common\modules\triggers\components\conditions\ConditionInterface; use common\modules\triggers\components\conditions\vendor\ConditionInterface;
class CheckEmailToOpening extends ConditionBase implements ConditionInterface { class CheckEmailToOpening extends ConditionBase implements ConditionInterface {
// const CONDITION_ID = 1; const CONDITION_ID = 1;
/** /**
* @param null|string $conditionName * @param null|string $conditionName
......
<?php
return [
'check-email-to-opening' => [
'class' => 'common\modules\triggers\components\conditions\conditions\CheckEmailToOpening'
]
];
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment