Esempio n. 1
0
 protected function handle()
 {
     /** @var CategoryModel[] $tree */
     $tree = CategoryModel::getTree();
     /** @var CategoryModel $root_node */
     $root_node = CategoryModel::getRootNode();
     $categories = array();
     foreach ($tree as $category) {
         $categories[$category->categoryId] = $category;
     }
     $request = $this->getRequest();
     $category_id = $request->query->get('category_id');
     if (!$category_id || $category_id == $root_node->categoryId) {
         $category_id = null;
     }
     $page = $request->query->get('page');
     if (!$page) {
         $page = 1;
     }
     $size = 10;
     $pager = ArticleModel::listPortalArticles($page, $size, function (QueryBuilder $qb) use($category_id) {
         if ($category_id) {
             $qb->andWhere($qb->expr()->eq('category_id', ':category_id'))->setParameter(':category_id', $category_id);
         }
         $qb->addOrderBy('create_timestamp', 'DESC');
     });
     $pager->setQuery(array('category_id' => $category_id));
     return $this->render('article/manage-article.html.twig', array('tree' => $tree, 'pager' => $pager, 'categories' => $categories));
 }
Esempio n. 2
0
 public function __invoke($article_id = null)
 {
     $this->articleId = $article_id;
     $article_id = $this->articleId;
     $session = $this->getSession();
     $article = ArticleModel::getPortalArticle($article_id);
     if (!$article) {
         $session->addFlash('error', '文章不存在');
         return new RedirectResponse($this->generateUrl('portal_homepage'));
     }
     $category_id = $article->categoryId;
     $category = CategoryModel::getPortalCategory($category_id);
     if (!$category) {
         $session->addFlash('error', '分类不存在');
         return new RedirectResponse($this->generateUrl('portal_homepage'));
     }
     $parent_category = $category->getDirectParentNode();
     if ($parent_category->isRootNode()) {
         $parent_category = null;
     }
     // 面包屑导航
     $breadcrumb = $category->getNodeSinglePath();
     unset($breadcrumb[0]);
     $breadcrumb = array_values($breadcrumb);
     // 边栏导航
     /** @var CategoryModel $top_nav */
     $top_nav = $breadcrumb[0];
     $side_nav = $top_nav->getDirectChildNodes();
     return $this->render('article/index.html.twig', array('breadcrumb' => $breadcrumb, 'side_nav' => $side_nav, 'category' => $category, 'parent_category' => $parent_category, 'article' => $article));
 }
Esempio n. 3
0
 protected function handle()
 {
     $category = CategoryModel::getPortalCategory($this->categoryId);
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $session = $this->getSession();
         try {
             $category_name = $request->request->get('category_name');
             $category_desc = $request->request->get('category_desc');
             if (!$category_name) {
                 throw new \Exception("分类子链接标题不能为空");
             }
             $category_type = $request->request->get('category_type');
             if (!$category_type) {
                 throw new \Exception("子分类链接的类型不能为空");
             }
             if (!in_array($category_type, array('article-menu', 'menu', 'page', 'link', 'article'))) {
                 throw new \Exception("子分类链接的类型错误");
             }
             $enabled = $request->request->get('enabled');
             $enabled = intval($enabled);
             $category->categoryName = $category_name;
             $category->categoryDesc = $category_desc;
             $category->categoryType = $category_type;
             $category->enabled = $enabled;
             CategoryModel::savePortalCategory($category);
             $session->addFlash('success', '编辑成功');
         } catch (\Exception $e) {
             $session->addFlash('error', $e->getMessage());
         }
         return new RedirectResponse($this->generateUrl('admin_portal_category_manage'));
     }
     return $this->render('category/edit-category-modal.html.twig', array('category' => $category));
 }
Esempio n. 4
0
 public function __invoke()
 {
     $homepage_node = CategoryModel::getRootNode();
     $category_id = $homepage_node->categoryId;
     $articles_pager = ArticleModel::listPortalArticles(1, 3, function (QueryBuilder $qb) use($category_id) {
         $qb->andWhere($qb->expr()->eq('category_id', ':category_id'))->setParameter(':category_id', $category_id);
         $qb->andWhere($qb->expr()->gt('publish_timestamp', 0));
         $qb->addOrderBy('publish_timestamp', 'desc');
     });
     return $this->render('homepage/index.html.twig', array('pager' => $articles_pager));
 }
