<?php
namespace imcat;

// admMpts(多语言/多城市)相关
class admMpts{    

    
// 
    
static function vNav($part$dir){
        global 
$_cbase;
        
$islang $part=='imcat' && $dir=='lang';
        
$istpl $part=='views' && !in_array($dir,['adm']); // ,'base'
        
$isroot $part=='root' && in_array($dir,['extra','plus']);
        if(!(
$islang || $istpl || $isroot)){
            return 
'';
        }
        
$fps1 glob(DIR_IMCAT.'/lang/kvphp/core-*.php');
        
$fps2 glob(DIR_ROOT.'/extra/kvphp/core-*.php');
        
$files array_merge($fps1$fps2);
        
$tra = [];
        foreach(
$files as $fp) {
            
$trkey str_replace(['core-','.php'],'',basename($fp));
            if(
$trkey=='cn') continue;
            
$tra[$trkey] = $trkey;
        }
        
$tab basElm::setRadio('lang'$tra'');
        
eimp('/~tpl/ftrans.js');
        echo 
basJscss::jscode("$(function(){ resetNav('$part'); });");
        return 
"<br>cn ->翻译 $tab";
    }

    
// 
    
static function vPart($part){
        global 
$_cbase;
        
$cfgs $_cbase['part'];
        if(isset(
$cfgs['tab'][$part])){
            return 
$cfgs['tab'][$part];
        }
        return 
'(Null)';
    }

    
// 同步_各part
    
static function syncParts($dop$kid){
        global 
$_cbase;
        
$cfgs $_cbase['part'];
        
$db glbDBObj::dbObj();
        
$del 1
        
$row $db->table($dop->tbid)->where("did='$kid'")->find();
        if(empty(
$row)) return;
        
$rex $dop->tbext $db->table($dop->tbext)->where("did='$kid'")->find() : 0;
        
$psyn self::dbPsyn($dop$row);
        
$pnow $row['part']; $otitle $row['title']; 
        foreach(
$cfgs['tab'] as $part => $ptitle) {
            if(
$part==$pnow){
                if(
$psyn!=$row['psyn']){
                    
$tmp = ['psyn'=>$psyn];
                    
$db->table($dop->tbid)->data($tmp)->where("did='$kid'")->update();
                }
                
$del 0;
                continue;
            }
            
$old $db->table($dop->tbid)->where("psyn='$psyn' AND part='$part'")->find();
            if(!empty(
$old)) return;
            
$row['did'] = self::dbKid($dop$row);
            
$row['part'] = $part$row['psyn'] = $psyn;
            
$row['title'] = self::fmtTitle($cfgs$pnow$part$otitle);
            
$db->table($dop->tbid)->data(in($row))->insert(0);
            if(!empty(
$rex)){
                
$rex['did'] = $row['did'];
                
$db->table($dop->tbext)->data(in($rex))->insert(0);
            }
        }
        if(
$del){
            
$db->table($dop->tbid)->where("did='$kid'")->delete();
            
$dop->tbext && $db->table($dop->tbext)->where("did='$kid'")->delete();
        }
    }

    
// 取消_各part/reset-null
    
static function resetParts($dop$kid=''){
        static 
$psyns;
        if(empty(
$psyns)) $psyns = array();
        
$db glbDBObj::dbObj();
        
$row $db->table($dop->tbid)->where("did='$kid'")->find();
        if(empty(
$row)) return;
        
$kid $row['did'];
        
$part $row['part'];
        
$psyn $row['psyn'];
        if(!
$part || !$psyn){
            return;
        }
        if(
in_array($psyn,$psyns)){
            return;
        }
        
$psyns[] = $psyn;
        
$rows $db->table($dop->tbid)->where("psyn='$psyn'")->select(); // AND did!='$kid'
        
$kids '';
        foreach(
$rows as $row) {
            if(
$row['did']==$kid){
                
$tmp['part'] = '';
                
$tmp['psyn'] = '';
                
$db->table($dop->tbid)->data($tmp)->where("did='$kid'")->update();
                continue; 
            }
            
$kids .= ($kids ',' '')."'{$row['did']}'";
        }
        if(
$kids && $dop->tbext){
            
$db->table($dop->tbext)->where("did IN($kids)")->delete();
        }
        
$kids && $db->table($dop->tbid)->where("did IN($kids)")->delete();
    }

    static function 
setDef($dop$kid=''){
        global 
$_cbase;
        
$cfgs $_cbase['part'];
        
$db glbDBObj::dbObj();
        
$old $db->table($dop->tbid)->where("did='$kid'")->find();
        if(empty(
$old) || $old['part']==$cfgs['def']) return;
        
$tmp['part'] = $cfgs['def'];
        if(
in_array($dop->mod,$cfgs['psyn'])){
            
$tmp['psyn'] = self::dbPsyn($dop$old); 
        }
        
$db->table($dop->tbid)->data($tmp)->where("did='$kid'")->update();
    }

    static function 
fmtTitle($cfgs$pnow$part$otitle){
        
$isdef = (!$pnow) && ($part==$cfgs['def']);
        if(
$isdef) return $otitle;
        
$pmsg $cfgs['tab'][$part];
        foreach(
$cfgs['tab'] as $part => $ptitle) {
            if(
strpos($otitle,"[$ptitle]")===0){
                
$otitle substr($otitle,strlen("[$ptitle]"));
            }
        }
        return 
"[$pmsg]$otitle";
    }

    
// dbKid
    
static function dbKid($dop$row$no=0){
        
$db glbDBObj::dbObj();
        
$kid substr($row['did'],0,10).basKeyid::kidRand('24',$no?3:2);
        
$old $db->table($dop->tbid)->where("did='{$kid}'")->find();
        if(!
$old){
            return 
$kid;
        }else{
            
$no++;
            return 
self::dbKid($dop$row$no);
        }
    }
    
    
// dbPsyn
    
static function dbPsyn($dop$row$no=0){
        if(!empty(
$row['psyn'])){
            return 
$row['psyn'];
        }
        
$db glbDBObj::dbObj();
        
$psyn basKeyid::kidY3x5().'-'.basKeyid::kidRand('24',$no?4:3);
        
$old $db->table($dop->tbid)->where("psyn='$psyn'")->find();
        if(!
$old){
            return 
$psyn;
        }else{
            
$no++;
            return 
self::dbPsyn($dop$row$no);
        }
    }

}

/*

*/