国内流行的内容管理系统(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.

314 lines
11KB

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