diff --git a/src/app/frontend/controllers/EventsController.php b/src/app/frontend/controllers/EventsController.php
index 46db7e3..0cfee15 100644
--- a/src/app/frontend/controllers/EventsController.php
+++ b/src/app/frontend/controllers/EventsController.php
@@ -76,6 +76,11 @@ class EventsController extends \Phalcon\Mvc\Controller
}
}
+ /**
+ * @param $data
+ * @param $template
+ * @throws \Exception
+ */
private function sendDelivery($data, $template){
if($this->post['email']){
@@ -94,6 +99,8 @@ class EventsController extends \Phalcon\Mvc\Controller
$this->event_info->save();
+ $this->addLetersList($this->post['project_id']);
+
} else {
$this->event_info->event_id = $data->id;
@@ -271,12 +278,54 @@ class EventsController extends \Phalcon\Mvc\Controller
}
- private function getEventDate($time){
- $now = date("Y-m-d H:i:s");
- $EmailDate = new \DateTime($now);
+ private function getEventDate($first_delivery,$time){
+ $now = date("Y-m-d");
+ $EmailDate = new \DateTime($first_delivery);
$EmailDate->modify($time);
- return $EmailDate->format('Y-m-d H:i:s');
+ return $EmailDate->format('Y-m-d');
+ }
+
+
+ function getNextDate($day)
+ {
+ $ret = false;
+ for ($i=1; $i<=7; $i++)
+ {
+ if (date('w',strtotime('+'.$i.' day'))==$day)
+ {
+ $ret = date('Y-m-d',strtotime('+'.$i.' day'));
+ break;
+ }
+ }
+ return $ret;
}
+
+ private function addLetersList($project_id){
+ $data = \seriesOfLetters::find("project_id ={$project_id} ");
+
+ foreach($data as $row){
+
+ $letters = explode(',',$row->letters);
+
+
+ $days = count($letters);
+ for($i=0; $i<$days; $i++){
+ $now = date('N');
+ $row->first_delivery = $this->getNextDate($row->first_delivery);
+ $date = $this->getEventDate($row->first_delivery, "+". ($i)*$row->period_val ." days");
+ $event = new \eventInfo();
+ $event->customer_id = $this->customers_model->id;
+ $event->event_id = $letters[$i];
+ $event->next_delivery = $date;
+ $event->project_id = $project_id;
+ $event->event_trigger = 'series_of_letter';
+ $event->save();
+ }
+
+ }
+ }
+
+
private function subscribeNewCustomer(){
$user['email'] = $this->post['email'];
$user['name'] = isset($this->post['name']) ? $this->post['name']:'';
@@ -285,26 +334,9 @@ class EventsController extends \Phalcon\Mvc\Controller
if($customer instanceof \customersEmailList){
} else {
- $data = \seriesOfLetters::find("project_id ={$user['project_id']} ");
$this->customers_model->save($user);
- foreach($data as $row){
+ $this->addLetersList($this->post['project_id']);
- $letters = explode(',',$row->letters);
-
-
- $days = count($letters);
- for($i=0; $i<$days; $i++){
- $date = $this->getEventDate("+". ($i+1)*$row->period_val ." days");
- $event = new \eventInfo();
- $event->customer_id = $this->customers_model->id;
- $event->event_id = $letters[$i];
- $event->next_delivery = $date;
- $event->project_id = $user['project_id'];
- $event->event_trigger = 'series_of_letter';
- $event->save();
- }
-
- }
}
diff --git a/src/app/frontend/controllers/SeriesOfLettersController.php b/src/app/frontend/controllers/SeriesOfLettersController.php
index 919703b..26c7425 100644
--- a/src/app/frontend/controllers/SeriesOfLettersController.php
+++ b/src/app/frontend/controllers/SeriesOfLettersController.php
@@ -20,14 +20,17 @@ class SeriesOfLettersController extends \Phalcon\Mvc\Controller
]);
}
+
public function addAction(){
if( $this->request->isPost() )
{
+
$data['project_id'] = $this->session->get('project-id');
$data['name'] = $this->request->getPost('name', 'string', NULL );
$data['status'] = $this->request->getPost('status')?$this->request->getPost('status'):0 ;
$data['event'] = $this->request->getPost('event' );
$data['period_val'] = $this->request->getPost('period_val' );
+ $data['first_delivery'] = $this->request->getPost('first_delivery' );
$data['letters'] = implode(',',$data['event']);
$model = new \seriesOfLetters();
@@ -46,7 +49,8 @@ class SeriesOfLettersController extends \Phalcon\Mvc\Controller
}
$this->view->pick( 'series_of_letters/addEdit' );
$this->view->setVars([
-
+ 'page' => new \seriesOfLetters(),
+ 'events' => []
]);
}
@@ -60,12 +64,40 @@ class SeriesOfLettersController extends \Phalcon\Mvc\Controller
}
public function updateAction($id){
-//
-// $data = \seriesOfLetters::findFirst("id=$id AND project_id ={$this->session->get('project-id')} ");
-// $this->view->pick( 'series_of_letters/addEdit' );
-// $this->view->setVars([
-// 'page' => $data
-// ]);
+ $model = \seriesOfLetters::findFirst("id=$id AND project_id ={$this->session->get('project-id')} ");
+ if( $this->request->isPost() )
+ {
+
+
+ $data['project_id'] = $this->session->get('project-id');
+ $data['name'] = $this->request->getPost('name', 'string', NULL );
+ $data['status'] = $this->request->getPost('status')?$this->request->getPost('status'):0 ;
+ $data['event'] = $this->request->getPost('event' );
+ $data['period_val'] = $this->request->getPost('period_val' );
+ $data['first_delivery'] = $this->request->getPost('first_delivery' );
+ $data['letters'] = implode(',',$data['event']);
+
+ if( !empty( $data['name'] ))
+ {
+ if( $model->save( $data ) )
+ {
+ $this->flash->success( 'Сохранение прошло успешно' );
+ return $this->response->redirect('series_of_letters/index');
+ }
+ else
+ {
+ $this->flash->error( 'Произошла ошибка во время добавления.' );
+ }
+ }
+ }
+
+
+ $events = \eventEmail::find("id IN ('".implode("','", explode(',',$model->letters))."') ");
+ $this->view->pick( 'series_of_letters/addEdit' );
+ $this->view->setVars([
+ 'page' => $model,
+ 'events' => $events
+ ]);
}
public function getTemplateAction()
diff --git a/src/app/frontend/views/series_of_letters/addEdit.php b/src/app/frontend/views/series_of_letters/addEdit.php
index 006ddc3..c84cbc8 100644
--- a/src/app/frontend/views/series_of_letters/addEdit.php
+++ b/src/app/frontend/views/series_of_letters/addEdit.php
@@ -7,7 +7,7 @@
-
+ status ) && !empty( $page->status )) ? 'checked' : '') ?>>
@@ -16,8 +16,23 @@
Название рассылки
'>
+
+
+
+ День первого письма
+
+
+
+
+
Период
'>
@@ -25,6 +40,10 @@
+
+ = $event->name ?> | Убрать из списка
+ |
+
Введите название письма
@@ -92,4 +111,40 @@
row.remove();
});
});
+
+
\ No newline at end of file
diff --git a/src/app/tasks/EventMailTask.php b/src/app/tasks/EventMailTask.php
index 4cc7a4b..4001cac 100644
--- a/src/app/tasks/EventMailTask.php
+++ b/src/app/tasks/EventMailTask.php
@@ -40,27 +40,42 @@ class EventMailTask extends \Phalcon\CLI\Task
foreach($projects as $project){
- $events = $this->eventByTrigger($project,'series_of_letter');
+
+ $events = \eventInfo::getEventsByTrigger($this->modelsManager, $project->id, 'series_of_letter');
foreach($events as $event){
+ if($event instanceof \eventInfo){
- if(!$event->isNew() ){
- if(!$event->isRecurring()){
- continue;
+ $customers = (new customersEmailList())->findFirst("id={$event->customer_id}");
+
+ if($customers instanceof customersEmailList){
+
+ $eventEmail = ( new \eventEmail())->findFirst("id={$event->event_id}");
+ if($eventEmail instanceof eventEmail){
+ $eventEmail = $eventEmail->toArray();
+ print_r($eventEmail);
+ }else {
+ continue;
+ }
+ $template = \emailTemplates::findFirst("event_id = {$event->event_id} AND project_id = {$project->id}")->toArray();
+
+ $this->post['name']=$customers->name;
+ $this->post['email']=$customers->email;
+ $this->post['phone']=$customers->phone;
+ $this->post['address']=$customers->address;
+
+ $this->sendMailData($template,$customers->toArray(),$eventEmail,$project);
+
+ $event->last_delivery = date("Y-m-d H:i:s");
+ $event->delete();
}
- }
- print_r($event->toArray());
- $customers = $project->findUsersByBirthday();
- foreach($customers as $customer){
- $this->post['name']=$customer->name;
- $this->post['email']=$customer->email;
- $this->post['phone']=$customer->phone;
- $this->post['address']=$customer->address;
- $this->sendMail($customer->toArray(),$project,$event,$event->eventEmail->toArray());
- }
+
+
+ }
}
+
}
}
@@ -116,13 +131,13 @@ class EventMailTask extends \Phalcon\CLI\Task
}
}
- $users = $model->getSpyUsers($project, $this->modelsManager);
+ $users = $model->getSpyUsers( $this->modelsManager, $project);
foreach( $users as $user){
$event_data = $model->spyTimeAfter($project, $user['id'])->toArray();
$customers = $customers_model->findFirst("id={$user['id']}");
- if($customers->checkEventForUser($event->id, $project->id)){
+ if($customers instanceof customersEmailList && $customers->checkEventForUser($event->id, $project->id)){
$sum = 0;
foreach($event_data as $item_one){
$sum += (integer)$item_one['price']*$item_one['quantity'];
@@ -146,7 +161,12 @@ class EventMailTask extends \Phalcon\CLI\Task
}
}
-
+ /**
+ *TODO: $this->post array with dynamic data for static letters, need to change in some variable
+ *
+ *
+ *
+ **/
private function prepareEventData($item_data, $template){
if($template['text_type']=='static' ){
@@ -162,8 +182,9 @@ class EventMailTask extends \Phalcon\CLI\Task
} else {
- $template['text'] = $this->MyMailer->OfflineEvent->itemDynamicSet( $template, $item_data );
-
+ if( $item_data ) {
+ $template['text'] = $this->MyMailer->OfflineEvent->itemDynamicSet($template, $item_data);
+ }
$template['text'] = $this->MyMailer->OnlineEvent->dataSet( $template['text'], $this->post );
}
@@ -195,16 +216,6 @@ class EventMailTask extends \Phalcon\CLI\Task
-
- public function dateEvent(){
- $date = date('d.m.y');
- }
-
- public function fieldEqualEvent(){
-
- }
-
-
private function getEventInfo($event, $customers,$project){
$info = \eventInfo::findFirst("event_id = {$event->id} AND customer_id = {$customers['id']}");
@@ -222,6 +233,14 @@ class EventMailTask extends \Phalcon\CLI\Task
}
+ /**
+ * send Email
+ * @params array $customers
+ * @params object $project
+ * @params object $offline_data_model
+ * @params array $event
+ * @params array $event_data
+ **/
public function sendMail($customers,$project,$offline_data_model, $event, $event_data = [] ){
if($customers){
@@ -232,33 +251,16 @@ class EventMailTask extends \Phalcon\CLI\Task
- /* if(isset($get['item_data']) && !empty($get['item_data'])){
- $item_data = json_decode($get['item_data']);
-
- $template->text = $this->UTMParser->itemSet( $template->toArray(), $item_data );
-
- }*/
-
- $template['text'] = $this->prepareEventData($event_data, $template);
-
- $template['text'] = $this->UTMParser->parse($event, $template);
-
- $this->MyMailer->OfflineEvent->setFromName($project->name);
-
- $this->MyMailer->OfflineEvent->SendDelivery(new \delivery(),$template,$event,[$customers]);
-
+// if(isset($get['item_data']) && !empty($get['item_data'])){
+// $item_data = json_decode($get['item_data']);
+//
+// $template->text = $this->UTMParser->itemSet( $template->toArray(), $item_data );
+//
+// }
+ $this->sendMailData($template,$customers,$event,$project,$event_data);
$event_info->last_delivery = date("Y-m-d H:i:s");
-
-
- if($offline_data_model->recurring_val){
-
- $date = new DateTime( date("Y-m-d H:i:s"));
- $date->modify('+'.$offline_data_model->recurring_val.' '.$offline_data_model->recurring_val_type);
- $event_info->next_delivery = $date->format("Y-m-d H:i:s");
- }
-
$event_info->save();
// $model = \delivery::find();
@@ -273,9 +275,26 @@ class EventMailTask extends \Phalcon\CLI\Task
}
+ /**
+ * send Email
+ * @params array $customers
+ * @params object $project
+ * @params array $event
+ * @params array $event_data
+ * @params array $template
+ **/
+ private function sendMailData($template,$customers,$event,$project,$event_data=[])
+ {
+ $template['text'] = $this->prepareEventData($event_data, $template);
+ $template['text'] = $this->UTMParser->parse($event, $template);
+ $this->MyMailer->OfflineEvent->setFromName($project->name);
+
+ $this->MyMailer->OfflineEvent->SendDelivery(new \delivery(),$template,$event,[$customers]);
+
+ }
diff --git a/src/lib/models/eventInfo.php b/src/lib/models/eventInfo.php
index 3affc9c..e266756 100644
--- a/src/lib/models/eventInfo.php
+++ b/src/lib/models/eventInfo.php
@@ -14,5 +14,17 @@ class eventInfo extends \Phalcon\Mvc\Model
return "event_info";
}
+ static public function getEventsByTrigger($modelsManager, $project_id, $trigger){
+ $now = date("Y-m-d H:i:s");
+ $phql = "
+ SELECT * FROM eventInfo
+ WHERE project_id = $project_id
+ AND event_trigger='{$trigger}'
+ AND next_delivery <= '$now'
+ AND last_delivery IS NULL OR last_delivery = ''";
+
+ return $modelsManager->executeQuery($phql);
+
+ }
}
\ No newline at end of file
diff --git a/src/lib/models/seriesOfLetters.php b/src/lib/models/seriesOfLetters.php
index 5ff6fa6..ad2da8c 100644
--- a/src/lib/models/seriesOfLetters.php
+++ b/src/lib/models/seriesOfLetters.php
@@ -14,5 +14,26 @@ class seriesOfLetters extends \Phalcon\Mvc\Model
return "series_of_letters";
}
+ public function getDays(){
+ return [
+ ['val'=>'1','name'=>'понедельник'],
+ ['val'=>'2','name'=>'вторник'],
+ ['val'=>'3','name'=>'среда'],
+ ['val'=>'4','name'=>'четверг'],
+ ['val'=>'5','name'=>'пятница'],
+ ['val'=>'6','name'=>'суббота'],
+ ['val'=>'7','name'=>'воскресенье'],
+ ];
+ }
+ public function isActive($first_delivery,$day){
+ if($first_delivery==$day){
+ return true;
+ }else{
+ return false;
+ }
+
+
+ }
+
}
\ No newline at end of file
--
libgit2 0.21.4