<?php
namespace imcat;

/*

*/
// Cell 类
class vopCell{    

    
// Array ( [exp_s01] => Array ( [title] => 手机类型 [val] => 3G [org] => net3g ) ...
    
static function exFields($mod$catid$vars=''){ //
        
$re = array();
        
$ccfg glbConfig::read($mod'_c'); 
        if(empty(
$ccfg[$catid])) return array();
        
$mfields $ccfg[$catid]; 
        if(empty(
$vars)) return $mfields;
        foreach(
$mfields as $k=>$v){ 
            
$vre self::optArray($v$vars[$k]);
            
$vre = empty($vre) ? $vars[$k] : $vre;
            
$re[$k] = array(
                
'title' => $v['title'],
                
'val' => $vre,
                
'org' => $vars[$k],
            );
        }
        return 
$re;
    }
    
    static function 
optItems($vals$tpl=''){
        
$re ''$tpl || $tpl="<span class='itm-(k)'>(v)</span>";
        foreach(
$vals as $k=>$v){ 
            
$re .= str_replace(array('(k)','(v)'), array($k,$v), $tpl);
        }
        return 
$re;
    }
    
    
// fc : modid=brand,china / 字段配置 / mod.field 
    // hn,gd -=> array('hn'=>'湖南','gd'=>'广东');
    
static function optArray($fc$val=''$color=1){
        global 
$_cbase
        
$sc '333,'.$_cbase['ucfg']['ctab'].',999'$ac explode(',',$sc); 
        if(empty(
$val)) return array(); 
        
$arr basElm::text2arr($fc);
        
$va explode(','str_replace('+',',',$val)); 
        foreach(
$va as $k1){
            if(empty(
$k1)) continue;
            
$vre[$k1] = empty($arr[$k1]) ? $k1 $arr[$k1];
        } 
        if(
$color && count($arr)<count($ac)){
            
$no 0$na = array();
            foreach(
$arr as $k2=>$v2){
                
$na[$k2] = $ac[$no];
                
$no++;
            }
            foreach(
$vre as $k3=>$v3){
                
$vre[$k3] = "<span style='color:#".@$na[$k3]."'>".$v3."</span>";
            }
        }
        return 
$vre;
    }
    
    
// <a {php vOpen('nrem',$did); }>发布评论</a>
    // "<a href='/url' ".xxx::vOpen().">Update-Init</a>"
    
static function vOpen($mod=0$pid=''$title=''$w=0$h=0){
        
$w || $w 500$h || $h 400;
        
$return 1;
        if(empty(
$mod)){
            
$url 'this';
        }elseif(
substr($mod,0,1)=='/'){
            
$url "'$mod'";
        }else{
            
$return 0;
            if(!
$title){
                
$mcfg glbConfig::read($mod);
                
$title basLang::show('core.pub_title').'-'.$mcfg['title'];
            }
            
$scfile file_exists(DIR_ROOT."/plus/coms/$mod.php") ? $mod 'add_coms';
            
$url "'".PATH_ROOT."/plus/coms/$scfile.php?mod=$mod&pid=$pid"."'";
        }
        
$str "onclick=\"return winOpen($url,'$title',$w,$h);\"";
        if(
$return) return $str;
        else echo 
$str;
    }
    
    
// $len: 24
    // $paras['color'] :
    
static function cTitle($val=''$len=24$paras=array()){
        
$len is_numeric($len) ? $len 24;
        
$len = empty($len) ? 24 $len;
        
$val basStr::filTitle($val);
        
$val basStr::cutWidth($val$len);
        if(!empty(
$paras['color'])){
            
$color "#{$paras['color']}";
            
$val "<span style='color:$color'>$val</span>";
        }
        return 
$val;
    }
    
    
// 还原cPic路径,处理无图,处理缩略图
    // $def=demo_nop300x200.jpg
    // $resize=160x120
    
static function cPic($val$def=''$resize=0){
        
$scfg glbConfig::read('store''ex');
        foreach(
$scfg['types'] as $tk=>$row){ 
            if(!empty(
$row['cut_ures']) && strpos($val,$row['spre'])===0){
                return 
$row['cut_ures']."?img=$val&size=$resize&def=$def";
            }
        }
        if(empty(
$val) && $def) return PATH_STATIC."/icons/basic/$def";
        
// 不需要缩略图直接返回
        
if(empty($resize)) return vopUrl::root($val);
        if(!
strpos($resize,'x')){ // demo_120x90.jpg,1
            
preg_match("/(\d{2,3}x\d{2,3})\./",$def,$m); // 160x120
            
$resize = empty($m[1]) ? $m[1]; 
        } 
        
// 参数错误/已经是缩略图:直接返回
        
if(empty($resize) || strpos($val,"-$resize.")>0) return vopUrl::root($val);
        
$scfg read('store.resize','ex'); 
        if(
strpos($scfg,$resize)>0){
            
$val comImage::thpic($val,$resize); // 处理缩略图
        
// else{} // 缩略图规格不正确
        
$val vopUrl::root($val);
        return 
$val;
    }
    
    
//媒体
    
static function cMedia($val=''){
        if(
strpos($val,'/media}')){
            
$val vopMedia::repShow($val);
        }
        return 
$val;
    }
    
//Page -- js处理?
    
static function cPage($val=''){
        return 
$val;
    }
    
//Html (??Link,Cut)
    
static function cHtml($val$paras=''$vtype='ptxt'){
        global 
$_cbase;
        
$paras || $paras ',root-media-page,';
        
// 通用处理
        
if(strpos($paras,'root')) $val vopUrl::root($val);
        if(
strpos($paras,'media')) $val self::cMedia($val);
        
#if(strpos($paras,'page')) $val = self::cPage($val);
        
if($vtype=='cmd'){ // comm-markdown
            
$val extMkdown::pdorg($val);
        }elseif(
$vtype=='ctxt'){
            
$val nl2br(trim($val)); //self::cText($val, 0, 1, );
        
}else{ // html:处理mob特性
            
$mobtpl strpos($_cbase['tpl']['mob_tpls'],$_cbase['tpl']['vdir']);
            if(
$mobtpl && basEnv::isMobile()) $val basStr::filHWap($val);
        } 
        return 
$val;
    }
    
    
//Text (val,len,nobr,??Link,Cut)
    
static function cText($val$len=0$nobr=0){
        if(
is_array($val)){
            foreach(
$val as $v){
                if(!empty(
$v)){
                    
$val $v;
                    break;
                }
            }
        }
        if(
is_array($val)){ return ''; }
        
$len = empty($len) ? intval($len);
        
$val basStr::filHText($val,$len);
        if(!empty(
$nobr)){ $val nl2br($val);}
        return 
$val;
    }
    
    
// full: min,full,dm,auto,
    // null: -
    
static function cTime($val=''$fmt='auto'$null=''){
        
$val intval($val);
        if(empty(
$val)){
            return empty(
$null) ? '-' $null;
        }
        
$stamp $_SERVER["REQUEST_TIME"];
        if(
$fmt=='auto' && $stamp-$val<86400){
            
$fmt 'H:i:s';
        }elseif(
$fmt=='auto' && $stamp-$val<604800){ // 7*86400
            
$fmt 'm-d H:i';
        }elseif(
$fmt=='auto'){
            
$fmt 'Y-m-d';
        }
        
$fmt=='d' && $fmt 'Y-m-d'
        
$fmt=='min' && $fmt 'Y-m-d H:i';
        
$fmt=='full' && $fmt 'Y-m-d H:i:s';
        
$fmt=='dm' && $fmt 'm-d H:i';
        return 
date($fmt,$val);
    }
    
    
// split: [0]: 默认自动彩色显示 
    //        [,]/[1]: 单个>0数字,多个用`,/+`号分开,或自定义个分割符变量(如$split)也可
    //        [tpl]: 默认模版显示,可自行写css.class着色
    //        [<span class='itm-(k)'>(v)</span>]: 自定模版显示,可自行写css.class着色
    
static function cOpt($val=''$mod=''$split=0$null=''){
        if(empty(
$val)){ return empty($null) ? '' $null; }
        
$color = empty($split);
        
$arr self::optArray($mod$val$color);
        
$rea '';
        if(!empty(
$arr)){
            if(empty(
$split)){
                
$rea implode("\n",$arr);
            }elseif(
strlen($split)<3){ //  , ||  
                
$split is_numeric($split) ? ',' $split;
                
$rea implode($split,$arr);
            }else{ 
//  tpl  
                
$split strpos($split,'</') ? $split '';
                
$rea self::optItems($arr,$split); 
            }
        }
        
$re = empty($rea) ? $null $rea;
        return 
$re;
    }
    
    
// show
    
static function cShow($val$vop=NULL){
        global 
$_cbase;
        
$re = empty($vop->$val) ? '' $vop->$val;
        
$re || $re $_cbase[$val]; 
        
$re || $re "{\$$val}";
        return 
$re;
    }
    
    
// js动态显示字段
    
static function jsFields($a){
        
$_groups glbConfig::read('groups');
        
$db glbDBObj::dbObj();
        
$stamp $_SERVER["REQUEST_TIME"];
        
//[demo:2013-cm-a201:click] => 535,add1,uclick1
        //[demo:2013-cm-a201:etime] => 1387418573
        //[demo:2013-cm-abcd:etime] => 1387418573
        
$b = array();
        foreach(
$a as $k=>$v){
            
$t explode(':',$k);
            if(!isset(
$_groups[$t[0]]) || empty($t[2])) continue;
            
$j $t[0].':'.$t[1];    
            
$b[$j][$t[2]] = $v;
        }
        
//[demo:2013-cm-a201] => Array
                //[click] => 535,add1,uclick1
                //[etime] => 1387418573
        //[demo:2013-cm-abcd] => Array
                //[etime] => 1387418573
        
$re ''$ext '';
        
$cfgc read('coms.click''sy'); 
        foreach(
$b as $k2=>$v2){
            
$t explode(':',$k2);
            
$tmp glbDBExt::getTable($t[0],'arr');
            
$tab $tmp[0]; $kid $tmp[1];
            
$key basStr::filKey($t[1],'-_.');
            
$cola = array(); 
            foreach(
$v2 as $k3=>$v3){
                
$k3 basStr::filKey($k3);
                
$cola[] = $k3;
            } 
            
$r $db->table($tab)->where("$kid='$key'")->find();
            if(empty(
$r)) continue;
            
//[click] => 232
            //[etime] => 1387358621
            
foreach($cola as $field){
                if(!isset(
$r[$field])) continue; // 无此字段退出
                
$ps $a[$t[0].':'.$key.':'.$field];
                
$pa explode(',',$ps);
                if(empty(
$r[$field]) && is_numeric($pa[0])){
                    
$r[$field] = $pa[0];    
                }
                
//$r[$field] || $r[$field] = 0;
                
if(empty($r[$field])) $r[$field] = 0
                if(
strstr($ps,'add1')){
                    if(!empty(
$cfgc[$tab])){
                        if(!
in_array($field,$cfgc[$tab])) continue;
                    }else{
                        if(!
in_array($field,$cfgc['fields'])) continue;
                    }
                    
$ck comCookie::mget('clicks',"$t[0]_$key"); // cookie;
                    
if(empty($ck) || ($stamp-$ck)>60){
                        
comCookie::mset('clicks',0,"$t[0]_$key",$stamp);
                        
$r[$field] = $r[$field] + 1
                        
$db->table($tab)->data(array($field=>$r[$field]))->where("$kid='$key'")->update(0);     
                    }
                }
                
$re .= "jqHtml('jsid_field_{$t[0]}:{$key}:$field','{$r[$field]}');\n";
                foreach(
$pa as $k4){
                    if(
is_numeric($k4)) continue;
                    if(
in_array($k4,array('add1'))){
                        continue;
                    }elseif(
$k4){
                        
$re .= "jqHtml('$k4','{$r[$field]}');\n";
                    }
                }
            }
        }
        return 
$re;
    }
    
    
// js动态统计数量
    
static function jsCounts($a){
        
$_groups glbConfig::read('groups');
        
$re ''$ext ''
        
//[drem:2013-cm-a201] => ucount1
        
foreach($a as $k1=>$v1){
            
$t explode(':',$k1);
            if(!isset(
$_groups[$t[0]])) continue; // || empty($t[1])
            
$tab glbDBExt::getTable($t[0]); 
            
$key basStr::filKey($t[1],'-_.'); 
            
$r glbDBObj::dbObj()->table($tab)->where(empty($t[1]) ? "1=1" "pid='$key'")->count(); 
            
$r || $r 0;
            
$pa explode(',',$v1);
            if(empty(
$r) && is_numeric($pa[0])){
                
$r $pa[0];    
            }
            
$re .= "jqHtml('jsid_count_{$t[0]}:{$key}','{$r}');\n";
            foreach(
$pa as $v3){
                
$v3 basStr::filKey($v3);
                if(
is_numeric($v3)) continue;
                    if(
in_array($v3,array('xxx_1'))){
                        continue;
                    }elseif(
$v3){
                        
$re .= "jqHtml('$v3','{$r}');\n";
                    }
            } 
        }
        return 
$re;
    }

}