Exemple #1
0
 public function __invoke($group_slug = null, $board_slug = null, $thread_id = null)
 {
     $forum = $this->getForum();
     // 优先search
     $group = GroupModel::search($group_slug, $forum->id);
     if (!$group) {
         $group = GroupModel::getGroup($group_slug);
     }
     $board = BoardModel::search($board_slug, $forum->id, $group->id);
     if (!$board) {
         $board = BoardModel::getBoard($board_slug);
     }
     // 获得论坛的分组信息
     $groups = GroupModel::allGroup(function (QueryBuilder $qb) use($forum) {
         $qb->andWhere($qb->expr()->eq('forum_id', ':forum_id'))->setParameter(':forum_id', $forum->id);
         $qb->addOrderBy('weight', 'desc');
         $qb->addOrderBy('create_timestamp');
     });
     // 导航
     $breadcrumbs = array();
     $breadcrumbs[] = array('url' => $this->generateUrl('forum_group', array('slug' => $group->search ? $group->search : $group->id)), 'title' => $group->name);
     if ($board->path) {
         $board_ids = explode(',', $board->path);
         foreach ($board_ids as $board_id) {
             $b = BoardModel::getBoard($board_id);
             $breadcrumbs[] = array('url' => $this->generateUrl('forum_board', array('group_slug' => $group->search ? $group->search : $group->id, 'board_slug' => $b->search ? $b->search : $b->id)), 'title' => $b->name);
         }
     }
     // 自己
     $breadcrumbs[] = array('url' => $this->generateUrl('forum_board', array('group_slug' => $group->search ? $group->search : $group->id, 'board_slug' => $board->search ? $board->search : $board->id)), 'title' => $board->name);
     // 帖子
     $thread = ThreadModel::getThread($thread_id);
     // 增加浏览次数
     $thread->viewCount += 1;
     // 保存
     $thread = ThreadModel::saveThread($thread);
     $breadcrumbs[] = array('title' => $thread->title);
     $request = $this->getRequest();
     // 回复
     $p_page = $request->query->get('p_page');
     $p_size = $request->query->get('p_size');
     if (!$p_page) {
         $p_page = 1;
     }
     if (!$p_size) {
         $p_size = 7;
     }
     $post_pager = PostModel::listPosts($p_page, $p_size, function (QueryBuilder $qb) use($forum, $group, $board, $thread) {
         $qb->andWhere($qb->expr()->eq('forum_id', ':forum_id'))->setParameter(':forum_id', $forum->id);
         $qb->andWhere($qb->expr()->eq('group_id', ':group_id'))->setParameter(':group_id', $group->id);
         $qb->andWhere($qb->expr()->eq('board_id', ':board_id'))->setParameter(':board_id', $board->id);
         $qb->andWhere($qb->expr()->eq('thread_id', ':thread_id'))->setParameter(':thread_id', $thread->id);
         $qb->addOrderBy('create_timestamp');
     });
     $posts_data = $post_pager->getData();
     foreach ($posts_data as $k => $post) {
         // 获得用户的数据
         $user_id = $post['author_id'];
         $user = $this->getUserInfo($user_id);
         $post['author'] = $user;
         $posts_data[$k] = $post;
     }
     $post_pager->setData($posts_data);
     $post_pager->setPageParamName('p_page');
     return $this->render('thread/index.html.twig', array('forum' => $forum, 'groups' => $groups, 'group' => $group, 'board' => $board, 'breadcrumbs' => $breadcrumbs, 'thread' => $thread, 'post_pager' => $post_pager));
 }