EventMailTask.php 8.65 KB
<?php

class EventMailTask extends \Phalcon\CLI\Task
{
    private $projects;
    private $event_info;
    private $post;



    function mainAction(){


        $projects      = \projects::find();

        $eventsData = $this->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();
        $this->seriesOfLettersAction();
    }

    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();
                        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());
                        }


                        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 );




        } else {

            $template['text']  = $this->MyMailer->OfflineEvent->itemDynamicSet( $template, $item_data );

            $template['text'] = $this->MyMailer->OnlineEvent->dataSet( $template['text'], $this->post );

        }
        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,$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;
    }

}