/** * @param SiteModels $forum * @return boolean */ public function create($forum) { // very, so much, stupid source code :) if ($this->validate()) { $user = Yii::$app->getUser()->getIdentity(); // create post $post = new PostModels(); $post->topic_id = 0; $post->message = $this->message; $post->save(); if ($post->save()) { // create topic $topic = new TopicModels(); $topic->forum_id = $forum->id; $topic->subject = $this->subject; $topic->post = $post; $topic->save(); // update post.topic_id $post->link('topic', $topic); // update forum information $forum->updateCounters(['number_topics' => 1]); $forum->last_post_created_at = time(); $forum->last_post_user_id = $post->id; $forum->last_post_username = $user->username; $forum->save(); $this->topic = $topic; return true; } } }
public function actionView($id) { /* @var TopicModels $topic */ $topic = TopicModels::find()->where(['id' => $id])->with('forum')->one(); if (!$topic) { throw new NotFoundHttpException(); } $topic->updateCounters(['number_views' => 1]); $topic->save(); $dataProvider = PostModels::getDataProviderByTopic($topic->id); $posts = $dataProvider->getModels(); if (!Yii::$app->getUser()->getIsGuest()) { $userMentions = UserMention::findAll(['topic_id' => $id, 'mention_user_id' => Yii::$app->getUser()->getId(), 'status' => UserMention::MENTION_STATUS_UNVIEWED]); /* user mention update */ foreach ($userMentions as $userMention) { $userMention->status = UserMention::MENTION_STATUS_VIEWED; $userMention->save(); } $model = new PostForm(); if ($model->load(Yii::$app->getRequest()->post()) && $model->create($topic)) { $page = $model->post->getPostPage($model->post); if ($page > 1) { $this->redirect(['view', 'id' => $model->getPost()->topic->id, 'page' => $page, '#' => 'p' . $model->getPost()->id]); } else { $this->redirect(['view', 'id' => $model->getPost()->topic->id, '#' => 'p' . $model->getPost()->id]); } } return $this->render('view', ['dataProvider' => $dataProvider, 'model' => $model, 'topic' => $topic, 'posts' => $posts]); } else { return $this->render('view', ['dataProvider' => $dataProvider, 'topic' => $topic, 'posts' => $posts]); } }
/** * @param $id * @return string */ public function actionView($id) { /* @var SiteModels $forum */ $forum = SiteModels::findOne(['id' => $id]); $query = TopicModels::find()->where(['forum_id' => $id])->orderBy(['sticked' => SORT_DESC])->addOrderBy(['last_post_created_at' => SORT_DESC]); $dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['forcePageParam' => false, 'pageSizeLimit' => false, 'defaultPageSize' => Yii::$app->config->get('display_topics_count')]]); $topics = $dataProvider->getModels(); return $this->render('view', ['dataProvider' => $dataProvider, 'forum' => $forum, 'topics' => $topics]); }
public function actionViewOwnpostTopics() { // !!! need access check if (Yii::$app->getUser()->getIsGuest()) { throw new NotFoundHttpException(); } $user = Yii::$app->getUser()->getIdentity(); $posts = PostModels::find()->select(['topic_id', 'user_id'])->where('user_id = :user_id', [':user_id' => $user->id])->asArray()->all(); $ids = ArrayHelper::getColumn($posts, 'topic_id'); $uniqueIDs = array_unique($ids); $query = TopicModels::find()->where(['IN', 'id', $uniqueIDs])->andWhere('forum_id NOT LIKE 0')->with('forum')->orderBy(['last_post_created_at' => SORT_DESC]); $dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['forcePageParam' => false, 'pageSizeLimit' => false, 'defaultPageSize' => Yii::$app->config->get('display_topics_count')]]); $topics = $dataProvider->getModels(); return $this->render('topic_list', ['title' => 'Темы с вашим участием', 'dataProvider' => $dataProvider, 'topics' => $topics]); }
/** * @return ActiveQuery */ public function getTopics() { return $this->hasMany(TopicModels::className(), ['forum_id' => 'id'])->inverseOf('forum'); }
} ?> </tbody> </table> </div> <?php } ?> <div class="statistic"> <div class="clearfix"> <ul class="right"> <li><?php echo Yii::t('forum', 'Тем:'); ?> <strong><?php echo $formatter->asInteger(TopicModels::countAll()); ?> </strong></li> <li><?php echo Yii::t('forum', 'Сообщений:'); ?> <strong><?php echo $formatter->asInteger(PostModels::find()->count()); ?> </strong></li> </ul> <ul class="left"> <li><?php echo Yii::t('forum', 'Количество пользователей:'); ?> <strong><?php
/** * @return ActiveQuery */ public function getTopic() { return $this->hasOne(TopicModels::className(), ['id' => 'topic_id']); }