| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 | <?phpdefined('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;	}}?>
 |