www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/include/arcedit.cls.php
<? include_once M_ROOT.'./include/notice.cls.php'; include_once M_ROOT.'./include/archive.fun.php'; class cls_arcedit{ var $aid = 0; var $archive = array(); var $basiced = 0; var $detailed = 0; var $auser = ''; var $channel = array(); var $fields = array(); var $namepres = array();//暂存txt字段的文件名 var $updatearr = array(); var $ocnstr = ''; function __construct(){ $this->cls_archive(); } function cls_archive(){ } function init(){ $this->aid = 0; $this->archive = array(); $this->auser = ''; $this->basiced = 0; $this->detailed = 0; $this->channel = array(); $this->fields = array(); $this->namepres = array(); $this->updatearr = array(); $this->ocnstr = ''; $this->updatesql = ''; } function set_aid($aid){ $this->aid = max(0,intval($aid)); } function set_updateaid($updateaid){//$updateaid的更新副本内容 global $db,$tblprefix,$catalogs,$channels; if(empty($updateaid)) return; if(!$this->archive = $db->fetch_one("SELECT a.*,s.*,r.* FROM {$tblprefix}archives a LEFT JOIN {$tblprefix}archives_sub s ON s.aid=a.aid LEFT JOIN {$tblprefix}archives_rec r ON r.aid=a.aid WHERE a.updateaid='$updateaid'")){ $this->init(); return; } $this->aid = $this->archive['aid']; $this->channel = read_cache('channel',$this->archive['chid']); $this->fields = read_cache('fields',$this->archive['chid']); $this->fetch_txt(0); $this->auser = new cls_userinfo; $this->auser->activeuser($this->archive['mid']); $this->basiced = 1; } function cnstr(){//得到类目字串,可用于静态通知系统。 global $cotypes,$cmsinfos; include_once M_ROOT."./include/cparse.fun.php"; $arr = array(); $arr['caid'] = $this->archive['caid']; foreach($cotypes as $k => $cotype){ $this->archive["cotype$k"] && $arr['ccid'.$k] = $this->archive["cotype$k"]; } $cnstr = cnstr($arr); unset($arr); return $cnstr; } function basic_data($auser=1){ global $db,$tblprefix,$catalogs,$channels,$enablestatic; if(empty($this->aid) || $this->basiced) return; if(!$this->archive = $db->fetch_one("SELECT a.*,s.*,r.* FROM {$tblprefix}archives a LEFT JOIN {$tblprefix}archives_sub s ON s.aid=a.aid LEFT JOIN {$tblprefix}archives_rec r ON r.aid=a.aid WHERE a.aid=".$this->aid)){ $this->init(); return; } $this->channel = read_cache('channel',$this->archive['chid']); $this->fields = read_cache('fields',$this->archive['chid']); $this->fetch_txt(0); $enablestatic && $this->ocnstr = $this->cnstr(); if($auser){ $this->auser = new cls_userinfo; $this->auser->activeuser($this->archive['mid']); } $this->basiced = 1; } function detail_data($auser=1){ global $db,$tblprefix; if(empty($this->aid) || $this->detailed) return; $this->basic_data($auser); $customtable = 'archives_'.$this->archive['chid']; if($archive = $db->fetch_one("SELECT * FROM {$tblprefix}$customtable WHERE aid='".$this->aid."'")){ $this->archive = array_merge($archive,$this->archive); } unset($archive); $this->fetch_txt(1); $this->detailed = 1; } function set_arcurl($updatedb=0){//所有的文档归入所在顶级栏目 global $archtmlmode,$subsites,$catalogs,$cnhtmldir; $this->basic_data(); $topid = cn_topid($this->archive['caid'],$catalogs); $abs_dir = M_ROOT.($this->archive['sid'] ? $subsites[$this->archive['sid']]['dirname'] : $cnhtmldir).'/'.$catalogs[$topid]['dirname']; mmkdir($abs_dir,0); $save_dir = date($archtmlmode == 'month' ? 'Ym' : 'Ymd',$this->archive['createdate']).'/'; $abs_dir .= '/'.$save_dir; mmkdir($abs_dir); $this->updatefield('arcurl',$save_dir.$this->aid.'_1.html','main');//相对文档目录 arc_blank($this->aid,$abs_dir.$this->aid.'_1.html'); unset($abs_dir,$save_dir); $updatedb && $this->updatedb(); } function fetch_txt($detail = 0){ foreach($this->fields as $k => $v){ if(!empty($v['istxt']) && isset($this->archive[$k]) && ((!$detail && $v['tbl'] == 'main') || ($detail && $v['tbl'] == 'custom'))){ $this->namepres[$k] = $this->archive[$k]; $this->archive[$k] = readfromtxt($this->archive[$k]); } } } function edit_cudata(&$newarr,$updateuser=0){//是否更新会员数据库 //这是个不更新文档数据库的函数,需要包含在其它更新动作里面 //用于文档修改时对公证的修改或补上公证记录 global $commus,$db,$tblprefix,$timestamp,$enableship,$enablestock; if(!$this->channel['cuid'] || !($commu = read_cache('commu',$this->channel['cuid']))) return; if($commu['cclass'] == 'answer'){ if(!$this->archive['checked']){ $this->updatefield('currency',$newarr['currency'],'main'); }else{ if(($newarr['currency'] > $this->archive['currency']) && $this->auser->crids_enough(array($this->archive['crid'] => $newarr['currency'] - $this->archive['currency']))){ $this->auser->updatecrids(array($this->archive['crid'] => $this->archive['currency'] - $newarr['currency']),$updateuser,lang('answer reward')); $this->updatefield('currency',$newarr['currency'],'main'); $this->updatefield('spare',$this->archive['spare'] + ($newarr['currency'] - $this->archive['currency']),'sub'); } if(!empty($commu['setting']['nota'])){ if(!$db->result_one("SELECT COUNT(*) FROM {$tblprefix}notaanswer WHERE aid='".$this->aid."' AND cid='0'") || $this->archive['question'] != stripslashes($newarr['question'])){ $db->query("INSERT INTO {$tblprefix}notaanswer (aid,cid,content,createdate) VALUES ('".$this->aid."','0','".$newarr['question']."','$timestamp')"); } } } $this->updatefield('question',$newarr['question'],'custom'); }elseif($commu['cclass'] == 'purchase'){ $this->updatefield('price',$newarr['price'],'main'); $enableship && $this->updatefield('weight',$newarr['weight'],'sub'); $enablestock && $this->updatefield('storage',$newarr['storage'],'sub'); } } function new_cudata($updateuser=0){//是否更新会员数据库//应以审核的时间为准 global $commus,$db,$tblprefix,$timestamp; if(!$this->channel['cuid'] || !($commu = read_cache('commu',$this->channel['cuid']))) return true; if($commu['cclass'] == 'answer'){ if(!$this->auser->crids_enough(array($this->archive['crid'] => $this->archive['currency']))) return false; //closed,crid,currency,finishdate在主表 $commu['setting']['vdays'] = empty($commu['setting']['vdays']) ? 0 : $commu['setting']['vdays']; $this->updatefield('finishdate',$timestamp + $commu['setting']['vdays'] * 24 *3600,'main'); $this->updatefield('spare',$this->archive['currency'],'sub'); $this->updatefield('appealdate',$timestamp + ($commu['setting']['vdays'] + $commu['setting']['apdays']) * 24 *3600,'sub'); $this->auser->updatecrids(array($this->archive['crid'] => -$this->archive['currency']),$updateuser,lang('answer reward')); if(!empty($commu['setting']['nota'])){ if(empty($this->detailed)) $this->detail_data(); $db->query("INSERT INTO {$tblprefix}notaanswer (aid,cid,content,createdate) VALUES ('".$this->aid."','0','".addslashes($this->archive['question'])."','$timestamp')"); } } return true; } function autokeyword($updatedb=0){ $this->detail_data(); $fields = read_cache('fields',$this->archive['chid']); if($fields['keywords']['available'] && $this->channel['autokeyword'] && empty($this->archive['keywords']) && !empty($this->archive[$this->channel['autokeyword']])){ $keywords = autokeyword($this->archive[$this->channel['autokeyword']]); $this->updatefield('keywords',keywords(addslashes($keywords)),'main'); } unset($fields,$keywords); $updatedb && $this->updatedb(); } function autoabstract($updatedb=0){ $this->detail_data(); $fields = read_cache('fields',$this->archive['chid']); if($fields['abstract']['available'] && $this->channel['autoabstract'] && empty($this->archive['abstract']) && !empty($this->archive[$this->channel['autoabstract']])){ $this->updatefield('abstract',addslashes(autoabstract($this->archive[$this->channel['autoabstract']])),'main'); } unset($fields); $updatedb && $this->updatedb(); } function autosize($updatedb=0){ $this->detail_data(); if($this->channel['autosize'] && isset($this->archive[$this->channel['autosize']])){ $fields = read_cache('fields',$this->archive['chid']); $this->updatefield('atmsize',addslashes(atm_size($this->archive[$this->channel['autosize']],$fields[$this->channel['autosize']]['datatype'],$this->channel['autosizemode'])),'main'); } unset($fields); $updatedb && $this->updatedb(); } function autothumb($updatedb=0){ global $c_upload; $this->detail_data(); $fields = read_cache('fields',$this->archive['chid']); if($fields['thumb']['available'] && $this->channel['autothumb'] && empty($this->archive['thumb']) && !empty($this->archive[$this->channel['autothumb']])){ $field = read_cache('field',$this->archive['chid'],'thumb'); $thumb = $c_upload->thumb_pick($this->archive[$this->channel['autothumb']],$fields[$this->channel['autothumb']]['datatype'],$field['rpid']); $this->updatefield('thumb',addslashes($thumb),'main'); } unset($fields,$field); $updatedb && $this->updatedb(); } function clear_cudata($updateuser=0){//附带在解审的操作中//其实也处在删除的操作中 global $commus,$db,$tblprefix,$timestamp; if(!$this->channel['cuid'] || !($commu = read_cache('commu',$this->channel['cuid']))) return; if($commu['cclass'] == 'answer'){ $this->auser->updatecrids(array($this->archive['crid'] => $this->archive['spare']),$updateuser,lang('answer reward')); $this->updatefield('spare',0,'sub'); if(!empty($commu['setting']['nota'])){ $query = $db->query("DELETE FROM {$tblprefix}notaanswer WHERE aid='".$this->aid."' AND cid='0'"); } } } function arc_check($check=1,$updatedb=0){//$check执行审核或解审的操作 global $cotypes,$curuser,$vcps,$timestamp; if(empty($this->aid)) return; $this->basic_data(); if($check){ if($this->archive['checked']) return; $catalog = read_cache('catalog',$this->archive['caid'],'',$this->archive['sid']); if(!$this->new_cudata(0)) return; $this->auser->basedeal('check',1); $crids = array(); if(@!empty($vcps['award'][$catalog['awardcp']])){ $cparr = explode('_',$catalog['awardcp']); $crids[$cparr[0]] = $cparr[1]; } foreach($cotypes as $coid => $cotype){ if(!empty($this->archive["cotype$coid"])){ $coclass = read_cache('coclass',$coid,$this->archive["cotype$coid"]); if(@!empty($vcps['award'][$coclass['awardcp']])){ $cparr = explode('_',$coclass['awardcp']); $crids[$cparr[0]] = isset($crids[$cparr[0]]) ? $crids[$cparr[0]] + $cparr[1] : $cparr[1]; } } } unset($coclass,$catalog); if($crids){ if(!$this->auser->crids_enough($crids)) return; $this->auser->updatecrids($crids,0,lang('award currency')); } }else{ if(!$this->archive['checked']) return; $this->auser->basedeal('check',0); $this->clear_cudata(0); } $this->auser->updatedb(); $this->updatefield('checked',$check,'main'); $this->updatefield('editorid',$curuser->infos['mid'],'sub'); $this->updatefield('editor',$curuser->infos['mname'],'sub'); $this->sale_define(); $updatedb && $this->updatedb(); } function sale_define($updatedb=0){//只要文档的任一分类有不能出售的条款,则该文档不允许出售 global $cotypes,$vcps; if(!$this->archive['checked']) return; $clearsale = !empty($this->archive['salecp']) && !isset($vcps['sale'][$this->archive['salecp']]); $clearfsale = !empty($this->archive['fsalecp']) && !isset($vcps['fsale'][$this->archive['fsalecp']]); $catalog = read_cache('catalog',$this->archive['caid'],'',$this->archive['sid']); (!$clearsale && !empty($this->archive['salecp']) && !$catalog['allowsale']) && $clearsale = 1; (!$clearfsale && !empty($this->archive['fsalecp']) && !$catalog['allowfsale']) && $clearfsale = 1; foreach($cotypes as $coid => $cotype){ if($this->archive["cotype$coid"]){ $coclass = read_cache('coclass',$coid,$this->archive["cotype$coid"]); (!$clearsale && !empty($this->archive['salecp']) && !$coclass['allowsale']) && $clearsale = 1; (!$clearfsale && !empty($this->archive['fsalecp']) && !$coclass['allowfsale']) && $clearfsale = 1; } } unset($catalog,$coclass); $clearsale && $this->updatefield('salecp','','main'); $clearfsale && $this->updatefield('fsalecp','','main'); $updatedb && $this->updatedb(); } function arc_pmids(){ global $cotypes; $pmids = array();//检查权限方案限制 $this->archive['permission'] && ($pmids[] = $this->archive['permission']); (($catalog = read_cache('catalog',$this->archive['caid'],'',$this->archive['sid'])) && $catalog['permission']) && ($pmids[] = $catalog['permission']); foreach($cotypes as $coid => $cotype){//所在附属分类所定义的方案 if(!empty($this->archive["cotype$coid"])){ (($coclass = read_cache('coclass',$coid,$this->archive["cotype$coid"])) && $coclass['permission']) && $pmids[] = $coclass['permission']; } } return $pmids; } function arc_caid($caid=0,$updatedb=0){//修改栏目 global $catalogs,$vcps; if(!$caid) return; $this->basic_data(); if($caid == $this->archive['caid']) return; if(!($catalog = read_cache('catalog',$caid,'',$this->archive['sid']))) return; if(!$this->auser->pmbypmids('issue',$catalog['permission'])) return;//检查会员在该栏目中的发布权限 //是否合辑,在栏目中的发布权限的分析依据不同 if($this->archive['atid']){ if(!in_array($this->archive['atid'],explode(',',$catalog['atids']))) return; }else{ if(!in_array($this->archive['chid'],explode(',',$catalog['chids']))) return; } if($this->archive['checked']){//只有已审的文档才去奖励积分 $crids = array(); if(!empty($catalog['awardcp']) && !empty($vcps['award'][$catalog['awardcp']])){ $cparr = explode('_',$catalog['awardcp']); $crids[$cparr[0]] = $cparr[1]; } if($crids){ if(!$this->auser->crids_enough($crids)) return; $this->auser->updatecrids($crids,1,lang('award currency')); } } $this->set_arcurl(0); $this->updatefield('caid',$caid,'main'); $this->sale_define();//校正当前文档出售设置 unset($catalog); $updatedb && $this->updatedb(); } function arc_ccid($ccid,$coid,$updatedb=0){//修改分类或取消分类的操作 global $cotypes,$timestamp,$vcps; if($ccid){ if(!($coclass = read_cache('coclass',$coid,$ccid))) return; $this->basic_data(); if($ccid == $this->archive["cotype$coid"]) return; if(!$this->auser->pmbypmids('issue',$coclass['permission'])) return; if($this->archive['atid']){ if($cotypes[$coid]['atids'] && in_array($this->archive['atid'],explode(',',$cotypes[$coid]['atids']))) return;//针对类系的判断 if(!in_array($this->archive['atid'],explode(',',$coclass['atids']))) return;//针对具体分类的判断 }else{ if($cotypes[$coid]['chids'] && in_array($this->archive['chid'],explode(',',$cotypes[$coid]['chids']))) return;//针对类系的判断 if(!in_array($this->archive['chid'],explode(',',$coclass['chids']))) return;//针对具体分类的判断 } if($this->archive['checked']){//只有已审的文档才去奖励积分 $crids = array(); if(!empty($coclass['awardcp']) && !empty($vcps['award'][$coclass['awardcp']])){ $cparr = explode('_',$coclass['awardcp']); $crids[$cparr[0]] = $cparr[1]; } if($crids){ if(!$this->auser->crids_enough($crids)) return; $this->auser->updatecrids($crids,1,lang('award currency')); } } unset($coclass); } $this->updatefield("cotype$coid",$ccid,'main'); $this->sale_define();//校正当前文档出售设置 $updatedb && $this->updatedb(); } function arc_delete($isuser=0,$iscopy=0){ //需要再删除相关已生成的静态文件及文件的缓存文件 global $db,$tblprefix,$enablestatic,$c_notice,$cotypes; if(empty($this->aid)) return; $this->basic_data(); if($isuser && $this->archive['checked']) return; if($enablestatic && $this->archive['checked']){//静态通知 $c_notice->index = 1; $c_notice->sindex = 1; $c_notice->cnstrs[$this->ocnstr] = 1; $c_notice->saids[$this->aid] = 1; $c_notice->saids2aids();//在删除之前将它关联的上级合辑id先提取出来,因为会删除这个记录。 } //删除相应的txt存储文本 $this->detail_data(); foreach($this->namepres as $k) txtunlink($k); $wherestr = "WHERE aid='".$this->aid."'"; if(!$iscopy){ foreach(array('comments','favorites','subscribes','answers','arecents','notaanswer','purchases') as $var){//???????????????? $db->query("DELETE FROM {$tblprefix}$var $wherestr", 'UNBUFFERED'); } $db->query("DELETE FROM {$tblprefix}albums WHERE aid='".$this->aid."' OR pid='".$this->aid."'", 'UNBUFFERED');//合辑关系全部删除 m_unlink(M_ROOT.arc_htmldir($arc->archive).$this->aid.'_1.html');//删除相应的静态文件 } if(!empty($this->archive['updatecopyid'])){ $wherestr .= " OR aid='".$this->archive['updatecopyid']."'"; } $customtable = 'archives_'.$this->archive['chid']; $db->query("DELETE FROM {$tblprefix}$customtable $wherestr", 'UNBUFFERED'); $db->query("DELETE FROM {$tblprefix}archives_sub $wherestr", 'UNBUFFERED'); $db->query("DELETE FROM {$tblprefix}archives_rec $wherestr", 'UNBUFFERED'); $db->query("DELETE FROM {$tblprefix}archives $wherestr", 'UNBUFFERED'); if(!$iscopy){ $this->auser->basedeal('archive',0); $this->archive['checked'] && $this->auser->basedeal('check',0); } $uploadsize = 0; $query = $db->query("SELECT * FROM {$tblprefix}userfiles $wherestr"); while($item = $db->fetch_array($query)){ @unlink(local_file($item['url'])); $uploadsize += ceil($item['size'] / 1024); if($item['thumbed']){ $uploadsize += ceil(@filesize(local_file($item['url']).'.s.jpg') / 1024); @unlink(local_file($item['url']).'.s.jpg'); } } $this->auser->updateuptotal($uploadsize,'reduce',1); $db->query("DELETE FROM {$tblprefix}userfiles $wherestr", 'UNBUFFERED'); $this->init(); } function comments_num($score,$mode=0,$updatedb=0){//$mode:0删除评论,1添加评论 $this->basic_data(); $ncomments = $mode ? $this->archive['comments'] + 1 : max(0,$this->archive['comments'] - 1); $nscores = $mode ? round(max(0,$this->archive['comments'] * $this->archive['scores'] + $score) / $ncomments,2) : ($ncomments ? round(max(0,$this->archive['comments'] * $this->archive['scores'] - $score) / $ncomments,2) : 0); $this->updatefield('comments',$ncomments,'main'); updaterecent($this->aid,'comments',$mode); $this->updatefield('scores',$nscores,'main'); $updatedb && $this->updatedb(); } function arc_nums($dname,$add=1,$updatedb=0){ $this->basic_data(); if(in_array($dname,array('orders','ordersum','answers','adopts','favorites','praises','debases','downs','plays'))){ $this->updatefield($dname,max(0,$this->archive[$dname] + $add),'main'); updaterecent($this->aid,$dname,$add); } $updatedb && $this->updatedb(); } function inalbumsqlstr(){//粗选当前合辑允许加载的已有内容 global $sid; if(!$this->archive['atid'] || !($altype = read_cache('altype',$this->archive['atid'],'',$sid))) return ''; $sqlstr = $sqlchids = $sqlatids = ''; if($altype['chids']) $sqlchids = "(chid IN (".mimplode($altype['chids']).") AND atid=0)"; if($altype['atids']) $sqlatids = "atid IN (".mimplode($altype['atids']).")"; if($sqlchids && $sqlatids){ $sqlstr = "($sqlchids OR $sqlatids)"; }else $sqlstr = $sqlchids.$sqlatids; if(!$sqlstr) return ''; $sqlstr = "WHERE sid='$sid' AND aid!=".$this->aid." AND $sqlstr"; $altype['oneuser'] && $sqlstr .= " AND mid='".$this->archive['mid']."'"; return $sqlstr; } function albumsqlstr($atid){ global $altypes,$cotypes,$catalogs,$channels; $altype = $altypes[$atid]; $crules = $altype['crules']; $sqlstr = "WHERE atid=$atid AND checked=1 AND aid!=".$this->aid; if(!empty($crules['chsource'])){ if(empty($crules['chids']) || !in_array($this->archive['chid'],$crules['chids'])) return false; $chids = array(); foreach($crules['chids'] as $chid){ !empty($channels[$chid]) && $chids[] = $chid; } if(empty($chids)) return false; $sqlstr .= " AND chid IN (".mimplode($chids).")"; } if(!empty($crules['casource'])){ $caids = array(); if($crules['casource'] == '1'){ if(empty($crules['caids']) || !in_array($this->archive['caid'],$crules['caids'])) return false; foreach($crules['caids'] as $caid){ isset($catalogs[$caid]) && $caids[] = $caid; } if(empty($caids)) return false; }elseif($crules['casource'] == '2'){ $caids[] = $this->archive['caid']; } $sqlstr .= " AND caid IN (".mimplode($caids).")"; } foreach($cotypes as $coid => $cotype){ if(!empty($crules['cosource'.$coid])){ $ccids = array(); if($crules['cosource'.$coid] == '1'){ if(empty($crules['ccids'.$coid]) || !in_array($this->archive["cotype$coid"],$crules['ccids'.$coid])) return false; $coclasses = read_cache('coclasses',$coid); foreach($crules['ccids'.$coid] as $ccid){ isset($coclasses[$ccid]) && $ccids[] = $ccid; } if(empty($ccids)) return false; }elseif($crules['cosource'.$coid] == '2'){ $ccids[] = $this->archive["cotype$coid"]; } if(empty($cotype['self_reg'])){ $sqlstr .= " AND cotype$coid IN (".mimplode($ccids).")"; }else{ $tempstr = self_sqlstr($coid,$ccids,''); $tempstr && $sqlstr .= ' AND '.$tempstr; unset($tempstr); } } } !empty($altype['oneuser']) && $sqlstr .= " AND mid='".$this->archive['mid']."'"; return $sqlstr; } function albumidsarr($atid){ global $db,$tblprefix; $idsarr = array(); if(!$this->archive['caid']) return $idsarr; if($sqlstr = $this->albumsqlstr($atid)){ while($item = $db->fetch_one("SELECT aid,subject FROM {$tblprefix}archives $sqlstr ORDER BY aid DESC LIMIT 0,30")){ $idsarr[$item['aid']] = mhtmlspecialchars($item['subject']); } } return $idsarr; } function albumfilterid($albumid,$atid){ global $db,$tblprefix; if(!$this->archive['caid']) return 0; if(!($sqlstr = $this->albumsqlstr($atid))) return 0; $sqlstr .= " AND aid=$albumid"; if(!$db->result_one("SELECT COUNT(*) FROM {$tblprefix}archives $sqlstr")) return 0; return $albumid; } function set_album($aid=0,$load=0){//将当前文件归入到$aid的合辑中//$load表示归辑方式,1为主动载入 global $db,$tblprefix,$sid,$enablestatic,$c_notice; if(empty($aid)) return false; $this->basic_data(0); if(!($row = $db->fetch_one("SELECT aid,atid,mid FROM {$tblprefix}archives WHERE aid=$aid"))) return false;//$aid不存在 if(!$row['atid'] || !($altype = read_cache('altype',$row['atid'],'',$sid))) return false;//$aid不是合辑 if($altype['oneuser'] && ($row['mid'] != $this->archive['mid'])) return false;//个人性质的合辑 if($altype['onlyload'] && !$load) return false;//载入型合辑,只能在载入动作时归辑 if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}albums WHERE aid='".$this->archive['aid']."' AND pid='$row[aid]'")) return false;//此合辑记录已存在 if($altype['onlyone'] && $db->result_one("SELECT COUNT(*) FROM {$tblprefix}albums WHERE aid='".$this->archive['aid']."' AND patid='$row[atid]'")) return false;//已经归入到其它同类型合辑中 if($altype['maxnums']){//$aid中的辑内最大数量限制 $counts = $db->result_one("SELECT COUNT(*) FROM {$tblprefix}albums WHERE pid='".$row['aid']."'"); if($counts > $altype['maxnums']) return false; } //分析当前的文档模型或合辑类型是否是所属合辑的允许类型 if($this->archive['atid'] && !in_array($this->archive['atid'],$altype['atids'])) return false;//如当前文档为合辑,要是$aid的允许合辑 if(!$this->archive['atid'] && !in_array($this->archive['chid'],$altype['chids'])) return false;//如当前文档为文档,要是$aid的允许模型 $sqlstr = "aid='".$this->archive['aid']."',pid='$aid',atid='".$this->archive['atid']."',patid='$row[atid]'";//合辑记录的基本信息 $altype['autocheck'] && $sqlstr .= ",checked=1"; $db->query("INSERT INTO {$tblprefix}albums SET $sqlstr"); unset($row,$row1); if($enablestatic && $this->archive['checked']){ $c_notice->saids[$this->aid] = 1;//追溯文件的上级合辑 $c_notice->aids[$this->aid] = 1;//归辑后自身的文档有可能改变 } return true; } function updatefield($fieldname,$newvalue,$mode='main'){ if(in_array($mode,array('main','sub'))){ $this->basic_data(); }elseif($mode == 'custom'){ $this->detail_data(); } if($this->archive[$fieldname] != stripslashes($newvalue)){ $this->archive[$fieldname] = stripslashes($newvalue); $this->updatearr[$mode][$fieldname] = $newvalue; } } function updatedb(){ global $db,$tblprefix,$enablestatic,$c_notice; if(empty($this->aid)) return; //在这里分析函数字段的值的变化 foreach($this->fields as $k => $v){//一旦有更新,重新计算函数字段。 if($v['available'] && $v['isfunc']){ $this->detail_data();//可以使用所有字段的值来计算函数值。 $v = read_cache('field',$this->archive['chid'],$k); if(empty($v['istxt'])){ $this->updatefield($k,field_func($this->archive,$v['func']),$v['tbl']); }else saveastxt(stripslashes(field_func($this->archive,$v['func'])),$aedit->namepres[$k]); } } $check = $cn = $main = $custom = false; foreach(array('main','sub','custom') as $upmode){ if(!empty($this->updatearr[$upmode])){//只要数组存在,就是内容作了修改 $sqlstr = ''; foreach($this->updatearr[$upmode] as $k => $v){ $sqlstr .= ($sqlstr ? "," : "").$k."='".$v."'"; if(preg_match("/^cotype(\d+)/i",$k) || $k == 'caid') $cn = true; if($k == 'checked') $check = true; } if(!empty($sqlstr)){ $tablename = $upmode == 'main' ? 'archives' : ($upmode == 'sub' ? 'archives_sub' : 'archives_'.$this->channel['chid']); $db->query("UPDATE {$tblprefix}$tablename SET $sqlstr WHERE aid={$this->aid}"); } $upmode == 'main' && $main = true; $upmode == 'custom' && $custom = true; } } if($enablestatic){ global $c_notice; if(!$c_notice) $c_notice = new cls_notice; if($check || ($this->archive['checked'] && $main)){//审核状态改变或主表内容改变 $c_notice->index = 1; $c_notice->sindex = 1; $c_notice->cnstrs[$this->cnstr()] = 1; $c_notice->saids[$this->aid] = 1; $c_notice->aids[$this->aid] = 1; } if($this->archive['checked'] && $cn) $c_notice->cnstrs[$this->ocnstr] = 1;//修改分类,原节点页面需要修改 if($this->archive['checked'] && $custom) $c_notice->aids[$this->aid] = 1;//模型表改变 } $this->updatearr = array(); } } ?>