BookmarksController.php 13.6 KB
<?php
    namespace frontend\controllers;

    use common\models\Bookmark;
    use common\models\Project;
    use common\models\User;
    use frontend\models\SearchPerformerForm;
    use yii\data\ActiveDataProvider;
    use yii\filters\AccessControl;
    use yii\filters\VerbFilter;
    use yii\web\Controller;
    use yii\web\Response;

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

        public $enableCsrfValidation = false;

        public $defaultAction = 'performer';

        public function behaviors()
        {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'rules' => [
                        [
                            'allow' => true,
                            'roles' => [ '@' ],
                        ],
                    ],
                ],
                'verbs'  => [
                    'class'   => VerbFilter::className(),
                    'actions' => [
                        'add-performer'    => [ 'post' ],
                        'add-customer'     => [ 'post' ],
                        'add-project'      => [ 'post' ],
                        'add-vacancy'      => [ 'post' ],
                        'remove-performer' => [ 'post' ],
                        'remove-customer'  => [ 'post' ],
                        'remove-project'   => [ 'post' ],
                        'remove-vacancy'   => [ 'post' ],
                    ],
                ],
            ];
        }

        public function actionPerformer()
        {
            /**
             * @var User $user
             */
            $user = \Yii::$app->user->identity;
            $dataProvider = new ActiveDataProvider([
                'query'      => $user->getBookmarksPerformers(),
                'pagination' => [
                    'pageSize' => 10,
                ],
            ]);
            return $this->render('bookmarks-performer', [
                'dataProvider' => $dataProvider,
                'user'         => $user,
            ]);
        }

        public function actionCustomer()
        {
            /**
             * @var User $user
             */
            $user = \Yii::$app->user->identity;
            $dataProvider = new ActiveDataProvider([
                'query'      => $user->getBookmarksCustomers(),
                'pagination' => [
                    'pageSize' => 10,
                ],
            ]);
            return $this->render('bookmarks-customer', [
                'dataProvider' => $dataProvider,
                'user'         => $user,
            ]);
        }

        public function actionProject()
        {
            /**
             * @var User $user
             */
            $user = \Yii::$app->user->identity;
            $dataProvider = new ActiveDataProvider([
                'query'      => $user->getBookmarksProjects()->with('comments'),
                'pagination' => [
                    'pageSize' => 10,
                ],
            ]);
            return $this->render('bookmarks-project', [
                'dataProvider' => $dataProvider,
                'user'         => $user,
            ]);
        }

        public function actionVacancy()
        {
            /**
             * @var User $user
             */
            $user = \Yii::$app->user->identity;
            $dataProvider = new ActiveDataProvider([
                'query'      => $user->getBookmarksVacancies(),
                'pagination' => [
                    'pageSize' => 10,
                ],
            ]);
            return $this->render('bookmarks-vacancy', [
                'dataProvider' => $dataProvider,
                'user'         => $user,
            ]);
        }

        public function actionAddPerformer()
        {
            $response = \Yii::$app->response;
            $response->format = Response::FORMAT_JSON;
            $model_id = \Yii::$app->request->post('id');
            if(empty( $model_id )) {
                return [ 'error' => 'Ошибка добавления. Отсутствует id исполнителя' ];
            }
            $user = User::findOne($model_id);
            if(empty( $user )) {
                return [ 'error' => 'Ошибка добавления. Исполнитель не найден.' ];
            }
            $model = $user->className();
            $user_id = \Yii::$app->user->getId();
            $type = Bookmark::TYPE_PERFORMER;
            if(Bookmark::findOne([
                'model'    => $model,
                'model_id' => $model_id,
                'user_id'  => $user_id,
                'type'     => $type,
            ])
            ) {
                return [ 'error' => 'Ошибка добавления. Исполнитель уже добавлен.' ];
            }
            $bookmark = new Bookmark([
                'model'    => $model,
                'model_id' => $model_id,
                'user_id'  => $user_id,
                'type'     => $type,
            ]);
            if($bookmark->save()) {
                $result = $this->renderAjax('//site/forms-modal-fav', [
                    'message' => 'Добавлено в закладки.',
                    'image'   => $user->userInfo->image,
                    'name'    => $user->name,
                ]);
                return [ 'result' => $result ];
            } else {
                return [ 'error' => 'Ошибка добавления.' ];
            }
        }

        public function actionAddCustomer()
        {
            $response = \Yii::$app->response;
            $response->format = Response::FORMAT_JSON;
            $model_id = \Yii::$app->request->post('id');
            if(empty( $model_id )) {
                return [ 'error' => 'Ошибка добавления. Отсутствует id заказчика' ];
            }
            $user = User::findOne($model_id);
            if(empty( $user )) {
                return [ 'error' => 'Ошибка добавления. Заказчик не найден.' ];
            }
            $model = $user->className();
            $user_id = \Yii::$app->user->getId();
            $type = Bookmark::TYPE_CUSTOMER;
            if(Bookmark::findOne([
                'model'    => $model,
                'model_id' => $model_id,
                'user_id'  => $user_id,
                'type'     => $type,
            ])
            ) {
                return [ 'error' => 'Ошибка добавления. Заказчик уже добавлен.' ];
            }
            $bookmark = new Bookmark([
                'model'    => $model,
                'model_id' => $model_id,
                'user_id'  => $user_id,
                'type'     => $type,
            ]);
            if($bookmark->save()) {
                $result = $this->renderAjax('//site/forms-modal-fav', [
                    'message' => 'Добавлено в закладки.',
                    'image'   => $user->userInfo->image,
                    'name'    => $user->name,
                ]);
                return [ 'result' => $result ];
            } else {
                return [ 'error' => 'Ошибка добавления.' ];
            }
        }

        public function actionAddProject()
        {
            $response = \Yii::$app->response;
            $response->format = Response::FORMAT_JSON;
            $model_id = \Yii::$app->request->post('id');
            if(empty( $model_id )) {
                return [ 'error' => 'Ошибка добавления. Отсутствует id заказа' ];
            }
            /**
             * @var Project $project
             */
            $project = Project::findOne($model_id);
            if(empty( $project )) {
                return [ 'error' => 'Ошибка добавления. Заказ не найден.' ];
            }
            $model = $project->className();
            $user_id = \Yii::$app->user->getId();
            $type = Bookmark::TYPE_PROJECT;
            if(Bookmark::findOne([
                'model'    => $model,
                'model_id' => $model_id,
                'user_id'  => $user_id,
                'type'     => $type,
            ])
            ) {
                return [ 'error' => 'Ошибка добавления. Заказ уже добавлен.' ];
            }
            $bookmark = new Bookmark([
                'model'    => $model,
                'model_id' => $model_id,
                'user_id'  => $user_id,
                'type'     => $type,
            ]);
            if($bookmark->save()) {
                $result = $this->renderAjax('//site/forms-modal-fav', [
                    'message' => 'Добавлено в закладки.',
                    'image'   => $project->user->userInfo->image,
                    'name'    => $project->name,
                ]);
                return [ 'result' => $result ];
            } else {
                return [ 'error' => 'Ошибка добавления.' ];
            }
        }

        public function actionAddVacancy($id)
        {

        }

        public function actionRemovePerformer()
        {
            $response = \Yii::$app->response;
            $response->format = Response::FORMAT_JSON;
            $model_id = \Yii::$app->request->post('id');
            if(empty( $model_id )) {
                return [ 'error' => 'Ошибка удаления. Отсутствует id исполнителя' ];
            }
            $user = User::findOne($model_id);
            if(empty( $user )) {
                return [ 'error' => 'Ошибка добавления. Исполнитель не найден.' ];
            }
            $model = $user->className();
            $user_id = \Yii::$app->user->getId();
            $type = Bookmark::TYPE_PERFORMER;
            /**
             * @var Bookmark $bookmark
             */
            $bookmark = Bookmark::findOne([
                'model'    => $model,
                'model_id' => $model_id,
                'user_id'  => $user_id,
                'type'     => $type,
            ]);
            if(!empty( $bookmark )) {
                if($bookmark->delete()) {
                    return [ 'message' => 'Закладка успешно удалена' ];
                } else {
                    return [ 'error' => 'Ошибка при удалении' ];
                }
            } else {
                return [ 'error' => 'Закладка не найдена' ];
            }
        }

        public function actionRemoveCustomer()
        {
            $response = \Yii::$app->response;
            $response->format = Response::FORMAT_JSON;
            $model_id = \Yii::$app->request->post('id');
            if(empty( $model_id )) {
                return [ 'error' => 'Ошибка удаления. Отсутствует id заказчика' ];
            }
            $user = User::findOne($model_id);
            if(empty( $user )) {
                return [ 'error' => 'Ошибка добавления. Заказчик не найден.' ];
            }
            $model = $user->className();
            $user_id = \Yii::$app->user->getId();
            $type = Bookmark::TYPE_CUSTOMER;
            /**
             * @var Bookmark $bookmark
             */
            $bookmark = Bookmark::findOne([
                'model'    => $model,
                'model_id' => $model_id,
                'user_id'  => $user_id,
                'type'     => $type,
            ]);
            if(!empty( $bookmark )) {
                if($bookmark->delete()) {
                    return [ 'message' => 'Закладка успешно удалена' ];
                } else {
                    return [ 'error' => 'Ошибка при удалении' ];
                }
            } else {
                return [ 'error' => 'Закладка не найдена' ];
            }
        }

        public function actionRemoveProject()
        {
            $response = \Yii::$app->response;
            $response->format = Response::FORMAT_JSON;
            $model_id = \Yii::$app->request->post('id');
            if(empty( $model_id )) {
                return [ 'error' => 'Ошибка удаления. Отсутствует id заказа' ];
            }
            $project = Project::findOne($model_id);
            if(empty( $project )) {
                return [ 'error' => 'Ошибка добавления. Заказ не найден.' ];
            }
            $model = $project->className();
            $user_id = \Yii::$app->user->getId();
            $type = Bookmark::TYPE_PROJECT;
            /**
             * @var Bookmark $bookmark
             */
            $bookmark = Bookmark::findOne([
                'model'    => $model,
                'model_id' => $model_id,
                'user_id'  => $user_id,
                'type'     => $type,
            ]);
            if(!empty( $bookmark )) {
                if($bookmark->delete()) {
                    return [ 'message' => 'Закладка успешно удалена' ];
                } else {
                    return [ 'error' => 'Ошибка при удалении' ];
                }
            } else {
                return [ 'error' => 'Закладка не найдена' ];
            }
        }

    }