- Отредактирован скрипт выполняющийся при срабатывании триггера

parent c014fe7e
...@@ -13,7 +13,9 @@ use common\modules\triggers\components\conditions\vendor\ConditionBase; ...@@ -13,7 +13,9 @@ use common\modules\triggers\components\conditions\vendor\ConditionBase;
use common\modules\triggers\components\conditions\vendor\ConditionInterface; use common\modules\triggers\components\conditions\vendor\ConditionInterface;
use common\modules\triggers\models\TriggerCondition; use common\modules\triggers\models\TriggerCondition;
use common\modules\triggers\models\TriggerParam; use common\modules\triggers\models\TriggerParam;
use common\modules\triggers\models\TriggerSchedule;
use common\modules\triggers\models\TriggerTrigger; use common\modules\triggers\models\TriggerTrigger;
use yii\web\BadRequestHttpException;
class CheckPresenceTime extends ConditionBase implements ConditionInterface { class CheckPresenceTime extends ConditionBase implements ConditionInterface {
const CONDITION_ID=5; const CONDITION_ID=5;
...@@ -30,32 +32,56 @@ class CheckPresenceTime extends ConditionBase implements ConditionInterface { ...@@ -30,32 +32,56 @@ class CheckPresenceTime extends ConditionBase implements ConditionInterface {
return parent::init($conditionName); return parent::init($conditionName);
} }
public function initScript(){ public function initScript($cron_time=180){
return true; // Получили список всех активных (актуальных) триггеров
/** @var TriggerTrigger[] $actualTriggers */ /** @var TriggerTrigger[] $actualTriggers */
$actualTriggers = TriggerTrigger::getActualTriggers(self::CONDITION_ID); $actualTriggers = TriggerTrigger::getActualTriggers(self::CONDITION_ID);
// Перебираем их в цикле
foreach($actualTriggers as $trigger) { foreach($actualTriggers as $trigger) {
// Получили условия триггера на итерации
$conditions = TriggerCondition::find()->where(['trigger_id' => $trigger->getPrimaryKey()])->all(); $conditions = TriggerCondition::find()->where(['trigger_id' => $trigger->getPrimaryKey()])->all();
// Перебираем все условия триггера на итерации
foreach($conditions as $condition) { foreach($conditions as $condition) {
// Пытаемся получить параметр URL в условии
/** @var TriggerParam $paramUrl */ /** @var TriggerParam $paramUrl */
$paramUrl = TriggerParam::find()->where(['condition_id'=>$condition->getPrimaryKey(), 'key'=>'url'])->one(); $paramUrl = TriggerParam::find()->where(['condition_id'=>$condition->getPrimaryKey(), 'key'=>'url'])->one();
// Пытаемся получить параметр времени на условии
/** @var TriggerParam $paramTime */
$paramTime = TriggerParam::find()->where(['condition_id'=>$condition->getPrimaryKey(), 'key'=>'time'])->one(); $paramTime = TriggerParam::find()->where(['condition_id'=>$condition->getPrimaryKey(), 'key'=>'time'])->one();
if ($condition->condition_id==self::CONDITION_ID && $paramUrl!==null && $paramUrl->value==\Yii::$app->request->getUrl()) { // Если сработали условия что триггер есть, у него указаны время и URL и при этом он является триггером ДАННОГО типа
$view = \Yii::$app->controller->view; if ($condition->condition_id==self::CONDITION_ID && $paramUrl!==null && $paramUrl->value==\Yii::$app->request->getUrl() && $paramTime!==null) {
$script ='$(window).on("beforeunload", function() { $now = new \DateTime();
var timer='.(($paramTime!==null) ? $paramTime->value : 0).'; $time = new \DateTime();
if(timer>0){ $time->modify('+ '.(((int)$trigger->timeout<(int)$cron_time) ? $cron_time : (int)$trigger->timeout+(int)$cron_time).' second');
// Заносим запись в базу
$model = new TriggerSchedule();
$model->sended = 0;
$model->checked = 0;
$model->message = 'Test the presence time';
$model->email = \common\modules\users\models\User::findOne(\Yii::$app->user->id)->email;
$model->time = $time->format('Y-m-d H:i:s');
$model->date_create = $now->format('Y-m-d H:i:s');
if ($model->save()) {
$view = \Yii::$app->controller->view;
// Создаем скрипт
$script ='$(document).ready(function() {
var timer='.((int)$paramTime->value*1000).';
setTimeout(function() {
$.ajax({ $.ajax({
url: "/triggers/default/inittrigger", url: "/triggers/default/dropschedule",
method: "GET", method: "GET",
async: false, async: false,
data: { data: {
id: '.$trigger->getPrimaryKey().' id: '.$model->getPrimaryKey().'
}, },
}); });
} }, timer);
});'; });';
echo $view->registerJs($script, $view::POS_READY); // Регистрируем его
$view->registerJs($script, $view::POS_READY);
} else {
throw new BadRequestHttpException(current(current($model->getErrors())), 500);
}
} }
} }
} }
......
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