/** * Creating the post of given category ID, forum ID and thread ID. * This can be reply to selected post of given ID. * @param integer $cid category's ID * @param integer $fid forum's ID * @param integer $tid thread's ID * @param integer $pid ID of post to reply to * @return string|\yii\web\Response */ public function actionPost($cid = null, $fid = null, $tid = null, $pid = null) { if (Yii::$app->user->isGuest) { $this->warning(Yii::t('podium/flash', 'Please sign in to update the thread.')); return $this->redirect(['account/login']); } $thread = Thread::find()->where(['id' => $tid, 'category_id' => $cid, 'forum_id' => $fid])->limit(1)->one(); if (empty($thread)) { $this->error(Yii::t('podium/flash', 'Sorry! We can not find the thread you are looking for.')); return $this->redirect(['default/index']); } if ($thread->locked == 1 && !User::can(Rbac::PERM_UPDATE_THREAD, ['item' => $thread])) { $this->info(Yii::t('podium/flash', 'This thread is locked.')); return $this->redirect(['default/thread', 'cid' => $thread->forum->category->id, 'fid' => $thread->forum->id, 'id' => $thread->id, 'slug' => $thread->slug]); } if (!User::can(Rbac::PERM_CREATE_POST)) { $this->error(Yii::t('podium/flash', 'Sorry! You do not have the required permission to perform this action.')); return $this->redirect(['default/index']); } $model = new Post(); $model->subscribe = 1; $postData = Yii::$app->request->post(); $replyFor = null; if (is_numeric($pid) && $pid > 0) { $replyFor = Post::find()->where(['id' => $pid])->limit(1)->one(); if ($replyFor) { $model->content = Helper::prepareQuote($replyFor, Yii::$app->request->post('quote')); } } $preview = ''; $previous = Post::find()->where(['thread_id' => $thread->id])->orderBy(['id' => SORT_DESC])->limit(1)->one(); if ($model->load($postData)) { $model->thread_id = $thread->id; $model->forum_id = $thread->forum->id; $model->author_id = User::loggedId(); if ($model->validate()) { if (isset($postData['preview-button'])) { $preview = $model->content; } else { if ($model->podiumNew($previous)) { $this->success(Yii::t('podium/flash', 'New reply has been added.')); if (!empty($previous) && $previous->author_id == User::loggedId()) { return $this->redirect(['default/show', 'id' => $previous->id]); } return $this->redirect(['default/show', 'id' => $model->id]); } else { $this->error(Yii::t('podium/flash', 'Sorry! There was an error while adding the reply. Contact administrator about this problem.')); } } } } return $this->render('post', ['replyFor' => $replyFor, 'preview' => $preview, 'model' => $model, 'thread' => $thread, 'previous' => $previous]); }