2022-01-24 10:43:35 +08:00

354 lines
13 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
/**
* @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);
}
}
}