fix_admin_tpl_path = dr_get_app_dir('module').'Views/';
\Phpcmf\Service::V()->admin($this->admin_tpl_path, $this->fix_admin_tpl_path);
$this->_Extend_Init();
}
// 继承类初始化
protected function _Extend_Init() {
// 初始化模块
$this->_module_init(APP_DIR);
// 支持附表存储
$this->is_data = 1;
// 是否支持模块索引表
$this->is_module_index = 1;
// 是否支持
$this->is_category_data_field = $this->module['category_data_field'] ? 1 : 0;
// 模板前缀(避免混淆)
$this->tpl_prefix = 'share_';
// 单独模板命名
$this->tpl_name = APP_DIR;
// 模块显示名称
$this->name = dr_lang('内容模块【%s(%s)】', $this->module['cname'], APP_DIR);
$this->is_post_user = \Phpcmf\Service::M('auth')->is_post_user();
$this->where_list_sql = $this->content_model->get_admin_list_where();
// 初始化数据表
$this->_init([
'table' => dr_module_table_prefix(APP_DIR),
'field' => $this->module['field'],
'sys_field' => ['inputtime', 'updatetime', 'inputip', 'displayorder', 'hits', 'uid'],
'date_field' => $this->module['setting']['search_time'] ? $this->module['setting']['search_time'] : 'updatetime',
'show_field' => 'title',
'where_list' => $this->where_list_sql,
'order_by' => dr_safe_replace($this->module['setting']['order']),
'list_field' => $this->module['setting']['list_field'],
'search_first_field' => $this->module['setting']['search_first_field'] ? $this->module['setting']['search_first_field'] : 'title',
]);
$this->content_model->init($this->init); // 初始化内容模型
// 子管理员推荐位权限
if (!dr_in_array(1, $this->admin['roleid']) && $this->module['setting']['flag']) {
foreach ($this->module['setting']['flag'] as $i => $t) {
if (!$t['role']) {
unset($this->module['setting']['flag'][$i]);
continue;
} elseif (dr_array_intersect_key($this->admin['roleid'], $t['role'])) {
continue;
} else {
unset($this->module['setting']['flag'][$i]);
}
}
}
$is_right_field = 1;
if (isset($this->module['setting']['right_field']) && $this->module['setting']['right_field']) {
if ($this->module['setting']['right_field'] == 2) {
$is_right_field = 0;
} elseif (!dr_in_array(1, $this->admin['roleid'])) {
$is_right_field = 0;
}
}
// 写入模板
\Phpcmf\Service::V()->assign([
'field' => $this->init['field'],
'module' => $this->module,
'post_url' => \Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add', ['catid' => intval($_GET['catid'])]),
'is_post_user' => $this->is_post_user,
'is_hcategory' => $this->is_hcategory,
'is_right_field' => $is_right_field,
'is_category_show' => $this->is_hcategory ? 0 : (dr_count($this->module['category']) == 1 ? 0 : 1),
]);
if ($this->module['setting']['is_hide_search_bar']) {
$this->is_show_search_bar = 0;
}
}
// ========================
// 生成内容静态
public function scjt_edit() {
if (!dr_is_app('chtml')) {
$this->_json(0, '没有安装官方版【静态生成】插件');
}
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('没有选择任何栏目'));
}
$this->_json(1, dr_url('chtml/html/show_index', ['app' => APP_DIR, 'ids' => implode(',', $ids)]));
}
// 后台查看列表
protected function _Admin_List($rt = 0) {
$this->my_clink = true;
$this->is_ajax_list = true;
$this->fix_table_list && $this->is_ajax_list = false;
if (dr_is_app('fstatus') && $this->module['field']['fstatus'] && $this->init['list_field']) {
$this->init['list_field']['fstatus'] = [
'use' => 1,
'order' => 1,
'center' => 1,
'width' => 60,
'func' => 'fstatus',
'name' => dr_lang('状态'),
];
}
$clink = $cbottom = [];
$this->mytable = [
'foot_tpl' => '',
'link_tpl' => '',
];
list($tpl, $data) = $this->_List([]);
if ($this->_is_admin_auth('del') || $this->_is_admin_auth('edit')) {
$this->mytable['foot_tpl'].= '';
}
if ($this->_is_admin_auth('del')) {
$this->mytable['foot_tpl'].= '';
}
if ($this->_is_admin_auth('edit')) {
if (\Phpcmf\Service::V()->get_value('is_category_show')) {
$this->mytable['foot_tpl'].= '
';
}
$data = [];
$data[] = [
'icon' => 'fa fa-flag',
'name' => dr_lang('推送到推荐位'),
'uri' => APP_DIR.'/home/edit',
'url' => 'javascript:;" onclick="dr_module_send(\''.dr_lang("推荐位").'\', \''.dr_url(APP_DIR.'/home/tui_edit').'&page=0\')',
];
$data[] = [
'icon' => 'fa fa-clock-o',
'name' => dr_lang('更新时间'),
'uri' => APP_DIR.'/home/edit',
'url' => 'javascript:;" onclick="dr_module_send_ajax(\''.dr_url(APP_DIR.'/home/tui_edit').'&page=4\')',
];
if ($this->module['setting']['sync_category']) {
$data[] = [
'icon' => 'fa fa-refresh',
'name' => dr_lang('发布到其他栏目'),
'uri' => APP_DIR.'/home/edit',
'url' => 'javascript:;" onclick="dr_module_send(\''.dr_lang("发布到其他栏目").'\', \''.dr_url(APP_DIR.'/home/tui_edit').'&page=1\')',
];
}
if (version_compare(CMF_VERSION, '4.6.0') < 0) {
$cbottom = $this->_app_cbottom_fix('', $data);
} else {
$cbottom = $this->_app_cbottom('', $data);
}
if ($cbottom) {
$this->mytable['foot_tpl'].= '';
}
}
\Phpcmf\Service::V()->assign([
'menu' => $this->_module_menu(
$this->module,
' '.dr_lang('%s管理', $this->module['cname']),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/index'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add', ['catid' => intval($_GET['catid'])])
),
'mytable' => $this->mytable,
'category_select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$data['param']['catid'],
'name="catid"',
dr_lang('全部'),
0, 1
),
'clink' => $clink,
'cbottom' => $cbottom,
]);
if ($rt) {
return $tpl;
} else {
return \Phpcmf\Service::V()->display($tpl);
}
}
protected function _Clink_tpl($uriprefix, $data) {
$rt = '';
// 记录的链接菜单
if ($this->_is_admin_auth('edit')) {
$rt.= '';
if ($this->module['form']) {
foreach ($this->module['form'] as $a) {
if ($this->_is_admin_auth(APP_DIR.'/'.$a['table'].'/index')) {
$rt.= '';
}
}
}
$clink = $this->_app_clink('', $data);
if ($clink) {
if ($this->module['setting']['is_op_more']) {
$aa = $rt;
$rt = '';
}
$data['cid'] = $data['id'];
$data['mid'] = APP_DIR;
$rep = new \php5replace($data);
foreach ($clink as $a) {
$rt.= ' ';
}
if ($this->module['setting']['is_op_more']) {
$rt = $aa . '
';
}
}
}
return $rt;
}
// 后台添加内容
protected function _Admin_Add($rt = 0) {
$id = 0;
$did = intval(\Phpcmf\Service::L('input')->get('did'));
$catid = intval(\Phpcmf\Service::L('input')->get('catid'));
$did && $this->auto_save = 0; // 草稿数据时不加载
$draft = $did ? $this->content_model->get_draft($did) : [];
$catid = $draft['catid'] ? $draft['catid'] : $catid;
// 栏目id不存在时就去第一个可用栏目为catid
if (!$catid) {
list($select, $catid) = \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$catid,
'id=\'dr_catid\' name=\'catid\' onChange="show_category_field(this.value)"',
'', 1, 1, 1
);
} else {
$select = \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$catid,
'id=\'dr_catid\' name=\'catid\' onChange="show_category_field(this.value)"',
'', 1, 1
);
}
$this->is_get_catid = $catid;
$draft && $draft['catid'] = $catid;
list($tpl) = $this->_Post($id, $draft);
\Phpcmf\Service::V()->assign([
'did' => $did,
'form' => dr_form_hidden(['is_draft' => 0, 'module' => MOD_DIR, 'id' => $id]),
'menu' => $this->_module_menu(
$this->module,
' '.dr_lang('%s管理', $this->module['cname']),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/index'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add', ['catid' => $catid])
),
'catid' => 0,
'select' => $select,
'is_flag' => $this->module['setting']['flag'],
'draft_url' => \Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add'),
'draft_list' => $this->content_model->get_draft_list('cid='.$id),
'category_field_url' => $this->module['category_data_field'] ? \Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add') : '',
]);
if ($rt) {
return $tpl;
} else {
return \Phpcmf\Service::V()->display($tpl);
}
}
// 后台修改内容
protected function _Admin_Edit($rt = 0) {
$id = intval(\Phpcmf\Service::L('input')->get('id'));
$did = intval(\Phpcmf\Service::L('input')->get('did'));
$did && $this->auto_save = 0; // 草稿数据时不加载
$draft = $did ? $this->content_model->get_draft($did) : [];
list($tpl, $data) = $this->_Post($id, $draft);
if (!$data) {
$this->_admin_msg(0, dr_lang('数据#%s不存在', $id));
} elseif ($this->where_list_sql && $this->content_model->admin_is_edit($data)) {
$this->_admin_msg(0, dr_lang('当前角色无权限管理此栏目'));
}
\Phpcmf\Service::V()->assign([
'did' => $did,
'form' => dr_form_hidden(['is_draft' => 0, 'module' => MOD_DIR, 'id' => $id]),
'menu' => $this->_module_menu(
$this->module,
' '.dr_lang('%s管理', $this->module['cname']),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/index'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add', ['catid' => $data['catid']])
),
'is_flag' => $this->module['setting']['flag'],
'select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$data['catid'],
'id=\'dr_catid\' name=\'catid\' onChange="show_category_field(this.value)"',
'', 1, 1
),
'web_url' => $data['url'] ? dr_url_prefix($data['url'], APP_DIR) : '',
'draft_url' => \Phpcmf\Service::L('Router')->url(APP_DIR.'/home/edit', ['id' => $id]),
'draft_list' => $this->content_model->get_draft_list('cid='.$id),
'category_field_url' => $this->module['category_data_field'] ?\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/edit', ['id' => $id]) : ''
]);
if ($rt) {
return $tpl;
} else {
return \Phpcmf\Service::V()->display($tpl);
}
}
// 后台删除内容
protected function _Admin_Del() {
if (IS_POST) {
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('没有选择内容'));
}
$rt = $this->content_model->delete_to_recycle($ids, \Phpcmf\Service::L('input')->post('note'));
if ($rt['code']) {
// 写入日志
\Phpcmf\Service::M('cache')->update_data_cache();
\Phpcmf\Service::L('input')->system_log($this->name.':放入回收站id ('.implode(', ', $ids).')');
$this->_json(1, dr_lang('所选内容已被放入回收站中'));
} else {
$this->_json(0, $rt['msg']);
}
} else {
// 选择选项
$ids = $_GET['ids'];
if (!$ids) {
$this->_json(0, dr_lang('没有选择内容'));
}
\Phpcmf\Service::V()->assign([
'ids' => $ids,
'delete_msg' => $this->module['setting']['delete_msg'] ? explode(PHP_EOL, (string)$this->module['setting']['delete_msg']) : [],
]);
\Phpcmf\Service::V()->display('share_delete.html');
exit;
}
}
// 后台批量保存排序值
protected function _Admin_Order() {
$this->_json(0, '此功能已经失效,请在模块设置中配置后台显示本字段');
}
// 批量移动栏目
protected function _Admin_Move() {
$ids = \Phpcmf\Service::L('input')->get_post_ids();
$catid = (int)\Phpcmf\Service::L('input')->post('catid');
if (!$ids) {
$this->_json(0, dr_lang('选择内容不存在'));
} elseif (!$catid) {
$this->_json(0, dr_lang('目标栏目未选择'));
} elseif (!$this->content_model->admin_category_auth($catid, 'edit')) {
$this->_json(0, dr_lang('无权限操作此栏目'));
} elseif ($this->where_list_sql && $this->content_model->admin_is_edit(['catid' => $catid])) {
$this->_json(0, dr_lang('当前角色无权限管理此栏目'));
}
$rt = $this->content_model->move_category($ids, $catid);
// 写入日志
if ($rt['code']) {
\Phpcmf\Service::L('input')->system_log($this->name.':批量修改栏目id ('.implode(', ', $ids).')');
$this->_json(1, dr_lang('操作成功'));
}
$this->_json(0, $rt['msg']);
}
// 同步栏目选择器
protected function _Admin_Syncat() {
$sync = \Phpcmf\Service::L('input')->get('catid');
if (IS_AJAX_POST) {
$catid = \Phpcmf\Service::L('input')->post('catid');
if (!$catid) {
$this->_json(0, dr_lang('你没有选择同步的栏目'));
}
$syncat = [];
foreach ($catid as $i) {
if ($this->where_list_sql && $this->content_model->admin_is_edit(['catid' => $i])) {
$this->_json(0, dr_lang('当前角色无权限管理此栏目'));
} elseif (!$this->module['category'][$i]) {
continue;
} elseif ($this->module['category'][$i]['tid'] != 1) {
continue;
} elseif (!$this->module['category'][$i]['is_post']) {
continue;
} else {
$syncat[] = $i;
}
}
if (!$syncat) {
$this->_json(0, dr_lang('所选栏目无效'));
}
$this->_json(1, dr_count($syncat), implode(',', $syncat));
}
\Phpcmf\Service::V()->assign([
'form' => dr_form_hidden(),
'select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$sync ? explode(',', $sync) : 0,
'id=\'dr_catid\' name=\'catid[]\' multiple="multiple" data-actions-box="true"',
'', 1, 1
),
]);
\Phpcmf\Service::V()->display('share_syncat.html');exit;
}
// 批量推送
protected function _Admin_Send() {
$page = (int)\Phpcmf\Service::L('input')->get('page');
if ($page != 5) {
$ids = \Phpcmf\Service::L('input')->get('ids');
if (!$ids) {
$this->_json(0, dr_lang('所选数据不存在'));
}
}
if (IS_AJAX_POST) {
$in = [];
foreach ($ids as $i) {
$i && $in[] = intval($i);
}
if (!$in) {
$this->_json(0, dr_lang('所选数据不存在'));
}
switch ($page) {
case 1: // 推送到其他栏目
$catids = \Phpcmf\Service::L('input')->post('catid');
if (!$catids) {
$this->_json(0, dr_lang('你还没有选择同步的栏目'));
}
$data = \Phpcmf\Service::M()->db->table($this->init['table'])->whereIn('id', $in)->where('link_id<=0')->get()->getResultArray();
if (!$data) {
$this->_json(0, dr_lang('没有可用数据'));
}
$c = 0;
foreach ($data as $t) {
$u = 0;
foreach ($catids as $catid) {
if ($catid && $catid != $t['catid']) {
if ($this->where_list_sql && $this->content_model->admin_is_edit(['catid' => $catid])) {
$this->_json(0, dr_lang('当前角色无权限管理此栏目'));
}
// 插入到同步栏目中
$new[1] = $t;
$new[1]['catid'] = $catid;
$new[1]['link_id'] = $t['id'];
$new[1]['tableid'] = 0;
$new[1]['id'] = $this->content_model->index(0, $new);
if ($new[1]['id']) {
$this->content_model->table($this->init['table'])->replace($new[1]);
$c ++;
$u = 1;
}
}
}
$u && $this->content_model->table($this->init['table'])->update($t['id'], ['link_id' => -1]);
}
$this->_json(1, dr_lang('批量执行%s条', $c));
break;
case 0: // 推荐位
$flag = \Phpcmf\Service::L('input')->post('flag');
$clear = \Phpcmf\Service::L('input')->post('clear');
if (!$clear && !$flag) {
$this->_json(0, dr_lang('你还没有选择推荐位'));
}
if ($clear) {
\Phpcmf\Service::M()->db->table($this->init['table'].'_flag')->whereIn('id', $in)->delete();
$this->_json(1, dr_lang('推荐位清除成功'));
}
$data = \Phpcmf\Service::M()->db->table($this->init['table'].'_index')->whereIn('id', $in)->get()->getResultArray();
if (!$data) {
$this->_json(0, dr_lang('所选数据不存在'));
}
$c = 0;
foreach ($data as $t) {
foreach ($flag as $fid) {
$this->content_model->insert_flag((int)$fid, (int)$t['id'], (int)$t['uid'], (int)$t['catid']);
$c ++;
}
}
$this->_json(1, dr_lang('批量执行%s条', $c));
break;
}
exit;
} else if ($page == 4) {
$this->content_model->update_time($ids);
$this->_json(1, dr_lang('操作成功'));
exit;
}
\Phpcmf\Service::V()->assign([
'page' => $page,
'form' => dr_form_hidden(),
'select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
0,
'id=\'dr_catid\' name=\'catid[]\' multiple="multiple" style="height:200px"',
'', 1, 1
),
]);
\Phpcmf\Service::V()->display('share_send.html');exit;
}
// ===========================
// 后台查看草稿列表
protected function _Admin_Draft_List($rt = 0) {
if (isset($this->field['content'])) {
$this->field['content']['fieldtype'] = 'Text'; // 防止识别为编辑器字段被转义
}
$this->_init([
'table' => dr_module_table_prefix(APP_DIR).'_draft',
'date_field' => 'inputtime',
'order_by' => 'inputtime desc',
'where_list' => 'uid='.$this->uid,
]);
list($tpl, $data) = $this->_List();
\Phpcmf\Service::V()->assign([
'menu' => $this->_module_menu(
$this->module,
' '.dr_lang('草稿箱管理'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/draft/index'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add')
),
'category_select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$data['param']['catid'],
'name="catid"',
'--'
),
]);
$tpl = $this->_tpl_filename('list_draft');
if ($rt) {
return $tpl;
} else {
return \Phpcmf\Service::V()->display($tpl);
}
}
// 后台删除草稿内容
protected function _Admin_Draft_Del() {
// 支持附表存储
$this->is_data = 0;
$this->name.= dr_lang('草稿');
$this->_init([
'table' => dr_module_table_prefix(APP_DIR).'_draft',
]);
$this->_Del(\Phpcmf\Service::L('input')->get_post_ids());
}
// ===========================
// 后台查看审核列表
protected function _Admin_Verify_List($rt = 0) {
// 说明来自审核页面
define('IS_MODULE_VERIFY', 1);
$is_post_user = \Phpcmf\Service::M('auth')->is_post_user();
if (isset($_GET['is_all']) && intval($_GET['is_all']) == 1) {
if (IS_POST) {
$this->_json(1, dr_lang('操作成功'));
}
// 批量操作
$ids = \Phpcmf\Service::L('input')->get('ids');
if (!$ids) {
$this->_json(0, dr_lang('没有选中内容'));
} elseif ($is_post_user) {
$this->_json(0, dr_lang('投稿者身份不允许审核操作'));
}
$num = 10;
if (isset($this->module['setting']['verify_num']) && $this->module['setting']['verify_num']) {
$num = max(1, intval($this->module['setting']['verify_num']));
}
if (dr_count($ids) > $num) {
$this->_json(0, dr_lang('批量选择数量不能超过%s个', $num));
}
$list = [];
$note = \Phpcmf\Service::L('input')->get('note');
foreach ($ids as $id) {
$row = \Phpcmf\Service::M()->table(dr_module_table_prefix(APP_DIR).'_verify')->get($id);
if (!$row) {
$this->_json(0, dr_lang('选中内容[#%s]不存在', $id));
}
if (intval($_GET['at']) == 1) {
$url = dr_url(MOD_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/edit').'&is_verify_iframe=1&id='.$id;
} else {
if (!$note) {
$this->_json(0, dr_lang('没有填写拒绝理由'));
}
$url = dr_url(MOD_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/edit').'&is_verify_iframe=1¬e='.$note.'&id='.$id;
}
$t = dr_string2array($row['content']);
$list[$id] = [
'url' => $url,
'title' => $t['title'],
];
}
\Phpcmf\Service::V()->assign([
'list' => $list,
'back_url' => dr_url(MOD_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/index').'&rand='.SYS_TIME,
]);
\Phpcmf\Service::V()->display('share_list_verify_all.html');
exit;
}
if (isset($this->field['content'])) {
$this->field['content']['fieldtype'] = 'Text'; // 防止识别为编辑器字段被转义
}
$where = $this->content_model->get_admin_list_verify_where($this->where_list_sql);
$status = isset($_GET['status']) ? intval($_GET['status']) : 0;
if ($status > 0) {
if ($status == 9){
$status = 0;
}
$w = ' status='.$status;
$where = $where ? $where.' AND '.$w : $w;
}
$this->_init([
'table' => dr_module_table_prefix(APP_DIR).'_verify',
'date_field' => 'inputtime',
'order_by' => 'inputtime desc',
'where_list' => $where,
]);
list($tpl, $data) = $this->_List();
$verify_msg = [
dr_lang('词文不对'),
];
if ($this->module['setting']['verify_msg']) {
$msg = explode(PHP_EOL, $this->module['setting']['verify_msg']);
$msg && $verify_msg = $msg;
}
$step = [];
$verify = \Phpcmf\Service::C()->get_cache('verify');
if ($verify) {
foreach ($verify as $t) {
if ($t['value']['role']) {
foreach ($t['value']['role'] as $i => $arr) {
if (dr_array_intersect($arr, $this->admin['roleid'])) {
$step[] = $i;
}
}
}
}
}
$status_select = [
0 => dr_lang('全部'),
9 => dr_lang('被退稿'),
];
for ($i = 1; $i<9; $i++) {
if (dr_in_array(1, $this->admin['roleid'])) {
$status_select[$i] = dr_lang('%s审中', $i);
} elseif (dr_in_array($i, $step)) {
$status_select[$i] = dr_lang('%s审中', $i);
}
}
\Phpcmf\Service::V()->assign([
'menu' => $this->_module_menu(
$this->module,
' '.dr_lang('待审核管理'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/verify/index'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add')
),
'clink' => $this->_app_clink(),
'verify_msg' => $verify_msg,
'is_post_user' => $is_post_user,
'status_select' => $status_select,
'category_select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$data['param']['catid'],
'name="catid"',
'--'
),
]);
$tpl = $this->_tpl_filename('list_verify');
if ($rt) {
return $tpl;
} else {
return \Phpcmf\Service::V()->display($tpl);
}
}
// 后台修改审核内容
protected function _Admin_Verify_Edit($rt = 0) {
// 说明来自审核页面
define('IS_MODULE_VERIFY', 1);
$id = intval(\Phpcmf\Service::L('input')->get('id'));
list($tpl, $data) = $this->_Post($id);
if (!$data['id']) {
// 删除审核提醒
\Phpcmf\Service::M('member')->delete_admin_notice(APP_DIR.'/verify/edit:id/'.$id, SITE_ID);
$this->_admin_msg(0, dr_lang('审核内容不存在'));
} elseif ($this->where_list_sql && $this->content_model->admin_is_edit($data)) {
$this->_admin_msg(0, dr_lang('当前角色无权限管理此栏目'));
} elseif (!$this->_get_verify_status_edit($data['verify']['vid'], $data['status'])) {
$this->_admin_msg(0, dr_lang('当前角色无权限审核此内容'));
}
$step = $this->_get_verify($data['verify']['vid']);
$verify_msg = [
dr_lang('词文不对'),
];
if ($this->module['setting']['verify_msg']) {
$msg = explode(PHP_EOL, $this->module['setting']['verify_msg']);
$msg && $verify_msg = $msg;
}
$next = dr_count($step) - 1 <= $data['status'] ? 9 : $data['status'] + 1;
\Phpcmf\Service::V()->assign([
'menu' => \Phpcmf\Service::M('auth')->_admin_menu(
[
'审核管理' => [MOD_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/index', 'fa fa-edit'],
'审核处理' => ['hide:'.MOD_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/edit', 'fa fa-edit'],
]
),
'form' => dr_form_hidden(['is_draft' => 0, 'module' => MOD_DIR, 'id' => $id]),
'select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$data['catid'],
'id=\'dr_catid\' name=\'catid\' onChange="show_category_field(this.value)"',
'', 1, 1
),
'is_flag' => $this->module['setting']['flag'],
'web_url' => dr_url_prefix('index.php?s='.APP_DIR.'&c=show&m=verify&id='.$id, APP_DIR),
'is_verify' => 1,
'back_note' => \Phpcmf\Service::L('input')->get('note'),
'verify_msg' => $verify_msg,
'verify_step' => $step,
'is_sync_cat' => $data['sync_cat'],
'verify_next' => $next,
]);
$tpl = $this->_tpl_filename('post');
if ($rt) {
return $tpl;
} else {
return \Phpcmf\Service::V()->display($tpl);
}
}
// 后台删除审核内容
protected function _Admin_Verify_Del() {
// 支持附表存储
$this->is_data = 0;
$this->name.= dr_lang('审核');
$this->_init([
'table' => dr_module_table_prefix(APP_DIR).'_verify',
]);
$this->_Del(\Phpcmf\Service::L('input')->get_post_ids(), function ($rows) {
foreach ($rows as $t) {
if ($this->where_list_sql && $this->content_model->admin_is_edit($t)) {
return dr_return_data(0, dr_lang('当前角色无权限管理此栏目'));
}
}
return dr_return_data(1, 'ok');
}, function($rows) {
foreach ($rows as $t) {
// 删除索引
$t['isnew'] && \Phpcmf\Service::M()->table(dr_module_table_prefix(APP_DIR).'_index')->delete($t['id']);
// 删除审核提醒
\Phpcmf\Service::M('member')->delete_admin_notice(APP_DIR.'/verify/edit:id/'.$t['id'], SITE_ID);
}
return dr_return_data(1, 'ok');
});
}
// ===========================
// 后台定时发布列表
protected function _Admin_Time_List($rt = 0) {
if (isset($this->field['content'])) {
$this->field['content']['fieldtype'] = 'Text'; // 防止识别为编辑器字段被转义
}
$this->_init([
'table' => dr_module_table_prefix(APP_DIR).'_time',
'order_by' => 'inputtime desc',
'date_field' => 'inputtime',
'where_list' => $this->where_list_sql,
]);
list($tpl, $data) = $this->_List();
\Phpcmf\Service::V()->assign([
'menu' => $this->_module_menu(
$this->module,
' '.dr_lang('待发布管理'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/time/index'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add')
),
'category_select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$data['param']['catid'],
'name="catid"',
'--'
),
]);
$tpl = $this->_tpl_filename('list_time');
if ($rt) {
return $tpl;
} else {
return \Phpcmf\Service::V()->display($tpl);
}
}
// 后台退稿
public function tuigao_edit() {
// 说明来退稿页面
define('IS_MODULE_TG', 1);
$id = intval(\Phpcmf\Service::L('input')->get('id'));
$this->_Post($id);
$this->_json(1, dr_lang('操作异常'));
exit;
}
// 后台定时发布
protected function _Admin_Time_Add() {
$at = \Phpcmf\Service::L('input')->get('at');
if ($at == 'post') {
// 批量发布
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('还没有选择呢'));
}
$html = [];
foreach ($ids as $id) {
$rt = $this->content_model->post_time(\Phpcmf\Service::M()->table(dr_module_table_prefix(APP_DIR).'_time')->get($id));
$rt['data'] && $html[] = $rt['data'];
if (!$rt['code']) {
$this->_json(0, $rt['msg'], ['htmlfile' => $html]);
}
}
$this->_json(1, dr_lang('操作成功'), ['htmlfile' => $html]);
exit;
}
// 说明来自定时页面
define('IS_MODULE_TIME', 1);
$this->_Post();
\Phpcmf\Service::V()->display('share_time.html');
exit;
}
// 后台修改定时时间
public function time_edit() {
// 说明来自定时页面
define('IS_MODULE_TIME', 1);
$id = intval(\Phpcmf\Service::L('input')->get('id'));
$data = \Phpcmf\Service::M()->table(dr_module_table_prefix(APP_DIR).'_time')->get($id);
if (!$data) {
$this->_admin_msg(0, dr_lang('内容不存在'));
}
if (IS_POST) {
$time = strtotime(\Phpcmf\Service::L('input')->post('posttime'));
if ($time < SYS_TIME) {
$this->_json(0, dr_lang('定时时间不能晚于当前时间'));
}
\Phpcmf\Service::M()->table(dr_module_table_prefix(APP_DIR).'_time')->update($id, [
'posttime' => $time
]);
$this->_json(1, dr_lang('操作成功'));
}
\Phpcmf\Service::V()->assign('form', dr_form_hidden());
\Phpcmf\Service::V()->assign('posttime', dr_date($data['posttime'], 'Y-m-d H:i:s'));
\Phpcmf\Service::V()->display('share_time.html');exit;
}
// 后台修改定时内容
protected function _Admin_Time_Edit() {
// 说明来自定时页面
define('IS_MODULE_TIME', 1);
$id = intval(\Phpcmf\Service::L('input')->get('id'));
list($tpl, $data) = $this->_Post($id);
if (!$data) {
$this->_admin_msg(0, dr_lang('内容不存在'));
}
\Phpcmf\Service::V()->assign([
'menu' => \Phpcmf\Service::M('auth')->_admin_menu(
[
'定时发布' => [MOD_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/index', 'fa fa-clock-o"'],
'修改' => ['hide:'.MOD_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/edit', 'fa fa-edit'],
]
),
'form' => dr_form_hidden(['is_draft' => 0, 'module' => MOD_DIR, 'id' => $id]),
'select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$data['catid'],
'id=\'dr_catid\' name=\'catid\' onChange="show_category_field(this.value)"',
'', 1, 1
),
'web_url' => dr_url_prefix('index.php?s='.APP_DIR.'&c=show&m=time&id='.$id, APP_DIR),
'is_post_time' => 1,
]);
\Phpcmf\Service::V()->display($this->_tpl_filename('post'));
}
// 后台删除定时内容
protected function _Admin_Time_Del() {
// 支持附表存储
$this->is_data = 0;
$this->name.= dr_lang('定时');
$this->_init([
'table' => dr_module_table_prefix(APP_DIR).'_time',
]);
$this->_Del(\Phpcmf\Service::L('input')->get_post_ids());
}
// ===========================
// 后台查看回收站列表
protected function _Admin_Recycle_List($rt = 0) {
if (isset($this->field['content'])) {
$this->field['content']['fieldtype'] = 'Text'; // 防止识别为编辑器字段被转义
}
$this->_init([
'table' => dr_module_table_prefix(APP_DIR).'_recycle',
'date_field' => 'inputtime',
'order_by' => 'inputtime desc',
'where_list' => $this->where_list_sql,
]);
list($tpl, $data) = $this->_List();
\Phpcmf\Service::V()->assign([
'menu' => $this->_module_menu(
$this->module,
' '.dr_lang('回收站管理'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/recycle/index'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add')
),
'category_select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$data['param']['catid'],
'name="catid"',
'--'
),
]);
$tpl = $this->_tpl_filename('list_recycle');
if ($rt) {
return $tpl;
} else {
return \Phpcmf\Service::V()->display($tpl);
}
}
// 后台回收站清空
public function recycle_del() {
$page = (int)\Phpcmf\Service::L('input')->get('page');
$psize = 20;
if (!$page) {
$nums = \Phpcmf\Service::M()->table(dr_module_table_prefix(APP_DIR).'_recycle')->where($this->where_list_sql)->counts();
if (!$nums) {
$this->_json(0, dr_lang('数据为空'));
}
$tpage = ceil($nums / $psize); // 总页数
$this->_json(1, dr_lang('即将执行清空回收站命令'), [
'jscode' => 'dr_iframe_show(\''.dr_lang('清空回收站').'\', \''.dr_url(APP_DIR.'/recycle/recycle_del').'&page=1&total='.$nums.'&tpage='.$tpage.'\', \'500px\', \'300px\', \'load\')'
]);
}
$tpage = (int)\Phpcmf\Service::L('input')->get('tpage');
$total = (int)\Phpcmf\Service::L('input')->get('total');
$db = \Phpcmf\Service::M()->db->table(dr_module_table_prefix(APP_DIR).'_recycle');
$this->where_list_sql && $db->where($this->where_list_sql);
$data = $db->limit($psize)->orderBy('id DESC')->get()->getResultArray();
if (!$data) {
// 写入日志
\Phpcmf\Service::L('input')->system_log($this->name.':清空回收站');
$this->_html_msg(1, dr_lang('共删除%s条数据', $total));
}
$ids = [];
foreach ($data as $t) {
$ids[] = $t['id'];
}
$this->content_model->delete_for_recycle($ids);
$this->_html_msg( 1, dr_lang('正在执行中【%s】...', $tpage.'/'.($page+1)),
dr_url(APP_DIR.'/recycle/recycle_del', ['total' => $total, 'tpage' => $tpage, 'page' => $page + 1])
);
}
// 后台回收站删除内容
protected function _Admin_Recycle_Del() {
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('参数不存在'));
}
$rt = $this->content_model->delete_for_recycle($ids);
// 写入日志
\Phpcmf\Service::L('input')->system_log($this->name.':删除回收站id ('.implode(', ', $ids).')');
if ($rt['code']) {
$this->_json(1, dr_lang('操作成功'));
} else {
$this->_json(0, $rt['msg']);
}
}
// 后台回收站恢复查看
protected function _Admin_Recycle_Show() {
$id = intval(\Phpcmf\Service::L('input')->get('id'));
// 说明来自页面
define('IS_MODULE_RECYCLE', $id);
list($tpl, $data) = $this->_Show($id);
if (!$data) {
$this->_admin_msg(0, dr_lang('内容不存在'));
}
\Phpcmf\Service::V()->assign([
'menu' => $this->_module_menu(
$this->module,
' '.dr_lang('回收站管理'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/recycle/index'),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add')
),
'catid' => $data['catid'],
'web_url' => dr_url_prefix('index.php?s='.APP_DIR.'&c=show&m=recycle&id='.$id, APP_DIR),
]);
\Phpcmf\Service::V()->display($this->_tpl_filename('post'));
}
// 后台回收站恢复内容
protected function _Admin_Recovery() {
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('参数不存在'));
}
$rt = $this->content_model->recovery($ids);
if ($rt['code']) {
// 写入日志
\Phpcmf\Service::L('input')->system_log($this->name.':恢复回收站id ('.implode(', ', $rt['data']).')');
$this->_json(1, dr_lang('操作成功'));
} else {
$this->_json(0, $rt['msg']);
}
}
// 后台回收站编辑内容
protected function _Admin_Recycle_Edit() {
// 说明来自定时页面
$id = intval(\Phpcmf\Service::L('input')->get('id'));
define('IS_MODULE_RECYCLE', $id);
$this->init['show_field'] = 'cid';
$this->name.= dr_lang('恢复回收站');
list($tpl, $data) = $this->_Post($id);
if (!$data) {
$this->_admin_msg(0, dr_lang('内容不存在'));
}
\Phpcmf\Service::V()->assign([
'menu' => \Phpcmf\Service::M('auth')->_admin_menu(
[
'回收站' => [MOD_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/index', 'fa fa-trash-o"'],
'修改' => ['hide:'.MOD_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/edit', 'fa fa-edit'],
]
),
'form' => dr_form_hidden(['is_draft' => 0, 'module' => MOD_DIR, 'id' => $id]),
'select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$data['catid'],
'id=\'dr_catid\' name=\'catid\' onChange="show_category_field(this.value)"',
'', 1, 1
),
'web_url' => dr_url_prefix('index.php?s='.APP_DIR.'&c=show&m=recycle&id='.$id, APP_DIR),
'is_recycle' => 1,
]);
\Phpcmf\Service::V()->display($this->_tpl_filename('post'));
}
// ===========================
// 推荐位管理
protected function _Admin_Flag_List($rt = 0) {
$flag = intval(\Phpcmf\Service::L('input')->get('flag'));
if (!$this->module['setting']['flag'][$flag]) {
$this->_admin_msg(0, dr_lang('推荐位(%s)不存在', $flag));
}
if (IS_POST) {
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('所选内容不存在'));
}
foreach ($ids as $id) {
$this->content_model->delete_flag($id, $flag);
}
$this->_json(1, dr_lang('操作成功'));
}
$this->_init([
'table' => dr_module_table_prefix(APP_DIR),
'field' => $this->module['field'],
'sys_field' => ['inputtime', 'updatetime', 'inputip', 'displayorder', 'hits', 'uid'],
'date_field' => 'inputtime',
'order_by' => 'inputtime desc',
'show_field' => 'title',
'list_field' => $this->module['setting']['list_field'],
'where_list' => 'id IN (select id from `'.\Phpcmf\Service::M()->dbprefix(dr_module_table_prefix(APP_DIR).'_flag').'` where flag='.$flag.')'.($this->where_list_sql ? ' AND '.$this->where_list_sql : ''),
]);
$this->is_ajax_list = true;
$this->fix_table_list && $this->is_ajax_list = false;
list($tpl, $data) = $this->_List();
$this->mytable = [
'foot_tpl' => '',
'link_tpl' => '',
'link_var' => 'html = html.replace(/\{id\}/g, row.id);',
];
if ($this->_is_admin_auth('del')) {
$this->mytable['foot_tpl'].= '';
$this->mytable['foot_tpl'].= '';
}
if ($this->_is_admin_auth('edit')) {
$this->mytable['link_tpl'] .= '';
}
\Phpcmf\Service::V()->assign([
'p' => ['flag' => $flag],
'menu' => $this->_module_menu(
$this->module,
' '.dr_lang($this->module['setting']['flag'][$flag]['name']),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/flag/index', ['flag' => $flag]),
\Phpcmf\Service::L('Router')->url(APP_DIR.'/home/add')
),
'category_select' => \Phpcmf\Service::L('Tree')->select_category(
$this->module['category'],
$data['param']['catid'],
'name="catid"',
'--',
0, 1
),
'mytable' => $this->mytable,
]);
$tpl = $this->_tpl_filename('list');
if ($rt) {
return $tpl;
} else {
return \Phpcmf\Service::V()->display($tpl);
}
}
// ===========================
/**
* 获取内容
* $id 内容id,新增为0
* */
protected function _Data($id = 0) {
if (!$id) {
$data = [];
if (isset($this->module['setting']['hits_min']) && isset($this->module['setting']['hits_max'])
&& $this->module['setting']['hits_min'] && $this->module['setting']['hits_max']) {
$data['hits'] = (int)rand((int)$this->module['setting']['hits_min'], (int)$this->module['setting']['hits_max']);
}
return $data;
}
$catid = intval(\Phpcmf\Service::L('input')->get('catid'));
if (defined('IS_MODULE_VERIFY')) {
// 判断是否来至审核
$row = \Phpcmf\Service::M()->table(dr_module_table_prefix(APP_DIR).'_verify')->get($id);
if ($row) {
// 调用当前表数据
$now = $this->content_model->get_data($id);
if ($now) {
$data = dr_string2array($row['content']) + $now;
} else {
$data = dr_string2array($row['content']);
}
$data['verify'] = [
'vid' => $row['vid'],
'uid' => $row['backuid'],
'isnew' => $row['isnew'],
'backinfo' => dr_string2array($row['backinfo']),
];
$data['my_flag'] = isset($data['verify']['backinfo']['flag']) ? $data['verify']['backinfo']['flag'] : [];
$this->is_get_catid = $catid ? $catid : $data['catid'];
} else {
$data = [
'id' => 0,
];
}
return $data;
} elseif (defined('IS_MODULE_TIME')) {
// 判断是否来至定时发布
$row = \Phpcmf\Service::M()->table(dr_module_table_prefix(APP_DIR).'_time')->get($id);
$data = dr_string2array($row['content']);
$data['my_flag'] = $data['flag'];
$data['posttime'] = $row['posttime'];
$this->is_get_catid = $catid ? $catid : $data['catid'];
return $data;
} elseif (defined('IS_MODULE_RECYCLE')) {
// 判断是否来至回收站
$row = \Phpcmf\Service::M()->table(dr_module_table_prefix(APP_DIR).'_recycle')->get($id);
$c = dr_string2array($row['content']);
$data = [];
if ($c) {
foreach ($c as $t) {
$t && $data = dr_array22array($data, $t);
}
}
$this->is_get_catid = $data['catid'];
return $data;
}
$row = $this->content_model->get_data($id);
if (!$row) {
return [];
}
// 判断是同步栏目数据
if ($row['link_id'] > 0) {
$row = $this->content_model->get_data($row['link_id']);
if (!$row) {
return [];
}
$this->replace_id = $id = $row['id'];
}
$this->is_get_catid = $catid ? $catid : $row['catid'];
// 推荐位
$row['my_flag'] = isset($row['my_flag']) ? $row['my_flag'] : ($id ? $this->content_model->get_flag($id) : []);
return $row;
}
// 格式化保存数据
protected function _Format_Data($id, $data, $old) {
// 验证栏目
$catid = (int)\Phpcmf\Service::L('input')->post('catid');
if (!$this->module['category'][$catid] && !$this->is_hcategory) {
$this->_json(0, dr_lang('栏目[%s]不存在', $catid));
}
// 验证后台权限
$data[1]['catid'] = $data[0]['catid'] = $catid;
// 验证状态
if ($this->is_post_user) {
// 投稿者
$data[1]['status'] = \Phpcmf\Service::M('auth')->is_post_user_status() ? 1 : 9;
} else {
$data[1]['status'] = 9;
}
$data[1]['uid'] = (int)$data[1]['uid'];
// 默认数据
$data = $this->content_model->format_data($data);
// 不更新时间
if (!$old['updatetime']) {
!$data[1]['updatetime'] && $data[1]['updatetime'] = SYS_TIME;
} elseif ($id && isset($_POST['no_time'])
&& $_POST['no_time']) {
$data[1]['updatetime'] = $old['updatetime'];
}
return $data;
}
/**
* 保存内容
* $id 内容id,新增为0
* $data 提交内容数组,留空为自动获取
* $func 格式化提交的数据
* */
protected function _Save($id = 0, $data = [], $old = [], $func = null, $func2 = null) {
$did = intval(\Phpcmf\Service::L('input')->get('did'));
$is_draft = intval(\Phpcmf\Service::L('input')->post('is_draft'));
if ($this->is_post_user) {
if ($old && $old['uid'] && $old['uid'] != $data[1]['uid']) {
return dr_return_data(0, dr_lang('归属账号无法更改'), ['field' => 'uid']);
} elseif ($data[1]['uid'] != $this->uid) {
return dr_return_data(0, dr_lang('归属账号无法更改'), ['field' => 'uid']);
}
}
// 判断定时发布时间
if (defined('IS_MODULE_TIME')) {
if (isset($_POST['posttime']) && $_POST['posttime']) {
$this->post_time = (int)strtotime(\Phpcmf\Service::L('input')->post('posttime'));
} else {
$this->post_time = (int)strtotime(\Phpcmf\Service::L('input')->get('posttime'));
}
if (SYS_TIME > $this->post_time) {
return dr_return_data(0, dr_lang('定时发布时间不正确'), $data);
}
// 保存定时发布数据
$this->init['table'] = dr_module_table_prefix(APP_DIR).'_time';
$rt = $this->content_model->save_post_time($id, $data, $this->post_time);
$this->_json($rt['code'], $rt['msg']);
} elseif ($is_draft) {
// 草稿箱存储
$data[1]['id'] = $id;
$this->name.= dr_lang('草稿箱');
$this->init['table'] = dr_module_table_prefix(APP_DIR).'_draft';
return $this->content_model->insert_draft($did, $data);
} else {
// 删除草稿
$did && $this->content_model->delete_draft($did);
if (defined('IS_MODULE_RECYCLE')) {
// 是否回收站恢复,id恢复以前的
$id = $data[1]['id'] = $data[0]['id'] = intval($old['id']);
}
// 正常存储
return parent::_Save($id, $data, $old,
function ($id, $data, $old) {
// 禁止修改栏目
if ($old['catid'] && $this->module['category'][$old['catid']]['setting']['notedit']) {
$data[1]['catid'] = $old['catid'];
}
// 发布之前判断
if ($old && defined('IS_MODULE_VERIFY')) {
// 是否来自审核
if (!isset($_POST['flag'])) {
$_POST['flag'] = $old['my_flag'];
}
if ($this->is_post_user && IS_USE_MEMBER) {
// 投稿者编辑
$data[1]['status'] = $this->is_hcategory ? $this->content_model->_hcategory_member_post_status($this->member) : $this->content_model->get_verify_status(
$data[1]['id'],
$this->member,
\Phpcmf\Service::M('member_auth', 'cms')->category_auth($this->module, $data[1]['catid'], 'verify', $this->member)
);
} else {
if ($_POST['verify']['status']) {
// 通过
$step = $this->_get_verify($old['verify']['vid']);
$status = intval($old['status']);
$data[1]['status'] = dr_count($step) - 1 <= $status ? 9 : $status + 1;
// 再次验证审核级别
if (!$this->_get_verify_status_edit($old['verify']['vid'], $data[1]['status'])) {
$this->_json(0, dr_lang('当前角色无权限审核此内容'));
}
// 任务执行成功
\Phpcmf\Service::M('member')->todo_admin_notice( MOD_DIR.'/verify/edit:id/'.$id, SITE_ID);
if ($data[1]['status'] == 9 && $old) {
// 审核通过时读取最新数据
$new = \Phpcmf\Service::M()->table_site(MOD_DIR)->get($old['id']);
if ($new) {
$data[1]['hits'] = $new['hits'];
}
}
} else {
// 拒绝
$data[1]['status'] = 0;
// 通知
$old['note'] = (string)$_POST['verify']['msg'];
\Phpcmf\Service::L('Notice')->send_notice('module_content_verify_0', $old);
}
}
} elseif (defined('IS_MODULE_RECYCLE')) {
// 是否回收站恢复
$this->content_model->recovery([IS_MODULE_RECYCLE]);
} elseif (defined('IS_MODULE_TG')) {
// 是否退稿
$data[1]['status'] = 0;
// 通知
$_POST['verify']['msg'] = $old['note'] = \Phpcmf\Service::L('input')->get('note', true);
if (!isset($_POST['flag'])) {
$_POST['flag'] = $old['my_flag'];
}
\Phpcmf\Service::L('Notice')->send_notice('module_content_verify_0', $old);
$this->content_model->table($this->content_model->mytable.'_verify')->delete($id);
$this->name.= dr_lang('退稿审核');
}
return dr_return_data(1, 'ok', $data);
},
function ($id, $data, $old) {
// 审核通过后
if ($data[1]['status'] == 9) {
// 同步发送到其他栏目
$this->content_model->sync_cat(\Phpcmf\Service::L('input')->post('sync_cat'), $data);
// 处理推荐位
if ($old['my_flag']) {
$this->content_model->delete_flag($id, 'all');
}
$myflag = \Phpcmf\Service::L('input')->post('flag');
if ($myflag) {
foreach ($myflag as $i) {
if (isset($this->module['setting']['flag'][$i])) {
$this->content_model->insert_flag((int)$i, $id, $data[1]['uid'], $data[1]['catid']);
}
}
}
}
$data[1]['id'] = $id;
return $data;
}
);
}
}
/**
* 回调处理结果
* $data
* */
protected function _Call_Post($data) {
if ($data[1]['status'] == 9) {
$html = $list = '';
if ($this->module['category'][$data[1]['catid']]['setting']['html']) {
// 生成权限文件
if (!dr_html_auth(1)) {
$this->_json(0, dr_lang('/cache/html/ 无法写入文件'));
}
$list = dr_web_prefix('index.php?s='.MOD_DIR.'&c=html&m=categoryfile&id='.$data[1]['catid']);
}
if ($this->module['category'][$data[1]['catid']]['setting']['chtml']) {
// 生成权限文件
if (!dr_html_auth(1)) {
$this->_json(0, dr_lang('/cache/html/ 无法写入文件'));
}
$html = dr_web_prefix('index.php?s='.MOD_DIR.'&c=html&m=showfile&id='.$data[1]['id']);
}
$this->_json(1, dr_lang('操作成功'), [
'id' => $data[1]['id'],
'url' => isset($_GET['is_self']) ? dr_url(MOD_DIR.'/home/edit', ['id' => $data[1]['id']]) : '',
'catid' => $data[1]['catid'],
'htmlfile' => $html,
'htmllist' => $list
]);
} else {
if (intval(\Phpcmf\Service::L('input')->post('is_draft'))) {
// 草稿
$this->_json(1, dr_lang('保存草稿成功'));
} elseif ($this->is_post_user) {
// 投稿者
$this->_json(1, dr_lang('操作成功,等待管理员审核'), [
'url' => dr_url($this->_is_admin_auth(MOD_DIR.'/verify/index') ? MOD_DIR.'/verify/index' : MOD_DIR.'/home/index'),
'id' => $data[1]['id'],
'catid' => $data[1]['catid'],
]);
}
$this->_json(1, dr_lang('操作成功'), [
'id' => $data[1]['id'],
'catid' => $data[1]['catid']
]);
}
}
// 验证是否具有审核状态
protected function _get_verify_status_edit($vid, $status) {
if (dr_in_array(1, $this->admin['roleid'])) {
return 1; // 超管用户
} elseif ($status == 0) {
return 1; // 退稿的可以看到
} elseif (\Phpcmf\Service::M('auth')->is_post_user()) {
return 0; // 投稿者不允许编辑审核
}
if (!IS_USE_MEMBER) {
return 1;
}
$verify = $this->get_cache('verify');
if (!$verify) {
return 0; // 没有审核流程时
}
$my = [];
foreach ($verify as $t) {
if ($t['value']['role']) {
$rid = [];
foreach ($t['value']['role'] as $c) {
if (is_array($c)) {
$rid = array_merge($rid, $c);
} elseif (is_numeric($c)) {
$rid[] = $c;
}
}
if (dr_array_intersect($rid, $this->admin['roleid'])) {
$my[] = $t['id'];
}
}
}
if (!$my) {
// 此管理员没有管理权限
return 0;
}
// 有权限了
if (dr_in_array($vid, $my)) {
return 1;
}
return 0;
}
// 获取当前栏目的时候流程
protected function _get_verify($vid) {
$rt = [];
$cache = $this->get_cache('verify');
if ($cache && $vid && $cache[$vid]) {
$verify = $cache[$vid];
if ($verify['value']['role']) {
$role = $this->get_cache('auth');
foreach ($verify['value']['role'] as $id => $rid) {
if (!is_array($rid)) {
if (isset($role[$rid]) && $role[$rid]) {
$rt[$id] = [
'rid' => $rid,
'name' => dr_lang($role[$rid]['name'] ? $role[$rid]['name'] : '管理员'),
];
}
} else {
$ns = [];
foreach ($rid as $r) {
if (isset($role[$r]) && $role[$r]) {
$ns[] = dr_lang($role[$r]['name'] ? $role[$r]['name'] : '管理员');
}
}
if ($ns) {
$ns = array_unique($ns);
$rt[$id] = [
'rid' => $r,
'name' => implode('、', $ns),
];
}
}
}
}
}
$rt[9] = [
'name' => dr_lang('完成'),
];
return $rt;
}
// 模块后台菜单
protected function _module_menu($module, $list_name, $list_url, $post_url) {
//
$module_menu = '';
$module_menu.= '';
// 显示菜单
$menu = '';
$menu.= ' '.$list_name.' '.$module_menu.' ';
// 独立模块显示其栏目
if (!$module['share'] && $this->_is_admin_auth($module['dirname'].'/category/index')) {
$menu.= ' '.dr_lang('栏目管理').' ';
}
$menu.= ' '.dr_lang('更新URL').' ';
if ($this->_is_admin_auth('module/module/edit')) {
$menu.= ' '.dr_lang('模块配置').' ';
}
// 非内容页面就显示返回链接
if (\Phpcmf\Service::L('router')->uri() != $module['dirname'].'/home/index'
&& $this->_is_admin_auth($module['dirname'].'/home/index') ) {
$menu.= ' '.dr_lang('返回').' ';
}
// 发布和编辑权限
$this->_is_admin_auth($module['dirname'].'/home/add') && $post_url && $menu.= ' '.(isset($module['post_name']) && $module['post_name'] ? dr_lang($module['post_name']) : dr_lang('发布')).' ';
\Phpcmf\Service::L('router')->method == 'edit' && $menu.= ' '.dr_lang('修改').' ';
// 选中判断
strpos($menu, 'class="on"') === false && $menu = str_replace('{ON}', 'on', $menu);
return $menu;
}
/**
* 兼容低版本
*/
protected function _app_cbottom_fix($type = '', $data = [])
{
if (!$type) {
// 表示模块部分
$endfix = '';
} else {
$endfix = '_'.$type;
}
// 加载模块自身的
if (APP_DIR && is_file(APPPATH.'Config/Cbottom'.$endfix.'.php')) {
$_clink = require APPPATH.'Config/Cbottom'.$endfix.'.php';
if ($_clink) {
if (is_file(APPPATH.'Models/Auth'.$endfix.'.php')) {
$obj = \Phpcmf\Service::M('auth'.$endfix, APP_DIR);
if (method_exists($obj, 'is_bottom_auth') && $obj->is_bottom_auth(APP_DIR)) {
$data = array_merge($data , $_clink);
}
} else {
$data = array_merge($data , $_clink);
}
}
}
// 加载全部插件的
$local = \Phpcmf\Service::Apps(1);
foreach ($local as $dir => $path) {
// 排除模块自身
if (strtolower($dir) == APP_DIR) {
continue;
}
// 判断插件目录
if (is_file($path.'Config/Cbottom'.$endfix.'.php') && is_file($path.'Config/App.php')) {
$cfg = require $path.'Config/App.php';
if ($cfg['type'] == 'app' && !$cfg['ftype']) {
// 表示插件非模块
$_clink = require $path.'Config/Cbottom'.$endfix.'.php';
if ($_clink) {
if (is_file($path.'Models/Auth'.$endfix.'.php')) {
$obj = \Phpcmf\Service::M('auth'.$endfix, $dir);
if (method_exists($obj, 'is_bottom_auth') && $obj->is_bottom_auth(APP_DIR)) {
$data = array_merge($data , $_clink);
}
} else {
$data = array_merge($data , $_clink);
}
}
}
}
}
if ($data) {
foreach ($data as $i => $t) {
if (IS_ADMIN) {
if (!$t['url']) {
unset($data[$i]); // 没有url
CI_DEBUG && log_message('debug', 'Cbottom('.$t['name'].')没有设置url参数');
continue;
} elseif ($t['uri'] && !$this->_is_admin_auth($t['uri'])) {
unset($data[$i]); // 无权限的不要
continue;
}
$data[$i]['url'] = urldecode($data[$i]['url']);
} else {
if (!$t['murl']) {
unset($data[$i]); // 非后台必须验证murl
CI_DEBUG && log_message('debug', 'Cbottom('.$t['name'].')没有设置murl参数');
continue;
}
$data[$i]['url'] = urldecode($data[$i]['murl']);
}
}
}
return $data;
}
}