getEventData($projects); foreach($eventsData as $project_id => $events){ foreach($events as $event){ echo "call function \n"; $this->eventMailerAction($project_id, $event); } } } public function startEventsAction(){ $this->actionEventAction(); $this->orderTimeAfterAction(); } public function actionEventAction(){ $projects = $this->getActiveProjects(); foreach($projects as $project){ $events = $this->eventByTrigger($project,'action'); foreach($events as $event){ if(!$event->isNew() ){ if(!$event->isRecurring()){ continue; } } print_r($event->toArray()); switch ($event->event_action) { case 'birthday': $customers = $project->findUsersByBirthday()->toArray(); $this->sendMail($customers,$project,$event,$event->eventEmail->toArray()); break; } } } } public function orderTimeAfterAction(){ $projects = $this->getActiveProjects(); $model = new \spyEvent(); $customers_model = new customersEmailList(); foreach($projects as $project){ $events = $this->eventByTrigger($project,'order_time_after'); foreach($events as $event){ if(!$event->isNew() ){ if(!$event->isRecurring()){ continue; } } $users = $model->getSpyUsers($project, $this->modelsManager); 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)){ $sum = 0; foreach($event_data as $item_one){ $sum += (integer)$item_one['price']*$item_one['quantity']; } $this->post['name']=$customers->name; $this->post['email']=$customers->email; $this->post['phone']=$customers->phone; $this->post['address']=$customers->address; $this->post['sum']=$sum; $this->sendMail([$customers->toArray()],$project,$event,$event->eventEmail->toArray(),$event_data); } } //$customers = $project->findUsersTimeAfter()->toArray(); } } } private function prepareEventData($item_data, $template){ if($template['text_type']=='static' ){ if( $item_data ){ $template['text'] = $this->MyMailer->OnlineEvent->itemSet( $template, $item_data ); } $template['text'] = $this->MyMailer->OnlineEvent->dataSet( $template->text, $this->post ); print $template['text'] ; } else { $template['text'] = $this->MyMailer->OfflineEvent->itemDynamicSet( $template, $item_data ); $template['text'] = $this->MyMailer->OnlineEvent->dataSet( $template['text'], $this->post ); print $template['text'] ; } return $template['text']; } private function eventByTrigger($project, $trigger){ $result = array(); foreach($project->offlineEvents() as $eventOffline){ $offlineData = $eventOffline->selectByTrigger($trigger); foreach($offlineData as $data){ $result[] = $data; } } return $result; } private function getActiveProjects(){ return \projects::find("status = 'active'"); } 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']}"); if($info instanceof \eventInfo){ return $info; } else { $info = new \eventInfo(); $info->customer_id = $customers['id']; $info->event_id = $event->id; $info->project_id = $project->id; $info->event_trigger = $event->event_trigger; $info->save(); return $info; } } public function sendMail($customers,$project,$offline_data_model, $event, $event_data = [] ){ if($customers){ $event_info = $this->getEventInfo($offline_data_model,$customers[0],$project); $template = \emailTemplates::findFirst("event_id = {$event['id']} AND project_id = {$project->id}")->toArray(); /* 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); $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(); // foreach($model->toArray() as $data){ // $result = $this->MyMailer->getCampaignDeliveryStats( $data['campaign_id']); // // $result['status'] = $this->MyMailer->getDeliveryStatus( $data['campaign_id']); // print_r($result); // } // $model->status = $this->MyMailer->getCampaignDeliveryStats( $id); } } public function getEventData($projects){ $eventsData = array(); $date = date('d.m.Y'); foreach($projects as $project){ $events = \eventEmail::find("email_type='event_offline' AND project_id=$project->id")->toArray(); if( $events ){ foreach($events as $k => $v){ $conditions = \eventOfflineData::find("event_id = {$v['id']}")->toArray(); if(!empty($conditions)){ $events[$k]['conditions'] = $conditions[0]; } else { $events[$k]['conditions'] = array(); } if(!empty($events[$k]['conditions']['event_trigger']) ) { if($events[$k]['conditions']['event_trigger'] == 'birthday'){ $events[$k]['users'] = \customersEmailList::find("project_id=$project->id AND birthday = '$date'")->toArray(); } continue; } if(!empty($events[$k]['conditions']['event_date']) && $events[$k]['conditions']['event_date'] == $date ) { $events[$k]['users'] = \customersEmailList::find("project_id=$project->id")->toArray(); echo "will send today"; } if(!empty($events[$k]['conditions']['equal_fields_one'])){ $events[$k]['users'] = \customersEmailList::find("project_id=$project->id AND {$events[$k]['conditions']['equal_fields_one']} = '{$events[$k]['conditions']['equal_fields_two']}'")->toArray(); } } $eventsData[$project->id] = $events; } } return $eventsData; } }