123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572 |
- <?php
- /**
- * @copyright (C)2016-2099 Hnaoyun Inc.
- * @author XingMeng
- * @email hnxsh@foxmail.com
- * @date 2017年12月15日
- * 文章控制器
- */
- namespace app\admin\controller\content;
-
- use core\basic\Controller;
- use app\admin\model\content\ContentModel;
-
- class ContentController extends Controller
- {
-
- private $model;
-
- private $blank;
-
- public function __construct()
- {
- $this->model = new ContentModel();
- }
-
- // 文章列表
- public function index()
- {
- if ((! ! $id = get('id', 'int')) && $result = $this->model->getContent($id)) {
- $this->assign('more', true);
- $this->assign('content', $result);
- } else {
- $this->assign('list', true);
- if (! $mcode = get('mcode', 'var')) {
- error('传递的模型编码参数有误,请核对后重试!');
- }
-
- if (isset($_GET['keyword'])) {
- if (! ! $scode = get('scode', 'var')) {
- $result = $this->model->findContent($mcode, $scode, get('keyword', 'vars'));
- } else {
- $result = $this->model->findContentAll($mcode, get('keyword', 'vars'));
- }
- } elseif (! ! $scode = get('scode', 'int')) {
- $result = $this->model->findContent($mcode, $scode, '');
- } else {
- $result = $this->model->getList($mcode);
- }
- $this->assign('contents', $result);
-
- // 文章分类下拉列表
- $sort_model = model('admin.content.ContentSort');
- $sort_select = $sort_model->getListSelect($mcode);
- $this->assign('search_select', $this->makeSortSelect($sort_select, get('scode')));
- $this->assign('sort_select', $this->makeSortSelect($sort_select, session('addscode')));
- $this->assign('subsort_select', $this->makeSortSelect($sort_select));
-
- // 模型名称
- $this->assign('model_name', model('admin.content.Model')->getName($mcode));
-
- // 扩展字段
- $this->assign('extfield', model('admin.content.ExtField')->getModelField($mcode));
-
- $this->assign('baidu_zz_token', $this->config('baidu_zz_token'));
- $this->assign('baidu_ks_token', $this->config('baidu_ks_token'));
-
- // 前端地址连接符判断
- $url_break_char = $this->config('url_break_char') ?: '_';
- $this->assign('url_break_char', $url_break_char);
-
- // 获取会员分组
- $this->assign('groups', model('admin.member.MemberGroup')->getSelect());
- }
-
- $this->display('content/content.html');
- }
-
- // 文章增加
- public function add()
- {
- if ($_POST) {
-
- // 获取数据
- $scode = post('scode');
- $subscode = post('subscode');
- $title = post('title');
- $titlecolor = post('titlecolor');
- $subtitle = post('subtitle');
- $filename = trim(post('filename'), '/');
- $author = post('author');
- $source = post('source');
- $outlink = post('outlink');
- $date = post('date');
- $ico = post('ico');
- $pics = post('pics');
-
- // 获取多图标题
- $picstitle = post('picstitle');
- if ($picstitle) {
- $picstitle = implode(',', $picstitle);
- }
-
- $content = post('content');
- $tags = str_replace(',', ',', post('tags'));
- $enclosure = post('enclosure');
- $keywords = post('keywords');
- $description = post('description');
- $status = post('status', 'int');
- $istop = post('istop', 'int', '', '', 0);
- $isrecommend = post('isrecommend', 'int', '', '', 0);
- $isheadline = post('isheadline', 'int', '', '', 0);
-
- $gid = post('gid', 'int') ?: 0;
- $gtype = post('gtype', 'int') ?: 4;
- $gnote = post('gnote');
-
- if (! $scode) {
- alert_back('内容分类不能为空!');
- }
-
- if (! $title) {
- alert_back('文章标题不能为空!');
- }
-
- if ($filename && ! preg_match('/^[a-zA-Z0-9\-_\/]+$/', $filename)) {
- alert_back('内容URL名称只允许字母、数字、横线、下划线组成!');
- }
-
- // 自动提起前一百个字符为描述
- if (! $description && isset($_POST['content'])) {
- $description = escape_string(clear_html_blank(substr_both(strip_tags($_POST['content']), 0, 150)));
- }
-
- // 无缩略图时,自动提取文章第一张图为缩略图
- if (! $ico && preg_match('/<img\s+.*?src=\s?[\'|\"](.*?(\.gif|\.jpg|\.png|\.jpeg))[\'|\"].*?[\/]?>/i', decode_string($content), $srcs) && isset($srcs[1])) {
- $ico = $srcs[1];
- }
-
- // 缩放缩略图
- if ($ico) {
- resize_img(ROOT_PATH . $ico, '', $this->config('ico.max_width'), $this->config('ico.max_height'));
- }
-
- // 检查自定义URL名称
- if ($filename) {
- while ($this->model->checkFilename($filename)) {
- $filename = $filename . '-' . mt_rand(1, 20);
- }
- }
-
- // 记住新增栏目
- session('addscode', $scode);
-
- // 构建数据
- $data = array(
- 'acode' => session('acode'),
- 'scode' => $scode,
- 'subscode' => $subscode,
- 'title' => $title,
- 'titlecolor' => $titlecolor,
- 'subtitle' => $subtitle,
- 'filename' => $filename,
- 'author' => $author,
- 'source' => $source,
- 'outlink' => $outlink,
- 'date' => $date,
- 'ico' => $ico,
- 'pics' => $pics,
- 'picstitle' => $picstitle,
- 'content' => $content,
- 'tags' => $tags,
- 'enclosure' => $enclosure,
- 'keywords' => $keywords,
- 'description' => clear_html_blank($description),
- 'sorting' => 255,
- 'status' => $status,
- 'istop' => $istop,
- 'isrecommend' => $isrecommend,
- 'isheadline' => $isheadline,
- 'gid' => $gid,
- 'gtype' => $gtype,
- 'gnote' => $gnote,
- 'visits' => 0,
- 'likes' => 0,
- 'oppose' => 0,
- 'create_user' => session('username'),
- 'update_user' => session('username')
- );
-
- // 执行添加
- if (! ! $id = $this->model->addContent($data)) {
- // 扩展内容添加
- foreach ($_POST as $key => $value) {
- if (preg_match('/^ext_[\w\-]+$/', $key)) {
- if (! isset($data2['contentid'])) {
- $data2['contentid'] = $id;
- }
- $temp = post($key);
- if (is_array($temp)) {
- $data2[$key] = implode(',', $temp);
- } else {
- $data2[$key] = str_replace("\r\n", '<br>', $temp);
- }
- }
- }
- if (isset($data2)) {
- if (! $this->model->addContentExt($data2)) {
- $this->model->delContent($id);
- $this->log('新增文章失败!');
- error('新增失败!', - 1);
- }
- }
-
- $this->log('新增文章成功!');
- if (! ! $backurl = get('backurl')) {
- success('新增成功!', base64_decode($backurl));
- } else {
- success('新增成功!', url('/admin/Content/index/mcode/' . get('mcode')));
- }
- } else {
- $this->log('新增文章失败!');
- error('新增失败!', - 1);
- }
- }
- }
-
- // 生成分类选择
- private function makeSortSelect($tree, $selectid = null)
- {
- $list_html = '';
- foreach ($tree as $value) {
- // 默认选择项
- if ($selectid == $value->scode) {
- $select = "selected='selected'";
- } else {
- $select = '';
- }
- $list_html .= "<option value='{$value->scode}' $select>{$this->blank}{$value->name}";
- // 子菜单处理
- if ($value->son) {
- $this->blank .= ' ';
- $list_html .= $this->makeSortSelect($value->son, $selectid);
- }
- }
- // 循环完后回归位置
- $this->blank = substr($this->blank, 0, - 6);
- return $list_html;
- }
-
- // 文章删除
- public function del()
- {
- // 执行批量删除
- if ($_POST) {
- if (! ! $list = post('list')) {
- if ($this->model->delContentList($list)) {
- $this->model->delContentExtList($list);
- $this->log('批量删除文章成功!');
- success('批量删除成功!', - 1);
- } else {
- $this->log('批量删除文章失败!');
- error('批量删除失败!', - 1);
- }
- } else {
- alert_back('请选择要删除的内容!');
- }
- }
-
- if (! $id = get('id', 'int')) {
- error('传递的参数值错误!', - 1);
- }
-
- if ($this->model->delContent($id)) {
- $this->model->delContentExt($id);
- $this->log('删除文章' . $id . '成功!');
- success('删除成功!', - 1);
- } else {
- $this->log('删除文章' . $id . '失败!');
- error('删除失败!', - 1);
- }
- }
-
- // 文章修改
- public function mod()
- {
- if (! ! $submit = post('submit')) {
- switch ($submit) {
- case 'sorting': // 修改列表排序
- $listall = post('listall');
- if ($listall) {
- $sorting = post('sorting');
- foreach ($listall as $key => $value) {
- if ($sorting[$key] === '' || ! is_numeric($sorting[$key]))
- $sorting[$key] = 255;
- $this->model->modContent($value, "sorting=" . $sorting[$key]);
- }
- $this->log('修改内容排序成功!');
- success('修改成功!', - 1);
- } else {
- alert_back('排序失败,无任何内容!');
- }
- break;
- case 'copy':
- $list = post('list');
- $scode = post('scode');
- if (! $list) {
- alert_back('请选择要复制的内容!');
- }
- if (! $scode) {
- alert_back('请选择目标栏目!');
- }
- if ($this->model->copyContent($list, $scode)) {
- $this->log('复制内容成功!');
- success('复制内容成功!', - 1);
- } else {
- alert_back('复制内容失败!');
- }
- break;
- case 'move':
- $list = post('list');
- $scode = post('scode');
- if (! $list) {
- alert_back('请选择要移动的内容!');
- }
- if (! $scode) {
- alert_back('请选择目标栏目!');
- }
-
- if ($this->model->modContent($list, "scode='" . $scode . "'")) {
- $this->log('移动内容成功!');
- success('移动内容成功!', - 1);
- } else {
- alert_back('移动内容失败!');
- }
- break;
- case 'baiduzz':
- $list = post('list');
- $urls = post('urls');
- if (! $list) {
- alert_back('请选择要推送的内容!');
- }
- // 依次推送
- $domain = get_http_url();
- if (! $token = $this->config('baidu_zz_token')) {
- alert_back('请先到系统配置中填写百度普通收录推送token值!');
- }
- $api = "http://data.zz.baidu.com/urls?site=$domain&token=$token";
- foreach ($list as $key => $value) {
- $url = $domain . $urls[$value];
-
- //替换 .html 后缀
- $url = str_replace(".html","",$url);
-
-
- $this->log('百度普通收录推送:' . $url);
- $post_urls[] = $url;
- }
- $result = post_baidu($api, $post_urls);
- if (isset($result->error)) {
- alert_back('百度普通收录推送发生错误:' . $result->message);
- } elseif (isset($result->success)) {
- alert_back('成功推送' . $result->success . '条,今天剩余可推送' . $result->remain . '条数!');
- } else {
- alert_back('发生未知错误!');
- }
- case 'baiduks':
- $list = post('list');
- $urls = post('urls');
- if (! $list) {
- alert_back('请选择要推送的内容!');
- }
- // 依次推送
- $domain = get_http_url();
- if (! $token = $this->config('baidu_ks_token')) {
- alert_back('请先到系统配置中填写百度快速收录推送token值!');
- }
- $api = "http://data.zz.baidu.com/urls?site=$domain&token=$token&type=daily";
- foreach ($list as $key => $value) {
- $url = $domain . $urls[$value];
-
- //替换 .html 后缀
- $url = str_replace(".html","",$url);
-
- $this->log('百度快速收录推送:' . $url);
- $post_urls[] = $url;
- }
- $result = post_baidu($api, $post_urls);
- if (isset($result->error)) {
- alert_back('百度快速收录推送发生错误:' . $result->message);
- } elseif (isset($result->success_daily)) {
- alert_back('成功推送' . $result->success_daily . '条,今天剩余可推送' . $result->remain_daily . '条数!');
- } else {
- alert_back('发生未知错误!');
- }
- }
- }
-
- if (! $id = get('id', 'int')) {
- error('传递的参数值错误!', - 1);
- }
-
- // 单独修改状态
- if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
- if ($this->model->modContent($id, "$field='$value',update_user='" . session('username') . "'")) {
- location(- 1);
- } else {
- alert_back('修改失败!');
- }
- }
-
- // 修改操作
- if ($_POST) {
-
- // 获取数据
- $scode = post('scode');
- $subscode = post('subscode');
- $title = post('title');
- $titlecolor = post('titlecolor');
- $subtitle = post('subtitle');
- $filename = trim(post('filename'), '/');
- $author = post('author');
- $source = post('source');
- $outlink = post('outlink');
- $date = post('date');
- $ico = post('ico');
- $pics = post('pics');
-
- // 获取多图标题
- $picstitle = post('picstitle');
- if ($picstitle) {
- $picstitle = implode(',', $picstitle);
- }
-
- $content = post('content');
- $tags = str_replace(',', ',', post('tags'));
- $enclosure = post('enclosure');
- $keywords = post('keywords');
- $description = post('description');
- $status = post('status', 'int');
- $istop = post('istop', 'int', '', '', 0);
- $isrecommend = post('isrecommend', 'int', '', '', 0);
- $isheadline = post('isheadline', 'int', '', '', 0);
-
- $gid = post('gid', 'int') ?: 0;
- $gtype = post('gtype', 'int') ?: 4;
- $gnote = post('gnote');
-
- if (! $scode) {
- alert_back('内容分类不能为空!');
- }
-
- if (! $title) {
- alert_back('文章标题不能为空!');
- }
-
- if ($filename && ! preg_match('/^[a-zA-Z0-9\-_\/]+$/', $filename)) {
- alert_back('内容URL名称只允许字母、数字、横线、下划线组成!');
- }
-
- // 自动提起前一百个字符为描述
- if (! $description && isset($_POST['content'])) {
- $description = escape_string(clear_html_blank(substr_both(strip_tags($_POST['content']), 0, 150)));
- }
-
- // 无缩略图时,自动提取文章第一张图为缩略图
- if (! $ico && preg_match('/<img\s+.*?src=\s?[\'|\"](.*?(\.gif|\.jpg|\.png|\.jpeg))[\'|\"].*?[\/]?>/i', decode_string($content), $srcs) && isset($srcs[1])) {
- $ico = $srcs[1];
- }
-
- // 缩放缩略图
- if ($ico) {
- resize_img(ROOT_PATH . $ico, '', $this->config('ico.max_width'), $this->config('ico.max_height'));
- }
-
- if ($filename) {
- while ($this->model->checkFilename($filename, "id<>$id")) {
- $filename = $filename . '-' . mt_rand(1, 20);
- }
- }
-
- // 构建数据
- $data = array(
- 'scode' => $scode,
- 'subscode' => $subscode,
- 'title' => $title,
- 'titlecolor' => $titlecolor,
- 'subtitle' => $subtitle,
- 'filename' => $filename,
- 'author' => $author,
- 'source' => $source,
- 'outlink' => $outlink,
- 'date' => $date,
- 'ico' => $ico,
- 'pics' => $pics,
- 'picstitle' => $picstitle,
- 'content' => $content,
- 'tags' => $tags,
- 'enclosure' => $enclosure,
- 'keywords' => $keywords,
- 'description' => clear_html_blank($description),
- 'status' => $status,
- 'istop' => $istop,
- 'isrecommend' => $isrecommend,
- 'isheadline' => $isheadline,
- 'gid' => $gid,
- 'gtype' => $gtype,
- 'gnote' => $gnote,
- 'update_user' => session('username')
- );
-
- // 执行添加
- if ($this->model->modContent($id, $data)) {
- // 扩展内容修改
- foreach ($_POST as $key => $value) {
- if (preg_match('/^ext_[\w\-]+$/', $key)) {
- $temp = post($key);
- if (is_array($temp)) {
- $data2[$key] = implode(',', $temp);
- } else {
- $data2[$key] = str_replace("\r\n", '<br>', $temp);
- }
- }
- }
- if (isset($data2)) {
- if ($this->model->findContentExt($id)) {
- $this->model->modContentExt($id, $data2);
- } else {
- $data2['contentid'] = $id;
- $this->model->addContentExt($data2);
- }
- }
-
- $this->log('修改文章' . $id . '成功!');
- if (! ! $backurl = get('backurl')) {
- success('修改成功!', base64_decode($backurl));
- } else {
- success('修改成功!', url('/admin/Content/index/mcode/2'));
- }
- } else {
- location(- 1);
- }
- } else {
- // 调取修改内容
- $this->assign('mod', true);
- if (! $result = $this->model->getContent($id)) {
- error('编辑的内容已经不存在!', - 1);
- }
- $this->assign('content', $result);
-
- if (! $mcode = get('mcode', 'var')) {
- error('传递的模型编码参数有误,请核对后重试!');
- }
-
- // 文章分类
- $sort_model = model('admin.content.ContentSort');
- $sort_select = $sort_model->getListSelect($mcode);
- $this->assign('sort_select', $this->makeSortSelect($sort_select, $result->scode));
- $this->assign('subsort_select', $this->makeSortSelect($sort_select, $result->subscode));
-
- // 模型名称
- $this->assign('model_name', model('admin.content.Model')->getName($mcode));
-
- // 扩展字段
- $this->assign('extfield', model('admin.content.ExtField')->getModelField($mcode));
-
- // 获取会员分组
- $this->assign('groups', model('admin.member.MemberGroup')->getSelect());
-
- $this->display('content/content.html');
- }
- }
- }
|