281 lines
10 KiB
PHP
281 lines
10 KiB
PHP
<?php namespace Phpcmf\Controllers\Admin;
|
|
|
|
/**
|
|
* http://www.xunruicms.com
|
|
* 本文件是框架系统文件,二次开发时不可以修改本文件
|
|
**/
|
|
|
|
class Module extends \Phpcmf\Common
|
|
{
|
|
|
|
private $dir;
|
|
private $form;
|
|
|
|
public function __construct() {
|
|
parent::__construct();
|
|
|
|
$this->dir = dr_safe_replace(\Phpcmf\Service::L('input')->get('dir'));
|
|
|
|
$menu = [
|
|
'内容模块' => ['module/module/index', 'fa fa-cogs'],
|
|
'模块表单' => ['mform/module/index', 'fa fa-cogs'],
|
|
];
|
|
|
|
$menu['表单配置'] = ['hide:mform/module/form_edit', 'fa fa-cog'];
|
|
$menu['重建表单'] = ['ajax:mform/module/form_init_index', 'fa fa-refresh'];
|
|
$menu['help'] = [98];
|
|
|
|
\Phpcmf\Service::V()->assign('menu', \Phpcmf\Service::M('auth')->_admin_menu($menu));
|
|
|
|
// 表单验证配置
|
|
$this->form = [
|
|
'name' => [
|
|
'name' => '表单名称',
|
|
'rule' => [
|
|
'empty' => dr_lang('表单名称不能为空')
|
|
],
|
|
'filter' => [],
|
|
'length' => '200'
|
|
],
|
|
'table' => [
|
|
'name' => '表单别名',
|
|
'rule' => [
|
|
'empty' => dr_lang('表单别名不能为空'),
|
|
'table' => dr_lang('表单别名格式不正确'),
|
|
],
|
|
'filter' => [],
|
|
'length' => '200'
|
|
],
|
|
];
|
|
}
|
|
|
|
// 模块管理
|
|
public function index() {
|
|
|
|
$module = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-content');
|
|
if (!$module) {
|
|
$this->_admin_msg(0, dr_lang('未安装任何内容模块'));
|
|
}
|
|
|
|
\Phpcmf\Service::V()->assign([
|
|
'module' => $module,
|
|
]);
|
|
\Phpcmf\Service::V()->display('module.html');
|
|
}
|
|
|
|
// 隐藏或者启用
|
|
public function mhidden_edit() {
|
|
|
|
$id = (int)\Phpcmf\Service::L('input')->get('id');
|
|
$row = \Phpcmf\Service::M()->table('module_form')->get($id);
|
|
if (!$row) {
|
|
$this->_json(0, dr_lang('数据#%s不存在', $id));
|
|
}
|
|
|
|
$v = $row['disabled'] ? 0 : 1;
|
|
\Phpcmf\Service::M()->table('module_form')->update($id, ['disabled' => $v]);
|
|
|
|
\Phpcmf\Service::M('cache')->sync_cache(''); // 自动更新缓存
|
|
$this->_json(1, dr_lang($v ? '模块表单已被禁用' : '模块表单已被启用'), ['value' => $v]);
|
|
}
|
|
|
|
// 创建模块表单
|
|
public function form_add() {
|
|
|
|
if (IS_AJAX_POST) {
|
|
$data = \Phpcmf\Service::L('input')->post('data');
|
|
if (!preg_match('/^[a-z]+[a-z0-9\_]+$/i', $data['table'])) {
|
|
$this->_json(0, dr_lang('表单别名不规范'));
|
|
} elseif (\Phpcmf\Service::M('app')->is_sys_dir($data['table'])) {
|
|
$this->_json(0, dr_lang('名称[%s]是系统保留名称,请重命名', $data['table']));
|
|
}
|
|
$this->_validation(0, $data);
|
|
\Phpcmf\Service::L('input')->system_log('创建模块['.$this->dir.']表单('.$data['name'].')');
|
|
$rt = \Phpcmf\Service::M('mform', 'mform')->create_form($this->dir, $data);
|
|
if ($rt['code']) {
|
|
\Phpcmf\Service::M('cache')->sync_cache(''); // 自动更新缓存
|
|
$this->_json(1, dr_lang('操作成功,请刷新后台页面'));
|
|
} else {
|
|
$this->_json(0, $rt['msg']);
|
|
}
|
|
}
|
|
|
|
\Phpcmf\Service::V()->assign([
|
|
'form' => dr_form_hidden()
|
|
]);
|
|
\Phpcmf\Service::V()->display('module_form_add.html');
|
|
exit;
|
|
}
|
|
|
|
// 修改模块表单
|
|
public function form_edit() {
|
|
|
|
$id = intval(\Phpcmf\Service::L('input')->get('id'));
|
|
$data = \Phpcmf\Service::M()->table('module_form')->get($id);
|
|
if (!$data) {
|
|
$this->_admin_msg(0, dr_lang('模块表单(%s)不存在', $id));
|
|
}
|
|
|
|
$data['setting'] = dr_string2array($data['setting']);
|
|
!$data['setting']['list_field'] && $data['setting']['list_field'] = [
|
|
'title' => [
|
|
'use' => 1,
|
|
'name' => dr_lang('主题'),
|
|
'func' => 'title',
|
|
'width' => 0,
|
|
'order' => 1,
|
|
],
|
|
'uid' => [
|
|
'use' => 1,
|
|
'name' => dr_lang('账号'),
|
|
'func' => 'uid',
|
|
'width' => 100,
|
|
'order' => 2,
|
|
],
|
|
'inputtime' => [
|
|
'use' => 1,
|
|
'name' => dr_lang('录入时间'),
|
|
'func' => 'datetime',
|
|
'width' => 160,
|
|
'order' => 3,
|
|
],
|
|
];
|
|
|
|
if (IS_AJAX_POST) {
|
|
$data = \Phpcmf\Service::L('input')->post('data');
|
|
if ($data['setting']['list_field']) {
|
|
foreach ($data['setting']['list_field'] as $t) {
|
|
if ($t['func']) {
|
|
if (method_exists(\Phpcmf\Service::L('Function_list'), $t['func'])) {
|
|
} elseif (!function_exists($t['func'])) {
|
|
$this->_json(0, dr_lang('列表回调函数[%s]未定义', $t['func']));
|
|
} elseif (strpos($t['func'], 'dr_') === false && strpos($t['func'], 'my_') === false) {
|
|
$this->_json(0, '函数【'.$t['func'].'】必须以dr_或者my_开头');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ($data['setting']['order']) {
|
|
if (strpos($data['setting']['order'], '(') or strpos($data['setting']['order'], ')')) {
|
|
$this->_json(0, dr_lang('后台列表的默认排序字段不允许特殊符号'));
|
|
}
|
|
}
|
|
\Phpcmf\Service::M()->table('module_form')->update($id,
|
|
[
|
|
'name' => $data['name'],
|
|
'setting' => dr_array2string($data['setting'])
|
|
]
|
|
);
|
|
|
|
\Phpcmf\Service::M('cache')->sync_cache(''); // 自动更新缓存
|
|
\Phpcmf\Service::L('input')->system_log('修改模块['.$this->dir.']表单('.$data['name'].')配置');
|
|
$this->_json(1, dr_lang('操作成功'));
|
|
}
|
|
|
|
// 主表字段
|
|
$field = \Phpcmf\Service::M()->db->table('field')
|
|
->where('disabled', 0)
|
|
->where('ismain', 1)
|
|
->where('relatedname', 'mform-'.$this->dir)
|
|
->where('relatedid', $id)
|
|
->orderBy('displayorder ASC,id ASC')
|
|
->get()->getResultArray();
|
|
$sys_field = \Phpcmf\Service::L('Field')->sys_field(['id', 'uid', 'inputtime', 'inputip', 'displayorder']);
|
|
|
|
// 关联信息
|
|
$field['cid'] = [
|
|
'name' => dr_lang('关联'),
|
|
'ismain' => 1,
|
|
'ismember' => 1,
|
|
'fieldtype' => 'Cid',
|
|
'fieldname' => 'cid',
|
|
'setting' => []
|
|
];
|
|
if (!$data['setting']['list_field']['cid']['func']) {
|
|
$data['setting']['list_field']['cid']['func'] = 'ctitle';
|
|
}
|
|
|
|
$page = intval(\Phpcmf\Service::L('input')->get('page'));
|
|
|
|
\Phpcmf\Service::V()->assign([
|
|
'data' => $data,
|
|
'page' => $page,
|
|
'form' => dr_form_hidden(['page' => $page]),
|
|
'field' => dr_list_field_value($data['setting']['list_field'], $sys_field, $field),
|
|
'diy_tpl' => is_file(dr_get_app_dir($this->dir).'Views/diy_'.$data['table'].'.html') ? dr_get_app_dir($this->dir).'Views/diy_'.$data['table'].'.html' : '',
|
|
]);
|
|
\Phpcmf\Service::V()->display('module_form_edit.html');
|
|
}
|
|
|
|
// 删除表单
|
|
public function del() {
|
|
|
|
$id = (int)\Phpcmf\Service::L('input')->get('id');
|
|
if (!$id) {
|
|
$this->_json(0, dr_lang('你还没有选择呢'));
|
|
}
|
|
|
|
$rt = \Phpcmf\Service::M('mform', 'mform')->delete_form([$id]);
|
|
if (!$rt['code']) {
|
|
$this->_json(0, $rt['msg']);
|
|
}
|
|
|
|
\Phpcmf\Service::M('cache')->sync_cache(''); // 自动更新缓存
|
|
\Phpcmf\Service::L('input')->system_log('删除模块表单: '. $id);
|
|
|
|
$this->_json(1, dr_lang('操作成功'));
|
|
}
|
|
|
|
// 验证数据
|
|
private function _validation($id, $data) {
|
|
|
|
list($data, $return) = \Phpcmf\Service::L('Form')->validation($data, $this->form);
|
|
if ($return) {
|
|
$this->_json(0, $return['error'], ['field' => $return['name']]);
|
|
}
|
|
if (\Phpcmf\Service::M()->table('module_form')->where('module', $this->dir)->is_exists($id, 'table', $data['table'])) {
|
|
$this->_json(0, dr_lang('数据表名称已经存在'), ['field' => 'table']);
|
|
}
|
|
}
|
|
|
|
|
|
// 表单初始化
|
|
public function form_init_index() {
|
|
|
|
$data = \Phpcmf\Service::M()->table('module_form')->getAll();
|
|
if (!$data) {
|
|
$this->_json(0, dr_lang('没有任何可用表单'));
|
|
}
|
|
|
|
$ct = $file = 0;
|
|
foreach ($data as $t) {
|
|
$par = \Phpcmf\Service::M()->dbprefix(dr_module_table_prefix($t['module'], SITE_ID)); // 父级表
|
|
if (!\Phpcmf\Service::M()->is_table_exists($par)) {
|
|
continue; // 当前站点没有安装
|
|
}
|
|
$rt = \Phpcmf\Service::M('mform', 'mform')->create_form_file($t['module'], $t['table'], 1);
|
|
if (!$rt['code']) {
|
|
$this->_json(0, $rt['msg']);
|
|
}
|
|
$file+= (int)$rt['msg'];
|
|
$ct++;
|
|
// 创建统计字段
|
|
$fname = $t['table']."_total";
|
|
if (!\Phpcmf\Service::M()->is_field_exists($par, $fname)) {
|
|
\Phpcmf\Service::M('table')->add_field(
|
|
$par,
|
|
$fname,
|
|
'INT(10) UNSIGNED',
|
|
'NULL DEFAULT \'0\'',
|
|
'表单'.$t['name'].'统计'
|
|
);
|
|
}
|
|
}
|
|
|
|
\Phpcmf\Service::M('cache')->sync_cache(''); // 自动更新缓存
|
|
$this->_json(1, dr_lang('本站点共(%s)个表单,重建(%s)个文件', $ct, $file));
|
|
}
|
|
|
|
|
|
}
|