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

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

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