Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
taskonsite-архив-перенесен
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Packages
Packages
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dmitry Korolev
taskonsite-архив-перенесен
Commits
404700e6
Commit
404700e6
authored
May 16, 2016
by
Shakarim Sapa
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- Правки по рассылкам по кейсам
parent
301af5eb
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
121 additions
and
44 deletions
+121
-44
common/modules/triggers/controllers/DefaultController.php
common/modules/triggers/controllers/DefaultController.php
+64
-42
common/modules/triggers/models/CasesSchedule.php
common/modules/triggers/models/CasesSchedule.php
+5
-2
console/migrations/m160512_151201_update_the_cases_schedule_table.php
...ations/m160512_151201_update_the_cases_schedule_table.php
+52
-0
No files found.
common/modules/triggers/controllers/DefaultController.php
View file @
404700e6
...
@@ -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
;
// Если пользователь указан
if
(
!
is_null
(
$record
->
user_id
))
{
// Получаем время просмотра каждой страницы
// Получаем время просмотра каждой страницы
$watchingtime
=
TriggerLogs
::
getSummaryTimeByUrl
(
$url
,
$
user
->
id
);
$watchingtime
=
TriggerLogs
::
getSummaryTimeByUrl
(
$url
,
$record
->
user
->
id
);
// Если суммарное время просмотра меньше минимальной нормы (то есть кейс еще не просмотрен)
// Если суммарное время просмотра меньше минимальной нормы (то есть кейс еще не просмотрен)
if
((
int
)
$watchingtime
<
(
int
)
$neededTime
)
{
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
);
// Произвели отправку, следовательно переопределили значение переменной
// Произвели отправку, следовательно переопределили значение переменной
$sended
ToUser
=
true
;
$sended
Emails
[]
=
$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
()));
}
}
}
}
}
}
...
...
common/modules/triggers/models/CasesSchedule.php
View file @
404700e6
...
@@ -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'
=>
tru
e
,
'targetClass'
=>
User
::
className
(),
'targetAttribute'
=>
[
'user_id'
=>
'id'
]],
[[
'user_id'
],
'exist'
,
'skipOnError'
=>
fals
e
,
'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'
=>
'Дата отправки'
,
...
...
console/migrations/m160512_151201_update_the_cases_schedule_table.php
0 → 100644
View file @
404700e6
<?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'
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment