Blame view

common/modules/comment/controllers/DefaultController.php 5.13 KB
c05bf005   Yarik   Comment added
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  <?php
      namespace common\modules\comment\controllers;
      
      use common\modules\comment\models\CommentModel;
      use common\modules\comment\models\RatingModel;
      use common\modules\comment\Module;
      use yii\filters\AccessControl;
      use yii\filters\VerbFilter;
      use yii\helpers\Json;
      use yii\web\Controller;
      use yii\web\NotFoundHttpException;
      use yii\web\Response;
      
      class DefaultController extends Controller
      {
          
          /**
           * Returns a list of behaviors that this component should behave as.
           * @return array
           */
          public function behaviors()
          {
              return [
                  'verbs'  => [
                      'class'   => VerbFilter::className(),
                      'actions' => [
                          'create' => [ 'post' ],
                          'delete' => [
                              'post',
                              'delete',
                          ],
                      ],
                  ],
                  'access' => [
                      'class' => AccessControl::className(),
                      'only'  => [ 'delete' ],
                      'rules' => [
                          [
                              'allow' => true,
                              'roles' => [ '@' ],
                          ],
                      ],
                  ],
              ];
          }
          
          /**
           * Create comment.
           * @return array|null|Response
           */
          public function actionCreate(string $entity)
          {
              \Yii::$app->response->format = Response::FORMAT_JSON;
              /* @var $module Module */
              $module = \Yii::$app->getModule(Module::$name);
              $entity_data_json = \Yii::$app->getSecurity()
                                            ->decryptByKey($entity, $module::$encryptionKey);
              if($entity_data_json != false) {
                  $entity_data = Json::decode($entity_data_json);
                  $commentModelClass = $module->commentModelClass;
                  /**
                   * @var CommentModel $model
                   */
17ca60dd   Yarik   Added comments to...
64
65
66
                  $model = new $commentModelClass([
                      'scenario' => \Yii::$app->user->getIsGuest() ? $commentModelClass::SCENARIO_GUEST : $commentModelClass::SCENARIO_USER,
                  ]);
c05bf005   Yarik   Comment added
67
68
69
                  if($model->load(\Yii::$app->request->post())) {
                      $model->setAttributes($entity_data);
                      if($model->save()) {
17ca60dd   Yarik   Added comments to...
70
                          if(empty( $model->artbox_comment_pid ) && $module::$enableRating) {
c05bf005   Yarik   Comment added
71
72
73
74
75
                              $ratingModelClass = $module->ratingModelClass;
                              /**
                               * @var RatingModel $rating
                               */
                              $rating = new $ratingModelClass([
17ca60dd   Yarik   Added comments to...
76
                                  'model'    => $model::className(),
c05bf005   Yarik   Comment added
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
                                  'model_id' => $model->primaryKey,
                              ]);
                              if($rating->load(\Yii::$app->request->post())) {
                                  $rating->save();
                              }
                          }
                          \Yii::$app->session->setFlash('artbox_comment_success', \Yii::t('artbox-comment', 'Comment posted'));
                          return [ 'status' => 'success' ];
                      } else {
                          return [
                              'status' => 'error',
                              'errors' => $model->getFirstErrors(),
                          ];
                      }
                  }
              }
              return [
                  'status'  => 'error',
17ca60dd   Yarik   Added comments to...
95
                  'message' => \Yii::t('artbox-comment', 'Oops, something went wrong. Please try again later.'),
c05bf005   Yarik   Comment added
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
              ];
          }
          
          /**
           * Delete comment.
           *
           * @param integer $id Comment ID
           *
           * @return string Comment text
           */
          public function actionDelete($id)
          {
              \Yii::$app->response->format = Response::FORMAT_JSON;
              $model = $this->findModel($id);
              if($model->deleteComment()) {
17ca60dd   Yarik   Added comments to...
111
112
113
                  return [
                      'status'  => 'success',
                      'message' => \Yii::t('yii2mod.comments', 'Comment has been deleted.'),
c05bf005   Yarik   Comment added
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
                  ];
              } else {
                  \Yii::$app->response->setStatusCode(500);
                  return \Yii::t('yii2mod.comments', 'Comment has not been deleted. Please try again!');
              }
          }
          
          /**
           * Find model by ID.
           *
           * @param integer|array $id Comment ID
           *
           * @return CommentModel
           * @throws NotFoundHttpException
           */
          protected function findModel(int $id): CommentModel
          {
              /** @var CommentModel $model */
              $commentModelClass = \Yii::$app->getModule(Module::$name)->commentModelClass;
              if(( $model = $commentModelClass::findOne($id) ) !== NULL) {
                  return $model;
              } else {
17ca60dd   Yarik   Added comments to...
136
                  throw new NotFoundHttpException(\Yii::t('yii2mod.comments', 'The requested page does not exist.'));
c05bf005   Yarik   Comment added
137
138
139
              }
          }
      }