Example #1
0
 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));
 }
Example #2
0
 protected function handle()
 {
     $tree = StructureModel::getTree();
     $tags = TagModel::allTags();
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $session = $this->getSession();
         $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');
             if (!$title) {
                 throw new \Exception('文章标题不能为空');
             }
             if (!$structure_id) {
                 throw new \Exception('请选择栏目');
             }
             $structure = StructureModel::getStructure($structure_id);
             if (!$structure) {
                 throw new \Exception('栏目不存在');
             }
             $tags_id = $posts->get('tags');
             if (!$tags_id) {
                 $tags_id = array();
             }
             // 开启事务
             $db->transaction();
             // 创建文章
             $article = new ArticleModel();
             $article->title = $title;
             $article->content = $content;
             $article->summary = $summary;
             $article->structureId = $structure_id;
             $now = time();
             $article->createTimestamp = $now;
             $article->updateTimestamp = $now;
             // 保存
             $article = ArticleModel::createArticle($article);
             // 添加标签的文章数量
             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);
             }
             // 解析媒体
             $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);
             }
             $db->commit();
             $session->addFlash('success', '创建成功');
             return new RedirectResponse($this->generateUrl('admin_www_article_edit', array('id' => $article->id)));
         } catch (\Exception $e) {
             $db->rollback();
             $session->addFlash('error', $e->getMessage());
             return new RedirectResponse($this->generateUrl('admin_www_article_add'));
         }
     }
     return $this->render('article/add.html.twig', array('tree' => $tree, 'tags' => $tags));
 }