Esempio n. 5
0
 protected function handle()
 {
     $category = CategoryModel::getPortalCategory($this->categoryId);
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $session = $this->getSession();
         try {
             $category->remove();
             $session->addFlash('success', '操作成功');
         } catch (\Exception $e) {
             $session->addFlash('error', $e->getMessage());
         }
         return new RedirectResponse($this->generateUrl('admin_portal_category_manage'));
     }
     return $this->render('category/delete-category-modal.html.twig', array('category' => $category));
 }
Esempio n. 6
0
 public function render($template_path = 'index/index.html.twig', array $context = array())
 {
     // 添加顶部导航
     $home_nav = CategoryModel::getRootNode();
     /** @var CategoryModel[] $nav_tree */
     $nav_tree = $home_nav->getSubTree();
     $list = array();
     foreach ($nav_tree as $i => $node) {
         if ($i == 0) {
             continue;
         }
         $list[$node->categoryId] = $node;
     }
     PortalBusiness::preOrderTree2RecursiveTree($list, $home_nav);
     $context['navigation'] = $home_nav;
     $template_path = '@TknyMedPortalModule/' . $template_path;
     return $this->renderTemplate($template_path, $context);
 }
Esempio n. 7
0
 protected function handle()
 {
     $tree = CategoryModel::getTree();
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         try {
             // 检查参数
             $category_name = $request->request->get('category_name');
             if (!$category_name) {
                 throw new \Exception("子分类链接标题不能为空");
             }
             $category_desc = $request->request->get('category_desc');
             $enabled = $request->request->get('enabled');
             $category_type = $request->request->get('category_type');
             if (!$category_type) {
                 throw new \Exception("子分类链接的类型不能为空");
             }
             if (!in_array($category_type, array('article-menu', 'menu', 'page', 'link', 'article'))) {
                 throw new \Exception("子分类链接的类型错误");
             }
             $enabled = intval($enabled);
             $parent_category_id = $request->request->get('parent_category_id');
             if (!$parent_category_id) {
                 throw new \Exception("请选择父链接");
             }
             $parent_category = CategoryModel::getPortalCategory($parent_category_id);
             if (!$parent_category) {
                 throw new \Exception("父链接不存在");
             }
             $now = time();
             $parent_category->createChildNode(array('category_name' => $category_name, 'category_desc' => $category_desc, 'category_type' => $category_type, 'enabled' => $enabled, 'create_timestamp' => $now, 'update_timestamp' => $now));
         } catch (\Exception $e) {
             $session = $this->getSession();
             $session->addFlash('error', $e->getMessage());
         }
         return new RedirectResponse($this->generateUrl('admin_portal_category_manage'));
     }
     return $this->render('category/add-category-modal.html.twig', array('tree' => $tree));
 }
Esempio n. 8
0
 public function __invoke($category_id = null)
 {
     $session = $this->getSession();
     $category = CategoryModel::getPortalCategory($category_id);
     if (!$category) {
         $session->addFlash('error', '分类不存在');
         return new RedirectResponse($this->generateUrl('portal_homepage'));
     }
     //        $parent_category = $category->getDirectParentNode();
     //        if ($parent_category->isRootNode()) {
     //            $parent_category = null;
     //        }
     switch ($category->categoryType) {
         case 'article':
         case 'article-menu':
             // 文章列表
             // 面包屑导航
             $breadcrumb = $category->getNodeSinglePath();
             unset($breadcrumb[0]);
             $breadcrumb = array_values($breadcrumb);
             // 边栏导航
             /** @var CategoryModel $top_nav */
             $top_nav = $breadcrumb[0];
             $side_nav = $top_nav->getDirectChildNodes();
             // 文章内容
             $article_id = $category->categoryDesc;
             $article_id = intval($article_id);
             $article = ArticleModel::getPortalArticle($article_id);
             if (!$article) {
                 $session->addFlash('error', '文章不存在');
                 return new RedirectResponse($this->generateUrl('portal_homepage'));
             }
             return $this->render('category/article.html.twig', array('breadcrumb' => $breadcrumb, 'side_nav' => $side_nav, 'category' => $category, 'parent_category' => $top_nav, 'article' => $article));
             break;
         case 'menu':
             // 面包屑导航
             $breadcrumb = $category->getNodeSinglePath();
             unset($breadcrumb[0]);
             $breadcrumb = array_values($breadcrumb);
             // 边栏导航
             /** @var CategoryModel $top_nav */
             $top_nav = $breadcrumb[0];
             $side_nav = $top_nav->getDirectChildNodes();
             $category = $side_nav[0];
             // 内容列表
             $request = $this->getRequest();
             $page = $request->query->get('page');
             if (!$page) {
                 $page = 1;
             }
             $size = 20;
             $pager = ArticleModel::listPortalArticles($page, $size, function (QueryBuilder $qb) use($category) {
                 /** @var CategoryModel $category */
                 $qb->andWhere($qb->expr()->eq('category_id', ':category_id'))->setParameter(':category_id', $category->categoryId);
                 $qb->andWhere($qb->expr()->gt('publish_timestamp', 0));
             });
             return $this->render('category/index.html.twig', array('breadcrumb' => $breadcrumb, 'side_nav' => $side_nav, 'pager' => $pager, 'category' => $category, 'parent_category' => $top_nav));
             break;
         case 'page':
             $breadcrumb = $category->getNodeSinglePath();
             unset($breadcrumb[0]);
             $breadcrumb = array_values($breadcrumb);
             // 边栏导航
             /** @var CategoryModel $top_nav */
             $top_nav = $breadcrumb[0];
             $side_nav = $top_nav->getDirectChildNodes();
             $category = $side_nav[0];
             return $this->render($category->categoryDesc, array('breadcrumb' => $breadcrumb, 'side_nav' => $side_nav, 'category' => $category, 'parent_category' => $top_nav));
             break;
         case 'link':
             return new RedirectResponse($category->categoryDesc);
             break;
         default:
             $session->addFlash('error', '错误的分类类型');
             return new RedirectResponse($this->generateUrl('portal_homepage'));
             break;
     }
 }
