123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- <?php
- defined('IN_PHPCMS') or exit('No permission resources.');
- pc_base::load_app_class('admin','admin',0);
- pc_base::load_sys_class('form', '', '');
- class formguide extends admin {
-
- private $db, $tablename, $m_db, $M;
- public function __construct() {
- parent::__construct();
- $this->tablename = '';
- $setting = new_html_special_chars(getcache('formguide', 'commons'));
- $this->M = $setting[$this->get_siteid()];
- $this->db = pc_base::load_model('sitemodel_model');
- }
-
- //表单向导列表
- public function init() {
- $page = max(intval($_GET['page']), 1);
- $data = $this->db->listinfo(array('type' => 3, 'siteid'=>$this->get_siteid()), '`modelid` DESC', $page);
- $big_menu = array('javascript:window.top.art.dialog({id:\'add\',iframe:\'?m=formguide&c=formguide&a=add\', title:\''.L('formguide_add').'\', width:\'700\', height:\'500\', lock:true}, function(){var d = window.top.art.dialog({id:\'add\'}).data.iframe;var form = d.document.getElementById(\'dosubmit\');form.click();return false;}, function(){window.top.art.dialog({id:\'add\'}).close()});void(0);', L('formguide_add'));
- include $this->admin_tpl('formguide_list');
- }
-
- /**
- * 添加表单向导
- */
- public function add() {
- if (isset($_POST['dosubmit'])) {
- if ($_POST['setting']['starttime']) {
- $_POST['setting']['starttime'] = strtotime($_POST['setting']['starttime']);
- }
- if ($_POST['setting']['endtime']) {
- $_POST['setting']['endtime'] = strtotime($_POST['setting']['endtime']);
- }
- $_POST['info'] = $this->check_info($_POST['info']);
- $_POST['info']['setting'] = array2string($_POST['setting']);
- $_POST['info']['siteid'] = $this->get_siteid();
- $_POST['info']['addtime'] = SYS_TIME;
- $_POST['info']['js_template'] = $_POST['info']['show_js_template'];
- $_POST['info']['type'] = 3;
- unset($_POST['info']['show_js_template']);
- $this->tablename = $_POST['info']['tablename'];
- $formid = $this->db->insert($_POST['info'], true);
- define('MODEL_PATH',PC_PATH.'modules'.DIRECTORY_SEPARATOR.'formguide'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR);
- $create_sql = file_get_contents(MODEL_PATH.'create.sql');
- $this->m_db = pc_base::load_model('sitemodel_field_model');
- $this->sql_execute($create_sql);
- $form_public_field_array = getcache('form_public_field_array', 'model');
- if (is_array($form_public_field_array)) {
- foreach ($form_public_field_array as $k => $v) {
- $v['info']['modelid'] = $formid;
- $this->m_db->insert($v['info']);
- $sql = str_replace('formguide_table', $this->m_db->db_tablepre.'form_'.$_POST['info']['tablename'], $v['sql']);
- $this->m_db->query($sql);
- }
- }
- showmessage(L('add_success'), '?m=formguide&c=formguide_field&a=init&formid='.$formid, '', 'add');
- } else {
- $siteid = $this->get_siteid();
- $template_list = template_list($siteid, 0);
- $site = pc_base::load_app_class('sites','admin');
- $info = $site->get_by_id($siteid);
- foreach ($template_list as $k=>$v) {
- $template_list[$v['dirname']] = $v['name'] ? $v['name'] : $v['dirname'];
- unset($template_list[$k]);
- }
- $formid = intval($_GET['formid']);
- pc_base::load_sys_class('form', '', false);
- $show_header = $show_validator = $show_scroll = 1;
- include $this->admin_tpl('formguide_add');
- }
- }
-
- /**
- * 编辑表单向导
- */
- public function edit() {
- if (!isset($_GET['formid']) || empty($_GET['formid'])) {
- showmessage(L('illegal_operation'), HTTP_REFERER);
- }
- $formid = intval($_GET['formid']);
- if (isset($_POST['dosubmit'])) {
- if ($_POST['setting']['starttime']) {
- $_POST['setting']['starttime'] = strtotime($_POST['setting']['starttime']);
- }
- if ($_POST['setting']['endtime']) {
- $_POST['setting']['endtime'] = strtotime($_POST['setting']['endtime']);
- }
- $_POST['info'] = $this->check_info($_POST['info'], $formid);
- $_POST['info']['setting'] = array2string($_POST['setting']);
- $_POST['info']['js_template'] = $_POST['info']['show_js_template'];
- unset($_POST['info']['show_js_template']);
- $this->db->update($_POST['info'], array('modelid'=>$formid));
- showmessage(L('update_success'), '?m=formguide&c=formguide&a=init&formid='.$formid, '', 'edit');
- } else {
- $siteid = $this->get_siteid();
- $template_list = template_list($siteid, 0);
- $site = pc_base::load_app_class('sites','admin');
- $info = $site->get_by_id($siteid);
- foreach ($template_list as $k=>$v) {
- $template_list[$v['dirname']] = $v['name'] ? $v['name'] : $v['dirname'];
- unset($template_list[$k]);
- }
- $data = $this->db->get_one(array('modelid'=>$formid));
- $data['setting'] = string2array($data['setting']);
- pc_base::load_sys_class('form', '', false);
- $show_header = $show_validator = $show_scroll = 1;
- include $this->admin_tpl('formguide_edit');
- }
- }
-
- /**
- * 表单向导禁用、开启
- */
- public function disabled() {
- if (!isset($_GET['formid']) || empty($_GET['formid'])) {
- showmessage(L('illegal_operation'), HTTP_REFERER);
- }
- $formid = intval($_GET['formid']);
- $val = $_GET['val'] ? intval($_GET['val']) : 0;
- $this->db->update(array('disabled'=>$val), array('modelid'=>$formid, 'siteid'=>$this->get_siteid()));
- showmessage(L('operation_success'), HTTP_REFERER);
- }
-
- /**
- * 预览
- */
- public function public_preview() {
- if (!isset($_GET['formid']) || empty($_GET['formid'])) {
- showmessage(L('illegal_operation'), HTTP_REFERER);
- }
- $formid = intval($_GET['formid']);
- $f_info = $this->db->get_one(array('modelid'=>$formid, 'siteid'=>$this->get_siteid()), 'name');
- define('CACHE_MODEL_PATH',PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_model'.DIRECTORY_SEPARATOR.'caches_data'.DIRECTORY_SEPARATOR);
- require CACHE_MODEL_PATH.'formguide_form.class.php';
- $formguide_form = new formguide_form($formid);
- $forminfos_data = $formguide_form->get();
- $show_header = 1;
- include $this->admin_tpl('formguide_preview');
- }
-
- /**
- * ajax 检测表是重复
- */
- public function public_checktable() {
- if (isset($_GET['formid']) && !empty($_GET['formid'])) {
- $formid = intval($_GET['formid']);
- }
- $r = $this->db->get_one(array('tablename'=>$_GET['tablename']), 'tablename, modelid');
- if (!$r['modelid']) {
- exit('1');
- } elseif ($r['modelid'] && ($r['modelid']==$formid)) {
- exit('1');
- } else {
- exit('0');
- }
- }
-
- /**
- * 判断表单数据合法性
- * @param array $data 表单数组
- * @param intval $formid 表单id
- */
- private function check_info($data = array(), $formid = 0) {
- if (empty($data) || $data['name']=='') {
- showmessage(L('input_form_title'), HTTP_REFERER);
- }
- if ($data['tablename']=='') {
- showmessage(L('please_input_tallename'), HTTP_REFERER);
- }
- $r = $this->db->get_one(array('tablename'=>$data['tablename']), 'tablename, modelid');
- if ($r['modelid'] && (($r['modelid']!=$formid) || !$formid)) {
- showmessage(L('tablename_existed'), HTTP_REFERER);
- }
- return $data;
- }
-
- /**
- * 删除表单向导
- */
- public function delete() {
- $siteid = $this->get_siteid();
- if (isset($_GET['formid']) && !empty($_GET['formid'])) {
- $formid = intval($_GET['formid']);
- $m_db = pc_base::load_model('sitemodel_field_model');
- $m_db->delete(array('modelid'=>$formid, 'siteid'=>$siteid));
- $m_info = $this->db->get_one(array('modelid'=>$formid), 'tablename');
- $tablename = $m_db->db_tablepre.'form_'.$m_info['tablename'];
- $m_db->query("DROP TABLE `$tablename`");
- $this->db->delete(array('modelid'=>$formid, 'siteid'=>$siteid));
- showmessage(L('operation_success'), HTTP_REFERER);
- } elseif (isset($_POST['formid']) && !empty($_POST['formid'])) {
- $m_db = pc_base::load_model('sitemodel_field_model');
- $m_db->delete(array('modelid'=>$formid, 'siteid'=>$siteid));
- if (is_array($_POST['formid'])) {
- foreach ($_POST['formid'] as $fid) {
- $m_info = $this->db->get_one(array('modelid'=>$fid), 'tablename');
- $tablename = $m_db->db_tablepre.'form_'.$m_info['tablename'];
- $m_db->query("DROP TABLE `$tablename`");
- $this->db->delete(array('modelid'=>$fid, 'siteid'=>$siteid));
- }
- }
- showmessage(L('operation_success'), HTTP_REFERER);
- } else {
- showmessage(L('illegal_operation'), HTTP_REFERER);
- }
- }
-
- /**
- * 统计
- */
- public function stat() {
- if (!isset($_GET['formid']) || empty($_GET['formid'])) {
- showmessage(L('illegal_operation'), HTTP_REFERER);
- }
- $formid = intval($_GET['formid']);
- $fields = getcache('formguide_field_'.$formid, 'model');
- $f_info = $this->db->get_one(array('modelid'=>$formid, 'siteid'=>$this->get_siteid()), 'tablename');
- $tablename = 'form_'.$f_info['tablename'];
- $m_db = pc_base::load_model('sitemodel_field_model');
- $result = $m_db->select(array('modelid'=>$formid, 'formtype'=>'box'), 'field, setting');
- $m_db->change_table($tablename);
- $datas = $m_db->select(array(), '*');
- $total = count($datas);
- include $this->admin_tpl('formguide_stat');
- }
-
- /**
- * 模块配置
- */
- public function setting() {
- if (isset($_POST['dosubmit'])) {
- $setting = getcache('formguide', 'commons');
- $setting[$this->get_siteid()] = $_POST['setting'];
- setcache('formguide', $setting, 'commons'); //设置缓存
- $m_db = pc_base::load_model('module_model'); //调用模块数据模型
- $setting = array2string($_POST['setting']);
- $m_db->update(array('setting'=>$setting), array('module'=>ROUTE_M)); //将配置信息存入数据表中
-
- showmessage(L('setting_updates_successful'), HTTP_REFERER, '', 'setting');
- } else {
- @extract($this->M);
- include $this->admin_tpl('setting');
- }
- }
-
- /**
- * 执行sql文件,创建数据表等
- * @param string $sql sql语句
- */
- private function sql_execute($sql) {
- $sqls = $this->sql_split($sql);
- if (is_array($sqls)) {
- foreach ($sqls as $sql) {
- if (trim($sql) != '') {
- $this->m_db->query($sql);
- }
- }
- } else {
- $this->m_db->query($sqls);
- }
- return true;
- }
-
- /**
- * 处理sql语句,执行替换前缀都功能。
- * @param string $sql 原始的sql,将一些大众的部分替换成私有的
- */
- private function sql_split($sql) {
- $database = pc_base::load_config('database');
- $dbcharset = $database['default']['charset'];
- if($this->m_db->version() > '4.1' && $dbcharset) {
- $sql = preg_replace("/TYPE=(InnoDB|MyISAM|MEMORY)( DEFAULT CHARSET=[^; ]+)?/", "ENGINE=\\1 DEFAULT CHARSET=".$dbcharset, $sql);
- }
- $sql = str_replace("phpcms_form_table", $this->m_db->db_tablepre.'form_'.$this->tablename, $sql);
- $ret = array();
- $num = 0;
- $queriesarray = explode(";\n", trim($sql));
- unset($sql);
- foreach ($queriesarray as $query) {
- $ret[$num] = '';
- $queries = explode("\n", trim($query));
- $queries = array_filter($queries);
- foreach ($queries as $query) {
- $str1 = substr($query, 0, 1);
- if($str1 != '#' && $str1 != '-') $ret[$num] .= $query;
- }
- $num++;
- }
- return $ret;
- }
- }
- ?>
|