www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/include/farcedit.cls.php

    <?
class cls_farcedit{
	//需要重新检查收费与免费信息的处理过程的区别
	var $aid = 0;
	var $archive = array();
	var $channel = array();
	var $catalog = array();
	var $basiced = 0;
	var $detailed = 0;
	var $auser = '';//作者
	var $updatearr = array();
	function __construct(){
		$this->cls_farchive();
	}
	function cls_farchive(){
	}
	function init(){
		$this->aid = 0;
		$this->archive = array();
		$this->channel = array();
		$this->catalog = array();
		$this->basiced = 0;
		$this->detailed = 0;
		$this->auser = '';
		$this->updatearr = array();
	}
	function set_aid($aid){
		$this->aid = max(0,intval($aid));
	}
	function basic_data($auser=1){
		global $db,$tblprefix,$fcatalogs,$fchannels;
		if(empty($this->aid) || $this->basiced) return;
		if(!$this->archive = $db->fetch_one("SELECT * FROM {$tblprefix}farchives WHERE aid='".$this->aid."'")){
			$this->init();
			return;
		}
		$this->aid = $this->archive['aid'];
		$this->channel = $fchannels[$this->archive['chid']];
		$this->catalog = read_cache('fcatalog',$this->archive['caid']);
		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 = 'farchives_'.$this->archive['chid'];
		if($archive = $db->fetch_one("SELECT * FROM {$tblprefix}$customtable WHERE aid='{$this->archive['aid']}'")){
			$this->archive = array_merge($this->archive, $archive);
		}
		arr_tag2atm($this->archive,'f');
		$this->detailed = 1;
		unset($archive);
	}
	function arc_check($checked=1,$updatedb=0){
		//如何解决分类收费属性变更的问题?比如由限期项目变为无限期项目,原先的很多项目会终止
		global $curuser,$timestamp;
		if(empty($this->aid)) return;
		$this->basic_data();
		if($checked){
			if($this->archive['checked']) return;
			$this->updatefield('checked',1,'main');
			!$this->catalog['taxcrid'] && $this->updatefield('startdate',$timestamp,'main');
		}else{
			if(!$this->archive['checked']) return;
			$this->updatefield('checked',0,'main');
			!$this->catalog['taxcrid'] && $this->updatefield('startdate',0,'main');
			//如果排队信息,将余下的有效期转入排队天数中,以便下次审核后重新进入排队
			($this->catalog['maxactive'] && $orderdays = max(0,floor(($this->archive['enddate'] - $timestamp) / 86400))) && $this->updatefield('orderdays',$orderdays,'main');
		}
		$this->updatefield('editor',$curuser->infos['mname'],'main');
		$updatedb && $this->updatedb();
	}
	function order_check($orderdays=0,$crid=0,$crvalue=0,$updatedb=0){//天数,积分类型,积分数
		//$orderdays=0无限期 $orderdays<>0有可能是排队信息也可能是非排队信息
		//如是无限期只需要将actived=1即可
		//计入orderdays时不管是排队还是直接计入有效期,都要分析当前是否有旧记录
		//顺便作激活的动作
		
		global $timestamp,$curuser;
		if(empty($this->aid)) return false;
		if(empty($crid) || empty($crvalue)) return false;
		$this->basic_data();
		if(empty($this->catalog['taxcrid']) || empty($this->archive['checked'])) return false;
		if(!$this->auser->crids_enough(array($crid => $crvalue))) return false;
		if(!$orderdays){
			!$this->archive['startdate'] && $this->updatefield('startdate',$timestamp,'main');
			$this->updatefield('enddate',0,'main');
		}else{
			if(empty($this->catalog['maxactive'])){//非排队信息
				if(!$this->archive['startdate']){
					$this->updatefield('startdate',$timestamp,'main');
					$this->updatefield('enddate',$timestamp + $orderdays * 86400,'main');
				}else{//可能是已失效信息,也可能是正生效信息,也可能原来是无限制信息
					if(!$this->archive['enddate']) return false;//正生效的无限期信息
					$this->updatefield('enddate',max($this->archive['enddate'],$timestamp) + $orderdays * 86400,'main');
				}
			}else{//排队信息//可能已生效也可能未生效,未生效可能有历史排队记录
				if($this->archive['startdate'] && $this->archive['enddate'] > $timestamp){//生效中
					$this->updatefield('enddate',$this->archive['enddate'] + $orderdays * 86400,'main');
				}else{
					$this->updatefield('orderdays',$this->archive['orderdays'] + $orderdays,'main');
				}
			}
		}
		$this->auser->updatecrids(array($crid => -$crvalue),1,lang('issue tax freeinfo'));
		$updatedb && $this->updatedb();
		farc_active($this->archive['caid']);
		return true;
	}
	function arc_delete($isuser=0){//会员中心的删除
		global $db,$tblprefix,$infohtmldir;
		if(empty($this->aid)) return;
		$this->basic_data();
		if($isuser && $this->archive['checked']) return; 
		$this->archive['arcurl'] && m_unlink(M_ROOT.$infohtmldir.'/'.$this->archive['arcurl']);//删除相应的静态文件
		$db->query("DELETE FROM {$tblprefix}consults WHERE aid='".$this->aid."'");//删除咨询交互的内容
		$db->query("DELETE FROM {$tblprefix}forders WHERE aid='".$this->aid."'", 'UNBUFFERED');//删除信息订单记录
		$customtable = 'farchives_'.$this->archive['chid'];
		$db->query("DELETE FROM {$tblprefix}$customtable WHERE aid='".$this->aid."'", 'UNBUFFERED');
		$db->query("DELETE FROM {$tblprefix}farchives WHERE aid='".$this->aid."'", 'UNBUFFERED');
		$this->init();
	}
	function updatefield($fieldname,$newvalue,$mode='main'){
		if($mode == 'main' && !$this->basiced){
			$this->basic_data();
		}elseif($mode == 'custom' && !$this->detailed){
			$this->detail_data();
		}
		if($this->archive[$fieldname] != stripslashes($newvalue)){
			$this->archive[$fieldname] = stripslashes($newvalue);
			$this->updatearr[$mode][$fieldname] = $newvalue;
		}
	}
	function updatedb(){
		global $db,$tblprefix;
		if(empty($this->aid)) return;
		$this->basic_data();

		$fields = read_cache('ffields',$this->archive['chid']);
		foreach($fields as $k => $v){
			if($v['isfunc']){
				$this->detail_data();
				$v = read_cache('ffield',$this->archive['chid'],$k);
				$this->updatefield($k,field_func($this->archive,$v['func']),$v['tbl']);
			}
		}

		foreach(array('main','custom') as $upmode){
			if(!empty($this->updatearr[$upmode])){
				$sqlstr = '';
				foreach($this->updatearr[$upmode] as $k => $v){
					$sqlstr .= ($sqlstr ? "," : "").$k."='".$v."'";
				}
				if(!empty($sqlstr)){
					$tablename = $upmode == 'main' ? 'farchives' : 'farchives_'.$this->channel['chid'];
					$db->query("UPDATE {$tblprefix}$tablename SET $sqlstr WHERE aid={$this->aid}");
				}
			}
		}
		$this->updatearr = array();
	}
}
?>