protected function handle() { $tree = StructureModel::getTree(); $publishers = PublisherModel::allPublishers(); $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $ids = $request->request->get('ids'); $publisher_id = $request->request->get('publisher_id'); $structure_id = $request->request->get('structure_id'); $session = $this->getSession(); $db = ArticleModel::getDb(); try { $db->transaction(); if (!$publisher_id) { throw new \Exception('请选择一个发布者'); } if (!$structure_id) { throw new \Exception('请选择发布所属目录'); } $publisher = PublisherModel::getPublisher($publisher_id); if (!$publisher) { throw new \Exception('发布者不存在'); } foreach ($ids as $id) { $article = ArticleModel::getArticle($id); if ($article) { $article->publishTimestamp = time(); $article->structureId = $structure_id; ArticleModel::saveArticle($article); } // 添加文章发布者关系 $article_publisher = new ArticlePublisherModel(); $article_publisher->articleId = $article->id; $article_publisher->publisherId = $publisher->id; ArticlePublisherModel::createRelationship($article_publisher); } // 添加发布者数据 $publisher->articleCount += count($ids); PublisherModel::savePublisher($publisher); $db->commit(); $session->addFlash('success', '操作成功'); } catch (\Exception $e) { $db->rollback(); $session->addFlash('error', $e->getMessage()); } return new RedirectResponse($this->generateUrl('admin_www_article')); } else { $ids = $request->query->get('ids'); $ids = json_decode($ids); if (!$ids) { return $this->render('@TachigoWWWAdmin/error-modal.html.twig', array('message' => '没有选中任何文章')); } else { $pager = ArticleModel::listArticles(1, count($ids), function (QueryBuilder $qb) use($ids) { $qb->where($qb->expr()->in('id', $ids)); }); return $this->render('article/publish.html.twig', array('articles' => $pager, 'publishers' => $publishers, 'tree' => $tree)); } } }
protected function handle() { $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $ids = $request->request->get('ids'); $session = $this->getSession(); $db = ArticleModel::getDb(); try { $db->transaction(); foreach ($ids as $id) { $article = ArticleModel::getArticle($id); if ($article) { // 删除标签分类 $article_tags = ArticleTagModel::allRelationship(function (QueryBuilder $qb) use($article) { /** @var ArticleModel $article */ $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article->id); }); foreach ($article_tags as $article_tag) { ArticleTagModel::deleteRelationship($article_tag['article_id'], $article_tag['tag_id']); $tag = TagModel::getTag($article_tag['tag_id']); if ($tag) { $tag->articleCount -= 1; TagModel::saveTag($tag); } } // 删除媒体 $medias = MediaModel::allMedias(function (QueryBuilder $qb) use($article) { /** @var ArticleModel $article */ $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article->id); }); foreach ($medias as $media) { MediaModel::deleteMedia($media['id']); } // 删除文章 ArticleModel::deleteArticle($id); } } $db->commit(); $session->addFlash('success', '操作成功'); } catch (\Exception $e) { $db->rollback(); $session->addFlash('error', $e->getMessage()); } return new RedirectResponse($this->generateUrl('admin_www_article')); } else { $ids = $request->query->get('ids'); $ids = json_decode($ids); if (!$ids) { return $this->render('@TachigoWWWAdmin/error-modal.html.twig', array('message' => '没有选中任何文章')); } else { $pager = ArticleModel::listArticles(1, count($ids), function (QueryBuilder $qb) use($ids) { $qb->where($qb->expr()->in('id', $ids)); }); return $this->render('article/delete.html.twig', array('articles' => $pager)); } } }
protected function handle() { $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $ids = $request->request->get('ids'); $session = $this->getSession(); $db = ArticleModel::getDb(); try { $db->transaction(); foreach ($ids as $id) { $article = ArticleModel::getArticle($id); if ($article) { $article->publishTimestamp = 0; ArticleModel::saveArticle($article); } // 修改发布者信息 $article_publishers = ArticlePublisherModel::allRelationship(function (QueryBuilder $qb) use($article) { $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article->id); }); if ($article_publishers) { foreach ($article_publishers as $article_publisher) { $publisher_id = $article_publisher['publisher_id']; // 删除发布者文章关系 ArticlePublisherModel::deleteRelationship($article->id, $publisher_id); // 修改发布者数据 $publisher = PublisherModel::getPublisher($publisher_id); if ($publisher) { $publisher->articleCount -= 1; PublisherModel::savePublisher($publisher); } } } } $db->commit(); $session->addFlash('success', '操作成功'); } catch (\Exception $e) { $db->rollback(); $session->addFlash('error', $e->getMessage()); } return new RedirectResponse($this->generateUrl('admin_www_article')); } else { $ids = $request->query->get('ids'); $ids = json_decode($ids); if (!$ids) { return $this->render('@TachigoWWWAdmin/error-modal.html.twig', array('message' => '没有选中任何文章')); } else { $pager = ArticleModel::listArticles(1, count($ids), function (QueryBuilder $qb) use($ids) { $qb->where($qb->expr()->in('id', $ids)); }); return $this->render('article/trash.html.twig', array('articles' => $pager)); } } }
public function __invoke($slug = null) { $structure = StructureModel::search($slug); if (!$structure) { $structure = StructureModel::getStructure($slug); } if (!$structure) { // 404 } // 将所有文章用博客的形式展现 // 筛选出所有发布的文章 $request = $this->getRequest(); $page = $request->query->get('page'); $size = 15; $articles_pager = ArticleModel::listArticles($page, $size, function (QueryBuilder $qb) use($structure) { $qb->andWhere($qb->expr()->gt('publish_timestamp', 0)); $qb->andWhere($qb->expr()->eq('structure_id', ':structure_id'))->setParameter(':structure_id', $structure->id); $qb->addOrderBy('publish_timestamp', 'desc'); }); $articles = $articles_pager->getData(); foreach ($articles as $key => $article) { // 取出文章的图片媒体 $article['media'] = MediaModel::allMedias(function (QueryBuilder $qb) use($article) { $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article['id']); $qb->andWhere($qb->expr()->eq('type', ':type'))->setParameter(':type', 'picture'); }); // 取出文章的tag标签 $article_tags = ArticleTagModel::allRelationship(function (QueryBuilder $qb) use($article) { $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article['id']); }); $article['tags'] = array(); foreach ($article_tags as $article_tag) { $t = TagModel::getTag($article_tag['tag_id']); $article['tags'][] = $t->toArray(); } // 发布者 $article['publisher'] = array(); $article_publishers = ArticlePublisherModel::allRelationship(function (QueryBuilder $qb) use($article) { $qb->where($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article['id']); }); if ($article_publishers) { $article_publisher = array_shift($article_publishers); $publisher_id = $article_publisher['publisher_id']; $publisher = PublisherModel::getPublisher($publisher_id); if ($publisher) { $article['publisher'] = $publisher; } } $articles[$key] = $article; } $articles_pager->setData($articles); return $this->render('category/blogs.html.twig', array('blog_posts' => $articles_pager)); }
public function __invoke($id = null) { $request = $this->getRequest(); $page = $request->query->get('page'); $size = 15; // 查询出发布者 $publisher_id = $id; $publisher = PublisherModel::getPublisher($publisher_id); $publisher_articles = ArticlePublisherModel::allRelationship(function (QueryBuilder $qb) use($publisher) { $qb->where($qb->expr()->eq('publisher_id', ':publisher_id'))->setParameter(':publisher_id', $publisher->id); }); $article_ids = array(); foreach ($publisher_articles as $publisher_article) { $article_ids[] = $publisher_article['article_id']; } $article_ids = array_unique($article_ids); // 查询出文章 $articles_pager = ArticleModel::listArticles($page, $size, function (QueryBuilder $qb) use($article_ids) { $qb->andWhere($qb->expr()->gt('publish_timestamp', 0)); if ($article_ids) { $qb->andWhere($qb->expr()->in('id', $article_ids)); } else { $qb->andWhere($qb->expr()->eq('id', 0)); } $qb->addOrderBy('publish_timestamp', 'desc'); }); $articles = $articles_pager->getData(); foreach ($articles as $key => $article) { // 取出文章的图片媒体 $article['media'] = MediaModel::allMedias(function (QueryBuilder $qb) use($article) { $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article['id']); $qb->andWhere($qb->expr()->eq('type', ':type'))->setParameter(':type', 'picture'); }); // 取出文章的tag标签 $article_tags = ArticleTagModel::allRelationship(function (QueryBuilder $qb) use($article) { $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article['id']); }); $article['tags'] = array(); foreach ($article_tags as $article_tag) { $t = TagModel::getTag($article_tag['tag_id']); $article['tags'][] = $t->toArray(); } // 发布者 $article['publisher'] = $publisher; $articles[$key] = $article; } $articles_pager->setData($articles); return $this->render('publisher/blogs.html.twig', array('blog_posts' => $articles_pager, 'publisher' => $publisher)); }
public function __invoke() { $articles = ArticleModel::listArticles(1, 10, function (QueryBuilder $qb) { $qb->andWhere($qb->expr()->gt('publish_timestamp', 0)); $qb->addOrderBy('publish_timestamp', 'desc'); }); $articles = $articles->getData(); foreach ($articles as $key => $article) { $article_publisher = ArticlePublisherModel::allRelationship(function (QueryBuilder $qb) use($article) { $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article['id']); }); $publisher = PublisherModel::getPublisher($article_publisher[0]['publisher_id']); $articles[$key]['publisher'] = $publisher; } return $this->render('fragment/latest-articles.html.twig', array('articles' => $articles)); }
protected function handle() { $request = $this->getRequest(); $columns = array('ID', '标题', '创建', '更新', '发布', '栏目'); $fields = array('id', 'title', 'create_timestamp', 'update_timestamp', 'publish_timestamp', 'structure_id'); if ($request->isXmlHttpRequest()) { $posts = $request->request; $type = $posts->get('type'); $page_offset = $posts->get('start'); $page_offset = intval($page_offset); $page_size = $posts->get('length'); $page_size = intval($page_size); $is_all = false; if ($page_size < 0) { $is_all = true; } $s_echo = $posts->get('draw'); $s_echo = intval($s_echo); $search = $posts->get('search'); $search_value = $search['value']; $records = array(); $records['data'] = array(); $records['draw'] = $s_echo; $records['recordsTotal'] = 0; $records['recordsFiltered'] = 0; if ($is_all) { $page_size = ArticleModel::getCount(function (QueryBuilder $qb) use($search_value, $type) { if ($search_value) { $qb->orWhere($qb->expr()->like("`title`", ":title"))->setParameter(":title", "%{$search_value}%"); } if ($type == 'published') { $qb->andWhere($qb->expr()->gt('`publish_timestamp`', 0)); } elseif ($type == 'trashed') { $qb->andWhere($qb->expr()->eq('`publish_timestamp`', 0)); } }); } $page = $page_offset / $page_size + 1; $pager = ArticleModel::listArticles($page, $page_size, function (QueryBuilder $qb) use($search_value, $type) { if ($search_value) { $qb->orWhere($qb->expr()->like("`title`", ":title"))->setParameter(":title", "%{$search_value}%"); } if ($type == 'published') { $qb->andWhere($qb->expr()->gt('`publish_timestamp`', 0)); } elseif ($type == 'trashed') { $qb->andWhere($qb->expr()->eq('`publish_timestamp`', 0)); } $qb->addOrderBy('create_timestamp', 'desc'); }); $total = $pager->getCount(); $records['recordsTotal'] = $total; $records['recordsFiltered'] = $total; $data = $pager->getData(); foreach ($data as $k => $v) { $line = array(); $line[] = '<input type="checkbox" name="id[]" value="' . $v['id'] . '">'; foreach ($fields as $field) { if (isset($v[$field])) { if ($field == 'create_timestamp' || $field == 'update_timestamp') { // 时间 $line[] = date('Y-m-d H:i:s', $v[$field]); } elseif ($field == 'publish_timestamp') { if ($v[$field]) { $line[] = date('Y-m-d H:i:s', $v[$field]); } else { $line[] = '未发布'; } } elseif ($field == 'structure_id') { $structure_id = $v[$field]; $structure = StructureModel::getStructure($structure_id); $line[] = $structure->name; } else { $line[] = $v[$field]; } } } $edit_url = $this->generateUrl('admin_www_article_edit', array('id' => $v['id'])); $carousel_url = $this->generateUrl('admin_www_article_carousel', array('id' => $v['id'])); $plugin_url = $this->generateUrl('admin_www_plugin_edit', array('id' => $v['id'])); $operation = '<div class="btn-group"> <a href="javascript:void(0);" data-toggle="dropdown" aria-expanded="false">操作 <i class="fa fa-angle-down"></i></a> <ul class="dropdown-menu pull-right" role="menu"> <li role="presentation"><a href="' . $edit_url . '"><i class="fa fa-edit"></i> 编辑</a></li> <li role="presentation"><a href="' . $carousel_url . '"><i class="fa fa-picture-o"></i> 轮播</a></li> <li role="presentation"><a href="' . $plugin_url . '"><i class="fa fa-paperclip"></i> 插件</a></li> </ul> </div>'; $line[] = $operation; $records['data'][] = $line; } return new JsonResponse($records); } return $this->render('article/index.html.twig', array('columns' => $columns)); }