Commit 62ff66e4c33ca74113533ee6a1b6642ce5921206

Authored by Administrator
1 parent 7882b398

change request to massage

src/app/frontend/controllers/EventsController.php
... ... @@ -76,6 +76,11 @@ class EventsController extends \Phalcon\Mvc\Controller
76 76 }
77 77 }
78 78  
  79 + /**
  80 + * @param $data
  81 + * @param $template
  82 + * @throws \Exception
  83 + */
79 84 private function sendDelivery($data, $template){
80 85 if($this->post['email']){
81 86  
... ... @@ -94,6 +99,8 @@ class EventsController extends \Phalcon\Mvc\Controller
94 99  
95 100  
96 101 $this->event_info->save();
  102 + $this->addLetersList($this->post['project_id']);
  103 +
97 104 } else {
98 105  
99 106 $this->event_info->event_id = $data->id;
... ... @@ -271,12 +278,54 @@ class EventsController extends \Phalcon\Mvc\Controller
271 278  
272 279 }
273 280  
274   - private function getEventDate($time){
275   - $now = date("Y-m-d H:i:s");
276   - $EmailDate = new \DateTime($now);
  281 + private function getEventDate($first_delivery,$time){
  282 + $now = date("Y-m-d");
  283 + $EmailDate = new \DateTime($first_delivery);
277 284 $EmailDate->modify($time);
278   - return $EmailDate->format('Y-m-d H:i:s');
  285 + return $EmailDate->format('Y-m-d');
  286 + }
  287 +
  288 +
  289 + function getNextDate($day)
  290 + {
  291 + $ret = false;
  292 + for ($i=1; $i<=7; $i++)
  293 + {
  294 + if (date('w',strtotime('+'.$i.' day'))==$day)
  295 + {
  296 + $ret = date('Y-m-d',strtotime('+'.$i.' day'));
  297 + break;
  298 + }
  299 + }
  300 + return $ret;
279 301 }
  302 +
  303 + private function addLetersList($project_id){
  304 + $data = \seriesOfLetters::find("project_id ={$project_id} ");
  305 +
  306 + foreach($data as $row){
  307 +
  308 + $letters = explode(',',$row->letters);
  309 +
  310 +
  311 + $days = count($letters);
  312 + for($i=0; $i<$days; $i++){
  313 + $now = date('N');
  314 + $row->first_delivery = $this->getNextDate($row->first_delivery);
  315 + $date = $this->getEventDate($row->first_delivery, "+". ($i)*$row->period_val ." days");
  316 + $event = new \eventInfo();
  317 + $event->customer_id = $this->customers_model->id;
  318 + $event->event_id = $letters[$i];
  319 + $event->next_delivery = $date;
  320 + $event->project_id = $project_id;
  321 + $event->event_trigger = 'series_of_letter';
  322 + $event->save();
  323 + }
  324 +
  325 + }
  326 + }
  327 +
  328 +
280 329 private function subscribeNewCustomer(){
281 330 $user['email'] = $this->post['email'];
282 331 $user['name'] = isset($this->post['name']) ? $this->post['name']:'';
... ... @@ -285,26 +334,9 @@ class EventsController extends \Phalcon\Mvc\Controller
285 334 if($customer instanceof \customersEmailList){
286 335  
287 336 } else {
288   - $data = \seriesOfLetters::find("project_id ={$user['project_id']} ");
289 337 $this->customers_model->save($user);
290   - foreach($data as $row){
  338 + $this->addLetersList($this->post['project_id']);
291 339  
292   - $letters = explode(',',$row->letters);
293   -
294   -
295   - $days = count($letters);
296   - for($i=0; $i<$days; $i++){
297   - $date = $this->getEventDate("+". ($i+1)*$row->period_val ." days");
298   - $event = new \eventInfo();
299   - $event->customer_id = $this->customers_model->id;
300   - $event->event_id = $letters[$i];
301   - $event->next_delivery = $date;
302   - $event->project_id = $user['project_id'];
303   - $event->event_trigger = 'series_of_letter';
304   - $event->save();
305   - }
306   -
307   - }
308 340  
309 341 }
310 342  
... ...
src/app/frontend/controllers/SeriesOfLettersController.php
... ... @@ -20,14 +20,17 @@ class SeriesOfLettersController extends \Phalcon\Mvc\Controller
20 20 ]);
21 21 }
22 22  
  23 +
