member_modelfield.php 8.3 KB

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