示例#1
0
 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));
         }
     }
 }
示例#2
0
 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));
         }
     }
 }
示例#3
0
 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));
         }
     }
 }
示例#4
0
 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));
 }
示例#5
0
 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));
 }
示例#6
0
 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));
 }
示例#7
0
    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));
    }