Esempio n. 9
0
 protected function handle()
 {
     /** @var CategoryModel[] $tree */
     $tree = CategoryModel::getTree();
     $session = $this->getSession();
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $posts = $request->request;
         $title = $posts->get('title');
         $content = $posts->get('content');
         $category_id = $posts->get('category_id');
         $op = $posts->get('op');
         $cdn_url = $this->getContainer()->getParameter('cdn_url');
         $cdn_url = str_replace('/', '\\/', $cdn_url);
         try {
             if (empty($title)) {
                 throw new \Exception('标题不能为空');
             }
             $category_valid = false;
             foreach ($tree as $category) {
                 if ($category->categoryId == $category_id) {
                     $category_valid = true;
                 }
             }
             if (!$category_valid) {
                 throw new \Exception("文章分类不能为空");
             }
             $article = new ArticleModel();
             $new_thumbnails = array();
             $pattern = "/<\\s*img\\s+[^>]*?src\\s*=\\s*(\\'|\")({$cdn_url}.*?)\\1[^>]*?\\/?\\s*>/i";
             preg_match_all($pattern, $content, $new_thumbnails);
             $new_thumbnails = $new_thumbnails[0];
             foreach ($new_thumbnails as $key => $thumbnail) {
                 $matches = array();
                 preg_match('/src=\\"(.*?)\\"/', $thumbnail, $matches);
                 $new_thumbnails[$key] = $matches[1];
             }
             $thumbnails = $new_thumbnails;
             $summary = strip_tags($content);
             $article->title = $title;
             $article->summary = $summary;
             $article->content = $content;
             $article->thumbnails = implode('<>', $thumbnails);
             $now = time();
             $article->createTimestamp = $now;
             if ($op == 'submit-publish') {
                 $article->publishTimestamp = $now;
             }
             $article->userId = 0;
             // 官方发布
             $article->categoryId = $category_id;
             ArticleModel::createPortalArticle($article);
             $session->addFlash('success', '操作成功');
             return new RedirectResponse($this->generateUrl('admin_portal_article_manage'));
         } catch (\Exception $e) {
             $session->addFlash('error', $e->getMessage());
             return new RedirectResponse($this->generateUrl('admin_portal_article_add'));
         }
     }
     return $this->render('article/add-article.html.twig', array('tree' => $tree));
 }
