国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

263 lines
11KB

  1. <?php
  2. /**
  3. * 联动选择管理
  4. *
  5. * @version $Id: stepselect_main.php 2 13:23 2011-3-24 tianya $
  6. * @package DedeBIZ.Administrator
  7. * @copyright Copyright (c) 2022, DedeBIZ.COM
  8. * @license https://www.dedebiz.com/license
  9. * @link https://www.dedebiz.com
  10. */
  11. require_once(dirname(__FILE__)."/config.php");
  12. CheckPurview('c_Stepselect');
  13. require_once(DEDEINC."/datalistcp.class.php");
  14. require_once(DEDEINC.'/enums.func.php');
  15. /*-----------------
  16. 前台视图
  17. function __show() { }
  18. ------------------*/
  19. $ENV_GOBACK_URL = (isset($ENV_GOBACK_URL) ? $ENV_GOBACK_URL : 'stepselect_main.php');
  20. if (empty($action)) {
  21. setcookie("ENV_GOBACK_URL", $dedeNowurl, time() + 3600, "/");
  22. if (!isset($egroup)) $egroup = '';
  23. if (!isset($topvalue)) $topvalue = 0;
  24. $etypes = array();
  25. $egroups = array();
  26. $dsql->Execute('me', 'SELECT * FROM `#@__stepselect` ORDER BY id DESC');
  27. while ($arr = $dsql->GetArray()) {
  28. $etypes[] = $arr;
  29. $egroups[$arr['egroup']] = $arr['itemname'];
  30. }
  31. if ($egroup != '') {
  32. $orderby = 'ORDER BY disorder ASC, evalue ASC';
  33. if (!empty($topvalue)) {
  34. //判断是否为1级联动
  35. if ($topvalue % 500 == 0) {
  36. $egroupsql = " WHERE egroup LIKE '$egroup' AND evalue>=$topvalue AND evalue < ".($topvalue + 500);
  37. } else {
  38. $egroupsql = " WHERE (evalue LIKE '$topvalue.%%%' OR evalue=$topvalue) AND egroup LIKE '$egroup'";
  39. }
  40. } else {
  41. $egroupsql = " WHERE egroup LIKE '$egroup' ";
  42. }
  43. $sql = "SELECT * FROM `#@__sys_enum` $egroupsql $orderby";
  44. } else {
  45. $egroupsql = '';
  46. $sql = "SELECT * FROM `#@__stepselect` ORDER BY id DESC";
  47. }
  48. //echo $sql;exit;
  49. $dlist = new DataListCP();
  50. $dlist->SetParameter('egroup', $egroup);
  51. $dlist->SetParameter('topvalue', $topvalue);
  52. $dlist->SetTemplet(DEDEADMIN."/templets/stepselect_main.htm");
  53. $dlist->SetSource($sql);
  54. $dlist->display();
  55. exit();
  56. } else if ($action == 'edit' || $action == 'addnew' || $action == 'addenum' || $action == 'view') {
  57. AjaxHead();
  58. include('./templets/stepselect_showajax.htm');
  59. exit();
  60. }
  61. /*-----------------
  62. 删除类型或枚举值
  63. function __del() { }
  64. ------------------*/
  65. else if ($action == 'del') {
  66. $arr = $dsql->GetOne("SELECT * FROM `#@__stepselect` WHERE id='$id' ");
  67. if (!is_array($arr)) {
  68. ShowMsg("无法获取分类信息,不允许后续操作", "stepselect_main.php?".ExecTime());
  69. exit();
  70. }
  71. if ($arr['issystem'] == 1) {
  72. ShowMsg("系统内置的枚举分类不能删除", "stepselect_main.php?".ExecTime());
  73. exit();
  74. }
  75. $dsql->ExecuteNoneQuery("DELETE FROM `#@__stepselect` WHERE id='$id'; ");
  76. $dsql->ExecuteNoneQuery("DELETE FROM `#@__sys_enum` WHERE egroup='{$arr['egroup']}'; ");
  77. ShowMsg("成功删除一个分类", "stepselect_main.php?".ExecTime());
  78. exit();
  79. } else if ($action == 'delenumAllSel') {
  80. if (isset($ids) && is_array($ids)) {
  81. $id = join(',', $ids);
  82. $groups = array();
  83. $dsql->Execute('me', "SELECT egroup FROM `#@__sys_enum` WHERE id IN($id) GROUP BY egroup");
  84. while ($row = $dsql->GetArray('me')) {
  85. $groups[] = $row['egroup'];
  86. }
  87. $dsql->ExecuteNoneQuery("DELETE FROM `#@__sys_enum` WHERE id IN($id); ");
  88. //更新缓存
  89. foreach ($groups as $egropu) {
  90. WriteEnumsCache($egroup);
  91. }
  92. ShowMsg("成功删除选中的枚举分类", $ENV_GOBACK_URL);
  93. } else {
  94. ShowMsg("您没选择任何分类", "-1");
  95. }
  96. exit();
  97. } else if ($action == 'delenum') {
  98. $row = $dsql->GetOne("SELECT egroup FROM `#@__sys_enum` WHERE id = '$id' ");
  99. $dsql->ExecuteNoneQuery("DELETE FROM `#@__sys_enum` WHERE id='{$id}'; ");
  100. WriteEnumsCache($row['egroup']);
  101. ShowMsg("成功删除一个枚举", $ENV_GOBACK_URL);
  102. exit();
  103. }
  104. /*-----------------
  105. 保存类型修改
  106. function __edit_save() { }
  107. ------------------*/
  108. else if ($action == 'edit_save') {
  109. if (preg_match("#[^0-9a-z_-]#i", $egroup)) {
  110. ShowMsg("组名称不能有全角字符或特殊符号", "-1");
  111. exit();
  112. }
  113. $dsql->ExecuteNoneQuery("UPDATE `#@__stepselect` SET `itemname`='$itemname',`egroup`='$egroup' WHERE id='$id'; ");
  114. ShowMsg("成功修改一个分类", "stepselect_main.php?".ExecTime());
  115. exit();
  116. }
  117. /*-----------------
  118. 保存新类型
  119. function __addnew_save() { }
  120. ------------------*/
  121. else if ($action == 'addnew_save') {
  122. if (preg_match("#[^0-9a-z_-]#i", $egroup)) {
  123. ShowMsg("组名称不能有全角字符或特殊符号", "-1");
  124. exit();
  125. }
  126. $arr = $dsql->GetOne("SELECT * FROM `#@__stepselect` WHERE itemname LIKE '$itemname' OR egroup LIKE '$egroup' ");
  127. if (is_array($arr)) {
  128. ShowMsg("您指定的类别名称或组名称已经存在,不能使用", "stepselect_main.php");
  129. exit();
  130. }
  131. $dsql->ExecuteNoneQuery("INSERT INTO `#@__stepselect`(`itemname`,`egroup`,`issign`,`issystem`) VALUES('$itemname','$egroup','0','0'); ");
  132. WriteEnumsCache($egroup);
  133. ShowMsg("成功添加一个分类", "stepselect_main.php?egroup=$egroup");
  134. exit();
  135. }
  136. /*---------
  137. 把旧版全国省市表替换当前地区数据
  138. function __exarea() { }
  139. ----------*/
  140. else if ($action == 'exarea') {
  141. $bigtypes = array();
  142. $dsql->ExecuteNoneQuery("DELETE FROM `#@__sys_enum` WHERE egroup='nativeplace'; ");
  143. $query = "SELECT * FROM `#@__area` WHERE reid =0 order by id asc";
  144. $dsql->Execute('me', $query);
  145. $n = 1;
  146. while ($row = $dsql->GetArray()) {
  147. $bigtypes[$row['id']] = $evalue = $disorder = $n * 500;
  148. $dsql->ExecuteNoneQuery("INSERT INTO `#@__sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`)
  149. VALUES('{$row['name']}','$evalue','nativeplace','$disorder','0'); ");
  150. $n++;
  151. }
  152. $stypes = array();
  153. foreach ($bigtypes as $k => $v) {
  154. $query = "SELECT * FROM `#@__area` WHERE reid=$k order by id asc";
  155. $dsql->Execute('me', $query);
  156. $n = 1;
  157. while ($row = $dsql->GetArray()) {
  158. $stypes[$row['id']] = $evalue = $disorder = $v + $n;
  159. $dsql->ExecuteNoneQuery("INSERT INTO `#@__sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`)
  160. VALUES('{$row['name']}','$evalue','nativeplace','$disorder','0'); ");
  161. $n++;
  162. }
  163. }
  164. WriteEnumsCache('nativeplace');
  165. ShowMsg("成功导入所有旧的地区数据", "stepselect_main.php?egroup=nativeplace");
  166. exit();
  167. }
  168. /*--------------------
  169. function __addenum_save() { }
  170. 关于二级枚举的说明,为了节省查询速度,二级枚举是通过特殊算法生成的,原理为
  171. 凡是能被 500 整除的都是一级枚举,(500 * n) + 1 < em < 500 * (n+1) 为下级枚举
  172. 如:1000 的下级枚举对应的值为 1001,1002,10031499
  173. 对于 issign=1 的,表示这个类别只有一级枚举,则不受上面的算法限制
  174. ------------------------------------------------------------------------
  175. 更新算法:
  176. 新增二级枚举下添加"-N"自己类别选择,例如:
  177. 1001二级枚举下面的3级类目,则为1001-1,1001-2
  178. 这时候需要issign=2
  179. ---------------------*/
  180. else if ($action == 'addenum_save') {
  181. if (empty($ename) || empty($egroup)) {
  182. Showmsg("类别名称或组名称不能为空", "-1");
  183. exit();
  184. }
  185. if ($issign == 1 || $topvalue == 0) {
  186. $enames = explode(',', $ename);
  187. foreach ($enames as $ename) {
  188. $arr = $dsql->GetOne("SELECT * FROM `#@__sys_enum` WHERE egroup='$egroup' AND (evalue MOD 500)=0 ORDER BY disorder DESC ");
  189. if (!is_array($arr)) $disorder = $evalue = ($issign == 1 ? 1 : 500);
  190. else $disorder = $evalue = $arr['disorder'] + ($issign == 1 ? 1 : 500);
  191. $dsql->ExecuteNoneQuery("INSERT INTO `#@__sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`)
  192. VALUES('$ename','$evalue','$egroup','$disorder','$issign'); ");
  193. }
  194. WriteEnumsCache($egroup);
  195. ShowMsg("成功添加枚举分类".$dsql->GetError(), $ENV_GOBACK_URL);
  196. exit();
  197. } else if ($issign == 2 && $topvalue != 0) {
  198. $minid = $topvalue;
  199. $maxnum = 500; //三级子类最多500个
  200. $enames = explode(',', $ename);
  201. foreach ($enames as $ename) {
  202. $arr = $dsql->GetOne("SELECT * FROM `#@__sys_enum` WHERE egroup='$egroup' AND evalue LIKE '$topvalue.%%%' ORDER BY evalue DESC ");
  203. if (!is_array($arr)) {
  204. $disorder = $minid;
  205. $evalue = $minid.'.001';
  206. } else {
  207. $disorder = $minid;
  208. preg_match("#([0-9]{1,})\.([0-9]{1,})#", $arr['evalue'], $matchs);
  209. $addvalue = $matchs[2] + 1;
  210. $addvalue = sprintf("%03d", $addvalue);
  211. $evalue = $matchs[1].'.'.$addvalue;
  212. }
  213. $sql = "INSERT INTO `#@__sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`)
  214. VALUES('$ename','$evalue','$egroup','$disorder','$issign'); ";
  215. //echo $sql;exit;
  216. $dsql->ExecuteNoneQuery($sql);
  217. }
  218. //echo $minid;
  219. WriteEnumsCache($egroup);
  220. ShowMsg("成功添加枚举分类", $ENV_GOBACK_URL);
  221. exit();
  222. } else {
  223. $minid = $topvalue;
  224. $maxid = $topvalue + 500;
  225. $enames = explode(',', $ename);
  226. foreach ($enames as $ename) {
  227. $arr = $dsql->GetOne("SELECT * FROM `#@__sys_enum` WHERE egroup='$egroup' AND evalue>$minid AND evalue<$maxid ORDER BY evalue DESC ");
  228. if (!is_array($arr)) {
  229. $disorder = $evalue = $minid + 1;
  230. } else {
  231. $disorder = $arr['disorder'] + 1;
  232. $evalue = $arr['evalue'] + 1;
  233. }
  234. $dsql->ExecuteNoneQuery("INSERT INTO `#@__sys_enum`(`ename`,`evalue`,`egroup`,`disorder`,`issign`)
  235. VALUES('$ename','$evalue','$egroup','$disorder','$issign'); ");
  236. }
  237. WriteEnumsCache($egroup);
  238. ShowMsg("成功添加枚举分类", $ENV_GOBACK_URL);
  239. exit();
  240. }
  241. }
  242. /*-----------------
  243. 修改枚举名称和排序
  244. function __upenum() { }
  245. ------------------*/
  246. else if ($action == 'upenum') {
  247. $ename = trim(preg_replace("# └─(─){1,}#", '', $ename));
  248. $row = $dsql->GetOne("SELECT egroup FROM `#@__sys_enum` WHERE id = '$aid' ");
  249. WriteEnumsCache($row['egroup']);
  250. $dsql->ExecuteNoneQuery("UPDATE `#@__sys_enum` SET `ename`='$ename',`disorder`='$disorder' WHERE id='$aid'; ");
  251. ShowMsg("成功修改一个枚举", $ENV_GOBACK_URL);
  252. exit();
  253. }
  254. /*-----------------
  255. 更新枚举缓存
  256. function __upallcache() { }
  257. ------------------*/
  258. else if ($action == 'upallcache') {
  259. if (!isset($egroup)) $egroup = '';
  260. WriteEnumsCache($egroup);
  261. ShowMsg("成更新枚举缓存", $ENV_GOBACK_URL);
  262. exit();
  263. }