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

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

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