<?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) 2007 - 2020, DesDev, Inc.
 * @license        http://help.dedecms.com/usersguide/license.html
 * @link           http://www.dedecms.com
 */
 
/**
 *  获得一个附加表单(发布时用)
 *
 * @access    public
 * @param     object  $ctag  标签
 * @param     string  $admintype  管理员类型
 * @return    string
 */
function GetFormItem($ctag, $admintype='admin')
{
    global $dsql;
    $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\"  />";
        $innertext .= "   <script language=\"javascript\" type=\"text/javascript\">
                    Calendar.setup({
                        inputField     :    \"$fieldname\",
                        ifFormat       :    \"%Y-%m-%d %H:%M\",
                        showsTime      :    true,
                        timeFormat     :    \"24\"
                    });
                 </script>";
    }
    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
    {
        $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=='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,$dsql;
    $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\" />";
        $innertext .= "   <script language=\"javascript\" type=\"text/javascript\">
                    Calendar.setup({
                        inputField     :    \"$fieldname\",
                        ifFormat       :    \"%Y-%m-%d %H:%M\",
                        showsTime      :    true,
                        timeFormat     :    \"24\"
                    });
                 </script>";
    }
    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
    {
        $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;
}