Commit 3cb7ba44 authored by Shakarim Sapa's avatar Shakarim Sapa

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

parent 2fe105ab
...@@ -8,6 +8,7 @@ use common\modules\content\models\CoContent; ...@@ -8,6 +8,7 @@ use common\modules\content\models\CoContent;
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;
use common\modules\triggers\models\AuthHashes; use common\modules\triggers\models\AuthHashes;
use common\modules\triggers\models\CasesSchedule;
use common\modules\triggers\models\TriggerLogs; 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;
...@@ -118,67 +119,39 @@ class DefaultController extends BaseController ...@@ -118,67 +119,39 @@ class DefaultController extends BaseController
} }
/** /**
* Вызов логики, проверяющей список всех пользователей и просмотренные ими страницы. * Вызов логики отвечающей за заполнение расписания рассылок по кейсам.
* В случае если юзер не смотрел какой либо из кейсов, выбирается и отправляется ОДИН * Заполняет таблицу с предстоящими рассылками для дальнейшей обработки.
* случайный кейс из просмотренных.
* *
* @param int $category_id * @param int $category_id
* @param int $template_id
* @param int $neededTime
*/ */
public function actionRecheckcases($category_id = 4, $template_id=1, $neededTime=10) { public function actionRecheckcases($category_id = 4) {
$date = new \DateTime();
/** @var User[] $users */ /** @var User[] $users */
$users = User::find()->all(); $users = User::find()->all();
// URL основной страницы // Получили массив case-ов
$baseUrl = 'http://task-on.com/'; /** @var CoContent[] $cases */
// Получили массив url-ов в категории $cases = CoContent::find()->where(['category_id'=>$category_id])->all();
$urls = ArrayHelper::map(CoContent::find()->where(['category_id'=>$category_id])->all(), 'id', 'url'); // Перемешали массив case в случайном порядке
// Перемешали массив ссылок в случайном порядке shuffle($cases);
shuffle($urls);
// Перебираем в цикле пользователей // Перебираем в цикле пользователей
foreach($users as $user) { foreach($users as $user) {
// Определили отправленность сообщения
$sendedToUser=false;
// Если письмо юзеру еще не отправлено
if ($sendedToUser===false) {
// Получили дату для дальнейшего сравнения
$deliveryDate = new \DateTime($user->delivery_date);
// Если пользователь подписан и дата соответствует требованиям // Если пользователь подписан и дата соответствует требованиям
if (Bid::find()->where(['email' => $user->email])->exists() && $deliveryDate<=$date) { if (Bid::find()->where(['email' => $user->email])->exists()) {
// Перебираем все url-ы // Перебираем все case-ы
foreach($urls as $url) { foreach($cases as $case) {
// Получаем время просмотра каждой страницы // Проверили наличие отправки кейса юзеру
$watchingtime = TriggerLogs::getSummaryTimeByUrl($url, $user->id); $scheduleExist = CasesSchedule::find()->where(['id' => $case->id, 'user_id' => $user->id])->exists();
// Если суммарное время просмотра больше минимальной нормы // Если отправка в расписании отсутствует
if ((int)$watchingtime>(int)$neededTime) { if (!$scheduleExist) {
// Производим отправку письма // Заносим в расписание
// Получаем почту $model = new CasesSchedule();
$email = $user->email; $model->user_id = $user->id;
// Генерируем хеш $model->case_id = $case->id;
$hash=AuthHashes::setNewHash($email); $model->template_id = (!is_null($case->template_id)) ? $case->template_id : null;
// Сформировали дату $model->sended_date = null;
$templateData = [ $model->sended = false;
'case_link' => $baseUrl.$url.'?hash='.$hash.'&email='.$email $model->actual = true;
]; $model->save();
// Производим отправку }
/** @var \DateTime $time_now */
TriggerSchedule::sendMessage($email, $template_id, $templateData, null);
// Произвели отправку, следовательно переопределили значение переменной
$sendedToUser=true;
}
}
// Создали дату следующей отправки
$updatedDate=new \DateTime();
// Произвели модификацию даты
$updatedDate->modify('+7 days');
/** @var User $user */
// Нашли пользователя
$user=User::findOne($this->id);
// Переопределили поле
$user->delivery_date = $updatedDate->format('Y-m-d');
// Сохранили изменения
$user->save(false);
} }
} }
} }
......
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