|
- <?php if(!defined('DEDEINC')) exit('dedecms');
- /**
- * 系统核心函数存放文件
- * @version $Id: customfields.func.php 2 20:50 2010年7月7日Z tianya $
- * @package DedeCMS.Libraries
- * @copyright Copyright (c) 2020, DedeBIZ.COM
- * @license https://www.dedebiz.com/license
- * @link https://www.dedebiz.com
- */
-
- /**
- * 获得一个附加表单(发布时用)
- *
- * @access public
- * @param object $ctag 标签
- * @param string $admintype 管理员类型
- * @return string
- */
- function GetFormItem($ctag, $admintype='admin')
- {
- $fieldname = $ctag->GetName();
- $fieldType = $ctag->GetAtt('type');
- $formitem = $formitem = GetSysTemplets("custom_fields_{$admintype}.htm");
- $innertext = trim($ctag->GetInnerText());
- if($innertext!='')
- {
- $formitem = $innertext;
- }
-
- if($fieldType=='select')
- {
- $myformItem = '';
- $items = explode(',',$ctag->GetAtt("default"));
- $myformItem = "<select name='$fieldname' style='width:150px'>";
- foreach($items as $v)
- {
- $v = trim($v);
- if($v!='') {
- $myformItem.= "<option value='$v'>$v</option>\r\n";
- }
- }
- $myformItem .= "</select>\r\n";
- $innertext = $myformItem;
- }
- else if($fieldType=='stepselect')
- {
- global $hasSetEnumJs,$cfg_cmspath;
- $cmspath = ( (empty($cfg_cmspath) || !preg_match('/[/$]/', $cfg_cmspath)) ? $cfg_cmspath.'/' : $cfg_cmspath );
- $myformItem = '';
- $myformItem .= "<input type='hidden' id='hidden_{$fieldname}' name='{$fieldname}' value='0' />\r\n";
- $myformItem .= "<span id='span_{$fieldname}'></span>\r\n";
- $myformItem .= "<span id='span_{$fieldname}_son'></span>\r\n";
- $myformItem .= "<span id='span_{$fieldname}_sec'></span>\r\n";
- if($hasSetEnumJs != 'hasset')
- {
- $myformItem .= '<script language="javascript" type="text/javascript" src="'.$cmspath.'static/enums.js"></script>'."\r\n";
- $GLOBALS['hasSetEnumJs'] = 'hasset';
- }
- $myformItem .= "<script language='javascript' type='text/javascript' src='{$cmspath}data/enums/{$fieldname}.js'></script>\r\n";
- $myformItem .= '<script language="javascript" type="text/javascript">MakeTopSelect("'.$fieldname.'", 0);</script>'."\r\n";
- $formitem = str_replace('~name~', $ctag->GetAtt('itemname'), $formitem);
- $formitem = str_replace('~form~', $myformItem, $formitem);
- return $formitem;
- }
- else if($fieldType=='radio')
- {
- $myformItem = '';
- $items = explode(',',$ctag->GetAtt("default"));
- $i = 0;
- foreach($items as $v)
- {
- $v = trim($v);
- if($v!='')
- {
- $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");
- $i++;
- }
- }
- $innertext = $myformItem;
- }
- else if($fieldType=='checkbox')
- {
- $myformItem = '';
- $items = explode(',',$ctag->GetAtt("default"));
- foreach($items as $v)
- {
- $v = trim($v);
- if($v!='')
- {
- if($admintype == 'membermodel')
- {
- $myformItem .= "<label><input type='checkbox' name='{$fieldname}[]' class='np' value='$v'>$v</label>\r\n";
- } else {
- $myformItem .= "<input type='checkbox' name='{$fieldname}[]' class='np' value='$v'>$v\r\n";
- }
-
- }
- }
- $innertext = $myformItem;
- }
- else if($fieldType=='htmltext'||$fieldType=='textdata')
- {
- $dfvalue = ($ctag->GetAtt('default')!='' ? $ctag->GetAtt('default') : '');
- $dfvalue = str_replace('{{', '<', $dfvalue);
- $dfvalue = str_replace('}}', '>', $dfvalue);
- if($admintype=='admin')
- {
- $innertext = GetEditor($fieldname, $dfvalue, 350, 'Basic', 'string');
- }
- else if($admintype=='diy')
- {
- $innertext = GetEditor($fieldname, $dfvalue, 350, 'Diy', 'string');
- }
- else
- {
- $innertext = GetEditor($fieldname, $dfvalue, 350, 'Member', 'string');
- }
- }
- else if($fieldType=="multitext")
- {
- $innertext = "<textarea name='$fieldname' id='$fieldname' style='width:90%;height:80'></textarea>\r\n";
- }
- else if($fieldType=="datetime")
- {
- $nowtime = GetDateTimeMk(time());
- $innertext = "<input name=\"$fieldname\" value=\"$nowtime\" type=\"text\" id=\"$fieldname\" style=\"width:250px\" class=\"intxt datepicker\"/>";
- }
- else if($fieldType=='img'||$fieldType=='imgfile')
- {
- if($admintype=='diy') {
- $innertext = "<input type='file' name='$fieldname' id='$fieldname' style='width:300px;height:22px;line-height:22px' />\r\n";
- }
- else {
- $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";
- }
- }
- else if($fieldType=='media')
- {
- if($admintype=='diy')
- {
- $innertext = "<input type='hidden' name='$fieldname' id='$fieldname' value='' />不支持的类型\r\n";
- }
- else
- {
- $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";
- }
- }
- else if($fieldType=='addon')
- {
- if($admintype=='diy')
- {
- $innertext = "<input type='file' name='$fieldname' id='$fieldname' style='width:300px;height:22px;line-height:22px' />\r\n";
- }
- else
- {
- $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";
- }
- }
- else if($fieldType=='int'||$fieldType=='float')
- {
- $dfvalue = ($ctag->GetAtt('default')!='' ? $ctag->GetAtt('default') : '0');
- $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:100px' class='intxt' value='$dfvalue' /> (填写数值)\r\n";
- } else if($fieldType=='relation') {
- $dfvalue = ($ctag->GetAtt('default')!='' ? $ctag->GetAtt('default') : '');
- $channel = ($ctag->GetAtt('channel') == "")? "1" : $ctag->GetAtt('channel');
- $innertext = "<textarea name='$fieldname' id='$fieldname' style='width:90%;height:80px'>$dfvalue</textarea><br>
- <button type='button' class='btn btn-secondary btn-sm mt-2 mb-2' onclick='SelectArcList(\"form1.$fieldname\", $channel);'>选择关联内容</button>\r\n";
- if ($ctag->GetAtt('automake') == 1) {
- $innertext .= "<input type='hidden' name='automake[$fieldname]' value=1>";
- }
-
- $innertext .= <<<EOT
- <script>
- if(typeof SelectArcList === "undefined") {
- function SelectArcList(fname,cid) {
- var posLeft = 10;
- var posTop = 10;
- window.open("content_select_list.php?f=" + fname+"&channelid="+cid, "selArcList", "scrollbars=yes,resizable=yes,statebar=no,width=800,height=500,left=" + posLeft + ", top=" + posTop);
- }
- }
- </script>
- EOT;
- }
- else
- {
- $dfvalue = ($ctag->GetAtt('default')!='' ? $ctag->GetAtt('default') : '');
- $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:250px' class='intxt' value='$dfvalue' />
- \r\n";
- }
- $formitem = str_replace("~name~",$ctag->GetAtt('itemname'),$formitem);
- $formitem = str_replace("~form~",$innertext,$formitem);
- return $formitem;
- }
-
- /**
- * 处理不同类型的数据
- *
- * @access public
- * @param string $dvalue 默认值
- * @param string $dtype 默认类型
- * @param int $aid 文档ID
- * @param string $job 操作类型
- * @param string $addvar 值
- * @param string $admintype 管理类型
- * @param string $fieldname 变量类型
- * @return string
- */
- function GetFieldValue($dvalue, $dtype, $aid=0, $job='add', $addvar='', $admintype='admin', $fieldname='')
- {
- global $cfg_basedir, $cfg_cmspath, $adminid, $cfg_ml, $cfg_cookie_encode;
- if(!empty($adminid))
- {
- $adminid = $adminid;
- }
- else
- {
- $adminid = isset($cfg_ml) ? $cfg_ml->M_ID : 1;
- }
- if($dtype=='int')
- {
- if($dvalue=='')
- {
- return 0;
- }
- return GetAlabNum($dvalue);
- } else if ($dtype=='relation') {
- $dvalue = trim(preg_replace("#[^0-9,]#", "", $dvalue));
- return $dvalue;
- }
- else if($dtype=='stepselect')
- {
- $dvalue = trim(preg_replace("#[^0-9\.]#", "", $dvalue));
- return $dvalue;
- }
- else if($dtype=='float')
- {
- if($dvalue=='')
- {
- return 0;
- }
- return GetAlabNum($dvalue);
- }
- else if($dtype=='datetime')
- {
- if($dvalue=='')
- {
- return 0;
- }
- return GetMkTime($dvalue);
- }
- else if($dtype=='checkbox')
- {
- $okvalue = '';
- if(is_array($dvalue))
- {
- $okvalue = join(',',$dvalue);
- }
- return $okvalue;
- }
- else if($dtype=="htmltext")
- {
- if($admintype=='member' || $admintype=='diy')
- {
- $dvalue = HtmlReplace($dvalue,-1);
- }
- return $dvalue;
- }
- else if($dtype=="multitext")
- {
- if($admintype=='member' || $admintype=='diy')
- {
- $dvalue = HtmlReplace($dvalue,0);
- }
- return $dvalue;
- }
- else if($dtype=="textdata")
- {
- $ipath = $cfg_cmspath."/data/textdata";
- $tpath = ceil($aid / 5000);
- if(!is_dir($cfg_basedir.$ipath))
- {
- MkdirAll($cfg_basedir.$ipath, $GLOBALS['cfg_dir_purview']);
- }
- if(!is_dir($cfg_basedir.$ipath.'/'.$tpath))
- {
- MkdirAll($cfg_basedir.$ipath.'/'.$tpath,$GLOBALS['cfg_dir_purview']);
- }
- $ipath = $ipath.'/'.$tpath;
- $filename = "{$ipath}/{$aid}-".cn_substr(md5($cfg_cookie_encode), 0, 16).".txt";
-
- //会员投稿内容安全处理
- if($admintype=='member' || $admintype=='diy')
- {
- $dvalue = HtmlReplace($dvalue, -1);
- }
- $fp = fopen($cfg_basedir.$filename,"w");
- fwrite($fp, stripslashes($dvalue));
- fclose($fp);
- CloseFtp();
- return $filename;
- }
- else if($dtype=='img' || $dtype=='imgfile')
- {
- if(preg_match("#[\\|/]uploads[\\|/]userup#", $dvalue)) return $dvalue;
- if($admintype=='diy')
- {
- $iurl = MemberUploads($fieldname, '', 0, 'image', '', -1, -1, false);
- return $iurl;
- }
- $iurl = stripslashes($dvalue);
- if(trim($iurl)=='')
- {
- return '';
- }
- $iurl = trim(str_replace($GLOBALS['cfg_basehost'],"",$iurl));
- $imgurl = "{dede:img text='' width='' height=''} ".$iurl." {/dede:img}";
- if(preg_match("/^http:\/\//i", $iurl) && $GLOBALS['cfg_isUrlOpen'])
- {
- //远程图片
- $reimgs = '';
- if($GLOBALS['cfg_isUrlOpen'])
- {
- $reimgs = GetRemoteImage($iurl,$adminid);
- if(is_array($reimgs))
- {
- if($dtype=='imgfile')
- {
- $imgurl = $reimgs[1];
- }
- else
- {
- $imgurl = "{dede:img text='' width='".$reimgs[1]."' height='".$reimgs[2]."'} ".$reimgs[0]." {/dede:img}";
- }
- }
- }
- else
- {
- if($dtype=='imgfile')
- {
- $imgurl = $iurl;
- }
- else
- {
- $imgurl = "{dede:img text='' width='' height=''} ".$iurl." {/dede:img}";
- }
- }
- }
- else if($iurl != '')
- {
- //站内图片
- $imgfile = $cfg_basedir.$iurl;
- if(is_file($imgfile))
- {
- $info = '';
- $imginfos = GetImageSize($imgfile,$info);
- if($dtype=="imgfile")
- {
- $imgurl = $iurl;
- }
- else
- {
- $imgurl = "{dede:img text='' width='".$imginfos[0]."' height='".$imginfos[1]."'} $iurl {/dede:img}";
- }
- }
- }
- return addslashes($imgurl);
- }
- else if($dtype=='addon' && $admintype=='diy')
- {
- if(preg_match("#[\\|/]uploads[\\|/]userup#", $dvalue)) return $dvalue;
- $dvalue = MemberUploads($fieldname,'', 0, 'addon', '', -1, -1, false);
- return $dvalue;
- }
- else
- {
- if($admintype=='member' || $admintype=='diy')
- {
- $dvalue = HtmlReplace($dvalue,1);
- }
- return $dvalue;
- }
- }
-
- /**
- * 获得带值的表单(编辑时用)
- *
- * @access public
- * @param object $ctag 标签
- * @param mixed $fvalue 变量值
- * @param string $admintype 会员类型
- * @param string $fieldname 变量名称
- * @return string
- */
- function GetFormItemValue($ctag, $fvalue, $admintype='admin', $fieldname='')
- {
- global $cfg_basedir;
- $fieldname = $ctag->GetName();
- $formitem = $formitem = GetSysTemplets("custom_fields_{$admintype}.htm");
- $innertext = trim($ctag->GetInnerText());
- if($innertext!='')
- {
- $formitem = $innertext;
- }
- $ftype = $ctag->GetAtt('type');
- $myformItem = '';
- if(preg_match("/select|radio|checkbox/i", $ftype))
- {
- $items = explode(',',$ctag->GetAtt('default'));
- }
- if($ftype=='select')
- {
- $myformItem = "<select name='$fieldname' style='width:150px'>";
- if(is_array($items))
- {
- foreach($items as $v)
- {
- $v = trim($v);
- if($v=='')
- {
- continue;
- }
- $myformItem.= ($fvalue==$v ? "<option value='$v' selected>$v</option>\r\n" : "<option value='$v'>$v</option>\r\n");
- }
- }
- $myformItem .= "</select>\r\n";
- $innertext = $myformItem;
- }
- else if($ctag->GetAtt("type")=='stepselect')
- {
- global $hasSetEnumJs,$cfg_cmspath;
- $cmspath = ( (empty($cfg_cmspath) || preg_match('/[/$]/', $cfg_cmspath)) ? $cfg_cmspath.'/' : $cfg_cmspath );
- $myformItem = '';
- $myformItem .= "<input type='hidden' id='hidden_{$fieldname}' name='{$fieldname}' value='{$fvalue}' />\r\n";
- $myformItem .= "<span id='span_{$fieldname}'></span>\r\n";
- $myformItem .= "<span id='span_{$fieldname}_son'></span>\r\n";
- $myformItem .= "<span id='span_{$fieldname}_sec'></span>\r\n";
- if($hasSetEnumJs != 'hasset')
- {
- $myformItem .= '<script language="javascript" type="text/javascript" src="'.$cmspath.'static/enums.js"></script>'."\r\n";
- $GLOBALS['hasSetEnumJs'] = 'hasset';
- }
- $myformItem .= "<script language='javascript' type='text/javascript' src='{$cmspath}data/enums/{$fieldname}.js'></script>\r\n";
- $myformItem .= "<script language='javascript' type='text/javascript'>MakeTopSelect('$fieldname', $fvalue);</script>\r\n";
- $formitem = str_replace('~name~', $ctag->GetAtt('itemname'), $formitem);
- $formitem = str_replace('~form~', $myformItem, $formitem);
- return $formitem;
- }
- else if($ftype=='radio')
- {
- if(is_array($items))
- {
- foreach($items as $v)
- {
- $v = trim($v);
- if($v=='') continue;
- $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");
- }
- }
- $innertext = $myformItem;
- }
-
- //checkbox
- else if($ftype=='checkbox')
- {
- $myformItem = '';
- $fvalues = explode(',',$fvalue);
- if(is_array($items))
- {
- foreach($items as $v)
- {
- $v = trim($v);
- if($v=='')
- {
- continue;
- }
- if(in_array($v,$fvalues))
- {
- $myformItem .= "<input type='checkbox' name='{$fieldname}[]' class='np' value='$v' checked='checked' />$v\r\n";
- }
- else
- {
- $myformItem .= "<input type='checkbox' name='{$fieldname}[]' class='np' value='$v' />$v\r\n";
- }
- }
- }
- $innertext = $myformItem;
- }
-
- //文本数据的特殊处理
- else if($ftype=="textdata")
- {
- if(is_file($cfg_basedir.$fvalue))
- {
- $fp = fopen($cfg_basedir.$fvalue,'r');
- $okfvalue = '';
- while(!feof($fp)){ $okfvalue .= fgets($fp,1024); }
- fclose($fp);
- }
- else
- {
- $okfvalue = '';
- }
- if($admintype=='admin')
- {
- $myformItem = GetEditor($fieldname,$okfvalue,350,'Basic','string')."\r\n <input type='hidden' name='{$fieldname}_file' value='{$fvalue}' />\r\n ";
- }
- else
- {
- $myformItem = GetEditor($fieldname,$okfvalue,350,'Member','string')."\r\n <input type='hidden' name='{$fieldname}_file' value='{$fvalue}' />\r\n ";
- }
- $innertext = $myformItem;
- }
- else if($ftype=="htmltext")
- {
- if($admintype=='admin')
- {
- $myformItem = GetEditor($fieldname,$fvalue,350,'Basic','string')."\r\n ";
- }
- else
- {
- $myformItem = GetEditor($fieldname,$fvalue,350,'Member','string')."\r\n ";
- }
- $innertext = $myformItem;
- }
- else if($ftype=="multitext")
- {
- $innertext = "<textarea name='$fieldname' id='$fieldname' style='width:90%;height:80px'>$fvalue</textarea>\r\n";
- }
- else if($ftype=="datetime")
- {
- $nowtime = GetDateTimeMk($fvalue);
- $innertext = "<input name=\"$fieldname\" value=\"$nowtime\" type=\"text\" id=\"$fieldname\" style=\"width:250px\" class=\"intxt datepicker\" />";
- }
- else if($ftype=="img")
- {
- $ndtp = new DedeTagParse();
- $ndtp->LoadSource($fvalue);
- if(!is_array($ndtp->CTags))
- {
- $ndtp->Clear();
- $fvalue = "";
- }
- else
- {
- $ntag = $ndtp->GetTag("img");
- $fvalue = trim($ntag->GetInnerText());
- }
- $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";
- }
- else if($ftype=="imgfile")
- {
- $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";
- }
- else if($ftype=="media")
- {
- $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";
- }
- else if($ftype=="addon")
- {
- $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";
- }
- else if($ftype=="int"||$ftype=="float")
- {
- $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:100px' class='intxt' value='$fvalue' /> (填写数值)\r\n";
- }
- else if($ftype=="relation") {
- $channel = ($ctag->GetAtt('channel') == "")? "1" : $ctag->GetAtt('channel');
- $innertext = "<textarea name='$fieldname' id='$fieldname' style='width:90%;height:80px'>$fvalue</textarea><br>
- <button type='button' class='btn btn-secondary btn-sm mt-2 mb-2' onclick='SelectArcList(\"form1.$fieldname\", $channel);'>选择关联内容</button>\r\n";
- if ($ctag->GetAtt('automake') == 1) {
- $innertext .= "<input type='hidden' name='automake[$fieldname]' value=1>";
- }
- $innertext .= <<<EOT
- <script>
- if(typeof SelectArcList === "undefined") {
- function SelectArcList(fname,cid) {
- var posLeft = 10;
- var posTop = 10;
- window.open("content_select_list.php?f=" + fname+"&channelid="+cid, "selArcList", "scrollbars=yes,resizable=yes,statebar=no,width=800,height=500,left=" + posLeft + ", top=" + posTop);
- }
- }
- </script>
- EOT;
- }
- else
- {
- $innertext = "<input type='text' name='$fieldname' id='$fieldname' style='width:250px' class='intxt' value='$fvalue' />\r\n";
- }
- $formitem = str_replace('~name~',$ctag->GetAtt('itemname'),$formitem);
- $formitem = str_replace('~form~',$innertext,$formitem);
- return $formitem;
- }
|