SiteController.php 7.12 KB
<?php
    
    namespace frontend\controllers;
    
    use common\models\Feedback;
    use common\models\Settings;
    use common\models\Slider;
    use Yii;
    use yii\filters\VerbFilter;
    use yii\swiftmailer\Mailer;
    use yii\web\BadRequestHttpException;
    use yii\web\Controller;
    use yii\web\Response;
    use common\models\Objectkb;
    
    /**
     * Site controller
     */
    class SiteController extends Controller
    {
        /**
         * @inheritdoc
         */
        public function actions()
        {
            return [
                'error' => [
                    'class' => 'yii\web\ErrorAction',
                ],
            ];
        }
        
        /**
         * @inheritdoc
         */
        public function behaviors()
        {
            return [
                'verbs' => [
                    'class'   => VerbFilter::className(),
                    'actions' => [
                        'feedback' => [ 'post' ],
                    ],
                ],
            ];
        }
        
        /**
         * Displays homepage.
         *
         * @return mixed
         */
        public function actionIndex()
        {
            
            $slider = Slider::find()
                            ->with("slides.lang.image")
                            ->where(['on_home_page'=>true])
                            ->one();

            $objects = Objectkb::find()
                ->with('lang.alias')
                ->where([
                    'id' => array(27,23,24,8)
                ])->all();

            return $this->render(
                'index',
                [
                    'slider' => $slider,
                    'objects' => $objects,
                ]
            );
        }
        
        /**
         * Displays contact page.
         *
         * @return mixed
         */
        public function actionContact()
        {
            $contact = new Feedback();
            return $this->render(
                'contact',
                [
                    'contact' => $contact,
                ]
            );
        }
        
        /**
         * Displays about page.
         *
         * @return mixed
         */
        public function actionAbout()
        {
            return $this->render('about');
        }
        
        public function actionIndividual()
        {
            return $this->render('individual');
        } // частное лицо
        
        public function actionLegal()
        {
            return $this->render('legal');
        } // юридическое
        
        public function actionGreen()
        {
            return $this->render('green');
        } // зелёный тариф
        
        public function actionMediaAbout()
        {
            return $this->render('media-about');
        } // СМИ о нас
        
        public function actionBlog()
        {
            return $this->render('blog');
        } // блог
        
        /**
         * Action to view robots.txt file dinamycli
         *
         * @return string
         */
        public function actionRobots()
        {
            $response = \Yii::$app->response;
            /**
             * @var Settings $settings
             */
            $settings = Settings::find()
                                ->one();
            $temp = tmpfile();
            fwrite($temp, $settings->robots);
            $meta = stream_get_meta_data($temp);
            $response->format = $response::FORMAT_RAW;
            $response->headers->set('Content-Type', 'text/plain');
            return $this->renderFile($meta[ 'uri' ]);
        }
        
        public function actionFeedback()
        {
            Yii::$app->response->format = Response::FORMAT_JSON;
            
            /**
             * @var Mailer $mailer
             */
            $mailer = \Yii::$app->get('smtpmailer');
            $settings = Settings::getInstance();
            
            if (empty(Yii::$app->request->post())) {
                throw new BadRequestHttpException();
            } else {
                
                switch (Yii::$app->request->post('topic')){
                    case Feedback::SCENARIO_FEEDBACK :
                        $model = new Feedback(['scenario' => Feedback::SCENARIO_FEEDBACK]);
                        $view = 'feedback';
                        $isLoaded = $model->load(Yii::$app->request->post());
                        break;
                        
                    case Feedback::SCENARIO_CALLBACK :
                        $model = new Feedback(['scenario' => Feedback::SCENARIO_CALLBACK]);
                        $view = 'feedback';
                        $isLoaded = $model->load(Yii::$app->request->post());
                        break;
                        
                    case Feedback::SCENARIO_CALCULATOR:
                        $model = new Feedback(['scenario' => Feedback::SCENARIO_CALCULATOR]);
                        $view = 'calculator';
                        $isLoaded = $model->load(Yii::$app->request->post());
                        $newPost = [];
                        foreach (Feedback::calculator_attributes as $calculator_attribute_name){
                            $calculator_attribute_value = Yii::$app->request->post($calculator_attribute_name);
                            if( isset($calculator_attribute_value) && !empty($calculator_attribute_value) ){
                                $newPost[$calculator_attribute_name] = $calculator_attribute_value;
                            }
                        }
                        $model->setCalcJsonInfo($newPost);
                        break;
                        
                    default:
                        $model = new Feedback();
                        $view = 'feedback';
                        $isLoaded = $model->load(Yii::$app->request->post());
                }
                
                
                if ($isLoaded && $model->save()) {
                    
                    $mailer->compose(
                        $view,
                        [
                            'model' => $model,
                        ]
                    )
                           ->setFrom('artbox@domain.com')//                           ->setTo($settings->email)
                           ->setTo(
                               [
                                   'tamerlan8.05.92@gmail.com',
                                   'mpav@artweb.ua',
                               ]
                            )
                           ->setSubject(\Yii::t('app', 'Feedback'))
                           ->send();
                    
                    return [
                        'success' => true,
                        'message' => 'Success message',
                        'alert'   => $this->renderPartial('success_alert'),
                    ];
                } else {
                    Yii::$app->response->setStatusCode(500);
                    return [
                        'success' => false,
                        'error'   => $model->errors,
                    ];
                }
            }
        }
    }