23 24 public function addAction(){
24 25 if( $this->request->isPost() )
25 26 {
  27 +
26 28 $data['project_id'] = $this->session->get('project-id');
27 29 $data['name'] = $this->request->getPost('name', 'string', NULL );
28 30 $data['status'] = $this->request->getPost('status')?$this->request->getPost('status'):0 ;
29 31 $data['event'] = $this->request->getPost('event' );
30 32 $data['period_val'] = $this->request->getPost('period_val' );
  33 + $data['first_delivery'] = $this->request->getPost('first_delivery' );
31 34 $data['letters'] = implode(',',$data['event']);
32 35  
33 36 $model = new \seriesOfLetters();
... ... @@ -46,7 +49,8 @@ class SeriesOfLettersController extends \Phalcon\Mvc\Controller
46 49 }
47 50 $this->view->pick( 'series_of_letters/addEdit' );
48 51 $this->view->setVars([
49   -
  52 + 'page' => new \seriesOfLetters(),
  53 + 'events' => []
50 54 ]);
51 55 }
52 56  
... ... @@ -60,12 +64,40 @@ class SeriesOfLettersController extends \Phalcon\Mvc\Controller
60 64 }
61 65  
62 66 public function updateAction($id){
63   -//
64   -// $data = \seriesOfLetters::findFirst("id=$id AND project_id ={$this->session->get('project-id')} ");
65   -// $this->view->pick( 'series_of_letters/addEdit' );
66   -// $this->view->setVars([
67   -// 'page' => $data
68   -// ]);
  67 + $model = \seriesOfLetters::findFirst("id=$id AND project_id ={$this->session->get('project-id')} ");
  68 + if( $this->request->isPost() )
  69 + {
  70 +
  71 +
  72 + $data['project_id'] = $this->session->get('project-id');
  73 + $data['name'] = $this->request->getPost('name', 'string', NULL );
  74 + $data['status'] = $this->request->getPost('status')?$this->request->getPost('status'):0 ;
  75 + $data['event'] = $this->request->getPost('event' );
  76 + $data['period_val'] = $this->request->getPost('period_val' );
  77 + $data['first_delivery'] = $this->request->getPost('first_delivery' );
  78 + $data['letters'] = implode(',',$data['event']);
  79 +
  80 + if( !empty( $data['name'] ))
  81 + {
  82 + if( $model->save( $data ) )
  83 + {
  84 + $this->flash->success( 'Сохранение прошло успешно' );
  85 + return $this->response->redirect('series_of_letters/index');
  86 + }
  87 + else
  88 + {
  89 + $this->flash->error( 'Произошла ошибка во время добавления.' );
  90 + }
  91 + }
  92 + }
  93 +
  94 +
  95 + $events = \eventEmail::find("id IN ('".implode("','", explode(',',$model->letters))."') ");
  96 + $this->view->pick( 'series_of_letters/addEdit' );
  97 + $this->view->setVars([
  98 + 'page' => $model,
  99 + 'events' => $events
  100 + ]);
69 101 }
70 102  
71 103 public function getTemplateAction()
... ...
src/app/frontend/views/series_of_letters/addEdit.php
... ... @@ -7,7 +7,7 @@
7 7  
8 8  
9 9 <div class="input-group">
10   - <input type="checkbox" id="status" name="status" class="unique" value="<?= (isset( $page->status ) && !empty( $page->status ) ? $page->status : '') ?>">
  10 + <input type="checkbox" id="status" value="1" name="status" <?= ((isset( $page->status ) && !empty( $page->status )) ? 'checked' : '') ?>>
11 11 <label for="status">Статус рассылки</label>
12 12 </div>
13 13  
... ... @@ -16,8 +16,23 @@
16 16 <div class="input-group">
17 17 <span class="input-group-addon title-block-sizing">Название рассылки</span>
18 18 <input type="text" name="name" class="form-control" value='<?= (isset( $page->name ) && !empty( $page->name ) ? $page->name : '') ?>'>
  19 +
