Server : nginx/1.22.1
System : Linux iZwz9daxib3w3i063fw434Z 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64
User : www ( 1000)
PHP Version : 5.6.40
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/www.jkmold.com/phpcms/modules/formguide/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/www.jkmold.com/phpcms/modules/formguide/formguide.php
<?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;

	}

}

?>