Beispiel #1
0
 protected function handle()
 {
     $board_id = $this->id;
     $board = BoardModel::getBoard($board_id);
     if (!$board) {
         throw new \Exception('论坛版块不存在');
     }
     $group = GroupModel::getGroup($board->groupId);
     if (!$group) {
         throw new \Exception('论坛分组不存在');
     }
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $session = $this->getSession();
         $posts = $request->request;
         $db = WWWDatabase::getDb();
         $db->transaction();
         try {
             $name = $posts->get('name');
             if (!$name) {
                 throw new \Exception('版块名称不能为空');
             }
             $description = $posts->get('description');
             $search = $posts->get('search');
             if ($search) {
                 // 检查重复性
                 $g = BoardModel::search($search, $group->forumId, $group->id);
                 if ($g && $g->id != $board->id) {
                     throw new \Exception('URL占位符已被使用');
                 }
             } else {
                 $search = null;
             }
             $icon = $posts->get('icon');
             $weight = $posts->get('weight');
             $board_per_row = $posts->get('board_per_row');
             $board_per_row = intval($board_per_row);
             if (!$board_per_row) {
                 $board_per_row = 1;
             }
             // 创建
             $board->name = $name;
             $board->search = $search;
             $board->description = $description;
             $board->icon = $icon;
             $board->weight = intval($weight);
             $board->boardPerRow = $board_per_row;
             $now = time();
             $board->updateTimestamp = $now;
             // 保存
             BoardModel::saveBoard($board);
             $db->commit();
             $session->addFlash('success', '操作成功');
         } catch (\Exception $e) {
             $db->rollback();
             $session->addFlash('error', '操作失败');
         }
         return new JsonResponse(array('status' => 1, 'data' => 'success'));
     }
     return $this->render('board/edit.html.twig', array('board' => $board));
 }
Beispiel #2
0
 public function __invoke($board_id)
 {
     // 检查登录
     $session = $this->getSession();
     if (!isset($session['auth'])) {
         $current_url = $this->getCurrentUrl();
         return new RedirectResponse($this->generateUrl('forum_login') . '?redirection=' . $current_url);
     }
     $board = BoardModel::getBoard($board_id);
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $posts = $request->request;
         $db = ForumDatabase::getDb();
         $db->transaction();
         try {
             // 检查
             $title = $posts->get('title');
             if (!$title) {
                 throw new \Exception('请输入帖子标题');
             }
             $content = $posts->get('content');
             // 创建
             $thread = new ThreadModel();
             $thread->title = $title;
             $thread->boardId = $board->id;
             $thread->groupId = $board->groupId;
             $thread->forumId = $board->forumId;
             $thread->authorId = $session['auth']['id'];
             $thread->authorName = $session['profile']['nickname'];
             $thread->replyAuthorId = $session['auth']['id'];
             $thread->replyAuthorName = $session['profile']['nickname'];
             $now = time();
             $thread->replyTimestamp = $now;
             $thread->createTimestamp = $now;
             $thread->updateTimestamp = $now;
             // 保存
             $thread = ThreadModel::createThread($thread);
             // 创建
             $post = new PostModel();
             $post->threadId = $thread->id;
             $post->boardId = $board->id;
             $post->groupId = $board->groupId;
             $post->forumId = $board->forumId;
             $post->authorId = $session['auth']['id'];
             $post->authorName = $session['profile']['nickname'];
             $post->postId = 0;
             $post->content = $content;
             $post->createTimestamp = $now;
             $post->updateTimestamp = $now;
             // 保存
             $post = PostModel::createPost($post);
             $board->threadCount += 1;
             BoardModel::saveBoard($board);
             // 提交事务
             $db->commit();
             $session->addFlash('success', '发布成功');
             return new JsonResponse(array('status' => 1, 'data' => $thread->id));
         } catch (\Exception $e) {
             $db->rollback();
             return new JsonResponse(array('status' => 0, 'data' => $e->getMessage()));
         }
     } else {
         $forum = $this->getForum();
         // 获得论坛的分组信息
         $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');
         });
         // 优先search
         $group = GroupModel::getGroup($board->groupId);
         // 导航
         $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);
         // 发表帖子
         $breadcrumbs[] = array('title' => '发表帖子');
         return $this->render('thread/post.html.twig', array('forum' => $forum, 'groups' => $groups, 'group' => $group, 'board' => $board, 'breadcrumbs' => $breadcrumbs));
     }
 }