formguide_field.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. <?php
  2. //模型原型存储路径
  3. define('MODEL_PATH',PC_PATH.'modules'.DIRECTORY_SEPARATOR.'formguide'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR);
  4. define('CACHE_MODEL_PATH',PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_model'.DIRECTORY_SEPARATOR.'caches_data'.DIRECTORY_SEPARATOR);
  5. pc_base::load_app_class('admin','admin',0);
  6. pc_base::load_app_func('util');
  7. class formguide_field extends admin {
  8. public function __construct() {
  9. parent::__construct();
  10. $this->db = pc_base::load_model('sitemodel_field_model');
  11. $this->model_db = pc_base::load_model('sitemodel_model');
  12. $this->siteid = $this->get_siteid();
  13. }
  14. public function init() {
  15. if (isset($_GET['formid']) && !empty($_GET['formid'])) {
  16. $formid = intval($_GET['formid']);
  17. $this->cache_field($formid);
  18. $datas = $this->db->select(array('modelid'=>$formid),'*',100,'listorder ASC');
  19. $r = $this->model_db->get_one(array('modelid'=>$formid));
  20. } else {
  21. $data = $datas = array();
  22. $data = getcache('form_public_field_array', 'model');
  23. if (is_array($data)) {
  24. foreach ($data as $_k => $_v) {
  25. $datas[$_k] = $_v['info'];
  26. }
  27. }
  28. }
  29. $show_header = $show_validator = $show_dialog = '';
  30. require MODEL_PATH.'fields.inc.php';
  31. include $this->admin_tpl('formguide_field_list');
  32. }
  33. /**
  34. * 添加字段,当没有formid时为添加公用字段
  35. */
  36. public function add() {
  37. if(isset($_POST['dosubmit'])) {
  38. $field = $_POST['info']['field'];
  39. $minlength = $_POST['info']['minlength'] ? $_POST['info']['minlength'] : 0;
  40. $maxlength = $_POST['info']['maxlength'] ? $_POST['info']['maxlength'] : 0;
  41. $field_type = $_POST['info']['formtype'];
  42. //附加属性值
  43. $_POST['info']['setting'] = array2string($_POST['setting']);
  44. $_POST['info']['siteid'] = $this->siteid;
  45. $_POST['info']['unsetgroupids'] = isset($_POST['unsetgroupids']) ? implode(',',$_POST['unsetgroupids']) : '';
  46. $_POST['info']['unsetroleids'] = isset($_POST['unsetroleids']) ? implode(',',$_POST['unsetroleids']) : '';
  47. require MODEL_PATH.$field_type.DIRECTORY_SEPARATOR.'config.inc.php';
  48. if(isset($_POST['setting']['fieldtype'])) {
  49. $field_type = $_POST['setting']['fieldtype'];
  50. }
  51. if (isset($_POST['info']['modelid']) && !empty($_POST['info']['modelid'])) {
  52. $formid = intval($_POST['info']['modelid']);
  53. $forminfo = $this->model_db->get_one(array('modelid'=>$formid, 'siteid'=>$this->siteid), 'tablename');
  54. $tablename = $this->db->db_tablepre.'form_'.$forminfo['tablename'];
  55. require MODEL_PATH.'add.sql.php';
  56. $this->db->insert($_POST['info']);
  57. $this->cache_field($formid);
  58. } else {
  59. $unrunsql = 1;
  60. $tablename = 'formguide_table';
  61. require MODEL_PATH.'add.sql.php';
  62. $form_public_field_array = getcache('form_public_field_array', 'model');
  63. if (array_key_exists($_POST['info']['field'], $form_public_field_array)) {
  64. showmessage(L('fields').L('already_exist'), HTTP_REFERER);
  65. } else {
  66. $form_public_field_array[$_POST['info']['field']] = array('info'=>$_POST['info'], 'sql'=>$sql);
  67. setcache('form_public_field_array', $form_public_field_array, 'model');
  68. }
  69. }
  70. showmessage(L('add_success'),'?m=formguide&c=formguide_field&a=init&formid='.$formid);
  71. } else {
  72. $show_header = $show_validator = $show_dialog = '';
  73. pc_base::load_sys_class('form','',0);
  74. require MODEL_PATH.'fields.inc.php';
  75. $formid = intval($_GET['formid']);
  76. $f_datas = $this->db->select(array('modelid'=>$formid),'field,name',100,'listorder ASC');
  77. $m_r = $this->model_db->get_one(array('modelid'=>$formid));
  78. foreach($f_datas as $_k=>$_v) {
  79. $exists_field[] = $_v['field'];
  80. }
  81. $all_field = array();
  82. foreach($fields as $_k=>$_v) {
  83. $all_field[$_k] = $_v;
  84. }
  85. $grouplist = array();
  86. //会员组缓存
  87. $group_cache = getcache('grouplist','member');
  88. foreach($group_cache as $_key=>$_value) {
  89. $grouplist[$_key] = $_value['name'];
  90. }
  91. header("Cache-control: private");
  92. include $this->admin_tpl('formguide_field_add');
  93. }
  94. }
  95. public function edit() {
  96. if (isset($_POST['dosubmit'])) {
  97. $field = $_POST['info']['field'];
  98. $minlength = $_POST['info']['minlength'] ? $_POST['info']['minlength'] : 0;
  99. $maxlength = $_POST['info']['maxlength'] ? $_POST['info']['maxlength'] : 0;
  100. $field_type = $_POST['info']['formtype'];
  101. //附加属性值
  102. $_POST['info']['setting'] = array2string($_POST['setting']);
  103. $_POST['info']['siteid'] = $this->siteid;
  104. $_POST['info']['unsetgroupids'] = isset($_POST['unsetgroupids']) ? implode(',',$_POST['unsetgroupids']) : '';
  105. $_POST['info']['unsetroleids'] = isset($_POST['unsetroleids']) ? implode(',',$_POST['unsetroleids']) : '';
  106. require MODEL_PATH.$field_type.DIRECTORY_SEPARATOR.'config.inc.php';
  107. if(isset($_POST['setting']['fieldtype'])) {
  108. $field_type = $_POST['setting']['fieldtype'];
  109. }
  110. $oldfield = $_POST['oldfield'];
  111. if (isset($_POST['info']['modelid']) && !empty($_POST['info']['modelid'])) {
  112. $formid = intval($_POST['info']['modelid']);
  113. $forminfo = $this->model_db->get_one(array('modelid'=>$formid, 'siteid'=>$this->siteid), 'tablename');
  114. $tablename = $this->db->db_tablepre.'form_'.$forminfo['tablename'];
  115. $fieldid = intval($_POST['fieldid']);
  116. require MODEL_PATH.'edit.sql.php';
  117. $this->db->update($_POST['info'],array('fieldid'=>$fieldid,'siteid'=>$this->siteid));
  118. } else {
  119. $unrunsql = 1;
  120. $tablename = 'formguide_table';
  121. require MODEL_PATH.'add.sql.php';
  122. $form_public_field_array = getcache('form_public_field_array', 'model');
  123. if ($oldfield) {
  124. if ($form_public_field_array[$oldfield]['info']['listorder']) {
  125. $_POST['info']['listorder'] = $form_public_field_array[$oldfield]['info']['listorder'];
  126. }
  127. if ($oldfield == $_POST['info']['field']) {
  128. $form_public_field_array[$_POST['info']['field']] = array('info'=>$_POST['info'], 'sql'=>$sql);
  129. } else {
  130. if (array_key_exists($_POST['info']['field'], $form_public_field_array)) {
  131. showmessage(L('fields').L('already_exist'), HTTP_REFERER);
  132. }
  133. $new_form_field = $form_public_field_array;
  134. $form_public_field_array = array();
  135. foreach ($new_form_field as $name => $v) {
  136. if ($name == $oldfield) {
  137. $form_public_field_array[$_POST['info']['field']] = array('info'=>$_POST['info'], 'sql'=>$sql);
  138. } else {
  139. $form_public_field_array[$name] = $v;
  140. }
  141. }
  142. }
  143. }
  144. setcache('form_public_field_array', $form_public_field_array, 'model');
  145. }
  146. showmessage(L('update_success'),'?m=formguide&c=formguide_field&a=init&formid='.$formid);
  147. } else {
  148. if (isset($_GET['formid']) && !empty($_GET['formid'])) {
  149. pc_base::load_sys_class('form','',0);
  150. require MODEL_PATH.'fields.inc.php';
  151. $formid = intval($_GET['formid']);
  152. $fieldid = intval($_GET['fieldid']);
  153. $m_r = $this->model_db->get_one(array('modelid'=>$formid));
  154. $r = $this->db->get_one(array('fieldid'=>$fieldid));
  155. extract($r);
  156. require MODEL_PATH.$formtype.DIRECTORY_SEPARATOR.'config.inc.php';
  157. } else {
  158. if (!isset($_GET['field']) || empty($_GET['field'])) {
  159. showmessage(L('illegal_operation'), HTTP_REFERER);
  160. }
  161. $form_public_field_array = getcache('form_public_field_array', 'model');
  162. if (!array_key_exists($_GET['field'], $form_public_field_array)) {
  163. showmessage(L('illegal_operation'), HTTP_REFERER);
  164. }
  165. extract($form_public_field_array[$_GET['field']]);
  166. extract($info);
  167. $setting = stripslashes($setting);
  168. $show_header = $show_validator = $show_dialog = '';
  169. pc_base::load_sys_class('form','',0);
  170. require MODEL_PATH.'fields.inc.php';
  171. }
  172. $setting = string2array($setting);
  173. ob_start();
  174. include MODEL_PATH.$formtype.DIRECTORY_SEPARATOR.'field_edit_form.inc.php';
  175. $form_data = ob_get_contents();
  176. ob_end_clean();
  177. //会员组缓存
  178. $group_cache = getcache('grouplist','member');
  179. foreach($group_cache as $_key=>$_value) {
  180. $grouplist[$_key] = $_value['name'];
  181. }
  182. header("Cache-control: private");
  183. include $this->admin_tpl('formguide_field_edit');
  184. }
  185. }
  186. /**
  187. * 禁用、开启字段
  188. */
  189. public function disabled() {
  190. $fieldid = intval($_GET['fieldid']);
  191. $disabled = $_GET['disabled'] ? 0 : 1;
  192. $this->db->update(array('disabled'=>$disabled),array('fieldid'=>$fieldid,'siteid'=>$this->siteid));
  193. showmessage(L('operation_success'),HTTP_REFERER);
  194. }
  195. /**
  196. * 删除字段
  197. */
  198. public function delete() {
  199. if (isset($_GET['formid']) && !empty($_GET['formid']) && isset($_GET['fieldid']) && !empty($_GET['fieldid'])) {
  200. $formid = intval($_GET['formid']);
  201. $fieldid = intval($_GET['fieldid']);
  202. $r = $this->model_db->get_one(array('modelid'=>$formid), 'tablename');
  203. $rs = $this->db->get_one(array('fieldid'=>$fieldid, 'siteid'=>$this->siteid), 'field');
  204. $this->db->delete(array('fieldid'=>$fieldid, 'siteid'=>$this->siteid));
  205. if ($r) {
  206. $field = $rs['field'];
  207. $tablename = $this->db->db_tablepre.'form_'.$r['tablename'];
  208. require MODEL_PATH.'delete.sql.php';
  209. }
  210. } else {
  211. if (!isset($_GET['field']) || empty($_GET['field'])) showmessage(L('illegal_operation'), HTTP_REFERER);
  212. $field = $_GET['field'];
  213. $form_public_field_array = getcache('form_public_field_array', 'model');
  214. if (array_key_exists($field, $form_public_field_array)) {
  215. unset($form_public_field_array[$field]);
  216. }
  217. setcache('form_public_field_array', $form_public_field_array, 'model');
  218. }
  219. showmessage(L('update_success'), '?m=formguide&c=formguide_field&a=init&formid='.$formid);
  220. }
  221. /**
  222. * 排序
  223. */
  224. public function listorder() {
  225. if(isset($_POST['dosubmit'])) {
  226. if (isset($_GET['formid']) && !empty($_GET['formid'])) {
  227. foreach($_POST['listorders'] as $id => $listorder) {
  228. $this->db->update(array('listorder'=>$listorder),array('fieldid'=>$id));
  229. }
  230. } else {
  231. $form_public_field_array = getcache('form_public_field_array', 'model');
  232. asort($_POST['listorders']);
  233. $new_form_field = array();
  234. foreach ($_POST['listorders'] as $id => $listorder) {
  235. $form_public_field_array[$id]['info']['listorder'] = $listorder;
  236. $new_form_field[$id] = $form_public_field_array[$id];
  237. }
  238. unset($form_public_field_array);
  239. setcache('form_public_field_array', $new_form_field, 'model');
  240. }
  241. showmessage(L('operation_success'),HTTP_REFERER);
  242. } else {
  243. showmessage(L('operation_failure'));
  244. }
  245. }
  246. /**
  247. * 检查字段是否存在
  248. */
  249. public function public_checkfield() {
  250. $field = strtolower($_GET['field']);
  251. $oldfield = strtolower($_GET['oldfield']);
  252. if($field==$oldfield) exit('1');
  253. $modelid = intval($_GET['modelid']);
  254. if (in_array($field, array('dataid', 'userid', 'username', 'datetime', 'ip'))) {
  255. exit('0');
  256. }
  257. if($modelid) {
  258. $forminfo = $this->model_db->get_one(array('modelid'=>$modelid), 'tablename');
  259. $this->db->table_name = $this->db->db_tablepre.'form_'.$forminfo['tablename'];
  260. $fields = $this->db->get_fields();
  261. } else {
  262. $fields = getcache('form_public_field_array', 'model');
  263. }
  264. if(is_array($fields) && array_key_exists($field,$fields)) {
  265. exit('0');
  266. } else {
  267. exit('1');
  268. }
  269. }
  270. /**
  271. * 字段属性设置
  272. */
  273. public function public_field_setting() {
  274. $fieldtype = $_GET['fieldtype'];
  275. require MODEL_PATH.$fieldtype.DIRECTORY_SEPARATOR.'config.inc.php';
  276. ob_start();
  277. include MODEL_PATH.$fieldtype.DIRECTORY_SEPARATOR.'field_add_form.inc.php';
  278. $data_setting = ob_get_contents();
  279. //$data_setting = iconv('gbk','utf-8',$data_setting);
  280. ob_end_clean();
  281. $settings = array('field_basic_table'=>$field_basic_table,'field_minlength'=>$field_minlength,'field_maxlength'=>$field_maxlength,'field_allow_search'=>$field_allow_search,'field_allow_fulltext'=>$field_allow_fulltext,'field_allow_isunique'=>$field_allow_isunique,'setting'=>$data_setting);
  282. echo json_encode($settings);
  283. return true;
  284. }
  285. /**
  286. * 更新指定表单向导的字段缓存
  287. *
  288. * @param $formid 表单向导id
  289. * @param $disabled 字段状态
  290. */
  291. public function cache_field($formid = 0, $disabled = 0) {
  292. $field_array = array();
  293. $fields = $this->db->select(array('modelid'=>$formid,'disabled'=>$disabled),'*',100,'listorder ASC');
  294. foreach($fields as $_value) {
  295. $setting = string2array($_value['setting']);
  296. $_value = array_merge($_value,$setting);
  297. $field_array[$_value['field']] = $_value;
  298. }
  299. setcache('formguide_field_'.$formid,$field_array,'model');
  300. return true;
  301. }
  302. }
  303. ?>