You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

354 lines
13 KiB

1 year ago
<?php
/**
* @copyright (C)2016-2099 Hnaoyun Inc.
* @author XingMeng
* @email hnxsh@foxmail.com
* @date 2018年5月28日
* 自定义表单控制器
*/
namespace app\admin\controller\content;
use core\basic\Controller;
use app\admin\model\content\FormModel;
class FormController extends Controller
{
private $model;
public function __construct()
{
$this->model = new FormModel();
}
// 自定义表单列表
public function index()
{
if ((! ! $fcode = get('fcode', 'var')) && $form = $this->model->getFormByCode($fcode)) {
$this->assign('form', $form);
if (get('action') == 'showdata') {
$this->assign('showdata', true);
$this->assign('fields', $this->model->getFormFieldByCode($fcode)); // 获取字段
$table = $this->model->getFormTableByCode($fcode);
if (get('export')) {
$this->assign('formdata', $this->model->getFormData($table, false));
header('Content-Type:application/vnd.ms-excel');
header('Cache-Control: max-age=0');
header("Content-Disposition:filename=" . $form->form_name . "-" . date("YmdHis") . ".xls");
$this->display('content/exform.html');
} else {
$this->assign('formdata', $this->model->getFormData($table, true));
}
}
if (get('action') == 'showfield') {
$this->assign('showfield', true);
$this->assign('fields', $this->model->getFormFieldByCode($fcode));
}
} else {
$this->assign('list', true);
if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
$result = $this->model->findForm($field, $keyword);
} else {
$result = $this->model->getList();
}
$this->assign('forms', $result);
}
$this->display('content/form.html');
}
// 自定义表单增加
public function add()
{
if ($_POST) {
if (get('action') == 'addform') {
$fcode = get_auto_code($this->model->getLastCode());
$form_name = post('form_name');
$table_name = 'ay_diy_' . post('table_name', 'var');
if (! $form_name) {
alert_back('表单名称不能为空!');
}
if (! $table_name) {
alert_back('表单数据表不能为空!');
}
$data = array(
'fcode' => $fcode,
'form_name' => $form_name,
'table_name' => $table_name,
'create_user' => session('username'),
'update_user' => session('username')
);
if (get_db_type() == 'sqlite') {
$result = $this->model->amd("CREATE TABLE `$table_name` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,`create_time` TEXT NOT NULL)");
} else {
$result = $this->model->amd("CREATE TABLE `$table_name` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`create_time` datetime NOT NULL,PRIMARY KEY (`id`))ENGINE=MyISAM DEFAULT CHARSET=utf8");
}
if ($this->model->addForm($data)) {
$this->log('新增自定义表单成功!');
if (! ! $backurl = get('backurl')) {
success('新增成功!', base64_decode($backurl));
} else {
success('新增成功!', url('/admin/Form/index'));
}
} else {
$this->log('新增自定义表单失败!');
error('新增失败!', - 1);
}
} else {
// 获取数据
$fcode = post('fcode', 'var');
$name = post('name', 'var');
$length = post('length', 'int') ?: 20;
$required = post('required', 'int') ?: 0;
$description = post('description');
$sorting = post('sorting', 'int') ?: 255;
if (! $fcode) {
alert_back('表单编码不能为空!');
}
if (! $name) {
alert_back('字段名称不能为空!');
}
if (! $description) {
alert_back('字段描述不能为空!');
}
// 构建数据
$data = array(
'fcode' => $fcode,
'name' => $name,
'length' => $length,
'required' => $required,
'description' => $description,
'sorting' => $sorting,
'create_user' => session('username'),
'update_user' => session('username')
);
// 获取表名称
$table = $this->model->getFormTableByCode($fcode);
// 字段类型及长度
$mysql = "varchar($length)";
$sqlite = "TEXT($length)";
// 字段不存在时创建
if (! $this->model->isExistField($table, $name)) {
if (get_db_type() == 'sqlite') {
$result = $this->model->amd("ALTER TABLE $table ADD COLUMN $name $sqlite NULL");
} else {
$result = $this->model->amd("ALTER TABLE $table ADD $name $mysql NULL COMMENT '$description'");
}
} elseif ($this->model->checkFormField($fcode, $name)) {
alert_back('字段已经存在,不能重复添加!');
}
// 执行自定义表单记录添加
if ($this->model->addFormField($data)) {
$this->log('新增表单字段成功!');
if (! ! $backurl = get('backurl')) {
success('新增成功!', base64_decode($backurl));
} else {
success('新增成功!', url('/admin/Form/index/fcode/' . $fcode . '/action/showfield'));
}
} else {
$this->log('新增表单字段失败!');
error('新增失败!', - 1);
}
}
}
}
// 自定义表单删除
public function del()
{
if (! $id = get('id', 'int')) {
error('传递的参数值错误!', - 1);
}
// 删除表单
if (get('action') == 'delform') {
if ($id == 1) {
alert_back('留言表单不允许删除');
}
$table = $this->model->getFormTable($id);
$fcode = $this->model->getFormCode($id);
if ($this->model->delForm($id)) {
$this->model->delFormFieldByCode($fcode); // 删除字段记录
$this->model->amd("DROP TABLE IF EXISTS $table"); // 删除表
$this->log('删除自定义表单' . $id . '成功!');
success('删除成功!', - 1);
} else {
$this->log('删除自定义表单' . $id . '失败!');
error('删除失败!', - 1);
}
} elseif (get('action') == 'deldata') {
// 获取表单
if (! $fcode = get('fcode', 'var')) {
error('传递的参数值fcode错误', - 1);
}
$table = $this->model->getFormTableByCode($fcode);
if ($this->model->delFormData($table, $id)) {
$this->log('删除表单数据' . $id . '成功!');
success('删除成功!', - 1);
} else {
$this->log('删除表单数据' . $id . '失败!');
error('删除失败!', - 1);
}
} else {
// 获取表单
if (! $fcode = get('fcode', 'var')) {
error('传递的参数值fcode错误', - 1);
}
// 获取操作表
$table = $this->model->getFormTableByCode($fcode);
$name = $this->model->getFormFieldName($id);
if ($this->model->delFormField($id)) {
// mysql数据库执行字段删除sqlite暂时不支持
if (! ! $name) {
if (get_db_type() == 'mysql') {
$result = $this->model->amd("ALTER TABLE $table DROP COLUMN $name");
}
}
$this->log('删除自定义表单' . $id . '成功!');
success('删除成功!', - 1);
} else {
$this->log('删除自定义表单' . $id . '失败!');
error('删除失败!', - 1);
}
}
}
// 自定义表单修改
public function mod()
{
if (! $id = get('id', 'int')) {
error('传递的参数值错误!', - 1);
}
// 单独修改状态
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
if ($this->model->modFormField($id, "$field='$value',update_user='" . session('username') . "'")) {
location(- 1);
} else {
alert_back('修改失败!');
}
}
if (get('action') == 'addmenu') {
if ($this->model->addFormMenu($id)) {
$this->log('添加自定义表单' . $id . '到菜单成功!');
if (! ! $backurl = get('backurl')) {
success('添加成功!', base64_decode($backurl));
} else {
success('添加成功!', url('/admin/Form/index'));
}
} else {
location(- 1);
}
}
// 修改操作
if ($_POST) {
// 修改表单
if (get('action') == 'modform') {
$form_name = post('form_name');
if (! $form_name) {
alert_back('表单名称不能为空!');
}
$data = array(
'form_name' => $form_name,
'update_user' => session('username')
);
// 执行修改
if ($this->model->modForm($id, $data)) {
$this->log('修改自定义表单' . $id . '成功!');
if (! ! $backurl = get('backurl')) {
success('修改成功!', base64_decode($backurl));
} else {
success('修改成功!', url('/admin/Form/index'));
}
} else {
location(- 1);
}
} else {
// 获取数据
$description = post('description');
$required = post('required', 'int') ?: 0;
$sorting = post('sorting', 'int') ?: 255;
if (! $description) {
alert_back('字段描述不能为空!');
}
// 构建数据
$data = array(
'description' => $description,
'required' => $required,
'sorting' => $sorting,
'update_user' => session('username')
);
// 执行修改
if ($this->model->modFormField($id, $data)) {
$this->log('修改表单字段' . $id . '成功!');
if (! ! $backurl = get('backurl')) {
success('修改成功!', base64_decode($backurl));
} else {
success('修改成功!', url('/admin/Form/index'));
}
} else {
location(- 1);
}
}
} else {
// 调取修改内容
$this->assign('mod', true);
if (get('action') == 'modform') {
if (! $result = $this->model->getForm($id)) {
error('编辑的内容已经不存在!', - 1);
}
$this->assign('form', $result);
} else {
if (! $result = $this->model->getFormField($id)) {
error('编辑的内容已经不存在!', - 1);
}
$this->assign('field', $result);
}
$this->display('content/form.html');
}
}
// 清空
public function clear()
{
// 获取表单
if (! $fcode = get('fcode', 'var')) {
error('传递的参数值fcode错误', - 1);
}
$table = $this->model->getFormTableByCode($fcode);
if ($this->model->clearFormData($table)) {
alert_location('清空成功!', - 1);
} else {
alert_location('清空失败!', - 1);
}
}
}