Example #1
0
 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));
 }
Example #2
0
 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));
     }
 }
Example #3
0
 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));
 }
Example #4
0
 /**
  * 保存
  * @param ArticlePluginModel $relationship
  * @return ArticlePluginModel
  * @throws \Exception
  */
 public static function saveArticlePlugin(ArticlePluginModel $relationship)
 {
     return self::editArticlePlugin($relationship->toArray());
 }