protected function handle() { $article_id = $this->id; // 插件 $data = PluginModel::allPlugins(); $plugins = array(); foreach ($data as $row) { $plugins[$row['id']] = $row; } $data = ArticlePluginModel::allRelationship(function (QueryBuilder $qb) use($article_id) { $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article_id); }); $article_plugins = array(); foreach ($data as $info) { $info['options'] = json_decode($info['options'], true); $article_plugins[$info['plugin_id']] = $info; } $request = $this->getRequest(); if ($request->getMethod() == 'POST') { /*$posts = $request->request->all(); foreach ($article_plugins as $plugin_id => $plugin_info) { $plugin_info['options']['value'] = $posts[$plugin_id]; // json $plugin_info['options'] = json_encode($plugin_info['options']); // 保存 ArticlePluginModel::editArticlePlugin($plugin_info); }*/ $session = $this->getSession(); $session->addFlash('success', '操作成功'); return new RedirectResponse($this->generateUrl('admin_www_plugin_edit', array('id' => $article_id))); } return $this->render('plugin/edit.html.twig', array('plugins' => $plugins, 'article_plugins' => $article_plugins, 'article_id' => $article_id)); }
protected function handle() { // 系统中的未启用的插件 $all_plugins = $this->getContainer()->getParameter('plugins'); if ($all_plugins) { $all_plugins = $all_plugins->toArray(); } else { $all_plugins = array(); } $unused_plugins = array(); $used_plugins = array(); $data = PluginModel::allPlugins(); foreach ($data as $row) { $row['dependency'] = json_decode($row['dependency'], true); $used_plugins[$row['id']] = $row; } foreach ($all_plugins as $plugin_id => $plugin) { $plugin['apply_code'] = htmlspecialchars($plugin['apply_code']); if (!in_array($plugin_id, $used_plugins)) { $unused_plugins[$plugin_id] = $plugin; } } $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $ids = $request->request->get('ids'); $db = WWWDatabase::getDb(); $session = $this->getSession(); $db->transaction(); try { $plugins = PluginModel::allPlugins(function (QueryBuilder $qb) use($ids) { foreach ($ids as $k => $id) { $qb->orWhere($qb->expr()->eq('id', ':id_' . $k))->setParameter(':id_' . $k, $id); } }); // 检查是否有依赖 // 找出不删的插件 $not_delete_used_plugins = array(); foreach ($used_plugins as $used_plugin) { if (!in_array($used_plugin['id'], $ids)) { $not_delete_used_plugins[] = $used_plugin; } } foreach ($not_delete_used_plugins as $not_delete_used_plugin) { if (($intersect = array_intersect(array_values($not_delete_used_plugin['dependency']), array_values($ids))) != null) { $dependent_plugin_ids = implode(',', $intersect); throw new \Exception("插件'{$not_delete_used_plugin['id']}'依赖'{$dependent_plugin_ids}',不能弃用"); } } // 删除插件 foreach ($plugins as $plugin) { PluginModel::deletePlugin($plugin['id']); // 删除插件与文章的关系 $article_plugins = ArticlePluginModel::allRelationship(function (QueryBuilder $qb) use($plugin) { $qb->where($qb->expr()->eq('plugin_id', ':plugin_id'))->setParameter(':plugin_id', $plugin['id']); }); foreach ($article_plugins as $article_plugin) { ArticlePluginModel::deleteRelationship($article_plugin['article_id'], $plugin['id']); } } $db->commit(); $session->addFlash('success', '操作成功'); } catch (\Exception $e) { $db->rollback(); $session->addFlash('error', $e->getMessage()); } return new RedirectResponse($this->generateUrl('admin_www_plugins')); } else { $ids = $request->query->get('ids'); if (is_string($ids)) { $ids = json_decode($ids, true); } if (!$ids) { throw new \Exception('没有选择任何插件'); } // 显示要删除的插件 $plugins = PluginModel::allPlugins(function (QueryBuilder $qb) use($ids) { foreach ($ids as $k => $id) { $qb->orWhere($qb->expr()->eq('id', ':id_' . $k))->setParameter(':id_' . $k, $id); } }); // 检查是否有依赖 // 找出不删的插件 $not_delete_used_plugins = array(); foreach ($used_plugins as $used_plugin) { if (!in_array($used_plugin['id'], $ids)) { $not_delete_used_plugins[] = $used_plugin; } } foreach ($not_delete_used_plugins as $not_delete_used_plugin) { if (($intersect = array_intersect(array_values($not_delete_used_plugin['dependency']), array_values($ids))) != null) { $dependent_plugin_ids = implode(',', $intersect); throw new \Exception("插件'{$not_delete_used_plugin['id']}'依赖'{$dependent_plugin_ids}',不能弃用"); } } return $this->render('plugin/delete.html.twig', array('plugins' => $plugins)); } }
public function __invoke($id = null) { $request = $this->getRequest(); $a_page = $request->query->get('a_page'); if (!$a_page) { $a_page = 1; } $a_size = $request->query->get('a_size'); $article = ArticleModel::getArticle($id); $article = $article->toArray(); // 取出文章的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(); } // 分页 if (!$a_size) { $content_pager = explode('<!-- pagebreak -->', $article['content']); } else { // 全文 $content_pager = array(str_replace('<!-- pagebreak -->', '', $article['content'])); } $article['content'] = $content_pager[$a_page - 1]; if (!$a_size) { $count = count($content_pager); } else { $count = 0; } $a_pager = new Pager(array(), $count, $a_page, 1); $a_pager->setPageParamName('a_page'); // 文章的发布者 $article['publisher'] = array(); $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) { $article_publisher = array_shift($article_publishers); $publisher_id = $article_publisher['publisher_id']; $publisher = PublisherModel::getPublisher($publisher_id); if ($publisher) { $article['publisher'] = $publisher; } } // 轮播图 $carousels = 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', 'carousel'); }); foreach ($carousels as $k => $v) { $metadata = json_decode($v['metadata'], true); unset($v['metadata']); $v['description'] = ''; if ($metadata) { $v['description'] = $metadata['description']; } $carousels[$k] = $v; } // 所有的插件 $data = PluginModel::allPlugins(); $plugins = array(); foreach ($data as $row) { $row['sources'] = json_decode($row['sources'], true); $row['options'] = json_decode($row['options'], true); $row['apply_code'] = htmlspecialchars_decode($row['apply_code']); $plugins[$row['id']] = $row; } // 文章的插件 $data = ArticlePluginModel::allRelationship(function (QueryBuilder $qb) use($article) { $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article['id']); }); foreach ($data as $row) { $row['sources'] = json_decode($row['sources'], true); $row['options'] = json_decode($row['options'], true); $row['apply_code'] = htmlspecialchars_decode($row['apply_code']); if (isset($plugins[$row['plugin_id']])) { $plugins[$row['plugin_id']] = $row; } } // 评论 $c_page = $request->query->get('c_page'); if (!$c_page) { $c_page = 1; } $c_size = $request->query->get('c_size'); if (!$c_size) { $c_size = 3; } $c_pager = CommentModel::listComments($c_page, $c_size, function (QueryBuilder $qb) use($article) { $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article['id']); $qb->addOrderBy('create_timestamp'); }); $comments_data = $c_pager->getData(); foreach ($comments_data as $k => $comment_data) { // 获取用户数据 $comment_user_id = $comment_data['user_id']; /** @var \Tachigo\User\Aware\Component\UserAwareDispatcher $dispatcher */ $dispatcher = $this->getContainer()->tag('tachigo_user_dispatcher'); /** @var \Tachigo\User\Aware\Hook\UserHook $hook */ $hook = $this->getContainer()->tag('tachigo_user_hook.user'); $hook->setUserId($comment_user_id); $dispatcher->fire($hook); $comment_data['user'] = $hook->getResults(); $comment_data['reply'] = array(); if ($comment_data['comment_id']) { $reply_comment = CommentModel::getComment($comment_data['comment_id'])->toArray(); $comment_user_id = $reply_comment['user_id']; /** @var \Tachigo\User\Aware\Component\UserAwareDispatcher $dispatcher */ $dispatcher = $this->getContainer()->tag('tachigo_user_dispatcher'); /** @var \Tachigo\User\Aware\Hook\UserHook $hook */ $hook = $this->getContainer()->tag('tachigo_user_hook.user'); $hook->setUserId($comment_user_id); $dispatcher->fire($hook); $reply_comment['user'] = $hook->getResults(); $comment_data['reply'] = $reply_comment; } $comments_data[$k] = $comment_data; } $c_pager->setData($comments_data); $c_pager->setPageParamName('c_page'); // 分页内容 $pager_query = array('a_page' => $a_page, 'a_size' => $a_size, 'c_page' => $c_page, 'c_size' => $c_size); $a_pager->setQuery($pager_query); $c_pager->setQuery($pager_query); // 导航条 $structure_id = $article['structure_id']; $structure = StructureModel::getStructure($structure_id); /** @var StructureModel[] $breadcrumbs */ $breadcrumbs = $structure->getNodeSinglePath(); array_shift($breadcrumbs); return $this->render('article/blog.html.twig', array('article' => $article, 'a_pager' => $a_pager, 'c_pager' => $c_pager, 'carousels' => $carousels, 'plugins' => $plugins, 'breadcrumbs' => $breadcrumbs)); }
/** * 保存 * @param ArticlePluginModel $relationship * @return ArticlePluginModel * @throws \Exception */ public static function saveArticlePlugin(ArticlePluginModel $relationship) { return self::editArticlePlugin($relationship->toArray()); }