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();
	}
}
?>