<?php
if (!defined('DEDEINC')) exit ('dedebiz');
/**
 * 系统核心函数
 * @version        $id:customfields.func.php 2 20:50 2010年7月7日 tianya $
 * @package        DedeBIZ.Libraries
 * @copyright      Copyright (c) 2022 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' class='form-control admin-input-sm'>";
        foreach ($items as $v) {
            $v = trim($v);
            if ($v != '') {
                $myformItem .= "<option value='$v'>$v</option>";
            }
        }
        $myformItem .= "</select>";
        $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'>";
        $myformItem .= "<span id='span_{$fieldname}'></span>";
        $myformItem .= "<span id='span_{$fieldname}_son'></span>";
        $myformItem .= "<span id='span_{$fieldname}_sec'></span>";
        if ($hasSetEnumJs != 'hasset') {
            $myformItem .= '<script src="'.$cmspath.'static/web/js/enums.js"></script>'."";
            $GLOBALS['hasSetEnumJs'] = 'hasset';
        }
        $myformItem .= "<script>
        var em_{$fieldname}s = [];
        fetch('{$cmspath}static/enums/{$fieldname}.json').then((resp)=>resp.json()).then((d)=>{
            Object.entries(d).forEach(v=>{
                em_{$fieldname}s[parseFloat(v[0])]= v[1];
            });
            MakeTopSelect('$fieldname', 0);
        })
        </script>";
        $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 ? "<div class='form-check form-check-inline'><label class='form-check-label'><input type='radio' name='$fieldname' class='form-check-input' value='$v' checked> $v</label></div>" : "<div class='form-check form-check-inline'><label class='form-check-label'><input type='radio' name='$fieldname' class='form-check-input' value='$v'> $v</label></div>");
                $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 .= "<div class='form-check form-check-inline'><label class='form-check-label'><input type='checkbox' name='{$fieldname}[]' class='form-check-input' value='$v'> $v</label></div>";
                } else {
                    $myformItem .= "<div class='form-check form-check-inline'><label class='form-check-label'><input type='checkbox' name='{$fieldname}[]' class='form-check-input' value='$v'> $v</label></div>";
                }
            }
        }
        $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, 360, 'Basic', 'string');
        } else if ($admintype == 'diy') {
            $innertext = GetEditor($fieldname, $dfvalue, 360, 'Diy', 'string');
        } else {
            $innertext = GetEditor($fieldname, $dfvalue, 360, 'Member', 'string');
        }
    } else if ($fieldType == "multitext") {
        $innertext = "<textarea name='$fieldname' id='$fieldname' class='form-control admin-textarea-sm'></textarea>";
    } else if ($fieldType == "datetime") {
        $nowtime = GetDateTimeMk(time());
        $innertext = "<input type=\"text\" name=\"$fieldname\" value=\"$nowtime\" id=\"$fieldname\" class=\"form-control admin-input-lg\">";
    } else if ($fieldType == 'img' || $fieldType == 'imgfile') {
        $fname = defined('DEDEADMIN')? 'form1' : 'addcontent';
        $innertext = "<input type='text' name='$fieldname' id='$fieldname' class='form-control admin-input-lg'> <input type='button' name='".$fieldname."_bt' class='btn btn-success btn-sm' value='选择' onClick=\"SelectImage('$fname.$fieldname','big')\">";
    } else if ($fieldType == 'media') {
        $innertext = "<input type='text' name='$fieldname' id='$fieldname' class='form-control admin-input-lg' placeholder='请输入多媒体文件地址'>";
    } else if ($fieldType == 'addon') {
        $innertext = "<input type='text' name='$fieldname' id='$fieldname' class='form-control admin-input-lg' placeholder='请输入附件地址'>";
    } else if ($fieldType == 'int' || $fieldType == 'float') {
        $dfvalue = ($ctag->GetAtt('default') != '' ? $ctag->GetAtt('default') : '0');
        $innertext = "<input type='text' name='$fieldname' id='$fieldname' class='form-control admin-input-xs' value='$dfvalue'>";
    } 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' class='form-control admin-textarea-sm'>$dfvalue</textarea><br><button type='button' class='btn btn-success btn-sm' onclick='SelectArcList(\"form1.$fieldname\", $channel);'>选择关联文档</button>";
        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' class='form-control admin-input-lg' value='$dfvalue'>
        ";
    }
    $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("#[\\|/]static[\\|/]userup#", $dvalue)) return addslashes($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|https):\/\//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 ($admintype == 'diy') {
            return addslashes($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' class='form-control admin-input-sm'>";
        if (is_array($items)) {
            foreach ($items as $v) {
                $v = trim($v);
                if ($v == '') {
                    continue;
                }
                $myformItem .= ($fvalue == $v ? "<option value='$v' selected>$v</option>" : "<option value='$v'>$v</option>");
            }
        }
        $myformItem .= "</select>";
        $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}'>";
        $myformItem .= "<span id='span_{$fieldname}'></span>";
        $myformItem .= "<span id='span_{$fieldname}_son'></span>";
        $myformItem .= "<span id='span_{$fieldname}_sec'></span>";
        if ($hasSetEnumJs != 'hasset') {
            $myformItem .= '<script src="'.$cmspath.'static/web/js/enums.js"></script>'."";
            $GLOBALS['hasSetEnumJs'] = 'hasset';
        }
        $myformItem .= "<script>
        var em_{$fieldname}s = [];
        fetch('{$cmspath}static/enums/{$fieldname}.json').then((resp)=>resp.json()).then((d)=>{
            Object.entries(d).forEach(v=>{
                em_{$fieldname}s[parseFloat(v[0])]= v[1];
            });
            MakeTopSelect('$fieldname', $fvalue);
        })
        </script>";
        $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 ? "<div class='form-check form-check-inline'><label class='form-check-label'><input type='radio' name='$fieldname' class='form-check-input' value='$v' checked='checked'> $v</label></div>" : "<div class='form-check form-check-inline'><label class='form-check-label'><input type='radio' name='$fieldname' class='form-check-input' value='$v'> $v</label></div>");
            }
        }
        $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 .= "<div class='form-check form-check-inline'><label class='form-check-label'><input type='checkbox' name='{$fieldname}[]' class='form-check-input' value='$v' checked='checked'> $v</label></div>";
                } else {
                    $myformItem .= "<div class='form-check form-check-inline'><label class='form-check-label'><input type='checkbox' name='{$fieldname}[]' class='form-check-input' value='$v'> $v</label></div>";
                }
            }
        }
        $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, 360, 'Basic', 'string')." <input type='hidden' name='{$fieldname}_file' value='{$fvalue}'> ";
        } else {
            $myformItem = GetEditor($fieldname, $okfvalue, 360, 'Member', 'string')." <input type='hidden' name='{$fieldname}_file' value='{$fvalue}'> ";
        }
        $innertext = $myformItem;
    } else if ($ftype == "htmltext") {
        if ($admintype == 'admin') {
            $myformItem = GetEditor($fieldname, $fvalue, 360, 'Basic', 'string')." ";
        } else {
            $myformItem = GetEditor($fieldname, $fvalue, 360, 'Member', 'string')." ";
        }
        $innertext = $myformItem;
    } else if ($ftype == "multitext") {
        $innertext = "<textarea name='$fieldname' id='$fieldname' class='form-control admin-textarea-sm'>$fvalue</textarea>";
    } else if ($ftype == "datetime") {
        $nowtime = GetDateTimeMk($fvalue);
        $innertext = "<input type=\"text\" name=\"$fieldname\" value=\"$nowtime\" id=\"$fieldname\" class=\"form-control admin-input-lg\">";
    } else if ($ftype == "img") {
        $ndtp = new DedeTagParse();
        $ndtp->LoadSource($fvalue);
        if (!is_array($ndtp->CTags)) {
            $ndtp->Clear();
            $fvalue =  "";
        } else {
            $ntag = $ndtp->GetTag("img");
            if (!empty($ntag)) {
                $fvalue = trim($ntag->GetInnerText());
            }
        }
        $fname = defined('DEDEADMIN')? 'form1' : 'addcontent';
        $innertext = "<input type='text' name='$fieldname' value='$fvalue' id='$fieldname' class='form-control admin-input-lg'> <input type='button' name='".$fieldname."_bt' class='btn btn-success btn-sm' value='选择' onClick=\"SelectImage('$fname.$fieldname','big')\">";
    } else if ($ftype == "imgfile") {
        $fname = defined('DEDEADMIN')? 'form1' : 'addcontent';
        $innertext = "<input type='text' name='$fieldname' value='$fvalue' id='$fieldname' class='form-control admin-input-lg'> <input type='button' name='".$fieldname."_bt' class='btn btn-success btn-sm' value='选择' onClick=\"SelectImage('$fname.$fieldname','big')\">";
    } else if ($ftype == "media") {
        $fname = defined('DEDEADMIN')? 'form1' : 'addcontent';
        $selectStr = defined('DEDEADMIN')? "<input type='button'  name='".$fieldname."_bt' class='btn btn-success btn-sm' value='选择' onClick=\"SelectMedia('$fname.$fieldname')\">" : '';
        $innertext = "<input type='text' name='$fieldname' value='$fvalue' id='$fieldname' class='form-control admin-input-lg'> $selectStr";
    } else if ($ftype == "addon") {
        $fname = defined('DEDEADMIN')? 'form1' : 'addcontent';
        $selectStr = defined('DEDEADMIN')? "<input type='button' name='".$fieldname."_bt' class='btn btn-success btn-sm' value='选择' onClick=\"SelectSoft('$fname.$fieldname')\">" : "";
        $innertext = "<input type='text' name='$fieldname' id='$fieldname' value='$fvalue' class='form-control admin-input-lg'> $selectStr";
    } else if ($ftype == "int" || $ftype == "float") {
        $innertext = "<input type='text' name='$fieldname' id='$fieldname' class='form-control admin-input-xs' value='$fvalue'>";
    } else if ($ftype == "relation") {
        $fname = defined('DEDEADMIN')? 'form1' : 'addcontent';
        $channel = ($ctag->GetAtt('channel') == "") ? "1" : $ctag->GetAtt('channel');
        $innertext = "<textarea name='$fieldname' id='$fieldname' class='form-control admin-textarea-sm'>$fvalue</textarea><br><button type='button' class='btn btn-success btn-sm' onclick='SelectArcList(\"$fname.$fieldname\", $channel);'>选择关联文档</button>";
        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' class='form-control admin-input-lg' value='$fvalue'>";
    }
    $formitem = str_replace('~name~', $ctag->GetAtt('itemname'), $formitem);
    $formitem = str_replace('~form~', $innertext, $formitem);
    return $formitem;
}
?>