Commit 5e4cf68c authored by Олег Гиммельшпах's avatar Олег Гиммельшпах

Merge branch 'master' of git.task-on.com:ktask/task-on.com

parents b15b175e 578d46ee
...@@ -161,9 +161,9 @@ class Conditions { ...@@ -161,9 +161,9 @@ class Conditions {
// Привели массив в понятный вид // Привели массив в понятный вид
$conditionsArray=[]; $conditionsArray=[];
foreach($conditions as $i=>$condition) { foreach($conditions as $i=>$condition) {
$object=Conditions::init()->getConditionById($condition->condition_id); // $object=Conditions::init()->getConditionById($condition->condition_id);
if ($object->recall===false) // if ($object->recall===false)
return false; // return false;
$conditionsArray[$i][] = $condition; $conditionsArray[$i][] = $condition;
} // На выходе получаем массив необходимого формата } // На выходе получаем массив необходимого формата
// Обрабатываем отформатированный массив // Обрабатываем отформатированный массив
......
...@@ -14,9 +14,11 @@ use common\modules\messageTemplate\models\MessageTemplate; ...@@ -14,9 +14,11 @@ use common\modules\messageTemplate\models\MessageTemplate;
use common\modules\triggers\components\conditions\vendor\ConditionBase; 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\TriggerLogs;
use common\modules\triggers\models\TriggerParam; use common\modules\triggers\models\TriggerParam;
use common\modules\triggers\models\TriggerSchedule; use common\modules\triggers\models\TriggerSchedule;
use common\modules\triggers\models\TriggerTrigger; use common\modules\triggers\models\TriggerTrigger;
use common\modules\users\models\User;
use yii\web\BadRequestHttpException; use yii\web\BadRequestHttpException;
class CheckPresenceTime extends ConditionBase implements ConditionInterface { class CheckPresenceTime extends ConditionBase implements ConditionInterface {
...@@ -75,10 +77,25 @@ class CheckPresenceTime extends ConditionBase implements ConditionInterface { ...@@ -75,10 +77,25 @@ class CheckPresenceTime extends ConditionBase implements ConditionInterface {
} }
/** /**
* @param $time * @param TriggerSchedule $message
* @return bool * @return bool
*/ */
public function check($time){ public function check($message){
$user = User::find()->where(['email' => $message->email])->one();
if (!is_null($message->trigger_id) && !is_null($user)) {
/** @var TriggerCondition[] $conditions */
$conditions = TriggerCondition::find()->where(['trigger_id'=>$message->trigger_id, 'condition_id' => self::CONDITION_ID])->all();
foreach($conditions as $condition) {
$urlParam = TriggerParam::find()->where(['condition_id' => $condition->getPrimaryKey(), 'key' => 'url', 'value' => \Yii::$app->request->getUrl()])->one();
$timeParam = TriggerParam::find()->where(['condition_id' => $condition->getPrimaryKey(), 'key' => 'time'])->one();
if (!is_null($urlParam) && !is_null($timeParam)) {
$sumTime = TriggerLogs::getSummaryTimeByUrl($urlParam, $user->getPrimaryKey());
if ($sumTime >= $timeParam) {
return true;
}
}
}
}
return false; return false;
} }
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ namespace common\modules\triggers\components\conditions\conditions; ...@@ -5,6 +5,7 @@ namespace common\modules\triggers\components\conditions\conditions;
use common\components\UnisenderAPI; use common\components\UnisenderAPI;
use common\modules\triggers\components\conditions\vendor\ConditionBase; 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\TriggerLogs;
use common\modules\users\models\User; use common\modules\users\models\User;
class CheckUserToRegistration extends ConditionBase implements ConditionInterface{ class CheckUserToRegistration extends ConditionBase implements ConditionInterface{
...@@ -25,7 +26,11 @@ class CheckUserToRegistration extends ConditionBase implements ConditionInterfac ...@@ -25,7 +26,11 @@ class CheckUserToRegistration extends ConditionBase implements ConditionInterfac
* @return bool * @return bool
*/ */
public function check($message){ public function check($message){
$exists = User::find()->where(['email' => $message->email])->exists(); $user = User::find()->where(['email' => $message->email])->one();
return $exists; if (!is_null($user)) {
$exists = TriggerLogs::find()->where(['user_id' => $user->getPrimaryKey(), 'action' =>TriggerLogs::USER_REGISTRATION])->exists();
return $exists;
}
return false;
} }
} }
\ No newline at end of file
...@@ -45,7 +45,7 @@ class TriggerLogs extends \yii\db\ActiveRecord ...@@ -45,7 +45,7 @@ class TriggerLogs extends \yii\db\ActiveRecord
var value = 5; var value = 5;
setInterval(function() { setInterval(function() {
$.ajax({ $.ajax({
url: "/triggers/default/settimeoflogs", url: "http://taskon.task-on.com/triggers/default/settimeoflogs",
method: "GET", method: "GET",
async: false, async: false,
data: { data: {
...@@ -103,5 +103,17 @@ class TriggerLogs extends \yii\db\ActiveRecord ...@@ -103,5 +103,17 @@ class TriggerLogs extends \yii\db\ActiveRecord
public function getUser() public function getUser()
{ {
return $this->hasOne(User::className(), ['id' => 'user_id']); return $this->hasOne(User::className(), ['id' => 'user_id']);
}
public static function getSummaryTimeByUrl($url, $user_id) {
/** @var TriggerLogs[] $model */
$model = TriggerLogs::find()->where(['url' => $url, 'user_id' => $user_id])->all();
$summ = 0;
foreach($model as $item) {
$summ += $item->presence_time;
}
return $summ;
} }
} }
...@@ -4,8 +4,10 @@ namespace common\modules\users\models; ...@@ -4,8 +4,10 @@ namespace common\modules\users\models;
use common\components\UnisenderAPI; use common\components\UnisenderAPI;
use common\modules\messageTemplate\controllers\TemplateAdminController; use common\modules\messageTemplate\controllers\TemplateAdminController;
use common\modules\messageTemplate\models\MessageTemplate; use common\modules\messageTemplate\models\MessageTemplate;
use common\modules\triggers\components\conditions\Conditions;
use common\modules\triggers\components\conditions\conditions\CheckUserToRegistration; use common\modules\triggers\components\conditions\conditions\CheckUserToRegistration;
use common\modules\triggers\models\TriggerCondition; use common\modules\triggers\models\TriggerCondition;
use common\modules\triggers\models\TriggerLogs;
use common\modules\triggers\models\TriggerSchedule; use common\modules\triggers\models\TriggerSchedule;
use common\modules\triggers\models\TriggerTrigger; use common\modules\triggers\models\TriggerTrigger;
use Yii; use Yii;
...@@ -519,11 +521,21 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter ...@@ -519,11 +521,21 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
if (!parent::validate($attributeNames = null, $clearErrors = true)) if (!parent::validate($attributeNames = null, $clearErrors = true))
return false; return false;
// if ($this->scenario===self::SCENARIO_REGISTRATION || $this->scenario===self::SCENARIO_SOCIAL_REGISTRATION) {
// if (!$this->afterRegistration(['email' => $this->email, 'user_fio' => $this->getFio()]))
// return false;
// }
return true;
}
public function afterSave($insert, $changedAttributes)
{
parent::afterSave($insert, $changedAttributes);
if ($this->scenario===self::SCENARIO_REGISTRATION || $this->scenario===self::SCENARIO_SOCIAL_REGISTRATION) { if ($this->scenario===self::SCENARIO_REGISTRATION || $this->scenario===self::SCENARIO_SOCIAL_REGISTRATION) {
if (!$this->afterRegistration(['email' => $this->email, 'user_fio' => $this->getFio()])) if (!$this->afterRegistration(['email' => $this->email, 'user_fio' => $this->getFio()]))
return false; return false;
} }
return true;
} }
public function afterDelete() public function afterDelete()
...@@ -579,28 +591,40 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter ...@@ -579,28 +591,40 @@ class User extends \common\components\ActiveRecordModel implements IdentityInter
* Если указан, выполняем действия триггера * Если указан, выполняем действия триггера
*/ */
public function afterRegistration($params=array()){ public function afterRegistration($params=array()){
/** @var TriggerTrigger[] $actualTriggers */ $date = new \DateTime();
$actualTriggers = TriggerTrigger::getActualTriggers(); $model = new TriggerLogs();
foreach($actualTriggers as $trigger) { $model->user_id = $this->getPrimaryKey();
$exists = TriggerCondition::find()->where(['trigger_id'=>$trigger->id, 'condition_id'=>CheckUserToRegistration::CONDITION_ID])->exists(); $model->action = TriggerLogs::USER_REGISTRATION;
$count = TriggerCondition::find()->where(['trigger_id'=>$trigger->id])->count(); $model->url = Yii::$app->request->getUrl();
// Добавляем в расписание срабатывание триггера регистрации только при условии что у триггера условие регистрации есть и оно там одно $model->datetime = $date->format('Y-m-d H:i:s');
if ($exists===true && $count==1) { $model->presence_time = 1;
$init = $trigger->initAction($params); if ($model->save()) {
if ($init===true) { /** @var TriggerTrigger[] $actualTriggers */
$curl = curl_init(); $actualTriggers = TriggerTrigger::getActualTriggers();
curl_setopt($curl, CURLOPT_URL, Yii::$app->urlManager->createAbsoluteUrl('/triggers/default/rechecktriggers')); foreach($actualTriggers as $trigger) {
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $exists = TriggerCondition::find()->where(['trigger_id'=>$trigger->id, 'condition_id'=>CheckUserToRegistration::CONDITION_ID])->exists();
if (!curl_exec($curl)) { $count = TriggerCondition::find()->where(['trigger_id'=>$trigger->id])->count();
$this->addError('email', curl_error($curl)); // Добавляем в расписание срабатывание триггера регистрации только при условии что у триггера условие регистрации есть и оно там одно
if ($exists===true && $count==1) {
$init = $trigger->initAction($params);
if ($init===true) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, Yii::$app->urlManager->createAbsoluteUrl('/triggers/default/rechecktriggers'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
if (!curl_exec($curl)) {
$this->addError('email', curl_error($curl));
return false;
}
return true;
} else {
$this->addError('email', $init);
return false; return false;
} }
return true;
} else {
$this->addError('email', $init);
return false;
} }
} }
} else {
$this->addError('email', current(current($model->getErrors())));
return false;
} }
return true; return true;
} }
......
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