<?php
namespace imcat;
// admAFunc
class admAFunc{
static function mkvIperm($muid,$mprm){
$db = glbDBObj::dbObj();
$mprm = ":,$mprm,";
$pmarr = array();
$arr = $db->table('base_menu')->where("model='$muid' AND enable='1'")->order('deep,top')->select();
foreach($arr as $k=>$row){
if(!empty($row['cfgs']) &&strpos($mprm,','.$row['kid'].',')){
preg_match_all("/mkv\=([\w|\-]+)/", $row['cfgs'], $ms);
if(!empty($ms[1])){
foreach($ms[1] as $mv){
if(!in_array($mv,$pmarr)){
$pmarr[] = $mv;
}
}
}
}else{
//echo $row['kid'].':flag<br>';
}
}
return implode(',',$pmarr);
}
static function mkvInit($mod='adm'){
$db = glbDBObj::dbObj();
$tabid = 'base_menu';
$tpl = $mod=='mkvu' ? 'umc' : 'adm';
$mlist = vopTpls::entry($tpl);
if($tpl=='adm') $mlist = array_merge($mlist,vopTpls::enflow());
$dbcfg = $db->table($tabid)->where("model='$mod'")->order('pid,top,kid')->select();
$mcfg = array();
foreach($dbcfg as $k=>$v){
$mcfg[$v['kid']] = $v;
}
foreach($mlist as $key=>$val){
$mpos = strpos("$key)","-m)");
$pid = $mpos ? 0 : substr($key,0,strpos($key,"-")).'-m';
$deep = $mpos ? 1 : 2;
$fm = array('pid'=>$pid,'enable'=>'1','deep'=>$deep,'note'=>$val,);
if(isset($mcfg[$key])){
unset($mcfg[$key]);
$db->table($tabid)->data(basReq::in($fm))->where("model='$mod' AND kid='$key'")->update();
}else{
$fm = array_merge($fm,array('kid'=>$key,'title'=>'','model'=>$mod,'cfgs'=>'','top'=>'888',));
$db->table($tabid)->data(basReq::in($fm))->insert();
}
}
foreach($mcfg as $key=>$val){
$db->table($tabid)->where("model='$mod' AND kid='$key'")->delete();
}
}
// umcVmods
// 所有[关联模型]为$mod的模型
static function pmodSuns($mod='',$re='a'){
$_groups = glbConfig::read('groups');
$a = array(); if(!$mod) return $a;
foreach($_groups as $k=>$v){
if($mod==$v['pmod']){
$a[] = $k;
}
}
return $a;
}
// [关联模型]保存
static function pmodSave($omod,$pmod=''){
$oldPid = basReq::val('oldPid');
if($oldPid && $oldPid===$pmod) return;
if(empty($pmod)){ //取消
glbDBExt::setOneField($omod,'pid','del');
}else{ //关联 drem(pid),demo(cnt_drem)
$r = array('dbtype'=>'varchar(24)','dbdef'=>'','vreg'=>'0');
glbDBExt::setOneField($omod,'pid','check',$r);
}
}
// modCopy,
// $fm:is_del,mod_id,
// $cid:modid(pro),'',reset
static function modCopy($mod, $tabid, $fm, $cid=''){
$_groups = glbConfig::read('groups');
$db = glbDBObj::dbObj();
$org_arr = array('coms'=>'nrem','docs'=>'news','users'=>'person','types'=>'common','advs'=>'adpic');
if($fm=='is_del'){
$fm = $db->table($tabid)->where("kid='$cid'")->find();
$dcnt = $db->table($tabid)->where("issys='0' AND kid='$cid'")->delete();
if($dcnt){ //删除成功...
if(isset($org_arr[$mod])) glbDBExt::setfieldDemo($cid, "{$mod}_$cid");
if($mod=='docs' && $fm['etab']) glbDBExt::setfieldDemo($cid, "dext_$cid");
@unlink(DIR_DTMP."/modcm/_$cid.cfg.php"); //删除缓存
if($mod=='docs' || $mod=='advs') $db->table('base_catalog')->where("model='$cid'")->delete();
if($mod=='users') $db->table('base_grade')->where("model='$cid'")->delete();
}
return $dcnt ? basLang::show('admin.aaf_delok') : basLang::show('admin.aaf_errkeep');
}elseif(is_string($fm) && isset($_groups[$fm]) && is_string($cid) && isset($_groups[$cid])){
$fm_org = $db->table($tabid)->where("kid='$fm'")->find();
$fm_now = $db->table($tabid)->where("kid='$cid'")->find();
self::modCopy($mod, $tabid, 'is_del', $cid); //del
self::modCopy($mod, $tabid, $fm_now, $fm); //copy
return basLang::show('admin.aaf_resetok');
}elseif(is_array($fm) && $cid && empty($fm['org_tab'])){ //copy
$fm_org = $db->table($tabid)->where("kid='$cid'")->find();
$fm['etab'] = $fm_org['etab'];
$fm['org_tab'] = "{$mod}_$cid";
self::modCopy($mod, $tabid, $fm, $cid); //add
return basLang::show('admin.aaf_copyok');
}elseif(is_array($fm)){ //add
$id = basReq::in(@$fm['kid']);
$org_tab = @$fm['org_tab']; unset($fm['org_tab']);
$db->table($tabid)->data(basReq::in($fm))->insert();
if(isset($org_arr[$mod])){
$org_tab = empty($org_tab) ? "{$mod}_".$org_arr[$mod] : $org_tab;
glbDBExt::setfieldDemo($id, "{$mod}_$id", $org_tab);
if($mod=='docs' && !empty($fm['etab'])){
glbDBExt::setfieldDemo($id, "dext_$id", str_replace('docs_','dext_',$org_tab));
}
}
return basLang::show('admin.aaf_addok');
}else{
return basLang::show('admin.aaf_error');
}
return $msg;
}
// upd config
static function grpNav($pid,$mod){
global $_cbase;
$_groups = glbConfig::read('groups');
$mkv = $_cbase['mkv']['mkv'];
$str = '';
$ggap = ''; $top0 = '1';
foreach($_groups as $k=>$v){
if($v['pid']==$pid){
$top1 = substr($v['top'],0,1);
$str .= (($top0!=$top1)?'<br>':$ggap)."<a href='?mod=$k'>$v[title]</a>";
$ggap = ' | '; $top0 = $top1;
}
}
$str = str_replace("?mod=","?$mkv&mod=",$str);
$str = str_replace("&mod=$mod","&mod=$mod' class='cur",$str);
return $str;
}
// types,catalog,menus使用
static function typLay($cfg,$aurl,$pid){
if(empty($pid)){
return basLang::show('admin.aaf_ttype');
}else{
$str = "<a href='".basReq::getURep($aurl[1],'pid','0')."'>".basLang::show('admin.aaf_top')."</a>»";
$lnk = "<a href='".basReq::getURep($aurl[1],'pid','[k]')."'>[v]</a>";
$str .= comTypes::getLnks(comTypes::getLays($cfg['i'],$pid),$lnk);
}
return $str;
}
}