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

    use common\models\Bookmark;
    use common\models\User;
    use yii\filters\AccessControl;
    use yii\filters\VerbFilter;
    use yii\web\Controller;
    use yii\web\Response;

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

        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 actionIndex()
        {
            return $this->render('bookmarks');
        }

        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($id)
        {

        }

        public function actionAddProject($id)
        {

        }

        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' => 'Закладка не найдена'];
            }
        }

    }