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() { $tags = TagModel::allTags(); $tree = StructureModel::getTree(); $session = $this->getSession(); $article = ArticleModel::getArticle($this->id); if (!$article) { $session->addFlash('error', '文章不存在'); return new RedirectResponse($this->generateUrl('admin_www_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); }); $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $posts = $request->request; $db = WWWDatabase::getDb(); try { $title = $posts->get('title'); $content = $posts->get('content'); $summary = $posts->get('summary'); $structure_id = $posts->get('structure_id'); $tags_id = $posts->get('tags'); if (!$tags_id) { $tags_id = array(); } if (!$title) { throw new \Exception('文章标题不能为空'); } if (!$structure_id) { throw new \Exception('请选择栏目'); } $structure = StructureModel::getStructure($structure_id); if (!$structure) { throw new \Exception('栏目不存在'); } // 开启事务 $db->transaction(); // 创建文章 $article->title = $title; $article->content = $content; $article->summary = $summary; $article->structureId = $structure_id; $article->updateTimestamp = time(); // 保存 // 解析媒体 // 删除已有媒体 $medias = MediaModel::allMedias(function (QueryBuilder $qb) use($article) { $qb->andWhere($qb->expr()->eq('article_id', ':article_id'))->setParameter(':article_id', $article->id); }); foreach ($medias as $media_info) { MediaModel::deleteMedia($media_info['id']); } $cdn_url = $this->getContainer()->getParameter('cdn_url'); $cdn_url = str_replace('/', '\\/', $cdn_url); // 解析图片 $pictures = ArticleBusiness::parsePictures($cdn_url, $content); foreach ($pictures as $picture_source) { $media = new MediaModel(); $media->type = 'picture'; $media->source = $picture_source; $media->articleId = $article->id; // 保存 MediaModel::createMedia($media); } ArticleModel::saveArticle($article); // 清空原有分类 foreach ($article_tags as $article_tag) { $tag_id = $article_tag['tag_id']; $tag = TagModel::getTag($tag_id); if ($tag) { $tag->articleCount -= 1; // 保存 TagModel::saveTag($tag); } // 删除关联 $article_tag = ArticleTagModel::getRelationship($article->id, $tag->id); if ($article_tag) { ArticleTagModel::deleteRelationship($article->id, $tag->id); } } // 添加标签的文章数量 foreach ($tags_id as $tag_id) { $tag = TagModel::getTag($tag_id); if (!$tag) { throw new \Exception('标签不存在'); } $tag->articleCount += 1; // 保存tag标签 TagModel::saveTag($tag); // 添加文章与标签的关系 $article_tag = new ArticleTagModel(); $article_tag->articleId = $article->id; $article_tag->tagId = $tag->id; ArticleTagModel::createRelationship($article_tag); } /*// 添加插件 $plugin_ids = $posts->get('plugins'); if (!$plugin_ids) { $plugin_ids = array(); } // 删除不要的插件 foreach ($article_plugins as $article_plugin) { if (!in_array($article_plugin['plugin_id'], $plugin_ids)) { ArticlePluginModel::deleteRelationship($article_plugin['article_id'], $article_plugin['plugin_id']); unset($article_plugins[$article_plugin['plugin_id']]); } } // 检查插件是否存在 foreach ($plugin_ids as $plugin_id) { if (!isset($plugins[$plugin_id])) { throw new \Exception("插件不存在或者未启用"); } if (!isset($article_plugins[$plugin_id])) { // 创建文章插件关系 $article_plugin = new ArticlePluginModel(); $article_plugin->articleId = $article->id; $article_plugin->pluginId = $plugin_id; // 存储默认数据 $article_plugin->sources = $plugins[$plugin_id]['sources']; $article_plugin->applyCode = $plugins[$plugin_id]['default_code']; $article_plugin->options = $plugins[$plugin_id]['default_options']; // 保存 ArticlePluginModel::createRelationship($article_plugin); } }*/ $db->commit(); $session->addFlash('success', '保存成功'); return new RedirectResponse($this->generateUrl('admin_www_article_edit', array('id' => $this->id))); } catch (\Exception $e) { $db->rollback(); $session->addFlash('error', $e->getMessage()); return new RedirectResponse($this->generateUrl('admin_www_article_edit', array('id' => $this->id))); } } return $this->render('article/edit.html.twig', array('article' => $article, 'tree' => $tree, 'tags' => $tags, 'article_tags' => $article_tags)); }
protected function handle() { $request = $this->getRequest(); $article = ArticleModel::getArticle($this->id); if (!$article) { $session = $this->getSession(); $session->addFlash('error', '文章不存在'); return new RedirectResponse($this->generateUrl('admin_www_article')); } $pictures = 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'); }); // 已有的轮播图 $data = 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'); }); $carousels = array(); foreach ($data as $media) { $metadata = json_decode($media['metadata'], true); unset($media['metadata']); $original_media_id = $metadata['media_id']; $description = $metadata['description']; $media['description'] = $description; $carousels[$original_media_id] = $media; } if ($request->getMethod() == 'POST') { $posts = $request->request; $post_carousels = $posts->get('carousels'); if (!$post_carousels) { $post_carousels = array(); } $session = $this->getSession(); $db = WWWDatabase::getDb(); try { $db->transaction(); // 清空已有轮播图 $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 $carousel) { MediaModel::deleteMedia($carousel['id']); } // 添加新轮播 foreach ($post_carousels as $original_media_id => $info) { $carousel = new MediaModel(); $carousel->articleId = $article->id; $carousel->type = 'carousel'; $carousel->source = $info['source']; $carousel->metadata = json_encode(array('media_id' => $original_media_id, 'description' => $info['description'])); // 保存 MediaModel::createMedia($carousel); } $db->commit(); $session->addFlash('success', '操作成功'); } catch (\Exception $e) { $db->rollback(); $session->addFlash('error', $e->getMessage()); } return new RedirectResponse($this->generateUrl('admin_www_article_carousel', array('id' => $article->id))); } return $this->render('article/carousel.html.twig', array('pictures' => $pictures, 'carousels' => $carousels, 'article' => $article)); }