Esempio n. 10
0
 protected function handle()
 {
     $tree = CategoryModel::getTree();
     $session = $this->getSession();
     $article_id = $this->articleId;
     $article = ArticleModel::getPortalArticle($article_id);
     if (!$article) {
         $session->addFlash('error', '文章不存在');
         return new RedirectResponse($this->generateUrl('admin_portal_article_manage'));
     }
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $posts = $request->request;
         $title = $posts->get('title');
         $content = $posts->get('content');
         $thumbnails = $posts->get('thumbnails');
         $category_id = $posts->get('category_id');
         $category_valid = false;
         foreach ($tree as $category) {
             if ($category->categoryId == $category_id) {
                 $category_valid = true;
             }
         }
         if (!$category_valid) {
             throw new \Exception("文章分类不能为空");
         }
         if (empty($thumbnails)) {
             $thumbnails = array();
         }
         $reset_thumbnails = $posts->get('reset_thumbnails');
         $cdn_url = $this->getContainer()->getParameter('cdn_url');
         $cdn_url = str_replace('/', '\\/', $cdn_url);
         try {
             if (empty($title)) {
                 throw new \Exception('标题不能为空');
             }
             $article->title = $title;
             $new_thumbnails = array();
             $pattern = "/<\\s*img\\s+[^>]*?src\\s*=\\s*(\\'|\")({$cdn_url}.*?)\\1[^>]*?\\/?\\s*>/i";
             preg_match_all($pattern, $content, $new_thumbnails);
             $new_thumbnails = $new_thumbnails[0];
             foreach ($new_thumbnails as $key => $thumbnail) {
                 $matches = array();
                 preg_match('/src=\\"(.*?)\\"/', $thumbnail, $matches);
                 $new_thumbnails[$key] = $matches[1];
             }
             if ($reset_thumbnails) {
                 $thumbnails = $new_thumbnails;
             }
             $article->content = $content;
             $article->thumbnails = implode('<>', $thumbnails);
             $article->categoryId = $category_id;
             ArticleModel::savePortalArticle($article);
             $session->addFlash('success', '操作成功');
             return new RedirectResponse($this->generateUrl('admin_portal_article_edit', array('article_id' => $article_id)));
         } catch (\Exception $e) {
             $session->addFlash('error', $e->getMessage());
             return new RedirectResponse($this->generateUrl('admin_portal_article_edit', array('article_id' => $article_id)));
         }
     }
     return $this->render('article/edit-article.html.twig', array('article' => $article, 'tree' => $tree));
 }
Esempio n. 11
0
 protected function handle()
 {
     /** @var CategoryModel $root_node */
     $root_node = CategoryModel::getRootNode();
     if (!$root_node) {
         // 没有根分类,需要自动创建
         $node = new CategoryModel();
         $node->categoryName = '官网首页';
         $node->categoryDesc = '官网首页';
         $now = time();
         $node->createTimestamp = $now;
         $node->updateTimestamp = $now;
         $node->preOrderTreeLeft = 0;
         $node->preOrderTreeRight = 1;
         $root_node = CategoryModel::createPortalCategory($node);
     }
     /** @var CategoryModel[] $sub_tree */
     $sub_tree = $root_node->getSubTree();
     $list = array();
     foreach ($sub_tree as $i => $node) {
         if ($i == 0) {
             continue;
         }
         $list[$node->categoryId] = $node;
     }
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $session = $this->getSession();
         try {
             /*$root_category_name = $request->request->get('root_category_name');
               $root_category_name = trim($root_category_name);
               $root_category_desc = $request->request->get('root_category_desc');
               $root_category_desc = trim($root_category_desc);
               if (!$root_category_name) {
                   throw new \Exception("根菜单的名称不能为空");
               }
               $root_node->categoryName = $root_category_name;
               $root_node->categoryDesc = $root_category_desc;*/
             $root_category = $root_node->toArray();
             if (isset($root_category['depth'])) {
                 unset($root_category['depth']);
             }
             if (isset($root_category['width'])) {
                 unset($root_category['width']);
             }
             if (isset($root_category['children'])) {
                 unset($root_category['children']);
             }
             // 保存根菜单
             CategoryModel::editPortalCategory($root_category);
             $serialized_output = $request->request->get('serialized_output');
             $serialized_output = trim($serialized_output);
             $serialized_output = json_decode($serialized_output, true);
             $tree = $this->formatTree($serialized_output, $list);
             $root_node->children = $tree;
             $list = $this->recursiveTree2PreOrderTree($root_node);
             foreach ($list as $category) {
                 $category = $category->toArray();
                 if (isset($category['depth'])) {
                     unset($category['depth']);
                 }
                 if (isset($category['width'])) {
                     unset($category['width']);
                 }
                 if (isset($category['children'])) {
                     unset($category['children']);
                 }
                 // 保存根菜单
                 CategoryModel::editPortalCategory($category);
             }
             $session->addFlash('success', '操作成功');
         } catch (\Exception $e) {
             $session->addFlash('error', $e->getMessage());
         }
         return new RedirectResponse($this->generateUrl('admin_portal_category_manage'));
     }
     $this->preOrderTree2RecursiveTree($list, $root_node);
     return $this->render('category/manage-category.html.twig', array('root_node' => $root_node));
 }
Esempio n. 12
0
 /**
  * 保存
  * @param CategoryModel $blog_category
  * @return CategoryModel
  * @throws \Exception
  */
 public static function savePortalCategory(CategoryModel $blog_category)
 {
     return self::editPortalCategory($blog_category->toArray());
 }