From 62ff66e4c33ca74113533ee6a1b6642ce5921206 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Tue, 22 Sep 2015 15:32:59 +0300 Subject: [PATCH] change request to massage --- src/app/frontend/controllers/EventsController.php | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------- src/app/frontend/controllers/SeriesOfLettersController.php | 46 +++++++++++++++++++++++++++++++++++++++------- src/app/frontend/views/series_of_letters/addEdit.php | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/app/tasks/EventMailTask.php | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------- src/lib/models/eventInfo.php | 12 ++++++++++++ src/lib/models/seriesOfLetters.php | 21 +++++++++++++++++++++ 6 files changed, 254 insertions(+), 83 deletions(-) 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 @@ + + +
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