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

566 lines
21KB

  1. <?php if(!defined('DEDEINC')) exit('dedecms');
  2. /**
  3. * 系统核心函数存放文件
  4. * @version $Id: customfields.func.php 2 20:50 2010年7月7日Z tianya $
  5. * @package DedeCMS.Libraries
  6. * @copyright Copyright (c) 2007 - 2020, DesDev, Inc.
  7. * @license http://help.dedecms.com/usersguide/license.html
  8. * @link http://www.dedecms.com
  9. */
  10. /**
  11. * 获得一个附加表单(发布时用)
  12. *
  13. * @access public
  14. * @param object $ctag 标签
  15. * @param string $admintype 管理员类型
  16. * @return string
  17. */
  18. function GetFormItem($ctag, $admintype='admin')
  19. {
  20. global $dsql;
  21. $fieldname = $ctag->GetName();
  22. $fieldType = $ctag->GetAtt('type');
  23. $formitem = $formitem = GetSysTemplets("custom_fields_{$admintype}.htm");
  24. $innertext = trim($ctag->GetInnerText());
  25. if($innertext!='')
  26. {
  27. $formitem = $innertext;
  28. }
  29. if($fieldType=='select')
  30. {
  31. $myformItem = '';
  32. $items = explode(',',$ctag->GetAtt("default"));
  33. $myformItem = "<select name='$fieldname' style='width:150px'>";
  34. foreach($items as $v)
  35. {
  36. $v = trim($v);
  37. if($v!='') {
  38. $myformItem.= "<option value='$v'>$v</option>\r\n";
  39. }
  40. }
  41. $myformItem .= "</select>\r\n";
  42. $innertext = $myformItem;
  43. }
  44. else if($fieldType=='stepselect')
  45. {
  46. global $hasSetEnumJs,$cfg_cmspath;
  47. $cmspath = ( (empty($cfg_cmspath) || !preg_match('/[/$]/', $cfg_cmspath)) ? $cfg_cmspath.'/' : $cfg_cmspath );
  48. $myformItem = '';
  49. $myformItem .= "<input type='hidden' id='hidden_{$fieldname}' name='{$fieldname}' value='0' />\r\n";
  50. $myformItem .= "<span id='span_{$fieldname}'></span>\r\n";
  51. $myformItem .= "<span id='span_{$fieldname}_son'></span>\r\n";
  52. $myformItem .= "<span id='span_{$fieldname}_sec'></span>\r\n";
  53. if($hasSetEnumJs != 'hasset')
  54. {
  55. $myformItem .= '<script language="javascript" type="text/javascript" src="'.$cmspath.'static/enums.js"></script>'."\r\n";
  56. $GLOBALS['hasSetEnumJs'] = 'hasset';
  57. }
  58. $myformItem .= "<script language='javascript' type='text/javascript' src='{$cmspath}data/enums/{$fieldname}.js'></script>\r\n";
  59. $myformItem .= '<script language="javascript" type="text/javascript">MakeTopSelect("'.$fieldname.'", 0);</script>'."\r\n";
  60. $formitem = str_replace('~name~', $ctag->GetAtt('itemname'), $formitem);
  61. $formitem = str_replace('~form~', $myformItem, $formitem);
  62. return $formitem;
  63. }
  64. else if($fieldType=='radio')
  65. {
  66. $myformItem = '';
  67. $items = explode(',',$ctag->GetAtt("default"));
  68. $i = 0;
  69. foreach($items as $v)
  70. {
  71. $v = trim($v);
  72. if($v!='')
  73. {
  74. $myformItem .= ($i==0 ? "<input type='radio' name='$fieldname' class='np' value='$v' checked>$v\r\n" : "<input type='radio' name='$fieldname' class='np' value='$v'>$v\r\n");
  75. $i++;
  76. }
  77. }
  78. $innertext = $myformItem;
  79. }
  80. else if($fieldType=='checkbox')
  81. {
  82. $myformItem = '';
  83. $items = explode(',',$ctag->GetAtt("default"));
  84. foreach($items as $v)
  85. {
  86. $v = trim($v);
  87. if($v!='')
  88. {
  89. if($admintype == 'membermodel')
  90. {
  91. $myformItem .= "<label><input type='checkbox' name='{$fieldname}[]' class='np' value='$v'>$v</label>\r\n";
  92. } else {
  93. $myformItem .= "<input type='checkbox' name='{$fieldname}[]' class='np' value='$v'>$v\r\n";
  94. }
  95. }
  96. }
  97. $innertext = $myformItem;
  98. }
  99. else if($fieldType=='htmltext'||$fieldType=='textdata')
  100. {
  101. $dfvalue = ($ctag->GetAtt('default')!='' ? $ctag->GetAtt('default') : '');
  102. $dfvalue = str_replace('{{', '<', $dfvalue);
  103. $dfvalue = str_replace('}}', '>', $dfvalue);
  104. if($admintype=='admin')
  105. {
  106. $innertext = GetEditor($fieldname, $dfvalue, 350, 'Basic', 'string');
  107. }
  108. else if($admintype=='diy')
  109. {
  110. $innertext = GetEditor($fieldname, $dfvalue, 350, 'Diy', 'string');
  111. }
  112. else
  113. {
  114. $innertext = GetEditor($fieldname, $dfvalue, 350, 'Member', 'string');
  115. }
  116. }
  117. else if($fieldType=="multitext")
  118. {
  119. $innertext = "<textarea name='$fieldname' id='$fieldname' style='width:90%;height:80'></textarea>\r\n";
  120. }
  121. else if($fieldType=="datetime")
  122. {
  123. $nowtime = GetDateTimeMk(time());
  124. $innertext = "<input name=\"$fieldname\" value=\"$nowtime\" type=\"text\" id=\"$fieldname\" style=\"width:250px\" class=\"intxt\" />";
  125. $innertext .= " <script language=\"javascript\" type=\"text/javascript\">
  126. Calendar.setup({
  127. inputField : \"$fieldname\",
  128. ifFormat : \"%Y-%m-%d %H:%M\",
  129. showsTime : true,
  130. timeFormat : \"24\"
  131. });
  132. </script>";
  133. }
  134. else if($fieldType=='img'||$fieldType=='imgfile')
  135. {
  136. if($admintype=='diy') {
  137. $innertext = "<input type='file' name='$fieldname' id='$fieldname' style='width:300px;height:22px;line-height:22px' />\r\n";
  138. }
  139. else {
  140. $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:300px' class='text' /> <input name='".$fieldname."_bt' type='button' class='inputbut' value='浏览...' onClick=\"SelectImage('form1.$fieldname','big')\" />\r\n";
  141. }
  142. }
  143. else if($fieldType=='media')
  144. {
  145. if($admintype=='diy')
  146. {
  147. $innertext = "<input type='hidden' name='$fieldname' id='$fieldname' value='' />不支持的类型\r\n";
  148. }
  149. else
  150. {
  151. $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:300px' class='text' /> <input name='".$fieldname."_bt' type='button' class='inputbut' value='浏览...' onClick=\"SelectMedia('form1.$fieldname')\" />\r\n";
  152. }
  153. }
  154. else if($fieldType=='addon')
  155. {
  156. if($admintype=='diy')
  157. {
  158. $innertext = "<input type='file' name='$fieldname' id='$fieldname' style='width:300px;height:22px;line-height:22px' />\r\n";
  159. }
  160. else
  161. {
  162. $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:300px' class='text' /> <input name='".$fieldname."_bt' type='button' class='inputbut' value='浏览...' onClick=\"SelectSoft('form1.$fieldname')\" />\r\n";
  163. }
  164. }
  165. else if($fieldType=='int'||$fieldType=='float')
  166. {
  167. $dfvalue = ($ctag->GetAtt('default')!='' ? $ctag->GetAtt('default') : '0');
  168. $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:100px' class='intxt' value='$dfvalue' /> (填写数值)\r\n";
  169. }
  170. else
  171. {
  172. $dfvalue = ($ctag->GetAtt('default')!='' ? $ctag->GetAtt('default') : '');
  173. $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:250px' class='intxt' value='$dfvalue' />\r\n";
  174. }
  175. $formitem = str_replace("~name~",$ctag->GetAtt('itemname'),$formitem);
  176. $formitem = str_replace("~form~",$innertext,$formitem);
  177. return $formitem;
  178. }
  179. /**
  180. * 处理不同类型的数据
  181. *
  182. * @access public
  183. * @param string $dvalue 默认值
  184. * @param string $dtype 默认类型
  185. * @param int $aid 文档ID
  186. * @param string $job 操作类型
  187. * @param string $addvar 值
  188. * @param string $admintype 管理类型
  189. * @param string $fieldname 变量类型
  190. * @return string
  191. */
  192. function GetFieldValue($dvalue, $dtype, $aid=0, $job='add', $addvar='', $admintype='admin', $fieldname='')
  193. {
  194. global $cfg_basedir, $cfg_cmspath, $adminid, $cfg_ml, $cfg_cookie_encode;
  195. if(!empty($adminid))
  196. {
  197. $adminid = $adminid;
  198. }
  199. else
  200. {
  201. $adminid = isset($cfg_ml) ? $cfg_ml->M_ID : 1;
  202. }
  203. if($dtype=='int')
  204. {
  205. if($dvalue=='')
  206. {
  207. return 0;
  208. }
  209. return GetAlabNum($dvalue);
  210. }
  211. else if($dtype=='stepselect')
  212. {
  213. $dvalue = trim(preg_replace("#[^0-9\.]#", "", $dvalue));
  214. return $dvalue;
  215. }
  216. else if($dtype=='float')
  217. {
  218. if($dvalue=='')
  219. {
  220. return 0;
  221. }
  222. return GetAlabNum($dvalue);
  223. }
  224. else if($dtype=='datetime')
  225. {
  226. if($dvalue=='')
  227. {
  228. return 0;
  229. }
  230. return GetMkTime($dvalue);
  231. }
  232. else if($dtype=='checkbox')
  233. {
  234. $okvalue = '';
  235. if(is_array($dvalue))
  236. {
  237. $okvalue = join(',',$dvalue);
  238. }
  239. return $okvalue;
  240. }
  241. else if($dtype=="htmltext")
  242. {
  243. if($admintype=='member' || $admintype=='diy')
  244. {
  245. $dvalue = HtmlReplace($dvalue,-1);
  246. }
  247. return $dvalue;
  248. }
  249. else if($dtype=="multitext")
  250. {
  251. if($admintype=='member' || $admintype=='diy')
  252. {
  253. $dvalue = HtmlReplace($dvalue,0);
  254. }
  255. return $dvalue;
  256. }
  257. else if($dtype=="textdata")
  258. {
  259. $ipath = $cfg_cmspath."/data/textdata";
  260. $tpath = ceil($aid / 5000);
  261. if(!is_dir($cfg_basedir.$ipath))
  262. {
  263. MkdirAll($cfg_basedir.$ipath, $GLOBALS['cfg_dir_purview']);
  264. }
  265. if(!is_dir($cfg_basedir.$ipath.'/'.$tpath))
  266. {
  267. MkdirAll($cfg_basedir.$ipath.'/'.$tpath,$GLOBALS['cfg_dir_purview']);
  268. }
  269. $ipath = $ipath.'/'.$tpath;
  270. $filename = "{$ipath}/{$aid}-".cn_substr(md5($cfg_cookie_encode), 0, 16).".txt";
  271. //会员投稿内容安全处理
  272. if($admintype=='member' || $admintype=='diy')
  273. {
  274. $dvalue = HtmlReplace($dvalue, -1);
  275. }
  276. $fp = fopen($cfg_basedir.$filename,"w");
  277. fwrite($fp, stripslashes($dvalue));
  278. fclose($fp);
  279. CloseFtp();
  280. return $filename;
  281. }
  282. else if($dtype=='img' || $dtype=='imgfile')
  283. {
  284. if(preg_match("#[\\|/]uploads[\\|/]userup#", $dvalue)) return $dvalue;
  285. if($admintype=='diy')
  286. {
  287. $iurl = MemberUploads($fieldname, '', 0, 'image', '', -1, -1, false);
  288. return $iurl;
  289. }
  290. $iurl = stripslashes($dvalue);
  291. if(trim($iurl)=='')
  292. {
  293. return '';
  294. }
  295. $iurl = trim(str_replace($GLOBALS['cfg_basehost'],"",$iurl));
  296. $imgurl = "{dede:img text='' width='' height=''} ".$iurl." {/dede:img}";
  297. if(preg_match("/^http:\/\//i", $iurl) && $GLOBALS['cfg_isUrlOpen'])
  298. {
  299. //远程图片
  300. $reimgs = '';
  301. if($GLOBALS['cfg_isUrlOpen'])
  302. {
  303. $reimgs = GetRemoteImage($iurl,$adminid);
  304. if(is_array($reimgs))
  305. {
  306. if($dtype=='imgfile')
  307. {
  308. $imgurl = $reimgs[1];
  309. }
  310. else
  311. {
  312. $imgurl = "{dede:img text='' width='".$reimgs[1]."' height='".$reimgs[2]."'} ".$reimgs[0]." {/dede:img}";
  313. }
  314. }
  315. }
  316. else
  317. {
  318. if($dtype=='imgfile')
  319. {
  320. $imgurl = $iurl;
  321. }
  322. else
  323. {
  324. $imgurl = "{dede:img text='' width='' height=''} ".$iurl." {/dede:img}";
  325. }
  326. }
  327. }
  328. else if($iurl != '')
  329. {
  330. //站内图片
  331. $imgfile = $cfg_basedir.$iurl;
  332. if(is_file($imgfile))
  333. {
  334. $info = '';
  335. $imginfos = GetImageSize($imgfile,$info);
  336. if($dtype=="imgfile")
  337. {
  338. $imgurl = $iurl;
  339. }
  340. else
  341. {
  342. $imgurl = "{dede:img text='' width='".$imginfos[0]."' height='".$imginfos[1]."'} $iurl {/dede:img}";
  343. }
  344. }
  345. }
  346. return addslashes($imgurl);
  347. }
  348. else if($dtype=='addon' && $admintype=='diy')
  349. {
  350. if(preg_match("#[\\|/]uploads[\\|/]userup#", $dvalue)) return $dvalue;
  351. $dvalue = MemberUploads($fieldname,'', 0, 'addon', '', -1, -1, false);
  352. return $dvalue;
  353. }
  354. else
  355. {
  356. if($admintype=='member' || $admintype=='diy')
  357. {
  358. $dvalue = HtmlReplace($dvalue,1);
  359. }
  360. return $dvalue;
  361. }
  362. }
  363. /**
  364. * 获得带值的表单(编辑时用)
  365. *
  366. * @access public
  367. * @param object $ctag 标签
  368. * @param mixed $fvalue 变量值
  369. * @param string $admintype 会员类型
  370. * @param string $fieldname 变量名称
  371. * @return string
  372. */
  373. function GetFormItemValue($ctag, $fvalue, $admintype='admin', $fieldname='')
  374. {
  375. global $cfg_basedir,$dsql;
  376. $fieldname = $ctag->GetName();
  377. $formitem = $formitem = GetSysTemplets("custom_fields_{$admintype}.htm");
  378. $innertext = trim($ctag->GetInnerText());
  379. if($innertext!='')
  380. {
  381. $formitem = $innertext;
  382. }
  383. $ftype = $ctag->GetAtt('type');
  384. $myformItem = '';
  385. if(preg_match("/select|radio|checkbox/i", $ftype))
  386. {
  387. $items = explode(',',$ctag->GetAtt('default'));
  388. }
  389. if($ftype=='select')
  390. {
  391. $myformItem = "<select name='$fieldname' style='width:150px'>";
  392. if(is_array($items))
  393. {
  394. foreach($items as $v)
  395. {
  396. $v = trim($v);
  397. if($v=='')
  398. {
  399. continue;
  400. }
  401. $myformItem.= ($fvalue==$v ? "<option value='$v' selected>$v</option>\r\n" : "<option value='$v'>$v</option>\r\n");
  402. }
  403. }
  404. $myformItem .= "</select>\r\n";
  405. $innertext = $myformItem;
  406. }
  407. else if($ctag->GetAtt("type")=='stepselect')
  408. {
  409. global $hasSetEnumJs,$cfg_cmspath;
  410. $cmspath = ( (empty($cfg_cmspath) || preg_match('/[/$]/', $cfg_cmspath)) ? $cfg_cmspath.'/' : $cfg_cmspath );
  411. $myformItem = '';
  412. $myformItem .= "<input type='hidden' id='hidden_{$fieldname}' name='{$fieldname}' value='{$fvalue}' />\r\n";
  413. $myformItem .= "<span id='span_{$fieldname}'></span>\r\n";
  414. $myformItem .= "<span id='span_{$fieldname}_son'></span>\r\n";
  415. $myformItem .= "<span id='span_{$fieldname}_sec'></span>\r\n";
  416. if($hasSetEnumJs != 'hasset')
  417. {
  418. $myformItem .= '<script language="javascript" type="text/javascript" src="'.$cmspath.'static/enums.js"></script>'."\r\n";
  419. $GLOBALS['hasSetEnumJs'] = 'hasset';
  420. }
  421. $myformItem .= "<script language='javascript' type='text/javascript' src='{$cmspath}data/enums/{$fieldname}.js'></script>\r\n";
  422. $myformItem .= "<script language='javascript' type='text/javascript'>MakeTopSelect('$fieldname', $fvalue);</script>\r\n";
  423. $formitem = str_replace('~name~', $ctag->GetAtt('itemname'), $formitem);
  424. $formitem = str_replace('~form~', $myformItem, $formitem);
  425. return $formitem;
  426. }
  427. else if($ftype=='radio')
  428. {
  429. if(is_array($items))
  430. {
  431. foreach($items as $v)
  432. {
  433. $v = trim($v);
  434. if($v=='') continue;
  435. $myformItem.= ($fvalue==$v ? "<input type='radio' name='$fieldname' class='np' value='$v' checked='checked' />$v\r\n" : "<input type='radio' name='$fieldname' class='np' value='$v' />$v\r\n");
  436. }
  437. }
  438. $innertext = $myformItem;
  439. }
  440. //checkbox
  441. else if($ftype=='checkbox')
  442. {
  443. $myformItem = '';
  444. $fvalues = explode(',',$fvalue);
  445. if(is_array($items))
  446. {
  447. foreach($items as $v)
  448. {
  449. $v = trim($v);
  450. if($v=='')
  451. {
  452. continue;
  453. }
  454. if(in_array($v,$fvalues))
  455. {
  456. $myformItem .= "<input type='checkbox' name='{$fieldname}[]' class='np' value='$v' checked='checked' />$v\r\n";
  457. }
  458. else
  459. {
  460. $myformItem .= "<input type='checkbox' name='{$fieldname}[]' class='np' value='$v' />$v\r\n";
  461. }
  462. }
  463. }
  464. $innertext = $myformItem;
  465. }
  466. //文本数据的特殊处理
  467. else if($ftype=="textdata")
  468. {
  469. if(is_file($cfg_basedir.$fvalue))
  470. {
  471. $fp = fopen($cfg_basedir.$fvalue,'r');
  472. $okfvalue = '';
  473. while(!feof($fp)){ $okfvalue .= fgets($fp,1024); }
  474. fclose($fp);
  475. }
  476. else
  477. {
  478. $okfvalue = '';
  479. }
  480. if($admintype=='admin')
  481. {
  482. $myformItem = GetEditor($fieldname,$okfvalue,350,'Basic','string')."\r\n <input type='hidden' name='{$fieldname}_file' value='{$fvalue}' />\r\n ";
  483. }
  484. else
  485. {
  486. $myformItem = GetEditor($fieldname,$okfvalue,350,'Member','string')."\r\n <input type='hidden' name='{$fieldname}_file' value='{$fvalue}' />\r\n ";
  487. }
  488. $innertext = $myformItem;
  489. }
  490. else if($ftype=="htmltext")
  491. {
  492. if($admintype=='admin')
  493. {
  494. $myformItem = GetEditor($fieldname,$fvalue,350,'Basic','string')."\r\n ";
  495. }
  496. else
  497. {
  498. $myformItem = GetEditor($fieldname,$fvalue,350,'Member','string')."\r\n ";
  499. }
  500. $innertext = $myformItem;
  501. }
  502. else if($ftype=="multitext")
  503. {
  504. $innertext = "<textarea name='$fieldname' id='$fieldname' style='width:90%;height:80px'>$fvalue</textarea>\r\n";
  505. }
  506. else if($ftype=="datetime")
  507. {
  508. $nowtime = GetDateTimeMk($fvalue);
  509. $innertext = "<input name=\"$fieldname\" value=\"$nowtime\" type=\"text\" id=\"$fieldname\" style=\"width:250px\" class=\"intxt\" />";
  510. $innertext .= " <script language=\"javascript\" type=\"text/javascript\">
  511. Calendar.setup({
  512. inputField : \"$fieldname\",
  513. ifFormat : \"%Y-%m-%d %H:%M\",
  514. showsTime : true,
  515. timeFormat : \"24\"
  516. });
  517. </script>";
  518. }
  519. else if($ftype=="img")
  520. {
  521. $ndtp = new DedeTagParse();
  522. $ndtp->LoadSource($fvalue);
  523. if(!is_array($ndtp->CTags))
  524. {
  525. $ndtp->Clear();
  526. $fvalue = "";
  527. }
  528. else
  529. {
  530. $ntag = $ndtp->GetTag("img");
  531. $fvalue = trim($ntag->GetInnerText());
  532. }
  533. $innertext = "<input type='text' name='$fieldname' value='$fvalue' id='$fieldname' style='width:300px' class='text' /> <input name='".$fieldname."_bt' class='inputbut' type='button' value='浏览...' onClick=\"SelectImage('form1.$fieldname','big')\" />\r\n";
  534. }
  535. else if($ftype=="imgfile")
  536. {
  537. $innertext = "<input type='text' name='$fieldname' value='$fvalue' id='$fieldname' style='width:300px' class='text' /> <input name='".$fieldname."_bt' class='inputbut' type='button' value='浏览...' onClick=\"SelectImage('form1.$fieldname','big')\" />\r\n";
  538. }
  539. else if($ftype=="media")
  540. {
  541. $innertext = "<input type='text' name='$fieldname' value='$fvalue' id='$fieldname' style='width:300px' class='text' /> <input name='".$fieldname."_bt' class='inputbut' type='button' value='浏览...' onClick=\"SelectMedia('form1.$fieldname')\" />\r\n";
  542. }
  543. else if($ftype=="addon")
  544. {
  545. $innertext = "<input type='text' name='$fieldname' id='$fieldname' value='$fvalue' style='width:300px' class='text' /> <input name='".$fieldname."_bt' class='inputbut' type='button' value='浏览...' onClick=\"SelectSoft('form1.$fieldname')\" />\r\n";
  546. }
  547. else if($ftype=="int"||$ftype=="float")
  548. {
  549. $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:100px' class='intxt' value='$fvalue' /> (填写数值)\r\n";
  550. }
  551. else
  552. {
  553. $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:250px' class='intxt' value='$fvalue' />\r\n";
  554. }
  555. $formitem = str_replace('~name~',$ctag->GetAtt('itemname'),$formitem);
  556. $formitem = str_replace('~form~',$innertext,$formitem);
  557. return $formitem;
  558. }