AjaxController.php 7.8 KB
<?php
    namespace frontend\controllers;

    use common\models\Feedback;
    use common\models\FeedbackCompany;
    use common\models\Portfolio;
    use common\models\PortfolioUser;
    use common\models\User;
    use common\models\UserSearch;
    use yii\db\ActiveRecord;
    use yii\web\Controller;

    /**
     * Site controller
     */
    class AjaxController extends Controller
    {

        public $enableCsrfValidation = false;

        public function behaviors()
        {
            return [

            ];
        }

        public function actionProjectUser()
        {
            $ids = json_decode(\Yii::$app->request->get('ids'));
            if(!empty(\Yii::$app->user->id)) {
                array_push($ids, \Yii::$app->user->id);
            }
            $model = new UserSearch();
            $dataProvider = $model->search(\Yii::$app->request->queryParams);
            $dataProvider->query->andFilterWhere([
                'not in',
                'id',
                $ids,
            ]);
            $dataProvider->query->andWhere([
                'user_info.is_freelancer' => 1,
                'type'                    => 1,
            ]);
            $dataProvider->query->with('specializations');
            return $this->renderAjax('users', [
                'model'        => $model,
                'dataProvider' => $dataProvider,
            ]);
        }

        public function actionUserInput()
        {
            /**
             * @var ActiveRecord $model
             */
            $request = \Yii::$app->request;
            $response = \Yii::$app->response;
            $response->format = $response::FORMAT_JSON;
            $user_id = $request->get('id');
            $model = $request->get('model');
            $component = $request->get('component');
            if(empty( $user_id )) {
                return [ 'error' => 'User ID must be set' ];
            } elseif(empty( $model )) {
                return [ 'error' => 'Model must be set' ];
            }
            $user = User::find()
                        ->where([
                            'id'                      => $user_id,
                            'type'                    => 1,
                            'user_info.is_freelancer' => 1,
                        ])
                        ->joinWith('userInfo')
                        ->one();
            if(empty( $user )) {
                return [ 'error' => 'User not found' ];
            }
            if(!class_exists($model)) {
                return [ 'error' => 'Class not found' ];
            }
            $model = new $model();
            if(!$model instanceof ActiveRecord) {
                return [ 'error' => 'Class must extend ActiveRecord' ];
            }
            if(!$model->hasAttribute('user_id')) {
                return [ 'error' => 'Class must have user_id attribute' ];
            }
            $html = $this->renderPartial('project_user', [
                'model' => $model,
                'user'  => $user,
            ]);
            return [
                'result' => [
                    'html'      => $html,
                    'id'        => $user->id,
                    'firstname' => $user->firstname,
                    'lastname'  => $user->lastname,
                    'component' => $component,
                ],
            ];
        }

        public function actionPortfolioUserRemove()
        {
            $request = \Yii::$app->request;
            $response = \Yii::$app->response;
            $response->format = $response::FORMAT_JSON;
            $post = $request->post();
            if(empty( $post[ 'user_id' ] ) || empty( $post[ 'portfolio_id' ] )) {
                return [ 'error' => 'user_id и portfolio_id должны быть заполнены.' ];
            }
            $user_id = $post[ 'user_id' ];
            $portfolio_id = $post[ 'portfolio_id' ];
            $portfolio = Portfolio::find()
                                  ->where([
                                      'portfolio_id' => $portfolio_id,
                                      'user_id'      => \Yii::$app->user->id,
                                  ])
                                  ->one();
            if(empty( $portfolio )) {
                return [ 'error' => 'Запись не найдена' ];
            }
            $user = User::find()
                        ->where([ 'id' => $user_id ])
                        ->one();
            if(empty( $user )) {
                return [ 'error' => 'Пользователь не найден' ];
            }
            $portfolio_user = PortfolioUser::find()
                                           ->where([
                                               'portfolio_id' => $portfolio->portfolio_id,
                                               'user_id'      => $user->id,
                                               'status'       => 1,
                                           ])
                                           ->one();
            if(empty( $portfolio_user )) {
                return [ 'error' => 'Пользователь не относится к данной записи' ];
            }
            if($portfolio_user->delete()) {
                return [
                    'result' => [
                        'message'      => 'Пользователь удален',
                        'user_id'      => $user->id,
                        'portfolio_id' => $portfolio->portfolio_id,
                    ],
                ];
            } else {
                return [ 'error' => 'Ошибка удаления' ];
            }
        }

        public function actionGetFeedback()
        {
            $request = \Yii::$app->request;
            $response = \Yii::$app->response;
            $response->format = $response::FORMAT_JSON;
            $model = new Feedback();
            if(!empty( \Yii::$app->user->identity )) {
                /**
                 * @var User $user
                 */
                $user = \Yii::$app->user->identity;
                $phones = $user->getPhones();
                $model->name = $user->name;
                if(!empty( $phones )) {
                    $model->phone = $phones[ 1 ]['phone'];
                }
                if(!empty( $user->email )) {
                    $model->email = $user->email;
                }
            }
            $form = $this->renderAjax('feedback_form', [ 'model' => $model ]);
            return ['result' => ['form' => $form]];
        }

        public function actionPostFeedback()
        {
            $request = \Yii::$app->request;
            $response = \Yii::$app->response;
            $response->format = $response::FORMAT_JSON;
            $model = new Feedback();
            if($model->load($request->post())) {
                if($model->save()) {
                    return ['result' => ['message' => 'Вопрос успешно отправлен, ответ будет отправлен на Вашу почту']];
                }
            }
            $form = $this->renderAjax('feedback_form', [ 'model' => $model ]);
            return ['error' => 'Error detected', 'result' => ['form' => $form]];
        }

        public function actionFeedbackCompany()
        {
            $request = \Yii::$app->request;
            $response = \Yii::$app->response;
            $response->format = $response::FORMAT_JSON;
            $model = new FeedbackCompany(['ip' => $request->userIP]);
            if($model->load($request->post())) {
                if($model->save()) {
                    return ['result' => ['message' => 'Вопрос успешно отправлен, представители компании свяжутся с Вами в ближайшее время']];
                }
            }
            return ['error' => 'Ошибка формы'];
        }

    }