www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/admina/subsites.inc.php

    <?
(!defined('M_COM') || !defined('M_ADMIN')) && exit('No Permission');
aheader();
!checkapermission(42) && amessage(lang('no_apermission'));
if($sid && $sid_self) amessage(lang('msite admin item !'));
if($action == 'subsiteadd'){
	if(!submitcheck('bsubsiteadd')){
		a_guide('subsiteadd');
		$submitstr = '';
		tabheader(lang('add content subsite'),'subsiteadd',"?entry=subsites&action=subsiteadd",2,1,1);
		trbasic(lang('subsite cname'),'subsitenew[sitename]','','text');
		trbasic(lang('subsite static dir'),'subsitenew[dirname]','','text');
		trbasic(lang('subsite template dir'),'subsitenew[templatedir]','','text',lang('agtemplatedir'));
		$submitstr .= makesubmitstr('subsitenew[sitename]',1,0,0,80);
		$submitstr .= makesubmitstr('subsitenew[dirname]',1,'tagtype',0,15);
		$submitstr .= makesubmitstr('subsitenew[templatedir]',1,'tagtype',0,15);
		tabfooter('bsubsiteadd');
		check_submit_func($submitstr);
	}else{
		$subsitenew['sitename'] = trim(strip_tags($subsitenew['sitename']));
		$subsitenew['dirname'] = trim(strip_tags($subsitenew['dirname']));
		$subsitenew['templatedir'] = trim(strip_tags($subsitenew['templatedir']));
		if(!$subsitenew['sitename'] || !$subsitenew['dirname'] || !$subsitenew['templatedir']) amessage(lang('subsite data missing'),M_REFERER);
		if(preg_match("/[^a-zA-Z_0-9]+/",$subsitenew['dirname'])) amessage(lang('subsite static dir illegal'),M_REFERER);
		if(preg_match("/[^a-zA-Z_0-9]+/",$subsitenew['templatedir'])) amessage(lang('subsite template dir illegal'),M_REFERER);
		$subsitenew['dirname'] = strtolower($subsitenew['dirname']);
		$subsitenew['templatedir'] = strtolower($subsitenew['templatedir']);
		if(!mmkdir(M_ROOT.$subsitenew['dirname'],0)) amessage(lang('noway create subsite static dir'),M_REFERER);
		if(!mmkdir(M_ROOT.'template/'.$subsitenew['templatedir'],0)) amessage(lang('noway create subsite template dir'),M_REFERER);
		$db->query("INSERT INTO {$tblprefix}subsites SET 
					sitename='$subsitenew[sitename]',
					dirname='$subsitenew[dirname]',
					templatedir='$subsitenew[templatedir]',
					ineedstatic='$timestamp'
					");
		if($nsid = $db->insert_id()){
			adminlog(lang('add subsite'));
			updatecache('subsites');
			$subsites = reload_cache('subsites');
			include_once M_ROOT."./include/cparse.fun.php";
			cn_blank('','i',$nsid);
			amessage(lang('subsite add finish'), '?entry=subsites&action=subsitesedit');
		}else amessage(lang('subsite add failed'), '?entry=subsites&action=subsitesedit');
	}
}elseif($action =='subsitesedit'){
	if(!submitcheck('bsubsitesedit')){
		a_guide('subsitesedit');
		tabheader(lang('subsite manager').'&nbsp; &nbsp; &nbsp; &nbsp; >><a href="?entry=subsites&action=subsiteadd">'.lang('add subsite').'</a>'.'&nbsp; &nbsp; &nbsp; &nbsp; >><a href="?entry=subsites&action=tosubsite">'.lang('msite transto0 subsite').'</a>','subsitesedit','?entry=subsites&action=subsitesedit','10');
		trcategory(array(lang('id'),lang('close'),lang('subsite cname'),lang('order'),lang('static dir'),lang('look'),lang('admin'),lang('delete'),lang('transto0 msite')));
		$query = $db->query("SELECT * FROM {$tblprefix}subsites ORDER BY vieworder,sid");
		while($row = $db->fetch_array($query)){
			$nsid = $row['sid'];
			$row['siteurl']  = view_siteurl($nsid);
			echo "<tr>\n".
				"<td align=\"center\" class=\"item1\" width=\"30\">$row[sid]</td>\n".
				"<td align=\"center\" class=\"item2\" width=\"30\"><input class=\"checkbox\" type=\"checkbox\" name=\"subsitesnew[$nsid][closed]\" value=\"1\"".(empty($row['closed']) ? '' : ' checked')."></td>\n".
				"<td class=\"item1\"><input type=\"text\" name=\"subsitesnew[$nsid][sitename]\" value=\"".mhtmlspecialchars($row['sitename'])."\" size=\"25\"></td>\n".
				"<td align=\"center\" class=\"item2\" width=\"60\"><input type=\"text\" name=\"subsitesnew[$nsid][vieworder]\" value=\"$row[vieworder]\" size=\"4\"></td>\n".
				"<td align=\"center\" class=\"item1\">$row[dirname]</td>\n".
				"<td align=\"center\" class=\"item2\" width=\"30\"><a href=\"$row[siteurl]\" target=\"_blank\">".lang('index')."</a></td>\n".
				"<td align=\"center\" class=\"item1\" width=\"30\"><a href=\"?sid=$nsid\" target=\"_blank\">".lang('admin')."</a></td>\n".
				"<td align=\"center\" class=\"item2\" width=\"30\"><a href=\"?entry=subsites&action=subsitedel&nsid=$nsid\">".lang('delete')."</a></td>\n".
				"<td align=\"center\" class=\"item1\" width=\"60\"><a href=\"?entry=subsites&action=tomsite&nsid=$nsid\">>>".lang('start')."</a></td>\n".
				"</tr>\n";
		}
		tabfooter('bsubsitesedit');
	}else{
		if(!empty($subsitesnew)){
			foreach($subsitesnew as $k => $v){
				$v['closed'] = empty($v['closed']) ? 0 : 1;
				$v['vieworder'] = max(0,intval($v['vieworder']));
				$v['sitename'] = trim($v['sitename']);
				!$v['sitename'] && $v['sitename'] = $subsites[$k]['sitename'];
				$db->query("UPDATE {$tblprefix}subsites SET sitename='$v[sitename]',closed='$v[closed]',vieworder='$v[vieworder]' WHERE sid='$k'");
			}
		}
		updatecache('subsites');
		adminlog(lang('subsite admin'),lang('subsite list admin operate'));
		amessage(lang('subsite operate finish'),"?entry=subsites&action=subsitesedit");
	}
}elseif($action == 'tosubsite'){
	if(!submitcheck('btosubsite')){
		a_guide('tosubsite');
		$submitstr = '';
		tabheader(lang('new subsite setting'),'tosubsite',"?entry=subsites&action=tosubsite",2,1,1);
		trbasic(lang('subsite cname'),'subsitenew[sitename]','','text');
		trbasic(lang('subsite static dir'),'subsitenew[dirname]','','text');
		$submitstr .= makesubmitstr('subsitenew[sitename]',1,0,0,80);
		$submitstr .= makesubmitstr('subsitenew[dirname]',1,'tagtype',0,15);
		tabfooter('btosubsite');
		check_submit_func($submitstr);
	}else{
		$subsitenew['sitename'] = trim(strip_tags($subsitenew['sitename']));
		$subsitenew['dirname'] = trim(strip_tags($subsitenew['dirname']));
		if(!$subsitenew['sitename'] || !$subsitenew['dirname']) amessage(lang('subsite data missing'),M_REFERER);
		if(preg_match("/[^a-zA-Z_0-9]+/",$subsitenew['dirname'])) amessage(lang('subsite static dir illegal'),M_REFERER);
		$subsitenew['dirname'] = strtolower($subsitenew['dirname']);
		if(!mmkdir(M_ROOT.$subsitenew['dirname'],0)) amessage(lang('noway create subsite static dir'),M_REFERER);
		$db->query("INSERT INTO {$tblprefix}subsites SET 
					sitename='$subsitenew[sitename]',
					dirname='$subsitenew[dirname]',
					templatedir='$templatedir',
					ineedstatic='$timestamp'
					");
		if($nsid = $db->insert_id()){
			updatecache('subsites');//需要先将模板目录放入子站内存之中,才能进行模板的转换
			$subsites = reload_cache('subsites');
			include_once M_ROOT."./include/cparse.fun.php";
			cn_blank('','i',$nsid);

			foreach(array('catalogs','cnconfigs','cnodes','altypes','archives','freeinfos','gmissions','gmodels','gurls') as $dbtable){
				$db->query("UPDATE {$tblprefix}$dbtable SET sid='$nsid' WHERE sid='0'");
			}
			//将在子站记录中要保留的记录存下来
			$s_config = array();
			load_cache('channels');
			foreach($channels as $k => $v){
				$v = read_cache('channel',$k,'',$sid);
				$s_config[$k]['available'] = $v['available'];
				$s_config[$k]['arctpl'] = $v['arctpl'];
				$s_config[$k]['pretpl'] = $v['pretpl'];
				$s_config[$k]['srhtpl'] = $v['srhtpl'];
			}
			$s_config = addslashes(serialize($s_config));
			$db->query("UPDATE {$tblprefix}subsites SET channels='$s_config' WHERE sid='$nsid'");

			$s_config = array();
			load_cache('commus');
			foreach($commus as $k => $v){
				$v = read_cache('commu',$k,'',$sid);
				$s_config[$k]['available'] = $v['available'];
				$s_config[$k]['cutpl'] = $v['cutpl'];
			}
			$s_config = addslashes(serialize($s_config));
			$db->query("UPDATE {$tblprefix}subsites SET commus='$s_config' WHERE sid='$nsid'");

			$sqlstr = '';
			foreach(array('cmslogo','cmstitle','cmskeyword','cmsdescription','hometpl',) as $var){
				$sqlstr .= ($sqlstr ? ',' : '')."$var='".addslashes($$var)."'";
			}
			$db->query("UPDATE {$tblprefix}subsites SET $sqlstr WHERE sid='$nsid'");

			//清除已被转走的细分缓存
			load_cache('catalogs,cnodes,altypes,gmissions,gmodels',$sid);
			foreach($catalogs as $k => $v){
				del_cache('catalog',$k,'',$sid);
			}
			foreach($cnodes as $k => $v){
				del_cache('cnode',$k,'',$sid);
			}
			foreach($altypes as $k => $v){
				del_cache('altype',$k,'',$sid);
			}
			foreach($gmissions as $k => $v){
				del_cache('gmission',$k,'',$sid);
			}
			foreach($gmodels as $k => $v){
				del_cache('gmodel',$k,'',$sid);
			}
			//模板中的相关内容转换的sid属性转换
			load_cache('utags,ctags,ptags,rtags,mtpls,sptpls',$sid);
			foreach(array('utags','ctags','ptags','rtags','mtpls','sptpls',) as $var){
				cache2file($$var,$var,$var,$nsid);
			}
			foreach($utags as $k => $v){
				$ocache = read_cache('utag',$k,'',$sid);
				cache2file($ocache,cache_name('utag',$k),'utag',$nsid);
			}
			foreach($ctags as $k => $v){
				$ocache = read_cache('ctag',$k,'',$sid);
				cache2file($ocache,cache_name('ctag',$k),'ctag',$nsid);
			}
			foreach($ptags as $k => $v){
				$ocache = read_cache('ptag',$k,'',$sid);
				cache2file($ocache,cache_name('ptag',$k),'ptag',$nsid);
			}
			foreach($rtags as $k => $v){
				$ocache = read_cache('rtag',$k,'',$sid);
				cache2file($ocache,cache_name('rtag',$k),'rtag',$nsid);
			}
			
			//清除主站的静态目录中的所有内容
			clear_dir(M_ROOT.$cnhtmldir,false);
			@unlink(M_ROOT.$homedefault);

			rebuild_cache(-1);
			adminlog(lang('msite transto0 subsite'));
			amessage(lang('msite transto0 subsite finish'), '?entry=subsites&action=subsitesedit');
		}else amessage(lang('msite transto0 subsite failed'), '?entry=subsites&action=subsitesedit');

	}
}elseif($action == 'tomsite' && $nsid){
	if(empty($confirm)){
		$message = lang('pointed subsite start transto0 msite !')."<br><br>";
		$message .= lang('confirm click')."[<a href=?entry=subsites&action=tomsite&nsid=$nsid&confirm=1>".lang('start')."</a>]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
		$message .= lang('giveup click')."[<a href=?entry=subsites&action=subsitesedit>".lang('goback')."</a>]";
		amessage($message);
	}
	//检查主站是否空站点
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}archives WHERE sid='0'")){
		amessage(lang('please delete msite of archive or album'),'?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}catalogs WHERE sid='0'")){
		amessage(lang('please delete msite of catalog'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}cnodes WHERE sid='0'")){
		amessage(lang('please delete msite of cnode'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}cnconfigs WHERE sid='0'")){
		amessage(lang('please delete msite of cnode config'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}altypes WHERE sid='0'")){
		amessage(lang('please delete msite of altype'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}freeinfos WHERE sid='0'")){
		amessage(lang('please delete msite of isolute page'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}gurls WHERE sid='0'")){
		amessage(lang('please delete msite of gather record'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}gmissions WHERE sid='0'")){
		amessage(lang('please delete msite of gather mission'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}gmodels WHERE sid='0'")){
		amessage(lang('please delete msite of gather channel'), '?entry=subsites&action=subsitesedit');
	}
	//将子站的资料转为主站
	foreach(array('catalogs','cnconfigs','cnodes','altypes','archives','freeinfos','gmissions','gmodels','gurls') as $dbtable){
		$db->query("UPDATE {$tblprefix}$dbtable SET sid='0' WHERE sid='$nsid'");
	}
	//将子站资料库中的设置转为主站设置
	$subsite = $subsites[$nsid];
	if(!empty($subsite['channels'])){
		foreach($subsite['channels'] as $k => $v){
			$sqlstr = '';
			foreach($v as $key => $val) $sqlstr .= ($sqlstr ? ',' : '')."$key='".addslashes($val)."'";
			$db->query("UPDATE {$tblprefix}channels SET $sqlstr WHERE chid='$k'",'SILENT');
		}
	}
	if(!empty($subsite['commus'])){
		foreach($subsite['commus'] as $k => $v){
			$sqlstr = '';
			foreach($v as $key => $val) $sqlstr .= ($sqlstr ? ',' : '')."$key='".addslashes($val)."'";
			$db->query("UPDATE {$tblprefix}commus SET $sqlstr WHERE cuid='$k'",'SILENT');
		}
	}
	$sqlstr = '';
	foreach(array('cmslogo','cmstitle','cmskeyword','cmsdescription','hometpl','templatedir') as $var){
		isset($subsite[$var]) && $db->query("UPDATE {$tblprefix}mconfigs SET value='".addslashes($subsite[$var])."' WHERE varname='$var'");
	}
	$templatedir = $subsite['templatedir'];

	//模板中的相关内容转换的sid属性转换
	load_cache('utags,ctags,ptags,rtags,mtpls,sptpls',$nsid);
	foreach(array('utags','ctags','ptags','rtags','mtpls','sptpls',) as $var){
		cache2file($$var,$var,$var,0);
	}
	foreach($utags as $k => $v){
		$ocache = read_cache('utag',$k,'',$nsid);
		cache2file($ocache,cache_name('utag',$k),'utag',0);
	}
	foreach($ctags as $k => $v){
		$ocache = read_cache('ctag',$k,'',$nsid);
		cache2file($ocache,cache_name('ctag',$k),'ctag',0);
	}
	foreach($ptags as $k => $v){
		$ocache = read_cache('ptag',$k,'',$nsid);
		cache2file($ocache,cache_name('ptag',$k),'ptag',0);
	}
	foreach($rtags as $k => $v){
		$ocache = read_cache('rtag',$k,'',$nsid);
		cache2file($ocache,cache_name('rtag',$k),'rtag',0);
	}

	clear_dir(M_ROOT.$subsite['dirname'],true);//清除子站目录
	clear_dir(M_ROOT."dynamic/cache/$nsid/",true);//清除子站缓存
	@unlink(M_ROOT.$homedefault);//清除可能残留的静态首页

	$db->query("DELETE FROM {$tblprefix}subsites WHERE sid='$nsid'",'SILENT');
	rebuild_cache(-1);
	adminlog(lang('subsite transto0 msite'));
	amessage(lang('subsite transto0 msite finish'), '?entry=subsites&action=subsitesedit');
}elseif($action == 'subsitedel' && $nsid){
	if(empty($confirm)){
		$message = lang('delsubsite').'<br><br>'.lang('del_alert')."<br><br>";
		$message .= lang('confirm click')."[<a href=?entry=subsites&action=subsitedel&nsid=".$nsid."&confirm=1>".lang('delete')."</a>]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
		$message .= lang('giveup click')."[<a href=?entry=subsites&action=subsitesedit>".lang('goback')."</a>]";
		amessage($message);
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}archives WHERE sid='$nsid'")){
		amessage(lang('subsite without archive can delete'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}catalogs WHERE sid='$nsid'")){
		amessage(lang('subsite without catalog can delete'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}cnodes WHERE sid='$nsid'")){
		amessage(lang('subsite without catas cnode can delete'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}cnconfigs WHERE sid='$nsid'")){
		amessage(lang('subsite without cnode config can delete'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}altypes WHERE sid='$nsid'")){
		amessage(lang('subsite without altype can delete'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}freeinfos WHERE sid='$nsid'")){
		amessage(lang('subsite without isolute page can delete'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}gmissions WHERE sid='$nsid'")){
		amessage(lang('subsite without gather mission can delete'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}gmodels WHERE sid='$nsid'")){
		amessage(lang('subsite without gather channel can delete'), '?entry=subsites&action=subsitesedit');
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}gurls WHERE sid='$nsid'")){
		amessage(lang('subsite without gather record can delete'), '?entry=subsites&action=subsitesedit');
	}

	clear_dir(M_ROOT.'template/'.$subsites[$nsid]['templatedir'],true);
	clear_dir(M_ROOT.$subsites[$nsid]['dirname'],true);
	clear_dir(M_ROOT."dynamic/cache/$nsid/",true);

	$db->query("DELETE FROM {$tblprefix}subsites WHERE sid='$nsid'",'SILENT');
	updatecache('subsites');
	amessage(lang('subsite delete finish'),"?entry=subsites&action=subsitesedit");
}
?>