19 20 </div>
20 21  
  22 +
  23 + <div class="input-group">
  24 + <span class="input-group-addon title-block-sizing">День первого письма</span>
  25 + <select class="form-control" name="first_delivery">
  26 +
  27 + <?php foreach($page->getDays() as $day):?>
  28 +
  29 + <option <?= !empty( $page->first_delivery )&& $page->isActive($page->first_delivery,$day['val']) ? "selected" :"" ?> value="<?= $day['val'] ?>"><?= $day['name'] ?></option>
  30 + <?php endforeach?>
  31 + </select>
  32 + </div>
  33 +
  34 +
  35 +
21 36 <div class="input-group">
22 37 <span class="input-group-addon title-block-sizing">Период</span>
23 38 <input type="text" name="period_val" class="form-control" value='<?= (isset( $page->period_val ) && !empty( $page->period_val ) ? $page->period_val : '') ?>'>
... ... @@ -25,6 +40,10 @@
25 40  
26 41  
27 42 <table id="templates-list" class="table table-hover">
  43 + <?php foreach($events as $event):?>
  44 + <tr><td id='name'><?= $event->name ?></td><td><p class = 'btn btn-primary delete-row'>Убрать из списка</p>
  45 + <input type='hidden' value='<?= $event->id ?>' name='event[]'></td></tr>
  46 + <?php endforeach;?>
28 47 </table>
29 48 <div class="input-group">
30 49 <span class="input-group-addon title-block-sizing">Введите название письма</span>
... ... @@ -92,4 +111,40 @@
92 111 row.remove();
93 112 });
94 113 });
  114 +</script>
  115 +<script>
  116 + $(function() {
  117 + $.datepicker.regional['ru'] = {
  118 + closeText: 'Закрыть',
  119 + prevText: '&#x3c;Пред',
  120 + nextText: 'След&#x3e;',
  121 + currentText: 'Сегодня',
  122 + monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
  123 + 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
  124 + monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
  125 + 'Июл','Авг','Сен','Окт','Ноя','Дек'],
  126 + dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
  127 + dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
  128 + dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
  129 + dateFormat: 'dd.mm.yy',
  130 + firstDay: 1,
  131 + isRTL: false
  132 + };
  133 + $.datepicker.setDefaults($.datepicker.regional['ru']);
  134 +
  135 + $( "#datepicker" ).datepicker({
  136 + dateFormat: "dd-mm-yy"
  137 + });
  138 +
  139 +
  140 + $('.active_field_select').each(function(){
  141 + if(this.checked){
  142 + $(this).parent('li').addClass('active');
  143 + }else {
  144 + $(this).parent('li').addClass('non_active');
  145 + }
  146 + });
  147 +
  148 + });
  149 +
95 150 </script>
96 151 \ No newline at end of file
... ...
src/app/tasks/EventMailTask.php
... ... @@ -40,27 +40,42 @@ class EventMailTask extends \Phalcon\CLI\Task
40 40  
41 41 foreach($projects as $project){
42 42  
43   - $events = $this->eventByTrigger($project,'series_of_letter');
  43 +
  44 + $events = \eventInfo::getEventsByTrigger($this->modelsManager, $project->id, 'series_of_letter');
44 45  
45 46 foreach($events as $event){
  47 + if($event instanceof \eventInfo){
46 48  
47   - if(!$event->isNew() ){
48   - if(!$event->isRecurring()){
49   - continue;
  49 + $customers = (new customersEmailList())->findFirst("id={$event->customer_id}");
  50 +
  51 + if($customers instanceof customersEmailList){
  52 +
  53 + $eventEmail = ( new \eventEmail())->findFirst("id={$event->event_id}");
  54 + if($eventEmail instanceof eventEmail){
  55 + $eventEmail = $eventEmail->toArray();
  56 + print_r($eventEmail);
  57 + }else {
  58 + continue;
  59 + }
  60 + $template = \emailTemplates::findFirst("event_id = {$event->event_id} AND project_id = {$project->id}")->toArray();
  61 +
  62 + $this->post['name']=$customers->name;
  63 + $this->post['email']=$customers->email;
  64 + $this->post['phone']=$customers->phone;
  65 + $this->post['address']=$customers->address;
  66 +
  67 + $this->sendMailData($template,$customers->toArray(),$eventEmail,$project);
  68 +
  69 + $event->last_delivery = date("Y-m-d H:i:s");
  70 + $event->delete();
50 71 }
51   - }
52   - print_r($event->toArray());
53 72  
54   - $customers = $project->findUsersByBirthday();
55   - foreach($customers as $customer){
56   - $this->post['name']=$customer->name;
57   - $this->post['email']=$customer->email;
58   - $this->post['phone']=$customer->phone;
59   - $this->post['address']=$customer->address;
60   - $this->sendMail($customer->toArray(),$project,$event,$event->eventEmail->toArray());
61   - }
62 73  
  74 +
  75 +
  76 + }
63 77 }
  78 +
64 79 }
65 80 }
66 81  
... ... @@ -116,13 +131,13 @@ class EventMailTask extends \Phalcon\CLI\Task
116 131 }
117 132 }
118 133  
119   - $users = $model->getSpyUsers($project, $this->modelsManager);
  134 + $users = $model->getSpyUsers( $this->modelsManager, $project);
