<?php
namespace imcat;
// Fields
class fldView{
// 认证str
static function mkpar($mod='',$kid=''){
global $_cbase;
$groups = glbConfig::read('groups');
$mod = $mod ? $mod : basReq::val('mod');
$mod = $mod ? $mod : $_cbase['run']['dopmod'];
$pid = $groups[$mod]['pid'];
$smod = $mod ? "&mod=$mod" : "&mod=$mod";
$skid = $kid ? "&kid=$kid" : "&kid=".basReq::val(substr($pid,0,1).'id')."";
return "$smod$skid";
}
// 认证str
static function vstr($cfg,$size){
$vstr = '';
$tmp = explode('(|)',$cfg['vtip'].'(|)');
$cfg['vtip'] = $tmp[0];
if(!empty($cfg['vmax'])) $vstr .= " maxlength='$cfg[vmax]' ";
if(!empty($cfg['vreg'])) $vstr .= " reg='$cfg[vreg]' ";
if(!empty($cfg['vtip'])) $vstr .= " tip='$cfg[vtip]' ";
if(isset($size[0])){
$vstr .= " style='width:$size[0]px'; ";
}
return array($vstr,$tmp[1]);
}
// 编辑器-格式化(um不要格式化的)
static function iedifmt($val){
global $_cbase;
$eid = empty($_cbase['sys_editor']) ? 'kind' : $_cbase['sys_editor'];
if($eid=='um'){
return $val;
}else{
return basStr::filForm($val);
}
}
// 编辑器
static function ieditor($k,$cfg,$val,$size,$vstr){
global $_cbase;
$val = comStore::revSaveDir($val,1);
$item = ''; $smk = self::mkpar();
$sys_editor = $_cbase['sys_editor'];
$eid = empty($sys_editor) ? 'kind' : $sys_editor;
echo basJscss::imp(PATH_BASE."?editor-api_$eid&eid=$eid$smk",'','js');
$bsbar = strstr(@$cfg['fmexstr'],'full') ? 'full' : 'base';
$item = strstr(@$cfg['fmexstr'],'exbar') ? "<div id='fm_{$k}_bar' class='edt_bar'></div>" : '';
if(empty($size[0])) $size[0] = '480'; if(empty($size[1])) $size[1] = '240';
$style = "style='width:{$size[0]}px;height:{$size[1]}px;'";
if($eid=='um'){
$item .= basJscss::imp('/edt_um/themes/default/css/umeditor.css','vendui');
$item .= "<textarea id='fm[$k]' name='fm[$k]' style='display:none;' $style></textarea>\n";
$item .= "<script type='text/plain' id='fm_{$k}_' name='fm[$k]' $style>".$val."</script>\n";
}else{
$val = ($eid=='kind' && empty($val)) ? "<p> </p>" : $val;
$item .= "<textarea id='fm_{$k}_' name='fm[$k]' $style>".$val."</textarea>\n";
}
$item .= basJscss::jscode("var editor_fm_{$k}_; $().ready(function(){edt_Init('fm[$k]','$bsbar',$size[0],$size[1]);});\n");
return $item;
}
// 日期时间
static function idatetm($k,$cfg,$val,$size,$vstr,$iinp){
$item = '';
echo basJscss::imp('/My97DatePicker/WdatePicker.js','vendui');
$fmt1 = empty($cfg['fmexstr']) ? 'Y-m-d' : $cfg['fmexstr'];
$fmt2 = empty($fmt1) ? '' : ",dateFmt:'".str_replace(array('Y','m','d','H','i','s',),array('yyyy','MM','dd','HH','mm','ss',),$fmt1)."'";
$val = empty($val) ? '' : (is_numeric($val) ? date($fmt1,$val) : $val);
$iinp = "<input id='fm[$k]' name='fm[$k]' type='text' value='$val' class='txt' $vstr />";
$item = "$iinp<span class='fldicon fdate' onClick=\"WdatePicker({el:'fm[$k]'$fmt2})\" /></span>";
return $item;
}
// 类别pop选择
static function iwinpop($k,$cfg,$val,$size,$vreg){
global $_cbase;
$item = '';
$_md = empty($cfg['fmexstr']) ? 'china' : $cfg['fmexstr'];
$_w = empty($size[0]) ? 420 : $size[0];
$_n = empty($size[1]) ? 1 : $size[1];
$_cfg = empty($cfg['cfgs']) ? '' : ",'{".$cfg['cfgs']."}'";
$item = "<span id='fm_{$k}__pop'>$vreg</span>";
$_cbase['run']['jtype_mods'] .= ",$_md";
$_cbase['run']['jtype_init'] .= "var fm_{$k}__obj; popInit('fm[{$k}]','$_md',$_w,$_n,'$val'$_cfg);\n";
return $item;
}
// file
static function ifile($k,$cfg,$val,$size,$vstr,$mod='',$kid=''){
global $_cbase;
$val = comStore::revSaveDir($val);
$item = ''; $smk = self::mkpar($mod,$kid);
$ticon = comFiles::getTIcon($val);
$id = $jsAct = $simg = '';
if($ticon['icon']=='pic'){
$id = $k.'_'.basename($val); $id = str_replace('.','___',str_replace('-','_',$id));
$jsAct = " onmouseover=\"$('#$id').removeClass('idHidden');$('#$id').addClass('idShow');\" onmouseout=\"$('#$id').removeClass('idShow');$('#$id').addClass('idHidden');\" ";
$simg = "<br><span class='idHidden' id='$id'><img src='$val' onload='imgShow(this,360,240)' border='0' /></span>";
}
$icjs = self::ifpcjs();
$ijs = $icjs ? $_cbase['run']['pm_upsize1'] : '';
$vstr = str_replace('fix:uri', 'str:0-255', $vstr);
$item .= "<input id='fm_{$k}_' name='fm[{$k}]' type='text' value='$val' class='file' $vstr $jsAct>";
$item .= self::ifpinp($k,$smk).$simg.$icjs;
$item .= basJscss::jscode("$(function(){ $ijs;fup_jqui('fm_{$k}_',1);})");
return $item;
}
static function ifpinp($k,$smk,$multi=''){
$clear = $multi ? "mpic_clear('fm_{$k}_');" : "$('#fm_{$k}_').val('');";
$item = "<input type='file' id='fm_{$k}_f' name='fm_{$k}_files' $multi style='display:none;'>";
$item .= "<input type='button' value='".basLang::show('admin.fv_upload')."' id='fm_{$k}_b'>";
$item .= "<input type='button' value='".basLang::show('admin.fv_view')."' onclick=\"winOpen('".PATH_BASE."?file-fview&fid=fm_{$k}_$smk','".basLang::show('admin.fv_vfiles')."',720,560)\">";
$item .= "<input type='button' value='".basLang::show('admin.fv_clear')."' onClick=\"$clear\">";
return $item;
}
static function ifpcjs(){
global $_cbase;
if(!empty($_cbase['run']['pm_upsize1'])){
return '';
}
// perm
$user = user(array('Admin','Member'));
$ucfg = usrPerm::pmUpload($user); // allowFiles => $ucfg['uptypes'],
$upsize1 = $ucfg['upsize1']=='(supper)'?120123:$ucfg['upsize1'];
$_cbase['run']['pm_upsize1'] = "_cbase.run.pm_upsize1='$upsize1'; ";
// js/css # /jqui/jquery-fileupload.css
$item = basJscss::imp("/~base/cssjs/multpic.js");
$item .= basJscss::imp("/jqui/jquery-ui.min.js",'vendui');
$item .= basJscss::imp("/jqui/jquery-fileupload.js",'vendui');
return $item;
}
// pics
static function ipics($k,$cfg,$val,$size,$vstr,$mod='',$kid=''){
global $_cbase;
$val = comStore::revSaveDir($val);
$cfg['cfgs'] = empty($cfg['cfgs']) ? '' : basElm::arr2text($cfg['cfgs'],';','|');
$item = ''; $smk = self::mkpar($mod,$kid);
$icjs = self::ifpcjs();
$ijs = $icjs ? $_cbase['run']['pm_upsize1'] : '';
$item .= "<div id='fm_{$k}_out' class='mpic_out'>";
$item .= "<div id='fm_{$k}_show'>{$cfg['cfgs']}</div>";
$item .= "<div id='fm_{$k}_tarea' class='clear'><textarea name='fm[$k]' id='fm_{$k}_' style='display:none;'>$val</textarea></div>";
$item .= self::ifpinp($k,$smk,'multiple');
$item .= "</div>$icjs";
$item .= basJscss::jscode("$(function(){ $ijs;mpic_minit('fm_{$k}_');fup_jqui('fm_{$k}_',99);})");
return $item;
}
static function ipick($k,$cfg,$val,$size,$vstr,$mod='',$kid=''){
$pmod = empty($size[0]) ? '' : $size[0];
$pcnt = empty($size[1]) ? 1 : intval($size[1]);
$para = "type='checkbox' class='rdcb' checked"; $item = '';
// 前面多选隐藏空项目
$ipre = $pcnt>1 ? "<input id='fm[{$k}][]' type='hidden' name='fm[{$k}]' value=''>\n" : '';
if($pcnt>1){
if($val){
$arr = explode(',',$val);
foreach($arr as $v){
$title = dopFunc::vgetTitle($pmod,$v);
$item .= "<span class='ph5'><input name='fm[{$k}][]' onClick='pickMul(this,1)' value='$v' $para />$title</span>";
}
} // fm[lpid] , fm_lpid_refname
$item = "<div id='fm_{$k}_refname'>$item</div>";
}else{
$title = dopFunc::vgetTitle($pmod,$val);
$item = "<input id='fm[{$k}]' type='hidden' name='fm[{$k}]' value='$val'>\n";
$item = "$item<input id='fm_{$k}_refname' name='fm[{$k}_refname]' value='$title'>";
}
$item .= "<input name='fm_{$k}_modpicks' id='fm_{$k}_modpicks' type='hidden' value='$pmod'>";
$item .= "<input type='button' value='".basLang::show('admin.fv_pick')."' onclick=\"pickOpen('fm_{$k}_modpicks','','fm[{$k}]','fm_{$k}_refname',$pcnt)\" class='btn'>";
// 后面单选清除按钮
$ifix = $pcnt==1 ? "<input type='button' value='".basLang::show('admin.fv_clear')."' onclick=\"pickOnc('fm[{$k}]','fm_{$k}_refname')\" class='btn'>" : '';
// pmod,cnt, $ptitle = dopFunc::vgetTitle($pmod,$val);
return "$ipre{$item}$ifix";
}
// fields-公共函数
// form: item,一项的内容。
static function fitem($k,$cfg,$vals=array()){
global $_cbase;
$_groups = glbConfig::read('groups');
$size = fldCfgs::getSizeArray($cfg);
$tmp = self::vstr($cfg,$size);
$vstr = $tmp[0]; $vmsg = $tmp[1]; $item = '';
$val = isset($vals[$k]) ? self::iedifmt($vals[$k]) : (isset($cfg['dbdef']) ? $cfg['dbdef'] : '');
if($val==='' && !empty($cfg['dbdef'])) $val = $cfg['dbdef'];
$iinp = "<input id='fm[$k]' name='fm[$k]' type='text' value='$val' class='txt' $vstr />";
$ihid = "<input id='fm[$k]' name='fm[$k]' type='hidden' value='$val' />";
$extra = @$cfg['fmextra']; //参考dopBase::chkFields()
if($extra=='editor'){ //编辑器
$item = self::ieditor($k,$cfg,$val,$size,$vstr);
}elseif($extra=='datetm'){ //日期
$item = self::idatetm($k,$cfg,$val,$size,$vstr,$iinp);
}elseif($extra=='color'){ //颜色设置
$_fid = empty($cfg['fmexstr']) ? 'title' : $cfg['fmexstr'];
$item = "$ihid<span class='fldicon fcolor' onClick=\"colorPick('fm[$k]','fm[$_fid]')\"> </span>";
$item .= "<span id='fm[$k]_pop' class='color_out' style='display:none'></span>";
if(strlen($val)>2) { $item .= basJscss::jscode("colorSet('$val','$_fid')"); }
}elseif($extra=='map'){ //地图
$sys_map = $_cbase['sys_map'];
$mpid = empty($sys_map) ? 'baidu' : $sys_map;
$item = "$iinp<span class='fldicon fmap' onClick=\"mapPick('$mpid','fm[$k]');\"> </span>";
}elseif($extra=='repeat'){ //检查重名
$tmpa = explode(',',(empty($cfg['cfgs'])?'':$cfg['cfgs']).','); // news.title
$tmpa[0] || $tmpa[0] = 'news';
$tmpa[1] || $tmpa[1] = 'title';
$vk = glbDBExt::getTable($tmpa[0],'kid');
$vv = req($vk);
$act = "onclick=\"repeatCheck('$tmpa[0]','$tmpa[1]','$k','$vv');\""; // ".str_replace(',',"','",@$cfg['cfgs'])."
$item = "$ihid <input type='button' value='".basLang::show('admin.fv_chkrep')."' id='fm_repeat_$k' $act class='btn'> ";
}elseif($extra=='winpop'){ //winpop
$item = self::iwinpop($k,$cfg,$val,$size,@$cfg['vreg']);
}elseif($extra=='pics'){ //pics
$item = self::ipics($k,$cfg,$val,$size,$vstr);
}elseif($extra=='pick'){ //pick
$item = self::ipick($k,$cfg,$val,$size,$vstr);
}elseif($cfg['type']=='hidden'){ //隐藏
$item = $ihid;
}elseif($cfg['type']=='passwd'){
$item = "<input id='fm[$k]' name='fm[$k]' type='password' autocomplete='off' class='txt' $vstr />";
}elseif($cfg['type']=='select' && isset($_groups[@$cfg['cfgs']])){ //类别选择
$item = comTypes::getOpt($cfg['cfgs'],$val);
$item = "<select id='fm[$k]' name='fm[$k]' type='text' $vstr >$item</select>";
}elseif($cfg['type']=='select'){
$item = "<select id='fm[$k]' name='fm[$k]' type='text' $vstr >";
$item .= basElm::setOption(@$cfg['cfgs'],$val)."</select>";
}elseif($cfg['type']=='cbox'){
$item = basElm:: setCBox($k,$cfg['cfgs'],$val);
}elseif($cfg['type']=='radio'){
$item = basElm::setRadio($k,$cfg['cfgs'],$val);
}elseif($cfg['type']=='text'){
$rows = empty($size[1]) ? '5' : $size[1]; //wrap='off'
$item = "<textarea id='fm[$k]' name='fm[$k]' rows='$rows' class='txt' $vstr/>".$val."</textarea>";
}elseif($cfg['type']=='file'){
$item = self::ifile($k,$cfg,$val,$size,$vstr);
}else{
$item = $iinp;
}
$item .= $vmsg;
if(empty($cfg['fmline']) && !empty($cfg['fmtitle'])) $item = $cfg['title'].$item;
return $item;
}
// form: (增加/修改):字段列表
// 处理分组等。
static function lists($mod,$vals=array(),$catid='',$ufields=array(),$skips=array()){
global $_cbase;
if(!empty($ufields)){
$mfields = $ufields;
}elseif($catid){
$ccfg = glbConfig::read($mod,'_c');
if(empty($ccfg[$catid])) return;
$mfields = $ccfg[$catid];
}else{
${"_$mod"} = glbConfig::read($mod);
$mfields = ${"_$mod"}['f'];
}
$skip = empty($skips) ? array('0') : $skips;
$_cbase['run']['jtype_mods'] = '';
$_cbase['run']['jtype_init'] = '';
foreach($mfields as $k=>$v){
if($v['type']=='parts'){ //(分段字段...)
echo "<tr><th>$v[title]</th><th class='tr'>$v[vtip]</th></tr>\n";
continue;
}elseif(!in_array($k,$skip)){
$item = self::fitem($k,$v,$vals);
$item = self::fnext($mfields,$k,$vals,$item,$skip);
glbHtml::fmae_row($v['title'],$item);
}
}
if(!empty($_cbase['run']['jtype_mods'])){
$jpath = PATH_BASE."?ajax-comjs&act=jsTypes&mod=".$_cbase['run']['jtype_mods']."";
echo basJscss::jscode("jQuery.getScript('$jpath',function(){\n".$_cbase['run']['jtype_init']."})");
}
}
// form: next field
static function fnext($mfields,$k,$vals,$item,&$skip){
$nkey = basArray::nextKey($mfields,$k);
if($nkey && (empty($mfields[$nkey]['fmline']) || $mfields[$nkey]['type']=='hidden')){
$item .= "\n ".self::fitem($nkey,$mfields[$nkey],$vals);
$skip[] = $nkey;
return self::fnext($mfields,$nkey,$vals,$item,$skip);
}else{
return $item;
}
}
// form: relat :
// ::relat("relpb,fm[catid],fm[brand]","fm[xinghao],$mod,$did")
// ::relat("fm[grade]","fm[ftype],$mod,$uname,fm[grade]");
static function relat($relat,$exchg=''){
$jcmd = "relInit('".str_replace(",","','",$relat)."');";
$jchg = "relCatid('".str_replace(",","','",$exchg)."');";
if(strpos($relat,',')){ //relat+fields
$tmpa = explode(',',$relat);
$jpath = PATH_BASE."?ajax-comjs&act=jsRelat&mod=$tmpa[0]";
$jstr = "\n $jcmd $jchg \$(jsElm.jeID('{$tmpa[1]}')).change(function(){ $jcmd $jchg });";
$jstr = "jQuery.getScript('$jpath',function(){ {$jstr} })";
}else{ //fields
$jstr = "\n $jchg \$(jsElm.jeID('$relat')).change(function(){ $jchg });";
}
echo basJscss::jscode($jstr);
}
}
//jQuery.getScript('/index.php?ajax-comjs&act=jsRelat&mod=relyc',function(){
//relInit('relyc','fm[ygrade]','fm[course]');
//$(jsElm.jeID('fm[ygrade]')).change(function(){ relInit('relyc','fm[ygrade]','fm[course]'); });
//});