コード例 #1
0
ファイル: ActionDelete.php プロジェクト: aeshion/ZeroPHP
 protected function handle()
 {
     $thread_id = $this->threadId;
     $thread = ThreadModel::getThread($thread_id);
     if (!$thread) {
         throw new \Exception('帖子不存在');
     }
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $session = $this->getSession();
         $db = ForumDatabase::getInstance();
         $db->transaction();
         try {
             // 删除帖子
             ThreadModel::removeThread($thread);
             // 删除帖子的回复
             PostModel::deletePosts(function (QueryBuilder $qb) use($thread_id) {
                 $qb->andWhere($qb->expr()->eq('thread_id', ':thread_id'))->setParameter(':thread_id', $thread_id);
             });
             $db->commit();
             $session->addFlash('success', '删除成功');
         } catch (\Exception $e) {
             $db->rollback();
             $session->addFlash('error', $e->getMessage());
         }
         return new RedirectResponse($this->generateUrl('admin_forum_thread_manage'));
     }
     return $this->render('thread/thread-delete.html.twig', array('thread' => $thread));
 }
コード例 #2
0
ファイル: ActionView.php プロジェクト: aeshion/ZeroPHP
 protected function handle()
 {
     $session = $this->getSession();
     $thread_id = $this->threadId;
     $thread = ThreadModel::getThread($thread_id);
     if (!$thread) {
         $session->addFlash('error', '帖子不存在');
         return new RedirectResponse($this->generateUrl('admin_forum_thread_manage'));
     }
     $request = $this->getRequest();
     $page = $request->query->get('page');
     if (!$page) {
         $page = 1;
     }
     $size = 10;
     $posts_pager = PostModel::listForumPosts($page, $size, function (QueryBuilder $qb) use($thread) {
         /** @var ThreadModel $thread */
         $qb->andWhere($qb->expr()->eq('forum_id', ':forum_id'))->setParameter(':forum_id', $thread->forumId);
         $qb->andWhere($qb->expr()->eq('thread_id', ':thread_id'))->setParameter(':thread_id', $thread->threadId);
         $qb->addOrderBy('create_timestamp');
     });
     $data = $posts_pager->getData();
     foreach ($data as $key => $post) {
         if ($post['reply_post_id']) {
             $reply_post = PostModel::getPost($post['reply_post_id']);
             if ($reply_post) {
                 $data[$key]['reply_post'] = $reply_post->toArray();
             }
         }
     }
     $posts_pager->setData($data);
     return $this->render('thread/thread-view.html.twig', array('thread' => $thread, 'posts_pager' => $posts_pager));
 }
コード例 #3
0
ファイル: ActionReply.php プロジェクト: aeshion/ZeroPHP
 public function __invoke($post_id)
 {
     // 检查登录
     $session = $this->getSession();
     if (empty($session['user'])) {
         $session->addFlash('error', '请先登录');
         return new RedirectResponse($this->generateUrl('user_login'));
     }
     $user = UserModel::getUser($session['user']['id']);
     // 检查帖子是否存在
     $post = PostModel::getPost($post_id);
     if (!$post) {
         $session->addFlash('error', '帖子不存在');
         return new RedirectResponse($this->getRequest()->server->get('HTTP_REFERER'));
     }
     // 检查主题
     $thread = ThreadModel::getThread($post->threadId);
     if (!$thread) {
         $session->addFlash('error', '主题不存在');
         return new RedirectResponse($this->generateUrl('forum_board', array('forum_id' => $post->forumId)));
     }
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $posts = $request->request;
         $db = ForumDatabase::getInstance();
         $db->transaction();
         try {
             $content = $posts->get('content');
             $pictures = $posts->get('thumbnails');
             if (!$pictures) {
                 $pictures = array();
             } else {
                 $pictures = explode('<>', $pictures);
             }
             if (empty($content) && empty($pictures)) {
                 throw new \Exception("内容和图片不能都为空");
             }
             $reply = new PostModel();
             $reply->threadId = $post->threadId;
             $reply->forumId = $post->forumId;
             $reply->replyPostId = $post->postId;
             $reply->content = $content;
             $reply->thumbnails = implode('<>', $pictures);
             $reply->createTimestamp = time();
             $reply->authorId = $user->id;
             $reply->authorName = $user->username;
             // 保存
             PostModel::createPost($reply);
             // 增加主题回复数
             $thread->replies += 1;
             ThreadModel::saveThread($thread);
             $db->commit();
         } catch (\Exception $e) {
             $db->rollback();
             $session->addFlash('error', $e->getMessage());
         }
         return new RedirectResponse($this->generateUrl('forum_thread_view', array('thread_id' => $post->threadId)));
     }
     return $this->render('post/reply.html.twig', array('post' => $post));
 }