120 135  
121 136 foreach( $users as $user){
122 137 $event_data = $model->spyTimeAfter($project, $user['id'])->toArray();
123 138 $customers = $customers_model->findFirst("id={$user['id']}");
124 139  
125   - if($customers->checkEventForUser($event->id, $project->id)){
  140 + if($customers instanceof customersEmailList && $customers->checkEventForUser($event->id, $project->id)){
126 141 $sum = 0;
127 142 foreach($event_data as $item_one){
128 143 $sum += (integer)$item_one['price']*$item_one['quantity'];
... ... @@ -146,7 +161,12 @@ class EventMailTask extends \Phalcon\CLI\Task
146 161 }
147 162 }
148 163  
149   -
  164 + /**
  165 + *TODO: $this->post array with dynamic data for static letters, need to change in some variable
  166 + *
  167 + *
  168 + *
  169 + **/
150 170 private function prepareEventData($item_data, $template){
151 171  
152 172 if($template['text_type']=='static' ){
... ... @@ -162,8 +182,9 @@ class EventMailTask extends \Phalcon\CLI\Task
162 182  
163 183 } else {
164 184  
165   - $template['text'] = $this->MyMailer->OfflineEvent->itemDynamicSet( $template, $item_data );
166   -
  185 + if( $item_data ) {
  186 + $template['text'] = $this->MyMailer->OfflineEvent->itemDynamicSet($template, $item_data);
  187 + }
167 188 $template['text'] = $this->MyMailer->OnlineEvent->dataSet( $template['text'], $this->post );
168 189  
169 190 }
... ... @@ -195,16 +216,6 @@ class EventMailTask extends \Phalcon\CLI\Task
195 216  
196 217  
197 218  
198   -
199   - public function dateEvent(){
200   - $date = date('d.m.y');
201   - }
202   -
203   - public function fieldEqualEvent(){
204   -
205   - }
206   -
207   -
208 219 private function getEventInfo($event, $customers,$project){
209 220 $info = \eventInfo::findFirst("event_id = {$event->id} AND customer_id = {$customers['id']}");
210 221  
... ... @@ -222,6 +233,14 @@ class EventMailTask extends \Phalcon\CLI\Task
222 233 }
223 234  
224 235  
  236 + /**
  237 + * send Email
  238 + * @params array $customers
  239 + * @params object $project
  240 + * @params object $offline_data_model
  241 + * @params array $event
  242 + * @params array $event_data
  243 + **/
225 244 public function sendMail($customers,$project,$offline_data_model, $event, $event_data = [] ){
226 245  
227 246 if($customers){
... ... @@ -232,33 +251,16 @@ class EventMailTask extends \Phalcon\CLI\Task
232 251  
233 252  
234 253  
235   - /* if(isset($get['item_data']) && !empty($get['item_data'])){
236   - $item_data = json_decode($get['item_data']);
237   -
238   - $template->text = $this->UTMParser->itemSet( $template->toArray(), $item_data );
239   -
240   - }*/
241   -
242   - $template['text'] = $this->prepareEventData($event_data, $template);
243   -
244   - $template['text'] = $this->UTMParser->parse($event, $template);
245   -
246   - $this->MyMailer->OfflineEvent->setFromName($project->name);
247   -
248   - $this->MyMailer->OfflineEvent->SendDelivery(new \delivery(),$template,$event,[$customers]);
249   -
  254 +// if(isset($get['item_data']) && !empty($get['item_data'])){
  255 +// $item_data = json_decode($get['item_data']);
  256 +//
  257 +// $template->text = $this->UTMParser->itemSet( $template->toArray(), $item_data );
  258 +//
  259 +// }
250 260  
  261 + $this->sendMailData($template,$customers,$event,$project,$event_data);
251 262  
252 263 $event_info->last_delivery = date("Y-m-d H:i:s");
253   -
254   -
255   - if($offline_data_model->recurring_val){
256   -
257   - $date = new DateTime( date("Y-m-d H:i:s"));
258   - $date->modify('+'.$offline_data_model->recurring_val.' '.$offline_data_model->recurring_val_type);
259   - $event_info->next_delivery = $date->format("Y-m-d H:i:s");
260   - }
261   -
262 264 $event_info->save();
263 265  
264 266 // $model = \delivery::find();
... ... @@ -273,9 +275,26 @@ class EventMailTask extends \Phalcon\CLI\Task
273 275 }
274 276  
275 277  
  278 + /**
  279 + * send Email
  280 + * @params array $customers
  281 + * @params object $project
  282 + * @params array $event
  283 + * @params array $event_data
  284 + * @params array $template
  285 + **/
276 286  
  287 + private function sendMailData($template,$customers,$event,$project,$event_data=[])
  288 + {
  289 + $template['text'] = $this->prepareEventData($event_data, $template);
277 290  
  291 + $template['text'] = $this->UTMParser->parse($event, $template);
278 292  
  293 + $this->MyMailer->OfflineEvent->setFromName($project->name);
  294 +
  295 + $this->MyMailer->OfflineEvent->SendDelivery(new \delivery(),$template,$event,[$customers]);
  296 +
  297 + }
279 298  
280 299  
281 300  
... ...
src/lib/models/eventInfo.php
... ... @@ -14,5 +14,17 @@ class eventInfo extends \Phalcon\Mvc\Model
14 14 return "event_info";
15 15 }
16 16  
  17 + static public function getEventsByTrigger($modelsManager, $project_id, $trigger){
  18 + $now = date("Y-m-d H:i:s");
17 19  
  20 + $phql = "
  21 + SELECT * FROM eventInfo
  22 + WHERE project_id = $project_id
  23 + AND event_trigger='{$trigger}'
  24 + AND next_delivery <= '$now'
  25 + AND last_delivery IS NULL OR last_delivery = ''";
  26 +
  27 + return $modelsManager->executeQuery($phql);
  28 +
  29 + }
18 30 }
19 31 \ No newline at end of file
... ...
src/lib/models/seriesOfLetters.php
... ... @@ -14,5 +14,26 @@ class seriesOfLetters extends \Phalcon\Mvc\Model
14 14 return "series_of_letters";
15 15 }
16 16  
  17 + public function getDays(){
  18 + return [
  19 + ['val'=>'1','name'=>'понедельник'],
  20 + ['val'=>'2','name'=>'вторник'],
  21 + ['val'=>'3','name'=>'среда'],
  22 + ['val'=>'4','name'=>'четверг'],
  23 + ['val'=>'5','name'=>'пятница'],
  24 + ['val'=>'6','name'=>'суббота'],
  25 + ['val'=>'7','name'=>'воскресенье'],
  26 + ];
  27 + }
  28 + public function isActive($first_delivery,$day){
  29 + if($first_delivery==$day){
  30 + return true;
  31 + }else{
  32 + return false;
  33 + }
  34 +
  35 +
  36 + }
  37 +
17 38  
18 39 }
19 40 \ No newline at end of file
... ...