国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

550 linhas
20KB

  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 datepicker\"/>";
  125. }
  126. else if($fieldType=='img'||$fieldType=='imgfile')
  127. {
  128. if($admintype=='diy') {
  129. $innertext = "<input type='file' name='$fieldname' id='$fieldname' style='width:300px;height:22px;line-height:22px' />\r\n";
  130. }
  131. else {
  132. $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";
  133. }
  134. }
  135. else if($fieldType=='media')
  136. {
  137. if($admintype=='diy')
  138. {
  139. $innertext = "<input type='hidden' name='$fieldname' id='$fieldname' value='' />不支持的类型\r\n";
  140. }
  141. else
  142. {
  143. $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";
  144. }
  145. }
  146. else if($fieldType=='addon')
  147. {
  148. if($admintype=='diy')
  149. {
  150. $innertext = "<input type='file' name='$fieldname' id='$fieldname' style='width:300px;height:22px;line-height:22px' />\r\n";
  151. }
  152. else
  153. {
  154. $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";
  155. }
  156. }
  157. else if($fieldType=='int'||$fieldType=='float')
  158. {
  159. $dfvalue = ($ctag->GetAtt('default')!='' ? $ctag->GetAtt('default') : '0');
  160. $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:100px' class='intxt' value='$dfvalue' /> (填写数值)\r\n";
  161. }
  162. else
  163. {
  164. $dfvalue = ($ctag->GetAtt('default')!='' ? $ctag->GetAtt('default') : '');
  165. $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:250px' class='intxt' value='$dfvalue' />\r\n";
  166. }
  167. $formitem = str_replace("~name~",$ctag->GetAtt('itemname'),$formitem);
  168. $formitem = str_replace("~form~",$innertext,$formitem);
  169. return $formitem;
  170. }
  171. /**
  172. * 处理不同类型的数据
  173. *
  174. * @access public
  175. * @param string $dvalue 默认值
  176. * @param string $dtype 默认类型
  177. * @param int $aid 文档ID
  178. * @param string $job 操作类型
  179. * @param string $addvar 值
  180. * @param string $admintype 管理类型
  181. * @param string $fieldname 变量类型
  182. * @return string
  183. */
  184. function GetFieldValue($dvalue, $dtype, $aid=0, $job='add', $addvar='', $admintype='admin', $fieldname='')
  185. {
  186. global $cfg_basedir, $cfg_cmspath, $adminid, $cfg_ml, $cfg_cookie_encode;
  187. if(!empty($adminid))
  188. {
  189. $adminid = $adminid;
  190. }
  191. else
  192. {
  193. $adminid = isset($cfg_ml) ? $cfg_ml->M_ID : 1;
  194. }
  195. if($dtype=='int')
  196. {
  197. if($dvalue=='')
  198. {
  199. return 0;
  200. }
  201. return GetAlabNum($dvalue);
  202. }
  203. else if($dtype=='stepselect')
  204. {
  205. $dvalue = trim(preg_replace("#[^0-9\.]#", "", $dvalue));
  206. return $dvalue;
  207. }
  208. else if($dtype=='float')
  209. {
  210. if($dvalue=='')
  211. {
  212. return 0;
  213. }
  214. return GetAlabNum($dvalue);
  215. }
  216. else if($dtype=='datetime')
  217. {
  218. if($dvalue=='')
  219. {
  220. return 0;
  221. }
  222. return GetMkTime($dvalue);
  223. }
  224. else if($dtype=='checkbox')
  225. {
  226. $okvalue = '';
  227. if(is_array($dvalue))
  228. {
  229. $okvalue = join(',',$dvalue);
  230. }
  231. return $okvalue;
  232. }
  233. else if($dtype=="htmltext")
  234. {
  235. if($admintype=='member' || $admintype=='diy')
  236. {
  237. $dvalue = HtmlReplace($dvalue,-1);
  238. }
  239. return $dvalue;
  240. }
  241. else if($dtype=="multitext")
  242. {
  243. if($admintype=='member' || $admintype=='diy')
  244. {
  245. $dvalue = HtmlReplace($dvalue,0);
  246. }
  247. return $dvalue;
  248. }
  249. else if($dtype=="textdata")
  250. {
  251. $ipath = $cfg_cmspath."/data/textdata";
  252. $tpath = ceil($aid / 5000);
  253. if(!is_dir($cfg_basedir.$ipath))
  254. {
  255. MkdirAll($cfg_basedir.$ipath, $GLOBALS['cfg_dir_purview']);
  256. }
  257. if(!is_dir($cfg_basedir.$ipath.'/'.$tpath))
  258. {
  259. MkdirAll($cfg_basedir.$ipath.'/'.$tpath,$GLOBALS['cfg_dir_purview']);
  260. }
  261. $ipath = $ipath.'/'.$tpath;
  262. $filename = "{$ipath}/{$aid}-".cn_substr(md5($cfg_cookie_encode), 0, 16).".txt";
  263. //会员投稿内容安全处理
  264. if($admintype=='member' || $admintype=='diy')
  265. {
  266. $dvalue = HtmlReplace($dvalue, -1);
  267. }
  268. $fp = fopen($cfg_basedir.$filename,"w");
  269. fwrite($fp, stripslashes($dvalue));
  270. fclose($fp);
  271. CloseFtp();
  272. return $filename;
  273. }
  274. else if($dtype=='img' || $dtype=='imgfile')
  275. {
  276. if(preg_match("#[\\|/]uploads[\\|/]userup#", $dvalue)) return $dvalue;
  277. if($admintype=='diy')
  278. {
  279. $iurl = MemberUploads($fieldname, '', 0, 'image', '', -1, -1, false);
  280. return $iurl;
  281. }
  282. $iurl = stripslashes($dvalue);
  283. if(trim($iurl)=='')
  284. {
  285. return '';
  286. }
  287. $iurl = trim(str_replace($GLOBALS['cfg_basehost'],"",$iurl));
  288. $imgurl = "{dede:img text='' width='' height=''} ".$iurl." {/dede:img}";
  289. if(preg_match("/^http:\/\//i", $iurl) && $GLOBALS['cfg_isUrlOpen'])
  290. {
  291. //远程图片
  292. $reimgs = '';
  293. if($GLOBALS['cfg_isUrlOpen'])
  294. {
  295. $reimgs = GetRemoteImage($iurl,$adminid);
  296. if(is_array($reimgs))
  297. {
  298. if($dtype=='imgfile')
  299. {
  300. $imgurl = $reimgs[1];
  301. }
  302. else
  303. {
  304. $imgurl = "{dede:img text='' width='".$reimgs[1]."' height='".$reimgs[2]."'} ".$reimgs[0]." {/dede:img}";
  305. }
  306. }
  307. }
  308. else
  309. {
  310. if($dtype=='imgfile')
  311. {
  312. $imgurl = $iurl;
  313. }
  314. else
  315. {
  316. $imgurl = "{dede:img text='' width='' height=''} ".$iurl." {/dede:img}";
  317. }
  318. }
  319. }
  320. else if($iurl != '')
  321. {
  322. //站内图片
  323. $imgfile = $cfg_basedir.$iurl;
  324. if(is_file($imgfile))
  325. {
  326. $info = '';
  327. $imginfos = GetImageSize($imgfile,$info);
  328. if($dtype=="imgfile")
  329. {
  330. $imgurl = $iurl;
  331. }
  332. else
  333. {
  334. $imgurl = "{dede:img text='' width='".$imginfos[0]."' height='".$imginfos[1]."'} $iurl {/dede:img}";
  335. }
  336. }
  337. }
  338. return addslashes($imgurl);
  339. }
  340. else if($dtype=='addon' && $admintype=='diy')
  341. {
  342. if(preg_match("#[\\|/]uploads[\\|/]userup#", $dvalue)) return $dvalue;
  343. $dvalue = MemberUploads($fieldname,'', 0, 'addon', '', -1, -1, false);
  344. return $dvalue;
  345. }
  346. else
  347. {
  348. if($admintype=='member' || $admintype=='diy')
  349. {
  350. $dvalue = HtmlReplace($dvalue,1);
  351. }
  352. return $dvalue;
  353. }
  354. }
  355. /**
  356. * 获得带值的表单(编辑时用)
  357. *
  358. * @access public
  359. * @param object $ctag 标签
  360. * @param mixed $fvalue 变量值
  361. * @param string $admintype 会员类型
  362. * @param string $fieldname 变量名称
  363. * @return string
  364. */
  365. function GetFormItemValue($ctag, $fvalue, $admintype='admin', $fieldname='')
  366. {
  367. global $cfg_basedir,$dsql;
  368. $fieldname = $ctag->GetName();
  369. $formitem = $formitem = GetSysTemplets("custom_fields_{$admintype}.htm");
  370. $innertext = trim($ctag->GetInnerText());
  371. if($innertext!='')
  372. {
  373. $formitem = $innertext;
  374. }
  375. $ftype = $ctag->GetAtt('type');
  376. $myformItem = '';
  377. if(preg_match("/select|radio|checkbox/i", $ftype))
  378. {
  379. $items = explode(',',$ctag->GetAtt('default'));
  380. }
  381. if($ftype=='select')
  382. {
  383. $myformItem = "<select name='$fieldname' style='width:150px'>";
  384. if(is_array($items))
  385. {
  386. foreach($items as $v)
  387. {
  388. $v = trim($v);
  389. if($v=='')
  390. {
  391. continue;
  392. }
  393. $myformItem.= ($fvalue==$v ? "<option value='$v' selected>$v</option>\r\n" : "<option value='$v'>$v</option>\r\n");
  394. }
  395. }
  396. $myformItem .= "</select>\r\n";
  397. $innertext = $myformItem;
  398. }
  399. else if($ctag->GetAtt("type")=='stepselect')
  400. {
  401. global $hasSetEnumJs,$cfg_cmspath;
  402. $cmspath = ( (empty($cfg_cmspath) || preg_match('/[/$]/', $cfg_cmspath)) ? $cfg_cmspath.'/' : $cfg_cmspath );
  403. $myformItem = '';
  404. $myformItem .= "<input type='hidden' id='hidden_{$fieldname}' name='{$fieldname}' value='{$fvalue}' />\r\n";
  405. $myformItem .= "<span id='span_{$fieldname}'></span>\r\n";
  406. $myformItem .= "<span id='span_{$fieldname}_son'></span>\r\n";
  407. $myformItem .= "<span id='span_{$fieldname}_sec'></span>\r\n";
  408. if($hasSetEnumJs != 'hasset')
  409. {
  410. $myformItem .= '<script language="javascript" type="text/javascript" src="'.$cmspath.'static/enums.js"></script>'."\r\n";
  411. $GLOBALS['hasSetEnumJs'] = 'hasset';
  412. }
  413. $myformItem .= "<script language='javascript' type='text/javascript' src='{$cmspath}data/enums/{$fieldname}.js'></script>\r\n";
  414. $myformItem .= "<script language='javascript' type='text/javascript'>MakeTopSelect('$fieldname', $fvalue);</script>\r\n";
  415. $formitem = str_replace('~name~', $ctag->GetAtt('itemname'), $formitem);
  416. $formitem = str_replace('~form~', $myformItem, $formitem);
  417. return $formitem;
  418. }
  419. else if($ftype=='radio')
  420. {
  421. if(is_array($items))
  422. {
  423. foreach($items as $v)
  424. {
  425. $v = trim($v);
  426. if($v=='') continue;
  427. $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");
  428. }
  429. }
  430. $innertext = $myformItem;
  431. }
  432. //checkbox
  433. else if($ftype=='checkbox')
  434. {
  435. $myformItem = '';
  436. $fvalues = explode(',',$fvalue);
  437. if(is_array($items))
  438. {
  439. foreach($items as $v)
  440. {
  441. $v = trim($v);
  442. if($v=='')
  443. {
  444. continue;
  445. }
  446. if(in_array($v,$fvalues))
  447. {
  448. $myformItem .= "<input type='checkbox' name='{$fieldname}[]' class='np' value='$v' checked='checked' />$v\r\n";
  449. }
  450. else
  451. {
  452. $myformItem .= "<input type='checkbox' name='{$fieldname}[]' class='np' value='$v' />$v\r\n";
  453. }
  454. }
  455. }
  456. $innertext = $myformItem;
  457. }
  458. //文本数据的特殊处理
  459. else if($ftype=="textdata")
  460. {
  461. if(is_file($cfg_basedir.$fvalue))
  462. {
  463. $fp = fopen($cfg_basedir.$fvalue,'r');
  464. $okfvalue = '';
  465. while(!feof($fp)){ $okfvalue .= fgets($fp,1024); }
  466. fclose($fp);
  467. }
  468. else
  469. {
  470. $okfvalue = '';
  471. }
  472. if($admintype=='admin')
  473. {
  474. $myformItem = GetEditor($fieldname,$okfvalue,350,'Basic','string')."\r\n <input type='hidden' name='{$fieldname}_file' value='{$fvalue}' />\r\n ";
  475. }
  476. else
  477. {
  478. $myformItem = GetEditor($fieldname,$okfvalue,350,'Member','string')."\r\n <input type='hidden' name='{$fieldname}_file' value='{$fvalue}' />\r\n ";
  479. }
  480. $innertext = $myformItem;
  481. }
  482. else if($ftype=="htmltext")
  483. {
  484. if($admintype=='admin')
  485. {
  486. $myformItem = GetEditor($fieldname,$fvalue,350,'Basic','string')."\r\n ";
  487. }
  488. else
  489. {
  490. $myformItem = GetEditor($fieldname,$fvalue,350,'Member','string')."\r\n ";
  491. }
  492. $innertext = $myformItem;
  493. }
  494. else if($ftype=="multitext")
  495. {
  496. $innertext = "<textarea name='$fieldname' id='$fieldname' style='width:90%;height:80px'>$fvalue</textarea>\r\n";
  497. }
  498. else if($ftype=="datetime")
  499. {
  500. $nowtime = GetDateTimeMk($fvalue);
  501. $innertext = "<input name=\"$fieldname\" value=\"$nowtime\" type=\"text\" id=\"$fieldname\" style=\"width:250px\" class=\"intxt datepicker\" />";
  502. }
  503. else if($ftype=="img")
  504. {
  505. $ndtp = new DedeTagParse();
  506. $ndtp->LoadSource($fvalue);
  507. if(!is_array($ndtp->CTags))
  508. {
  509. $ndtp->Clear();
  510. $fvalue = "";
  511. }
  512. else
  513. {
  514. $ntag = $ndtp->GetTag("img");
  515. $fvalue = trim($ntag->GetInnerText());
  516. }
  517. $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";
  518. }
  519. else if($ftype=="imgfile")
  520. {
  521. $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";
  522. }
  523. else if($ftype=="media")
  524. {
  525. $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";
  526. }
  527. else if($ftype=="addon")
  528. {
  529. $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";
  530. }
  531. else if($ftype=="int"||$ftype=="float")
  532. {
  533. $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:100px' class='intxt' value='$fvalue' /> (填写数值)\r\n";
  534. }
  535. else
  536. {
  537. $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:250px' class='intxt' value='$fvalue' />\r\n";
  538. }
  539. $formitem = str_replace('~name~',$ctag->GetAtt('itemname'),$formitem);
  540. $formitem = str_replace('~form~',$innertext,$formitem);
  541. return $formitem;
  542. }