Commit 404700e6 authored by Shakarim Sapa's avatar Shakarim Sapa

- Правки по рассылкам по кейсам

parent 301af5eb
......@@ -127,10 +127,13 @@ class DefaultController extends BaseController
$cases = CoContent::find()->where(['category_id'=>$category_id])->all();
// Перемешали массив case в случайном порядке
shuffle($cases);
// Перебираем в цикле пользователей
foreach($users as $user) {
// Если пользователь подписан
if (CasesBids::find()->where(['email' => $user->email])->exists()) {
// Получили список всех подписок
$bids = CasesBids::find()->all();
// Перебираем все подписки юзера
foreach($bids as $bid) {
// Если емайл указан
if (!is_null($bid->email)) {
$user = User::find()->where(['email' => $bid->email])->one();
// Перебираем все case-ы
foreach($cases as $case) {
// Проверили наличие отправки кейса юзеру
......@@ -139,7 +142,7 @@ class DefaultController extends BaseController
if (!$scheduleExist) {
// Заносим в расписание
$model = new CasesSchedule();
$model->user_id = $user->id;
$model->user_id = (!is_null($user)) ? $user->id : null;
$model->case_id = $case->id;
$model->template_id = (!is_null($case->template_id)) ? $case->template_id : null;
$model->sended_date = null;
......@@ -161,25 +164,28 @@ class DefaultController extends BaseController
public function actionSendcases($neededTime=10) {
set_time_limit(0);
$date = new \DateTime();
/** @var User[] $users */
$users = User::find()->all();
// URL основной страницы
$baseUrl = 'http://task-on.com/';
// Получили все данные в расписании
/** @var CasesSchedule[] $schedule */
$schedule = CasesSchedule::find()->where(['sended' => 0])->all();
// Перебираем в цикле пользователей
foreach($users as $user) {
// Определили отправленность сообщения
$sendedToUser=false;
/** @var CasesBids[] $bids */
$bids = CasesBids::find()->all();
// Массив для проверки выполнения отправки по конкретному емайл
$sendedEmails = [];
// Перебираем все подписки в цикле
foreach($bids as $bid) {
// Получили последнее отправленное письмо
$last_sent = CasesSchedule::find()->where(['email' => $bid->email, 'sended' => 1])->orderBy('sended_date DESC')->one();
// Получили дату для дальнейшего сравнения
$deliveryDate = new \DateTime($user->delivery_date);
// Если пользователь подписан и дата соответствует требованиям
if (CasesBids::find()->where(['email' => $user->email])->exists() && $deliveryDate<=$date) {
// Перебираем все записи
foreach($schedule as $record) {
// Если ни одно письмо еще не отправлено
if ($sendedToUser===false) {
$deliveryDate = new \DateTime($last_sent->sended_date);
// Добавили к дате сравнения 7 дней
$deliveryDate->modify('+7 days');
// Если этому емайл еще не отправлено письмо в данной рассылке
if (!in_array($bid->email, $sendedEmails)) {
// Если разница между последней отправкой и сегодня - 7 дней
if ($deliveryDate->format('d.m.Y')===$date->format('d.m.Y')) {
// Получили первую запись в расписании
$send_records = CasesSchedule::find()->where(['email' => $bid->email, 'sended' => 0])->orderBy('sended_date ASC')->all();
// Перебираем в цикле записи
foreach($send_records as $record) {
// Получили кейс
/** @var CoContent $case */
$case = $record->case;
......@@ -188,26 +194,54 @@ class DefaultController extends BaseController
$template_id = (!is_null($case->template_id)) ? $case->template_id : $record->template_id;
// Заносим урл в переменную
$url = $case->url;
// Получаем время просмотра каждой страницы
$watchingtime = TriggerLogs::getSummaryTimeByUrl($url, $user->id);
// Если суммарное время просмотра меньше минимальной нормы (то есть кейс еще не просмотрен)
if ((int)$watchingtime<(int)$neededTime) {
// Производим отправку письма
// Получаем почту
$email = $user->email;
// Если пользователь указан
if (!is_null($record->user_id)) {
// Получаем время просмотра каждой страницы
$watchingtime = TriggerLogs::getSummaryTimeByUrl($url, $record->user->id);
// Если суммарное время просмотра меньше минимальной нормы (то есть кейс еще не просмотрен)
if ((int)$watchingtime<(int)$neededTime) {
// Производим отправку письма
// Получаем почту
$email = $record->email;
// Генерируем хеш
$hash=AuthHashes::setNewHash($email);
// Сформировали дату
$templateData = [
'case_link' => $baseUrl.$url.'?hash='.$hash.'&email='.$email,
'user_fio' => $record->user->getFio(),
'link_to_record' => \Yii::$app->params['frontUrl'].($url!='/'?'/':'').$url
];
// Производим отправку
/** @var \DateTime $time_now */
$sended = TriggerSchedule::sendMessage($email, $template_id, $templateData, null);
// Произвели отправку, следовательно переопределили значение переменной
$sendedEmails[] = $bid->email;
// Редактируем запись в расписании
if ($sended===true) {
/** @var CasesSchedule $model */
$model = CasesSchedule::findOne($record->id);
$model->sended_date = $date->format('Y-m-d H:i:s');
$model->sended = 1;
if (!$model->save())
echo current(current($model->getErrors())).'<br>';
} else {
echo $sended.'<br>';
}
}
} else {
$email = $record->email;
// Генерируем хеш
$hash=AuthHashes::setNewHash($email);
// Сформировали дату
$templateData = [
'case_link' => $baseUrl.$url.'?hash='.$hash.'&email='.$email,
'user_fio' => $user->getFio(),
'link_to_record' => \Yii::$app->params['frontUrl'].($url!='/'?'/':'').$url
];
// Производим отправку
/** @var \DateTime $time_now */
$sended = TriggerSchedule::sendMessage($email, $template_id, $templateData, null);
// Произвели отправку, следовательно переопределили значение переменной
$sendedToUser=true;
$sendedEmails[] = $bid->email;
// Редактируем запись в расписании
if ($sended===true) {
/** @var CasesSchedule $model */
......@@ -223,18 +257,6 @@ class DefaultController extends BaseController
}
}
}
// Создали дату следующей отправки
$updatedDate=new \DateTime();
// Произвели модификацию даты
$updatedDate->modify('+7 days');
/** @var User $user */
// Нашли пользователя
$user=User::findOne($user->id);
// Переопределили поле
$user->delivery_date = $updatedDate->format('Y-m-d');
// Сохранили изменения
if (!$user->save())
echo current(current($user->getErrors()));
}
}
}
......
......@@ -15,6 +15,7 @@ use common\modules\messageTemplate\models\MessageTemplate;
* @property integer $case_id
* @property integer $template_id
* @property string $sended_date
* @property string $email
* @property integer $sended
* @property integer $actual
*
......@@ -38,12 +39,13 @@ class CasesSchedule extends \yii\db\ActiveRecord
public function rules()
{
return [
[['user_id', 'case_id'], 'required'],
[['case_id'], 'required'],
[['email'], 'string'],
[['user_id', 'case_id', 'template_id', 'sended', 'actual'], 'integer'],
[['sended_date'], 'safe'],
[['template_id'], 'exist', 'skipOnError' => true, 'targetClass' => MessageTemplate::className(), 'targetAttribute' => ['template_id' => 'id']],
[['case_id'], 'exist', 'skipOnError' => true, 'targetClass' => CoContent::className(), 'targetAttribute' => ['case_id' => 'id']],
[['user_id'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['user_id' => 'id']],
[['user_id'], 'exist', 'skipOnError' => false, 'targetClass' => User::className(), 'targetAttribute' => ['user_id' => 'id']],
];
}
......@@ -55,6 +57,7 @@ class CasesSchedule extends \yii\db\ActiveRecord
return [
'id' => 'ID',
'user_id' => 'Пользователь',
'email' => 'E-mail',
'case_id' => 'Кейс',
'template_id' => 'Шаблон',
'sended_date' => 'Дата отправки',
......
<?php
use yii\db\Migration;
class m160512_151201_update_the_cases_schedule_table extends Migration
{
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
$this->dropForeignKey(
'fk_cases_schedule_user',
'cases_schedule'
);
$this->alterColumn(
'cases_schedule',
'user_id',
$this->integer(11)->defaultValue(null)
);
$this->addForeignKey(
'fk_cases_schedule_user',
'cases_schedule', 'user_id',
'users', 'id'
);
$this->addColumn(
'cases_schedule',
'email',
'varchar(255) NOT NULL'
);
}
public function safeDown()
{
$this->dropForeignKey(
'fk_cases_schedule_user',
'cases_schedule'
);
$this->alterColumn(
'cases_schedule',
'user_id',
$this->integer(11)->notNull()
);
$this->addForeignKey(
'fk_cases_schedule_user',
'cases_schedule', 'user_id',
'users', 'id'
);
$this->dropColumn(
'cases_schedule',
'email'
);
}
}
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