<?php // +---------------------------------------------------------------------- // | ThinkCMF [ WE CAN DO IT MORE SIMPLE ] // +---------------------------------------------------------------------- // | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: 小夏 < 449134904@qq.com> // +---------------------------------------------------------------------- namespace app\portal\controller; use cmf\controller\AdminBaseController; use app\portal\model\PortalPostModel; use app\portal\service\PostService; use app\portal\model\PortalCategoryModel; use think\Db; use app\admin\model\ThemeModel; class AdminArticleController extends AdminBaseController { /** * 文章列表 * @adminMenu( * 'name' => '文章管理', * 'parent' => 'portal/AdminIndex/default', * 'display'=> true, * 'hasView'=> true, * 'order' => 10000, * 'icon' => '', * 'remark' => '文章列表', * 'param' => '' * ) * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function index() { $content = hook_one('portal_admin_article_index_view'); if (!empty($content)) { return $content; } $param = $this->request->param(); $categoryId = $this->request->param('category', 0, 'intval'); $postService = new PostService(); $data = $postService->adminArticleList($param); $data->appends($param); $portalCategoryModel = new PortalCategoryModel(); $categoryTree = $portalCategoryModel->adminCategoryTree($categoryId); $this->assign('start_time', isset($param['start_time']) ? $param['start_time'] : ''); $this->assign('end_time', isset($param['end_time']) ? $param['end_time'] : ''); $this->assign('keyword', isset($param['keyword']) ? $param['keyword'] : ''); $this->assign('articles', $data->items()); $this->assign('category_tree', $categoryTree); $this->assign('category', $categoryId); $this->assign('page', $data->render()); return $this->fetch(); } /** * 添加文章 * @adminMenu( * 'name' => '添加文章', * 'parent' => 'index', * 'display'=> false, * 'hasView'=> true, * 'order' => 10000, * 'icon' => '', * 'remark' => '添加文章', * 'param' => '' * ) * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function add() { $content = hook_one('portal_admin_article_add_view'); if (!empty($content)) { return $content; } $themeModel = new ThemeModel(); $articleThemeFiles = $themeModel->getActionThemeFiles('portal/Article/index'); $this->assign('article_theme_files', $articleThemeFiles); return $this->fetch(); } /** * 添加文章提交 * @adminMenu( * 'name' => '添加文章提交', * 'parent' => 'index', * 'display'=> false, * 'hasView'=> false, * 'order' => 10000, * 'icon' => '', * 'remark' => '添加文章提交', * 'param' => '' * ) */ public function addPost() { if ($this->request->isPost()) { $data = $this->request->param(); //状态只能设置默认值。未发布、未置顶、未推荐 $data['post']['post_status'] = 0; $data['post']['is_top'] = 0; $data['post']['recommended'] = 0; $post = $data['post']; $result = $this->validate($post, 'AdminArticle'); if ($result !== true) { $this->error($result); } $portalPostModel = new PortalPostModel(); if (!empty($data['photo_names']) && !empty($data['photo_urls'])) { $data['post']['more']['photos'] = []; foreach ($data['photo_urls'] as $key => $url) { $photoUrl = cmf_asset_relative_url($url); array_push($data['post']['more']['photos'], ["url" => $photoUrl, "name" => $data['photo_names'][$key]]); } } if (!empty($data['file_names']) && !empty($data['file_urls'])) { $data['post']['more']['files'] = []; foreach ($data['file_urls'] as $key => $url) { $fileUrl = cmf_asset_relative_url($url); array_push($data['post']['more']['files'], ["url" => $fileUrl, "name" => $data['file_names'][$key]]); } } $portalPostModel->adminAddArticle($data['post'], $data['post']['categories']); $data['post']['id'] = $portalPostModel->id; $hookParam = [ 'is_add' => true, 'article' => $data['post'] ]; hook('portal_admin_after_save_article', $hookParam); $this->success('添加成功!', url('AdminArticle/edit', ['id' => $portalPostModel->id])); } } /** * 编辑文章 * @adminMenu( * 'name' => '编辑文章', * 'parent' => 'index', * 'display'=> false, * 'hasView'=> true, * 'order' => 10000, * 'icon' => '', * 'remark' => '编辑文章', * 'param' => '' * ) * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function edit() { $content = hook_one('portal_admin_article_edit_view'); if (!empty($content)) { return $content; } $id = $this->request->param('id', 0, 'intval'); $portalPostModel = new PortalPostModel(); $post = $portalPostModel->where('id', $id)->find(); $postCategories = $post->categories()->alias('a')->column('a.name', 'a.id'); $postCategoryIds = implode(',', array_keys($postCategories)); $themeModel = new ThemeModel(); $articleThemeFiles = $themeModel->getActionThemeFiles('portal/Article/index'); $this->assign('article_theme_files', $articleThemeFiles); $this->assign('post', $post); $this->assign('post_categories', $postCategories); $this->assign('post_category_ids', $postCategoryIds); return $this->fetch(); } /** * 编辑文章提交 * @adminMenu( * 'name' => '编辑文章提交', * 'parent' => 'index', * 'display'=> false, * 'hasView'=> false, * 'order' => 10000, * 'icon' => '', * 'remark' => '编辑文章提交', * 'param' => '' * ) * @throws \think\Exception */ public function editPost() { if ($this->request->isPost()) { $data = $this->request->param(); //需要抹除发布、置顶、推荐的修改。 unset($data['post']['post_status']); unset($data['post']['is_top']); unset($data['post']['recommended']); $post = $data['post']; $result = $this->validate($post, 'AdminArticle'); if ($result !== true) { $this->error($result); } $portalPostModel = new PortalPostModel(); if (!empty($data['photo_names']) && !empty($data['photo_urls'])) { $data['post']['more']['photos'] = []; foreach ($data['photo_urls'] as $key => $url) { $photoUrl = cmf_asset_relative_url($url); array_push($data['post']['more']['photos'], ["url" => $photoUrl, "name" => $data['photo_names'][$key]]); } } if (!empty($data['file_names']) && !empty($data['file_urls'])) { $data['post']['more']['files'] = []; foreach ($data['file_urls'] as $key => $url) { $fileUrl = cmf_asset_relative_url($url); array_push($data['post']['more']['files'], ["url" => $fileUrl, "name" => $data['file_names'][$key]]); } } $portalPostModel->adminEditArticle($data['post'], $data['post']['categories']); $hookParam = [ 'is_add' => false, 'article' => $data['post'] ]; hook('portal_admin_after_save_article', $hookParam); $this->success('保存成功!'); } } /** * 文章删除 * @adminMenu( * 'name' => '文章删除', * 'parent' => 'index', * 'display'=> false, * 'hasView'=> false, * 'order' => 10000, * 'icon' => '', * 'remark' => '文章删除', * 'param' => '' * ) * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * @throws \think\exception\PDOException */ public function delete() { $param = $this->request->param(); $portalPostModel = new PortalPostModel(); if (isset($param['id'])) { $id = $this->request->param('id', 0, 'intval'); $result = $portalPostModel->where('id', $id)->find(); $data = [ 'object_id' => $result['id'], 'create_time' => time(), 'table_name' => 'portal_post', 'name' => $result['post_title'], 'user_id' => cmf_get_current_admin_id() ]; $resultPortal = $portalPostModel ->where('id', $id) ->update(['delete_time' => time()]); if ($resultPortal) { Db::name('portal_category_post')->where('post_id', $id)->update(['status' => 0]); Db::name('portal_tag_post')->where('post_id', $id)->update(['status' => 0]); Db::name('recycleBin')->insert($data); } $this->success("删除成功!", ''); } if (isset($param['ids'])) { $ids = $this->request->param('ids/a'); $recycle = $portalPostModel->where('id', 'in', $ids)->select(); $result = $portalPostModel->where('id', 'in', $ids)->update(['delete_time' => time()]); if ($result) { Db::name('portal_category_post')->where('post_id', 'in', $ids)->update(['status' => 0]); Db::name('portal_tag_post')->where('post_id', 'in', $ids)->update(['status' => 0]); foreach ($recycle as $value) { $data = [ 'object_id' => $value['id'], 'create_time' => time(), 'table_name' => 'portal_post', 'name' => $value['post_title'], 'user_id' => cmf_get_current_admin_id() ]; Db::name('recycleBin')->insert($data); } $this->success("删除成功!", ''); } } } /** * 文章发布 * @adminMenu( * 'name' => '文章发布', * 'parent' => 'index', * 'display'=> false, * 'hasView'=> false, * 'order' => 10000, * 'icon' => '', * 'remark' => '文章发布', * 'param' => '' * ) */ public function publish() { $param = $this->request->param(); $portalPostModel = new PortalPostModel(); if (isset($param['ids']) && isset($param["yes"])) { $ids = $this->request->param('ids/a'); $portalPostModel->where('id', 'in', $ids)->update(['post_status' => 1, 'published_time' => time()]); $this->success("发布成功!", ''); } if (isset($param['ids']) && isset($param["no"])) { $ids = $this->request->param('ids/a'); $portalPostModel->where('id', 'in', $ids)->update(['post_status' => 0]); $this->success("取消发布成功!", ''); } } /** * 文章置顶 * @adminMenu( * 'name' => '文章置顶', * 'parent' => 'index', * 'display'=> false, * 'hasView'=> false, * 'order' => 10000, * 'icon' => '', * 'remark' => '文章置顶', * 'param' => '' * ) */ public function top() { $param = $this->request->param(); $portalPostModel = new PortalPostModel(); if (isset($param['ids']) && isset($param["yes"])) { $ids = $this->request->param('ids/a'); $portalPostModel->where('id', 'in', $ids)->update(['is_top' => 1]); $this->success("置顶成功!", ''); } if (isset($_POST['ids']) && isset($param["no"])) { $ids = $this->request->param('ids/a'); $portalPostModel->where('id', 'in', $ids)->update(['is_top' => 0]); $this->success("取消置顶成功!", ''); } } /** * 文章推荐 * @adminMenu( * 'name' => '文章推荐', * 'parent' => 'index', * 'display'=> false, * 'hasView'=> false, * 'order' => 10000, * 'icon' => '', * 'remark' => '文章推荐', * 'param' => '' * ) */ public function recommend() { $param = $this->request->param(); $portalPostModel = new PortalPostModel(); if (isset($param['ids']) && isset($param["yes"])) { $ids = $this->request->param('ids/a'); $portalPostModel->where('id', 'in', $ids)->update(['recommended' => 1]); $this->success("推荐成功!", ''); } if (isset($param['ids']) && isset($param["no"])) { $ids = $this->request->param('ids/a'); $portalPostModel->where('id', 'in', $ids)->update(['recommended' => 0]); $this->success("取消推荐成功!", ''); } } /** * 文章排序 * @adminMenu( * 'name' => '文章排序', * 'parent' => 'index', * 'display'=> false, * 'hasView'=> false, * 'order' => 10000, * 'icon' => '', * 'remark' => '文章排序', * 'param' => '' * ) */ public function listOrder() { parent::listOrders(Db::name('portal_category_post')); $this->success("排序更新成功!", ''); } }