Files
BESCMS/dayrui/App/Mform/Control/Admin/Mform.php
T

480 lines
19 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php namespace Phpcmf\Admin;
// 内容模块表单操作类 基于 Ftable
class Mform extends \Phpcmf\Table
{
public $cid; // 内容id
public $index; //
public $form; // 表单信息
public $is_verify; // 判断是否来自审核控制器
protected $is_add_menu = 1; //允许有添加菜单
// 上级公共类
public function __construct() {
parent::__construct();
$this->_Extend_Init();
$this->fix_admin_tpl_path = dr_get_app_dir('mform').'Views/';
}
// 继承类初始化
protected function _Extend_Init() {
// 初始化模块
$this->_module_init(APP_DIR);
// 判断是否来自审核控制器
$this->is_verify = strpos(\Phpcmf\Service::L('Router')->class, '_verify') !== false;
// 判断表单是否操作
$this->form = $this->module['form'][str_replace('_verify', '',\Phpcmf\Service::L('Router')->class)];
if (!$this->form) {
$this->_admin_msg(0, dr_lang('模块表单【%s】不存在', str_replace('_verify', '',\Phpcmf\Service::L('Router')->class)));
}
// 支持附表存储
$this->is_data = 1;
// 模板前缀(避免混淆)
$this->tpl_prefix = 'share_mform_';
// 单独模板命名
$this->tpl_name = $this->form['table'];
// 模块显示名称
$this->name = dr_lang('内容模块[%s]表单(%s', APP_DIR, $this->form['name']);
// 获取父级内容
$this->url_params['cid'] = $this->cid = intval(\Phpcmf\Service::L('input')->get('cid'));
$this->index = $this->cid ? $this->content_model->get_data( $this->cid) : [];
// 自定义条件
$where = $this->is_verify ? 'status<>1' : 'status=1';
$this->cid && $where.= ' and cid='. $this->cid;
$cwhere = $this->content_model->get_admin_list_where();
$cwhere && $where.= ' AND '. $cwhere;
$sysfield = ['inputtime', 'inputip', 'displayorder', 'uid', 'status'];
if ($this->is_verify) {
if (is_array($this->form['setting']['list_field'])) {
$this->form['setting']['list_field']['status'] = [
'use' => '1', // 1是显示,0是不显示
'name' => dr_lang('状态'), //显示名称
'width' => '100', // 显示宽度
'func' => 'dr_mform_status_name', // 回调函数见:http://help.xunruicms.com/463.html
'center' => '1', // 1是居中,0是默认
];
}
}
// 初始化数据表
$this->_init([
'field' => $this->form['field'],
'table' => SITE_ID.'_'.APP_DIR.'_form_'.$this->form['table'],
'sys_field' => $sysfield,
'date_field' => $this->form['setting']['search_time'] ? $this->form['setting']['search_time'] : 'inputtime',
'show_field' => 'title',
'list_field' => $this->form['setting']['list_field'],
'order_by' => $this->form['setting']['order'] ? dr_safe_replace($this->form['setting']['order']) : 'displayorder DESC,inputtime DESC',
'where_list' => $where,
]);
// 写入模板
\Phpcmf\Service::V()->assign([
'menu' => $this->_get_menu(),
'mform' => $this->form,
'index' => $this->index,
'field' => $this->init['field'],
'form_url' => \Phpcmf\Service::L('Router')->url(APP_DIR.'/'.$this->form['table'].'/index', ['cid' => $this->cid]),
'is_verify' => $this->is_verify,
'form_table' => $this->form['table'],
]);
if ($this->module['setting']['is_hide_search_bar']) {
$this->is_show_search_bar = 0;
}
}
protected function _get_menu() {
if ($this->is_verify) {
if ($this->cid) {
$menu = [
dr_lang('%s管理', $this->module['name']) => [MOD_DIR.'/home/index', dr_icon($this->module['setting']['icon'])],
dr_lang('%s管理', $this->form['name']) => [MOD_DIR.'/'.$this->form['table'].'/index{cid='.$this->cid.'}', dr_icon($this->form['setting']['icon'])],
dr_lang('%s审核', $this->form['name']) => [MOD_DIR.'/'.$this->form['table'].'_verify/index{cid='.$this->cid.'}', dr_icon($this->form['setting']['icon'])],
];
} else {
$menu = [
dr_lang('%s审核', $this->form['name']) => [MOD_DIR.'/'.$this->form['table'].'/index', 'fa fa-edit'],
];
}
} else {
$menu = [
dr_lang('%s管理', $this->module['name']) => [MOD_DIR.'/home/index', dr_icon($this->module['setting']['icon'])],
dr_lang('%s管理', $this->form['name']) => [MOD_DIR.'/'.$this->form['table'].'/index{cid='.$this->cid.'}', dr_icon($this->form['setting']['icon'])],
dr_lang('%s审核', $this->form['name']) => [MOD_DIR.'/'.$this->form['table'].'_verify/index{cid='.$this->cid.'}', dr_icon($this->form['setting']['icon'])],
];
if ($this->cid && $this->is_add_menu) {
$menu[dr_lang('添加')] = [APP_DIR.'/'.$this->form['table'].'/add{cid='.$this->cid.'}', 'fa fa-plus'];
$menu[dr_lang('修改')] = ['hide:'.APP_DIR.'/'.$this->form['table'].'/edit', 'fa fa-edit'];
}
}
return \Phpcmf\Service::M('auth')->_admin_menu($menu);
}
// ========================
// 后台查看列表
protected function _Admin_List() {
$this->init['table'] = dr_mform_ctable(APP_DIR, $this->form['table'], $this->index['id']);
list($tpl) = $this->_List(['cid' => $this->cid]);
if ($this->_is_admin_auth('edit')) {
if ($this->is_verify) {
} else {
$this->mytable['link_var'].= 'html = html.replace(/\{cid\}/g, "'.$this->index['id'].'");';
$this->mytable['link_var'].= 'html = html.replace(/\{mid\}/g, "'.APP_DIR.'");';
$this->mytable['link_var'].= 'html = html.replace(/\{fid\}/g, "'.$this->form['table'].'");';
$clink = $this->_app_clink('mform');
if ($clink) {
foreach ($clink as $a) {
if ($a['model'] && $a['check']
&& method_exists($a['model'], $a['check'])
&& call_user_func(array($a['model'], $a['check']), APP_DIR, []) == 0) {
continue;
}
$this->mytable['link_tpl'].= ' <label><a class="btn '.$a['color'].' btn-xs" href="'.$a['url'].'"><i class="'.$a['icon'].'"></i> '.dr_lang($a['name']);
if ($a['field'] && \Phpcmf\Service::M()->is_field_exists($this->init['table'], $a['field'])) {
$this->mytable['link_tpl'].= '{'.$a['field'].'}';
$this->mytable['link_var'].= 'html = html.replace(/\{'.$a['field'].'\}/g, row.'.$a['field'].');';
}
$this->mytable['link_tpl'].= '</a></label>';
}
}
$cbottom = $this->_app_cbottom('mform');
if ($cbottom) {
$this->mytable['foot_tpl'].= '<label>
<div class="btn-group dropup">
<a class="btn blue btn-sm dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true" aria-expanded="false" href="javascript:;"> '.dr_lang('批量').'
<i class="fa fa-angle-up"></i>
</a>
<ul class="dropdown-menu">';
foreach ($cbottom as $a) {
$this->mytable['foot_tpl'].= '<li>
<a href="'.urldecode($a['url']).'"> <i class="'.$a['icon'].'"></i> '.dr_lang($a['name']).' </a>
</li>';
}
$this->mytable['foot_tpl'].= '
</ul>
</div>
</label>';
}
}
}
\Phpcmf\Service::V()->assign([
'mytable' => $this->mytable,
]);
\Phpcmf\Service::V()->assign([
'p' => ['cid' => $this->cid],
]);
return \Phpcmf\Service::V()->display($tpl);
}
// 后台添加内容
protected function _Admin_Add() {
if (!$this->cid) {
$this->_admin_msg(0, dr_lang('缺少cid参数'));
}
list($tpl) = $this->_Post(0);
\Phpcmf\Service::V()->assign([
'form' => dr_form_hidden(),
]);
\Phpcmf\Service::V()->display($tpl);
}
// 后台修改内容
protected function _Admin_Edit() {
$id = intval(\Phpcmf\Service::L('input')->get('id'));
list($tpl, $data) = $this->_Post($id);
if (!$this->cid) {
$this->_admin_msg(0, dr_lang('缺少cid参数'));
}
if (!$data) {
$this->_admin_msg(0, dr_lang('数据不存在: '.$id));
} elseif ($this->cid != $data['cid']) {
$this->_admin_msg(0, dr_lang('cid不匹配'));
} elseif ($this->is_verify && $data['status'] == 1) {
$this->_admin_msg(0, dr_lang('已经通过了审核'));
}
\Phpcmf\Service::V()->assign([
'form' => dr_form_hidden(),
]);
\Phpcmf\Service::V()->display($tpl);
}
// 后台查看内容
protected function _Admin_Show() {
$id = intval(\Phpcmf\Service::L('input')->get('id'));
list($tpl, $data) = $this->_Show($id);
if (!$this->cid) {
$this->_admin_msg(0, dr_lang('缺少cid参数'));
}
if (!$data) {
$this->_admin_msg(0, dr_lang('数据不存在: '.$id));
} elseif ($this->cid != $data['cid']) {
$this->_admin_msg(0, dr_lang('cid不匹配'));
} elseif ($this->is_verify && $data['status']) {
$this->_admin_msg(0, dr_lang('已经通过了审核'));
}
\Phpcmf\Service::V()->assign([
'form' => dr_form_hidden(),
]);
\Phpcmf\Service::V()->display($tpl);
}
// 后台批量保存排序值
protected function _Admin_Order() {
$this->_Display_Order(
intval(\Phpcmf\Service::L('input')->get('id')),
intval(\Phpcmf\Service::L('input')->get('value')),
function ($t) {
$table = dr_mform_ctable(APP_DIR, $this->form['table'], $t['cid']);
if ($table != $this->init['table']) {
// 备用表
$value = intval(\Phpcmf\Service::L('input')->get('value'));
\Phpcmf\Service::M()->table($table)->update($t['id'], ['displayorder' => $value]);
}
}
);
}
// 后台删除内容
protected function _Admin_Del() {
$this->_Del(
\Phpcmf\Service::L('input')->get_post_ids(),
null,
function ($rows) {
// 对应删除提醒
foreach ($rows as $t) {
\Phpcmf\Service::M('member')->delete_admin_notice(MOD_DIR.'/'.$this->form['table'].'_verify/edit:cid/'.$t['cid'].'/id/'.$t['id'], SITE_ID);// clear
\Phpcmf\Service::L('cache')->clear('module_'.MOD_DIR.'_from_'.$this->form['table'].'_show_id_'.$t['id']);
// 统计数量
\Phpcmf\Service::M('mform', 'mform')->update_form_total($t['cid'], $this->form['table']);
$table = dr_mform_ctable(APP_DIR, $this->form['table'], $t['cid']);
if ($table != $this->init['table']) {
// 备用表
\Phpcmf\Service::M()->table($table)->delete($t['id']);
}
}
},
\Phpcmf\Service::M()->dbprefix($this->init['table'])
);
}
// 后台批量审核
protected function _Admin_Status() {
$tid = intval(\Phpcmf\Service::L('input')->get('tid'));
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('所选数据不存在'));
}
// 格式化
$in = [];
foreach ($ids as $i) {
$i && $in[] = intval($i);
}
if (!$in) {
$this->_json(0, dr_lang('所选数据不存在'));
}
$rows = \Phpcmf\Service::M()->db->table($this->init['table'])->whereIn('id', $in)->get()->getResultArray();
if (!$rows) {
$this->_json(0, dr_lang('所选数据不存在'));
}
foreach ($rows as $row) {
if ($row['status'] != 1) {
if ($tid) {
// 拒绝
$this->_verify_refuse($row);
} else {
// 通过
$this->_verify($row);
}
\Phpcmf\Service::M('mform', 'mform')->update_form_total($row['cid'], $this->form['table']);
}
}
$this->_json(1, dr_lang('操作成功'));
}
// ===========================
/**
* 获取内容
* $id 内容id,新增为0
* */
protected function _Data($id = 0) {
$row = $this->content_model->get_form_row($id, $this->form['table']);
if (!$row) {
return [];
}
$this->cid = $row['cid'];
if (!$this->index) {
$this->index = $this->content_model->get_data($row['cid']);
\Phpcmf\Service::V()->assign([
'menu' => $this->_get_menu(),
'index' => $this->index,
]);
}
return $row;
}
// 格式化保存数据 保存之前
protected function _Format_Data($id, $data, $old) {
// 验证父数据
if (!$this->index) {
$this->_json(0, dr_lang('关联内容不存在'));
}
// 默认数据
$data[1]['uid'] = intval($data[1]['uid']);
$data[0]['uid'] = (int)$data[1]['uid'];
$data[1]['cid'] = $data[0]['cid'] = $this->cid;
$data[1]['catid'] = $data[0]['catid'] = (int)$this->index['catid'];
// 后台添加时默认通过
if (!$id) {
// !$this->is_verify &&
$data[1]['status'] = 1;
$data[1]['tableid'] = 0;
}
return $data;
}
/**
* 保存内容
* $id 内容id,新增为0
* $data 提交内容数组,留空为自动获取
* $func 格式化提交的数据
* */
protected function _Save($id = 0, $data = [], $old = [], $func = null, $func2 = null) {
return parent::_Save($id, $data, $old, null,
function ($id, $data, $old) {
if ($this->is_verify) {
if ($data[1]['status'] == 1) {
// 审核通过时
$data[1]['status'] = 0;
$this->_verify($data[1]);
} elseif ($data[1]['status'] == 2) {
$data[1]['status'] = 0;
$this->_verify_refuse($data[1]);
}
}
// 保存之后的更新total字段
\Phpcmf\Service::M('mform', 'mform')->update_form_total( $this->cid, $this->form['table']);
\Phpcmf\Service::M('member')->todo_admin_notice(MOD_DIR.'/'.$this->form['table'].'_verify/edit:cid/'.$old['cid'].'/id/'.$old['id'], SITE_ID);
// clear
\Phpcmf\Service::L('cache')->clear('module_'.MOD_DIR.'_from_'.$this->form['table'].'_show_id_'.$id);
$table = dr_mform_ctable(APP_DIR, $this->form['table'], $this->index['id']);
if ($table != $this->init['table']) {
// 备用表
\Phpcmf\Service::M()->table($table)->replace($data[1]);
}
$row = dr_array2array($data[1], $data[0]);
$row['index'] = $this->index;
if (!$old) {
// 挂钩点
\Phpcmf\Hooks::trigger('module_form_post_after', $row);
} else {
\Phpcmf\Hooks::trigger('module_form_edit_after', $row, $old);
}
}
);
}
// 审核拒绝
protected function _verify_refuse($row) {
if ($row['status'] == 2) {
return;
}
$row['form'] = $this->form;
$row['index'] = $this->index;
$row['module'] = $this->module;
\Phpcmf\Service::M()->db->table($this->init['table'])->where('id', $row['id'])->update(['status' => 2]);
$table = dr_mform_ctable(APP_DIR, $this->form['table'], $this->index['id']);
if ($table != $this->init['table']) {
// 备用表
$value = intval(\Phpcmf\Service::L('input')->get('value'));
\Phpcmf\Service::M()->table($table)->update($row['id'], ['status' => 2]);
}
\Phpcmf\Service::M('member')->todo_admin_notice(MOD_DIR.'/'.$this->form['table'].'_verify/edit:cid/'.$row['cid'].'/id/'.$row['id'], SITE_ID);
\Phpcmf\Service::L('Notice')->send_notice('module_form_verify_0', $row);
}
// 审核通过
protected function _verify($row) {
if ($row['status'] == 1) {
return;
}
/*
// 增减金币
$score = \Phpcmf\Service::M('member_auth')->mform_auth(MOD_DIR, $this->form['id'], 'score', $this->member);
$score && \Phpcmf\Service::M('member')->add_score($row['uid'], $score, dr_lang('%s: %s发布', MODULE_NAME, $this->form['name']), $row['curl']);
// 增减经验
$exp = \Phpcmf\Service::M('member_auth')->mform_auth(MOD_DIR, $this->form['id'], 'exp', $this->member);
$exp && \Phpcmf\Service::M('member')->add_experience($row['uid'], $exp, dr_lang('%s: %s发布', MODULE_NAME, $this->form['name']), $row['curl']);
*/
\Phpcmf\Service::M('member')->todo_admin_notice(MOD_DIR.'/'.$this->form['table'].'_verify/edit:cid/'.$row['cid'].'/id/'.$row['id'], SITE_ID);
\Phpcmf\Service::M()->db->table($this->init['table'])->where('id', $row['id'])->update(['status' => 1]);
$table = dr_mform_ctable(APP_DIR, $this->form['table'], $this->index['id']);
if ($table != $this->init['table']) {
// 备用表
$value = intval(\Phpcmf\Service::L('input')->get('value'));
\Phpcmf\Service::M()->table($table)->update($row['id'], ['status' => 1]);
}
if (!$this->index) {
$this->index = $this->content_model->get_data($row['cid']);
}
$row['form'] = $this->form;
$row['index'] = $this->index;
$row['module'] = $this->module;
\Phpcmf\Service::L('Notice')->send_notice('module_form_verify_1', $row);
$row['muid'] = $row['uid'];
$row['uid'] = $this->index['uid'];
\Phpcmf\Service::L('Notice')->send_notice('module_form_verify_2', $row);
}
}