コード例 #4
0
ファイル: ActionMy.php プロジェクト: aeshion/ZeroPHP
 public function __invoke()
 {
     // 检查登录
     $session = $this->getSession();
     if (empty($session['user'])) {
         $session->addFlash('error', '请先登录');
         return new RedirectResponse($this->generateUrl('user_login'));
     }
     $user = UserModel::getUser($session['user']['id']);
     $request = $this->getRequest();
     $type = $request->query->get('type');
     if (!$type) {
         $type = 'post';
     }
     $page = $request->query->get('page');
     if (!$page) {
         $page = 1;
     }
     $size = 10;
     $pager = null;
     if ($type == 'post') {
         $pager = ThreadModel::listForumThreads($page, $size, function (QueryBuilder $qb) use($user) {
             /** @var UserModel $user */
             $qb->andWhere($qb->expr()->eq('author_id', ':author_id'))->setParameter(':author_id', $user->id);
         });
         $data = $pager->getData();
         foreach ($data as $key => $value) {
             $forum_id = $value['forum_id'];
             $forum = ForumModel::getForum($forum_id);
             $value['forum'] = $forum;
             $data[$key] = $value;
         }
         $pager->setData($data);
     } elseif ($type == 'reply') {
         $data = PostModel::getPostsWhere(function (QueryBuilder $qb) use($user) {
             /** @var UserModel $user */
             $qb->andWhere($qb->expr()->eq('author_id', ':author_id'))->setParameter(':author_id', $user->id);
         });
         $thread_ids = array();
         foreach ($data as $key => $value) {
             $thread_ids[] = $value['thread_id'];
         }
         $thread_ids = array_unique($thread_ids);
         $pager = ThreadModel::listForumThreads($page, $size, function (QueryBuilder $qb) use($thread_ids) {
             /** @var UserModel $user */
             $qb->andWhere($qb->expr()->in('thread_id', $thread_ids));
         });
         $data = $pager->getData();
         foreach ($data as $key => $value) {
             $forum_id = $value['forum_id'];
             $forum = ForumModel::getForum($forum_id);
             $value['forum'] = $forum;
             $data[$key] = $value;
         }
         $pager->setData($data);
     }
     $pager->setQuery(array('type' => $type));
     return $this->render('thread/my.html.twig', array('pager' => $pager));
 }
コード例 #5
0
ファイル: ActionView.php プロジェクト: aeshion/ZeroPHP
 public function __invoke($thread_id)
 {
     // 主题
     $thread = ThreadModel::getThread($thread_id);
     if (!$thread) {
         $session = $this->getSession();
         $session->addFlash('error', '帖子主题不存在');
         return new RedirectResponse($this->getRequest()->server->get('HTTP_REFERER'));
     }
     $forum = ForumModel::getForum($thread->forumId);
     if (!$forum) {
         $session = $this->getSession();
         $session->addFlash('error', '论坛版块不存在');
         return new RedirectResponse($this->getRequest()->server->get('HTTP_REFERER'));
     }
     // 增加浏览数
     $thread->views += 1;
     $thread = ThreadModel::saveThread($thread);
     $request = $this->getRequest();
     $page = $request->query->get('page');
     if (!$page) {
         $page = 1;
     }
     $size = 10;
     $posts_pager = PostModel::listForumPosts($page, $size, function (QueryBuilder $qb) use($thread) {
         /** @var ThreadModel $thread */
         $qb->andWhere($qb->expr()->eq('forum_id', ':forum_id'))->setParameter(':forum_id', $thread->forumId);
         $qb->andWhere($qb->expr()->eq('thread_id', ':thread_id'))->setParameter(':thread_id', $thread->threadId);
         $qb->addOrderBy('create_timestamp');
     });
     $data = $posts_pager->getData();
     foreach ($data as $key => $post) {
         if ($post['reply_post_id']) {
             $reply_post = PostModel::getPost($post['reply_post_id']);
             if ($reply_post) {
                 $data[$key]['reply_post'] = $reply_post->toArray();
             }
         }
     }
     $posts_pager->setData($data);
     return $this->render('thread/view.html.twig', array('forum' => $forum, 'thread' => $thread, 'posts_pager' => $posts_pager));
 }
コード例 #6
0
ファイル: PostModel.php プロジェクト: aeshion/ZeroPHP
 /**
  * 保存
  * @param PostModel $post
  * @return PostModel
  * @throws \Exception
  */
 public static function savePost(PostModel $post)
 {
     return self::editPost($post->toArray());
 }