sitemodel_field.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?php
  2. defined('IN_PHPCMS') or exit('No permission resources.');
  3. //模型原型存储路径
  4. define('MODEL_PATH',PC_PATH.'modules'.DIRECTORY_SEPARATOR.'content'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR);
  5. pc_base::load_app_class('admin','admin',0);
  6. define('CACHE_MODEL_PATH',CACHE_PATH.'caches_model'.DIRECTORY_SEPARATOR.'caches_data'.DIRECTORY_SEPARATOR);
  7. pc_base::load_app_func('util');
  8. class sitemodel_field extends admin {
  9. private $db,$model_db;
  10. public $siteid;
  11. function __construct() {
  12. parent::__construct();
  13. $this->db = pc_base::load_model('sitemodel_field_model');
  14. $this->model_db = pc_base::load_model('sitemodel_model');
  15. $this->siteid = $this->get_siteid();
  16. }
  17. public function init() {
  18. $show_header = '';
  19. $modelid = $_GET['modelid'];
  20. $this->cache_field($modelid);
  21. $datas = $this->db->select(array('modelid'=>$modelid),'*',100,'listorder ASC');
  22. $r = $this->model_db->get_one(array('modelid'=>$modelid));
  23. require MODEL_PATH.'fields.inc.php';
  24. include $this->admin_tpl('sitemodel_field_manage');
  25. }
  26. public function add() {
  27. if(isset($_POST['dosubmit'])) {
  28. $model_cache = getcache('model','commons');
  29. $modelid = $_POST['info']['modelid'] = intval($_POST['info']['modelid']);
  30. $model_table = $model_cache[$modelid]['tablename'];
  31. $tablename = $_POST['issystem'] ? $this->db->db_tablepre.$model_table : $this->db->db_tablepre.$model_table.'_data';
  32. $field = $_POST['info']['field'];
  33. $minlength = $_POST['info']['minlength'] ? $_POST['info']['minlength'] : 0;
  34. $maxlength = $_POST['info']['maxlength'] ? $_POST['info']['maxlength'] : 0;
  35. $field_type = $_POST['info']['formtype'];
  36. require MODEL_PATH.$field_type.DIRECTORY_SEPARATOR.'config.inc.php';
  37. if(isset($_POST['setting']['fieldtype'])) {
  38. $field_type = $_POST['setting']['fieldtype'];
  39. }
  40. require MODEL_PATH.'add.sql.php';
  41. //附加属性值
  42. $_POST['info']['setting'] = array2string($_POST['setting']);
  43. $_POST['info']['siteid'] = $this->siteid;
  44. $_POST['info']['unsetgroupids'] = isset($_POST['unsetgroupids']) ? implode(',',$_POST['unsetgroupids']) : '';
  45. $_POST['info']['unsetroleids'] = isset($_POST['unsetroleids']) ? implode(',',$_POST['unsetroleids']) : '';
  46. $this->db->insert($_POST['info']);
  47. $this->cache_field($modelid);
  48. showmessage(L('add_success'),'?m=content&c=sitemodel_field&a=init&modelid='.$modelid.'&menuid=59');
  49. } else {
  50. $show_header = $show_validator = $show_dialog = '';
  51. pc_base::load_sys_class('form','',0);
  52. require MODEL_PATH.'fields.inc.php';
  53. $modelid = $_GET['modelid'];
  54. $f_datas = $this->db->select(array('modelid'=>$modelid),'field,name',100,'listorder ASC');
  55. $m_r = $this->model_db->get_one(array('modelid'=>$modelid));
  56. foreach($f_datas as $_k=>$_v) {
  57. $exists_field[] = $_v['field'];
  58. }
  59. $all_field = array();
  60. foreach($fields as $_k=>$_v) {
  61. if(in_array($_k,$not_allow_fields) || in_array($_k,$exists_field) && in_array($_k,$unique_fields)) continue;
  62. $all_field[$_k] = $_v;
  63. }
  64. $modelid = $_GET['modelid'];
  65. //角色缓存
  66. $roles = getcache('role','commons');
  67. $grouplist = array();
  68. //会员组缓存
  69. $group_cache = getcache('grouplist','member');
  70. foreach($group_cache as $_key=>$_value) {
  71. $grouplist[$_key] = $_value['name'];
  72. }
  73. header("Cache-control: private");
  74. include $this->admin_tpl('sitemodel_field_add');
  75. }
  76. }
  77. public function edit() {
  78. if(isset($_POST['dosubmit'])) {
  79. $model_cache = getcache('model','commons');
  80. $modelid = $_POST['info']['modelid'] = intval($_POST['info']['modelid']);
  81. $model_table = $model_cache[$modelid]['tablename'];
  82. $tablename = $_POST['issystem'] ? $this->db->db_tablepre.$model_table : $this->db->db_tablepre.$model_table.'_data';
  83. $field = $_POST['info']['field'];
  84. $minlength = $_POST['info']['minlength'] ? $_POST['info']['minlength'] : 0;
  85. $maxlength = $_POST['info']['maxlength'] ? $_POST['info']['maxlength'] : 0;
  86. $field_type = $_POST['info']['formtype'];
  87. require MODEL_PATH.$field_type.DIRECTORY_SEPARATOR.'config.inc.php';
  88. if(isset($_POST['setting']['fieldtype'])) {
  89. $field_type = $_POST['setting']['fieldtype'];
  90. }
  91. $oldfield = $_POST['oldfield'];
  92. require MODEL_PATH.'edit.sql.php';
  93. //附加属性值
  94. $_POST['info']['setting'] = array2string($_POST['setting']);
  95. $fieldid = intval($_POST['fieldid']);
  96. $_POST['info']['unsetgroupids'] = isset($_POST['unsetgroupids']) ? implode(',',$_POST['unsetgroupids']) : '';
  97. $_POST['info']['unsetroleids'] = isset($_POST['unsetroleids']) ? implode(',',$_POST['unsetroleids']) : '';
  98. $this->db->update($_POST['info'],array('fieldid'=>$fieldid,'siteid'=>$this->siteid));
  99. $this->cache_field($modelid);
  100. showmessage(L('update_success'),'?m=content&c=sitemodel_field&a=init&modelid='.$modelid.'&menuid=59');
  101. } else {
  102. $show_header = $show_validator = $show_dialog = '';
  103. pc_base::load_sys_class('form','',0);
  104. require MODEL_PATH.'fields.inc.php';
  105. $modelid = intval($_GET['modelid']);
  106. $fieldid = intval($_GET['fieldid']);
  107. $m_r = $this->model_db->get_one(array('modelid'=>$modelid));
  108. $r = $this->db->get_one(array('fieldid'=>$fieldid));
  109. extract($r);
  110. require MODEL_PATH.$formtype.DIRECTORY_SEPARATOR.'config.inc.php';
  111. $setting = string2array($setting);
  112. ob_start();
  113. include MODEL_PATH.$formtype.DIRECTORY_SEPARATOR.'field_edit_form.inc.php';
  114. $form_data = ob_get_contents();
  115. ob_end_clean();
  116. //角色缓存
  117. $roles = getcache('role','commons');
  118. $grouplist = array();
  119. //会员组缓存
  120. $group_cache = getcache('grouplist','member');
  121. foreach($group_cache as $_key=>$_value) {
  122. $grouplist[$_key] = $_value['name'];
  123. }
  124. header("Cache-control: private");
  125. include $this->admin_tpl('sitemodel_field_edit');
  126. }
  127. }
  128. public function disabled() {
  129. $fieldid = intval($_GET['fieldid']);
  130. $disabled = $_GET['disabled'] ? 0 : 1;
  131. $this->db->update(array('disabled'=>$disabled),array('fieldid'=>$fieldid,'siteid'=>$this->siteid));
  132. $modelid = $_GET['modelid'];
  133. $this->cache_field($modelid);
  134. showmessage(L('operation_success'),HTTP_REFERER);
  135. }
  136. public function delete() {
  137. $fieldid = intval($_GET['fieldid']);
  138. $r = $this->db->get_one(array('fieldid'=>$_GET['fieldid'],'siteid'=>$this->siteid));
  139. //必须放在删除字段前、在删除字段部分,重置了 tablename
  140. $this->db->delete(array('fieldid'=>$_GET['fieldid'],'siteid'=>$this->siteid));
  141. $model_cache = getcache('model','commons');
  142. $modelid = intval($_GET['modelid']);
  143. $model_table = $model_cache[$modelid]['tablename'];
  144. $tablename = $r['issystem'] ? $model_table : $model_table.'_data';
  145. $this->db->drop_field($tablename,$r['field']);
  146. showmessage(L('operation_success'),HTTP_REFERER);
  147. }
  148. /**
  149. * 排序
  150. */
  151. public function listorder() {
  152. if(isset($_POST['dosubmit'])) {
  153. foreach($_POST['listorders'] as $id => $listorder) {
  154. $this->db->update(array('listorder'=>$listorder),array('fieldid'=>$id));
  155. }
  156. showmessage(L('operation_success'),HTTP_REFERER);
  157. } else {
  158. showmessage(L('operation_failure'));
  159. }
  160. }
  161. /**
  162. * 检查字段是否存在
  163. */
  164. public function public_checkfield() {
  165. $field = strtolower($_GET['field']);
  166. $oldfield = strtolower($_GET['oldfield']);
  167. if($field==$oldfield) exit('1');
  168. $modelid = intval($_GET['modelid']);
  169. $model_cache = getcache('model','commons');
  170. $tablename = $model_cache[$modelid]['tablename'];
  171. $issystem = intval($_GET['issystem']);
  172. if($issystem) {
  173. $this->db->table_name = $this->db->db_tablepre.$tablename;
  174. } else {
  175. $this->db->table_name = $this->db->db_tablepre.$tablename.'_data';
  176. }
  177. $fields = $this->db->get_fields();
  178. if(array_key_exists($field,$fields)) {
  179. exit('0');
  180. } else {
  181. exit('1');
  182. }
  183. }
  184. /**
  185. * 字段属性设置
  186. */
  187. public function public_field_setting() {
  188. $fieldtype = $_GET['fieldtype'];
  189. require MODEL_PATH.$fieldtype.DIRECTORY_SEPARATOR.'config.inc.php';
  190. ob_start();
  191. include MODEL_PATH.$fieldtype.DIRECTORY_SEPARATOR.'field_add_form.inc.php';
  192. $data_setting = ob_get_contents();
  193. //$data_setting = iconv('gbk','utf-8',$data_setting);
  194. ob_end_clean();
  195. $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);
  196. echo json_encode($settings);
  197. return true;
  198. }
  199. /**
  200. * 更新指定模型字段缓存
  201. *
  202. * @param $modelid 模型id
  203. */
  204. public function cache_field($modelid = 0) {
  205. $field_array = array();
  206. $fields = $this->db->select(array('modelid'=>$modelid,'disabled'=>$disabled),'*',100,'listorder ASC');
  207. foreach($fields as $_value) {
  208. $setting = string2array($_value['setting']);
  209. $_value = array_merge($_value,$setting);
  210. $field_array[$_value['field']] = $_value;
  211. }
  212. setcache('model_field_'.$modelid,$field_array,'model');
  213. return true;
  214. }
  215. /**
  216. * 预览模型
  217. */
  218. public function public_priview() {
  219. pc_base::load_sys_class('form','',0);
  220. $show_header = $show_validator = $show_dialog = '';
  221. $modelid = intval($_GET['modelid']);
  222. require CACHE_MODEL_PATH.'content_form.class.php';
  223. $content_form = new content_form($modelid);
  224. $r = $this->model_db->get_one(array('modelid'=>$modelid));
  225. $forminfos = $content_form->get();
  226. include $this->admin_tpl('sitemodel_priview');
  227. }
  228. }
  229. ?>