<?php
namespace imcat;
// dopFunc : 基本操作 static函数
class dopFunc{
// 得到`默认模型`ID
static function getDefmod($tab=''){
$groups = glbConfig::read('groups');
if($mod=basReq::val('mod')){
return $mod;
}elseif(isset($groups['news'])){
return 'news';
}elseif(isset($groups['cargo'])){
return 'cargo';
}elseif(isset($groups['about'])){
return 'about';
}else{
return 'demo';
}
}
// 得到`字段存文件`的内容
static function getFsval($mod,$kid,$fid='cfile'){
$cfdir = comStore::getResDir($mod,$kid,1,0)."/fs_$fid.data";
$cfile = comFiles::get($cfdir);
return $cfile;
}
static function getMinfo($mod,$kid='',$fid=''){
$tmp = glbDBExt::getTable($mod,'arr');
$tab = $tmp[0]; $kid = $tmp[1];
$fid || $fid = $kid;
$info = glbDBObj::dbObj()->table($tab)->where("$fid='$kid'")->find();
return $info;
}
static function joinDext(&$re,$mod,$kk='kid'){
$ids = '';
foreach($re as $k=>$v){
$ids .= (empty($ids) ? '' : ',')."'".$v[$kk]."'";
}
if(empty($ids)) return;
$re1 = glbDBObj::dbObj()->table(glbDBExt::getTable($mod,1))->where("$kk IN($ids)")->select();
$re2 = array();
foreach($re1 as $k1=>$v1){
$re2[$v1[$kk]] = $v1;
}
foreach($re as $k=>$v){
if(isset($re2[$v[$kk]])){
$re[$k] = $v + $re2[$v[$kk]];
}
}
}
static function vgetLink($title,$mod='',$kid='',$link=''){
if(empty($link)){
$url = PATH_ROOT."/plus/api/redir.php?$mod.{$kid}";
}elseif($link=='#'){
return $title;
}elseif(strpos($link,'://') || strpos($link,'//')===0){
$url = $link;
}elseif(strpos($link,'{')===0){
$url = comStore::revSaveDir($link);
}else{
$url = PATH_ROOT.$link;
}
$re = "<a href='$url' target='_blank'>$title</a>";
return $re;
}
// 获取字段值(标题,公司名,会员名)
static function vgetTitle($mod,$val='',$field=''){
$mcfg = glbConfig::read($mod);
$field || $field ="title,company,uid,uname,mname,mtel,memail";
$field = self::vchkFields($field,self::vgetFields($mcfg['f'],'all','all'));
$field = implode(',',array_keys($field));
$field = explode(',',$field); $field = $field[0];
$kid = substr($mcfg['pid'],0,1).'id'; if($kid=='uid') $kid='uname';
$r = glbDBObj::dbObj()->table(glbDBExt::getTable($mod))->field($field)->where("$kid='$val'")->find();
return empty($r[$field]) ? '' : $r[$field] ;
}
// 获取字段(某种类型)
static function vgetFields($fcfgs,$type='input,select',$dbtype='varchar'){
$re = array();
foreach($fcfgs as $k=>$v){
if($type!='all' && !strstr($type,$v['type'])) continue;
if($dbtype!='all' && !strstr($dbtype,$v['dbtype'])) continue;
if(!empty($v['etab'])) continue;
$re[$k] = $v['title'];
}
return $re;
}
// 检查字段(是否在可能的字段内)
static function vchkFields($obj,$orgt){
$org = array_keys($orgt);
if(empty($obj)) return $orgt;
$fields = is_string($obj) ? explode(',',$obj) : $obj;
$re = array();
foreach($fields as $k){
if(in_array($k,$org)){
$re[$k] = $orgt[$k];
}
}
return $re;
}
// 排序字段()
static function vordFields($obj){
//$obj
foreach($obj as $k=>$v){
$obj["$k-a"] = "$v".basLang::show('flow.dops_ordasc');
}
return array_merge($obj,array('atime'=>basLang::show('flow.dops_ordtimd'),'atime-a'=>basLang::show('flow.dops_ordtima')));
}
// 表单默认值 showdef=1/0
static function fmDefval($obj,$key='show',$def=''){
$data = $obj->fmo;
if(isset($data[$key])){
return $data[$key];
}else{
$val = ''; $key = "{$key}def";
$arr = basElm::text2arr(@$obj->cfg['cfgs']);
return isset($arr[$key]) ? $arr[$key] : $def;
}
}
// 表单使用:fmProp()
static function fmSafe($pid=''){
global $_cbase;
if(!empty($_cbase['run']['deelSafe'])){
echo safComm::formCInit('init', 0, 1); // $act='init', $time=3600
}
}
// 保存使用:svPrep()
static function svSafe($pid=''){
global $_cbase;
if(defined('RUN_ADMIN')){
safComm::urlFrom($_cbase['run']['tplcfg'][1]);
};
if(!empty($_cbase['run']['deelSafe'])){
safComm::formCInit('', 7200, 1); // $act='init', $time=3600
}
}
// 翻页条
static function pageBar($pgbar,$opbar,$opname='(null)',$jsFunc='fmSelAll'){
$opname = $opname=='(null)' ? basLang::show('flow.dops_exeu') : $opname;
$pgbar = "\n<div class='pg_bar'>\n$pgbar</div>\n";
$opstr = strpos($opbar,'</option>') ? "<select name='fs_do' class='form-control w100'>$opbar</select>" : $opbar;
$opbar = "<div class='w180 tc right flgOpbar'>$opstr";
$opbar .= ($opname ? "<input name='bsend' class='btn' type='submit' value='$opname' />" : '')."</div>";
echo "\n<tr><td class='tc' nowrap>\n";
if($jsFunc) echo "<input name='fs_act' type='checkbox' class='rdcb' onClick='$jsFunc(this)' /></td>";
echo "<td colspan='15'>$opbar$pgbar</td>\n";
echo "\n</tr>";
}
// svFmtval。
static function svFmtval($f,$mod,$k,$val){
$fext = @$f[$k]['fmextra']; //参考fldView::fitem()
if(is_array($val)) $val = implode(',',$val); //array
if($fext=='editor'){
$val = basReq::fmt($val,'','Html',2000123); //2000123=2M, MEDIUMTEXT最大长度为16,777,215。
$val = basReq::in($val);
}elseif($fext=='datetm'){
$totime = strtotime(basReq::fmt($val,'1979-09-13'));
$val = empty($val) ? 0 : (is_numeric($val) ? $val : $totime);
if($f[$k]['dbtype']=='varchar'){
$fmt = empty($f[$k]['fmexstr']) ? 'Y-m-d' : $f[$k]['fmexstr'];
$val = $val ? date($fmt,$val) : ''; //
}
}elseif($fext=='color'){
$val = preg_replace('/[^0-9A-Fa-f]/','',$val);
}elseif($fext=='map'){
$val = preg_replace('/[^0-9,\.]/','',$val);
}elseif($fext=='winpop'){
$val = preg_replace('/[^0-9A-Za-z,]/','',$val);
}elseif($fext=='pics'){
$val = basStr::filTitle($val,array('%'));
}elseif($fext=='pick'){
$val = is_array($val) ? implode(',',$val) : $val;
$val = basStr::filTitle($val);
}elseif(in_array($f[$k]['type'],array('select','cbox','radio'))){
$val = is_array($val) ? implode(',',$val) : $val;
$val = basStr::filTitle($val);
}elseif(in_array($f[$k]['type'],array('file'))){
$val = str_replace(array('<','>','"',"'","\\","\r","\n",'*','|','?'),'',$val);
}elseif(in_array($f[$k]['dbtype'],array('int','float'))){
$val = basReq::fmt($val,'0','N');
}elseif($f[$k]['dbtype']=='file'){
$val = basStr::filHtml($val);
}elseif($f[$k]['dbtype']=='text'){
$val = basReq::fmt($val,'','Html',24123); //24K
$val = basReq::in($val);
}elseif($f[$k]['dbtype']=='varchar'){
$val = basStr::filTitle($val);
}else{
$val = basReq::fmt($val,'','Html'); //255
$val = basReq::in($val);
}
return $val;
}
// modFile .. ????
static function modFile($mod, $type=''){ //模型脚本
require DIR_ROOT."/cfgs/scfile/sc_fadm.php"; //sc_fadm/cs_fmem
if(isset($scfgs[$mod])){
$re = $scfgs[$mod];
}elseif(file_exists($_fex=DIR_ROOT."/extra/emod/{$mod}.php")){
$re = $_fex;
}elseif(file_exists($_fex=DIR_IMCAT."/flow/emod/{$mod}.php")){
$re = $_fex;
}else{
$re = ''; //DIR_IMCAT."/flow/dops/{$type}_{$mod}.php";
}
return $re;
}
// modAct .. ????
static function modAct($act, $mod, $type){ //act脚本
global $_cbase;
if( file_exists($_fex=DIR_ROOT."/extra/eact/{$mod}_{$act}.php")){
$re = $_fex;
}elseif(file_exists($_fex=DIR_IMCAT."/flow/eact/{$mod}_{$act}.php")){
$re = $_fex;
}else{
$re = DIR_IMCAT."/flow/dops/{$type}_{$act}.php";
}
$adm_act = str_replace([DIR_IMCAT,DIR_ROOT], ['{imcat}:','{root}:'], $re);
$_cbase['run']['adm_act'] = $adm_act;
return $re;
}
}