FeedbackController.php 6.17 KB
<?php
    
    namespace artbox\core\controllers;
    
    use artbox\core\widgets\FeedbackWidget;
    use Yii;
    use artbox\core\models\Feedback;
    use yii\data\ActiveDataProvider;
    use yii\filters\AccessControl;
    use yii\helpers\Html;
    use yii\web\Controller;
    use yii\web\NotFoundHttpException;
    use yii\filters\VerbFilter;
    use yii\web\Response;

    /**
     * FeedbackController implements the CRUD actions for Feedback model.
     */
    class FeedbackController extends Controller
    {
        /**
         * @return bool|string
         */
        public function getViewPath()
        {
            return \Yii::getAlias('@artbox/core/views/feedback');
        }
        /**
         * @inheritdoc
         */
        public function behaviors()
        {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'rules' => [
                        [
                            'actions' => [
                                'login',
                                'error',
                            ],
                            'allow'   => true,
                        ],
                        [
                            'allow' => true,
                            'roles' => [ '@' ],
                        ],
                    ],
                ],
                'verbs'  => [
                    'class'   => VerbFilter::className(),
                    'actions' => [//                        'change-password' => [ 'post' ],
                    ],
                ],
            ];
        }
    
        /**
         * Lists all Feedback models.
         *
         * @return mixed
         */
        public function actionIndex()
        {
            $dataProvider = new ActiveDataProvider(
                [
                    'query' => Feedback::find()->orderBy('created_at DESC'),
                ]
            );
        
            return $this->render(
                'index',
                [
                    'dataProvider' => $dataProvider,
                ]
            );
        }
    
        /**
         * Displays a single Feedback model.
         *
         * @param integer $id
         *
         * @return mixed
         */
        public function actionView($id)
        {
            $model = $this->findModel($id);
        
            $model->status = true;
            $model->save(false, [ 'status' ]);
        
            return $this->render(
                'view',
                [
                    'model' => $model,
                ]
            );
        }
    
        /**
         * Creates a new Feedback model.
         * If creation is successful, the browser will be redirected to the 'view' page.
         *
         * @return mixed
         */
        public function actionCreate()
        {
            $model = new Feedback();
        
            if ($model->load(Yii::$app->request->post()) && $model->save()) {
                return $this->redirect(
                    [
                        'view',
                        'id' => $model->id,
                    ]
                );
            } else {
                return $this->render(
                    'create',
                    [
                        'model' => $model,
                    ]
                );
            }
        }
    
        /**
         * Updates an existing Feedback model.
         * If update is successful, the browser will be redirected to the 'view' page.
         *
         * @param integer $id
         *
         * @return mixed
         */
        public function actionUpdate($id)
        {
            $model = $this->findModel($id);
        
            $model->status = true;
            $model->save(false, [ 'status' ]);
        
            if ($model->load(Yii::$app->request->post()) && $model->save()) {
                return $this->redirect('index');
            } else {
                return $this->render(
                    'update',
                    [
                        'model' => $model,
                    ]
                );
            }
        }
    
        /**
         * Deletes an existing Feedback model.
         * If deletion is successful, the browser will be redirected to the 'index' page.
         *
         * @param integer $id
         *
         * @return mixed
         */
        public function actionDelete($id)
        {
            $this->findModel($id)
                 ->delete();
        
            return $this->redirect([ 'index' ]);
        }
    
        public function actionViewed($id)
        {
            if (Yii::$app->request->isPost) {
                $model = $this->findModel($id);
            
                Yii::$app->response->format = Response::FORMAT_JSON;
            
                $model->status = true;
                if ($model->save(false, [ 'status' ])) {
                
                    $widget = FeedbackWidget::widget();
                
                    return [
                        'text'    => Html::tag(
                            'span',
                            '',
                            [
                                'class' => 'glyphicon glyphicon-ok',
                            ]
                        ),
                        'message' => [
                            'title' => Yii::t('core', 'Notification') . ':',
                            'text'  => Yii::t('core', 'Status changed'),
                        ],
                        'widget'  => $widget,
                    ];
                }
            }
            return [];
        }
    
        /**
         * Finds the Feedback model based on its primary key value.
         * If the model is not found, a 404 HTTP exception will be thrown.
         *
         * @param integer $id
         *
         * @return Feedback the loaded model
         * @throws NotFoundHttpException if the model cannot be found
         */
        protected function findModel($id)
        {
            if (( $model = Feedback::findOne($id) ) !== null) {
                return $model;
            } else {
                throw new NotFoundHttpException('The requested page does not exist.');
            }
        }
    }