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

    <?php
(!defined('M_COM') || !defined('M_ADMIN')) && exit('No Permission');
aheader();
load_cache('mchannels,fieldwords,initmfields,rprojects');
include_once M_ROOT."./include/fields.fun.php";
if($action == 'mchannelsedit'){
	if(!submitcheck('bmchannelsedit') && !submitcheck('bmchanneladd')) {
		a_guide('mchannelsedit');
		tabheader(lang('member channel manager'),'mchanneledit','?entry=mchannels&action=mchannelsedit','10');
		trcategory(array(lang('id'),lang('available'),lang('channel cname'),lang('admin'),lang('copy'),lang('edit'),lang('delete')));
		foreach($mchannels as $k => $mchannel){
			echo "<tr align=\"center\">".
				"<td class=\"item1\" width=\"30\">$k</td>\n".
				"<td class=\"item2\" align=\"center\" width=\"30\"><input class=\"checkbox\" type=\"checkbox\" name=\"mchannelnew[$k][available]\" value=\"1\"".($mchannel['available'] ? " checked" : "").($mchannel['issystem'] ? ' disabled' : '')."></td>\n".
				"<td class=\"item1\"><input type=\"text\" size=\"30\" maxlength=\"30\" name=\"mchannelnew[$k][cname]\" value=\"$mchannel[cname]\"></td>\n".
				"<td class=\"item1\" width=\"30\">".(empty($mchannel['userforbidadd']) ? '-' : 'Y')."</td>\n".
				"<td class=\"item2\" width=\"30\"><a href=\"?entry=mchannels&action=mchannelcopy&mchid=$mchannel[mchid]\">".lang('copy')."</a></td>\n".
				"<td class=\"item1\" width=\"30\"><a href=\"?entry=mchannels&action=mchanneldetail&mchid=$mchannel[mchid]\">".lang('detail')."</a></td>\n".
				"<td class=\"item2\" width=\"30\"><a href=\"?entry=mchannels&action=mchanneldel&mchid=$mchannel[mchid]\">".lang('delete')."</a></td>\n".
				"</tr>\n";
		}
		tabfooter('bmchannelsedit',lang('modify'));

		tabheader(lang('add member channel'),'mchanneladd','?entry=mchannels&action=mchannelsedit',2,0,1);
		trbasic(lang('member channel cname'),'mchanneladd[cname]');
		tabfooter('bmchanneladd',lang('add'));
		$submitstr = '';
		$submitstr .= makesubmitstr('mchanneladd[cname]',1,0,3,30);
		check_submit_func($submitstr);
	}elseif(submitcheck('bmchannelsedit')){
		!checkapermission('mchannelsedit') && amessage(lang('no_apermission'));
		if(isset($mchannelnew)){
			foreach($mchannelnew as $k => $v) {
				$v['available'] = isset($v['available']) ? $v['available'] : 0;
				$v['cname'] = trim(strip_tags($v['cname']));
				$v['cname'] = $v['cname'] ? $v['cname'] : $mchannels[$k]['cname'];
				if(($v['cname'] != $mchannels[$k]['cname']) || ($v['available'] != $mchannels[$k]['available'])) {
					$db->query("UPDATE {$tblprefix}mchannels SET cname='$v[cname]', available='$v[available]' WHERE mchid='$k'");
				}
			}
			adminlog(lang('edit member channel list'));
			updatecache('mchannels');
			amessage(lang('member channel edit finish'),"?entry=mchannels&action=mchannelsedit");
		}
	}
	elseif(submitcheck('bmchanneladd')) {
		!checkapermission('mchannelsedit') && amessage(lang('no_apermission'));
		$mchanneladd['cname'] = trim(strip_tags($mchanneladd['cname']));
		empty($mchanneladd['cname']) && amessage(lang('data missing'), '?entry=mchannels&action=mchanneledit');
		$db->query("INSERT INTO {$tblprefix}mchannels SET cname='$mchanneladd[cname]'");
		if($mchid = $db->insert_id()){
			$customtable = 'members_'.$mchid;
			$db->query("CREATE TABLE {$tblprefix}$customtable (
						mid mediumint(8) unsigned NOT NULL default '0',
						PRIMARY KEY (mid))".(mysql_get_server_info() > '4.1' ? " ENGINE=MYISAM DEFAULT CHARSET=$dbcharset" : " TYPE=MYISAM"));
			foreach($initmfields as $field){
				$sqlstr = "mchid='$mchid',available='1'";
				foreach(array('ename','cname','issystem','iscustom','datatype','tbl','length','notnull','nohtml','mode','guide','isadmin','mlimit','rpid','issearch','innertext','mcommon','min','max','regular','isfunc','func','vdefault') as $var){
					isset($field[$var]) && $sqlstr .= (!$sqlstr ? '' : ',')."$var='".$field[$var]."'";
				}
				$db->query("INSERT INTO {$tblprefix}mfields SET $sqlstr");
			}
			updatecache('mchannels');
			updatecache('btagnames');
			updatecache('mfields',$mchid);
		}
		adminlog(lang('add member channel'));
		amessage(lang('member channel add finish'),"?entry=mchannels&action=mchannelsedit");
	}
}elseif($action == 'mchannelcopy' && $mchid){
	$forward = empty($forward) ? M_REFERER : $forward;
	$mchannel = $mchannels[$mchid];
	if(!submitcheck('bmchannelcopy')){
		a_guide('mchannelcopy');
		tabheader(lang('member channel copy'),'mchannelcopy',"?entry=mchannels&action=mchannelcopy&mchid=$mchid&forward=".rawurlencode($forward),2,0,1);
		trbasic(lang('soc channel cname'),'',$mchannel['cname'],'');
		trbasic(lang('new channel cname'),'mchannelnew[cname]');
		tabfooter('bmchannelcopy');
		$submitstr = '';
		$submitstr .= makesubmitstr('channelnew[cname]',1,0,0,30);
		check_submit_func($submitstr);
	}else{
		$mchannelnew['cname'] = trim(strip_tags($mchannelnew['cname']));
		if(empty($mchannelnew['cname'])){
			amessage(lang('data missing'),M_REFERER);
		}
		$sqlstr = '';
		foreach(array('userforbidadd','autocheck',) as $k){
			$sqlstr .= ",$k='".addslashes($mchannel[$k])."'";
		}
		$db->query("INSERT INTO {$tblprefix}mchannels SET 
					cname='$mchannelnew[cname]' 
					$sqlstr
					");
		if($nchid = $db->insert_id()){
			$customtable = 'members_'.$nchid;
			$db->query("CREATE TABLE {$tblprefix}$customtable (
						mid mediumint(8) unsigned NOT NULL default '0',
						PRIMARY KEY (mid))".(mysql_get_server_info() > '4.1' ? " ENGINE=MYISAM DEFAULT CHARSET=$dbcharset" : " TYPE=MYISAM"));
			$fields = read_cache('mfields',$mchid);
			foreach($fields as $k => $v){
				$fieldnew = read_cache('mfield',$mchid,$k);
				if($fieldnew['tbl'] == 'custom'){
					$fieldnew = maddslashes($fieldnew);
					$fconfigarr = array(
						'errorurl' => M_REFERER,
						'enamearr' => array(),
						'altertable' => $tblprefix.$customtable,
						'fieldtable' => $tblprefix.'mfields',
						'sqlstr' => "mchid=$nchid,issystem='0',iscustom='1',available='$fieldnew[available]',vieworder='$fieldnew[vieworder]',tbl='custom'",
						'filterstr' => "",
					);
					list($fmode,$fnew,$fsave) = array('m',true,true);
					include_once M_ROOT."./include/fields/$fieldnew[datatype].php";
				}else{
					$sqlstr = '';
					foreach(array('ename','cname','issystem','iscustom','mcommon','available','tbl','innertext','length',
					'datatype','notnull','mlimit','rpid','isadmin','vieworder','mode','guide','min','max','regular','vdefault') as $k){
						$sqlstr .= ",$k='".addslashes($fieldnew[$k])."'";
					}
					$db->query("INSERT INTO {$tblprefix}mfields SET mchid='$nchid' $sqlstr");
				}
			}
			updatecache('mchannels');
			updatecache('btagnames');
			updatecache('mfields',$nchid);
		}
		adminlog(lang('copy archive channel'));
		amessage(lang('member channel copy finish'),"?entry=mchannels&action=mchannelsedit");
	}
}elseif($action == 'mchanneldetail' && $mchid) {
	$mchannel = $mchannels[$mchid];
	$fields = read_cache('mfields',$mchid);
	if(!submitcheck('bmchanneldetail')){
		a_guide('mchanneldetail');
		$autocheckarr = array(0 => lang('handwork check'),1 => lang('auto check'),2 => lang('Email active'));
		tabheader("[$mchannel[cname]]".lang('member channel setting'),'mchanneldetail','?entry=mchannels&action=mchanneldetail&mchid='.$mchid,'4');
		trbasic(lang('member channel cname'),'',$mchannel['cname'],'');
		trbasic(lang('admin_self channel'),'mchannelnew[userforbidadd]',$mchannel['userforbidadd'],'radio');
		trbasic(lang('reg member check mode1'),'',makeradio('mchannelnew[autocheck]',$autocheckarr,$mchannel['autocheck']),'');
		tabfooter();
		tabheader("[$mchannel[cname]]".lang('field manager')."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;>><a href=\"?entry=mchannels&action=mfieldadd&mchid=$mchid\">".lang('add field')."</a>",'','','7');
		trcategory(array(lang('delete'),lang('available'),lang('field cname'),lang('field ename'),lang('admin_self'),lang('order'),lang('field type'),lang('edit')));
		foreach($fields as $k => $field){
			fieldlist($k,$field,'member');
		}
		tabfooter('bmchanneldetail');
	}else{
		if(!empty($delete)){
			foreach($delete as $id){
				if(!$fields[$id]['mcommon']){
					$customtable = 'members_'.$mchid;
					$db->query("ALTER TABLE {$tblprefix}$customtable DROP $id",'SILENT'); 
					$db->query("DELETE FROM {$tblprefix}mfields WHERE ename='$id' AND mchid='$mchid'"); 
					unset($fields[$id]);
					unset($fieldsnew[$id]);
					del_cache('mfield',$mchid,$id);
				}
			}
		}
		foreach($fields as $id => $field){
			$fieldsnew[$id]['cname'] = trim(strip_tags($fieldsnew[$id]['cname']));
			$field['cname'] = $fieldsnew[$id]['cname'] ? $fieldsnew[$id]['cname'] : $field['cname'];
			$field['available'] = $field['issystem'] ? $field['available'] : (empty($fieldsnew[$id]['available']) ? 0 : 1);
			$field['isadmin'] = $field['issystem'] ? '0' : (empty($fieldsnew[$id]['isadmin']) ? 0 : 1);
			$field['vieworder'] = max(0,intval($fieldsnew[$id]['vieworder']));
			$db->query("UPDATE {$tblprefix}mfields SET cname='$field[cname]',available='$field[available]',vieworder='$field[vieworder]',isadmin='$field[isadmin]' WHERE ename='$id' AND mchid='$mchid'");
		}
		$db->query("UPDATE {$tblprefix}mchannels SET 
			userforbidadd='$mchannelnew[userforbidadd]', 
			autocheck='$mchannelnew[autocheck]'
			WHERE mchid='$mchid'");
		adminlog(lang('detail0 modify member channel'));
		updatecache('mchannels');
		updatecache('mfields',$mchid);
		updatecache('btagnames');
		amessage(lang('channel modify finish'), '?entry=mchannels&action=mchanneldetail&mchid='.$mchid);
	}
}
elseif($action == 'mfieldadd' && $mchid){
	if(!submitcheck('bmfieldadd')){
		a_guide('mfieldadd');
		tabheader(lang('add')."&nbsp;[".$mchannels[$mchid]['cname']."]&nbsp;".lang('field'),'mfieldadd',"?entry=mchannels&action=mfieldadd&mchid=$mchid",2,0,1);
		$submitstr = '';
		if(empty($fieldnew['datatype'])){
			trbasic(lang('field type'),'fieldnew[datatype]',makeoption($datatypearr),'select');
			trbasic(lang('weather func field'),'fieldnew[isfunc]',0,'radio');
			tabfooter('bmfieldaddpre',lang('continue'));
		}else{
			list($fmode,$fnew,$fsave) = array('m',true,false);
			include_once M_ROOT."./include/fields/$fieldnew[datatype].php";
			tabfooter('bmfieldadd',lang('add'));
		}
		check_submit_func($submitstr);
	}else{
		$enamearr = $usednames['mfields'];
		$fields = read_cache('mfields',$mchid);
		foreach($fields as $ename => $field){
			if(!in_array($ename,$enamearr)) $enamearr[] = $ename;
		}
		$fconfigarr = array(
			'errorurl' => '?entry=mchannels&action=mchanneldetail&mchid='.$mchid,
			'enamearr' => $enamearr,
			'altertable' => $tblprefix.'members_'.$mchid,
			'fieldtable' => $tblprefix.'mfields',
			'sqlstr' => "mchid=$mchid,iscustom='1',available='1',tbl='custom'",
			'filterstr' => "/[^a-zA-Z_0-9]+|^[0-9_]+|^grouptype(.*?)|^currency(.*?)/",
		);
		list($fmode,$fnew,$fsave) = array('m',true,true);
		include_once M_ROOT."./include/fields/$fieldnew[datatype].php";
		adminlog(lang('add member message field'));
		updatecache('mfields',$mchid);
		updatecache('btagnames');
		amessage(lang('field add finish'), '?entry=mchannels&action=mchanneldetail&mchid='.$mchid);

	}
}
elseif($action == 'mchanneldel' && $mchid) {
	$mchannel = $mchannels[$mchid];
	if($mchannel['issystem']) amessage(lang('system channel cannot delete'), '?entry=mchannels&action=mchannelsedit');
	if(empty($confirm)){
		$message = lang('del_alert')."<br><br>";
		$message .= lang('confirm click')."[<a href=?entry=mchannels&action=mchanneldel&mchid=".$mchid."&confirm=1>".lang('delete')."</a>]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
		$message .= lang('giveup click')."[<a href=?entry=mchannels&action=mchannelsedit>".lang('goback')."</a>]";
		amessage($message);
	}
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}members WHERE mchid='$mchid'")){
		amessage(lang('channel without member can delete'), '?entry=mchannels&action=mchannelsedit');
	}
	$customtable = 'members_'.$mchid;
	$db->query("DROP TABLE IF EXISTS {$tblprefix}$customtable",'SILENT');
	$db->query("DELETE FROM {$tblprefix}mchannels WHERE mchid='$mchid'",'SILENT');
	$db->query("DELETE FROM {$tblprefix}mfields WHERE mchid='$mchid'",'SILENT');
	//清除相关缓存
	$fields = array_keys(read_cache('mfields',$mchid));
	foreach($fields as $k){
		del_cache('mfield',$mchid,$k);
	}
	del_cache('mfields',$mchid);
	adminlog(lang('delete member channel'));
	updatecache('mchannels');
	updatecache('btagnames');
	amessage(lang('member channel delete finish'),"?entry=mchannels&action=mchannelsedit");
}
elseif($action == 'mfielddetail' && $mchid && $fieldename){
	!isset($mchannels[$mchid]) && amessage(lang('confirmchoose member channel'), '?entry=mchannels&action=mchannelsedit');
	$field = read_cache('mfield',$mchid,$fieldename);
	empty($field) && amessage(lang('confirmchoose field'), '?entry=mchannels&action=mchanneldetail&mchid='.$mchid);
	if(!submitcheck('bmfielddetail')){
		a_guide('mfielddetail');
		$submitstr = '';
		tabheader("[".$mchannels[$mchid]['cname']."]&nbsp;&nbsp;".lang('field edit')."&nbsp;&nbsp;[$field[cname]]",'mfielddetail',"?entry=mchannels&action=mfielddetail&mchid=$mchid&fieldename=$fieldename",2,0,1);
		list($fmode,$fnew,$fsave) = array('m',false,false);
		include_once M_ROOT."./include/fields/$field[datatype].php";
		tabfooter('bmfielddetail');
		check_submit_func($submitstr);
	}else{
		$customtable = $field['tbl'] == 'main' ? 'members' : ($field['tbl'] == 'sub' ? 'members_sub' : ('members_'.$mchid));
		$fconfigarr = array(
			'altertable' => $tblprefix.$customtable,
			'fieldtable' => $tblprefix.'mfields',
			'wherestr' => "WHERE ename='$fieldename' AND mchid=$mchid",
		);
		list($fmode,$fnew,$fsave) = array('m',false,true);
		include_once M_ROOT."./include/fields/$field[datatype].php";
		updatecache('mfields',$mchid);
		adminlog(lang('detail0 modify member channel message field'));
		amessage(lang('field edit finish'),'?entry=mchannels&action=mchanneldetail&mchid='.$mchid);
	}
}
elseif($action == 'initmfieldadd'){
	if(!submitcheck('binitmfieldadd')){
		a_guide('initmfieldadd');
		tabheader(lang('add member common field'),'initmfieldadd',"?entry=mchannels&action=initmfieldadd",2,0,1);
		$submitstr = '';
		if(empty($fieldnew['datatype'])){
			trbasic(lang('field type'),'fieldnew[datatype]',makeoption($datatypearr),'select');
			trbasic(lang('weather func field'),'fieldnew[isfunc]',0,'radio');
			tabfooter('binitmfieldaddpre',lang('continue'));
		}else{
			list($fmode,$fnew,$fsave) = array('im',true,false);
			include_once M_ROOT."./include/fields/$fieldnew[datatype].php";
			tabfooter('binitmfieldadd',lang('add'));
		}
		check_submit_func($submitstr);
	}else{
		!checkapermission('initmfields') && amessage(lang('no_apermission'));
		$enamearr = $usednames['mfields'];
		foreach($mchannels as $k => $v){
			$fields = read_cache('mfields',$k);
			$enamearr = array_unique(array_merge($enamearr,array_keys($fields)));
		}
		$fconfigarr = array(
			'errorurl' => '?entry=mchannels&action=initmfieldsedit',
			'enamearr' => $enamearr,
			'altertable' => $tblprefix.'members_sub',
			'fieldtable' => $tblprefix.'mfields',
			'sqlstr' => "iscustom='1',mcommon='1',available='1',tbl='sub'",
			'filterstr' => "/[^a-zA-Z_0-9]+|^[0-9_]+|^grouptype(.*?)|^currency(.*?)/",
		);
		list($fmode,$fnew,$fsave) = array('im',true,true);
		include_once M_ROOT."./include/fields/$fieldnew[datatype].php";
		updatecache('initmfields');
		$mchids = array_keys($mchannels);
		foreach($mchids as $mchid){
			$sqlstr = "ename='$fieldnew[ename]',cname='$fieldnew[cname]',issystem='0',iscustom='1',mcommon='1',mchid='$mchid',tbl='sub'";
			foreach(array('datatype','length','notnull','nohtml','mode','guide','isadmin','mlimit','rpid','issearch','innertext','mcommon','min','max','regular','isfunc','func','vdefault') as $var){
				isset($fieldnew[$var]) && $sqlstr .= (!$sqlstr ? '' : ',')."$var='".$fieldnew[$var]."'";
			}
			$db->query("INSERT INTO {$tblprefix}mfields SET $sqlstr");
			updatecache('mfields',$mchid);
		}
		adminlog(lang('add member common message field'));
		updatecache('btagnames');
		updatecache('usednames','mfields');
		amessage(lang('field add finish'), '?entry=mchannels&action=initmfieldsedit');
	}
}
elseif($action == 'initmfieldsedit'){
	if(!submitcheck('binitmfieldsedit')){
		a_guide('initmfieldsedit');
		tabheader(lang('member common field manager')."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;>><a href=\"?entry=mchannels&action=initmfieldadd\">".lang('add field')."</a>",'initmfieldsedit','?entry=mchannels&action=initmfieldsedit','5');
		trcategory(array(lang('delete'),lang('field cname'),lang('field ename'),lang('field type'),lang('edit')));
		foreach($initmfields as $k => $field) {
			fieldlist($k,$field,'initm');
		}
		tabfooter('binitmfieldsedit');
	}else{
		!checkapermission('initfields') && amessage(lang('no_apermission'));
		if(!empty($delete)){
			$mchids = array_keys($mchannels);
			foreach($delete as $k){
				if($initmfields[$k]['iscustom']){
					$db->query("ALTER TABLE {$tblprefix}members_sub DROP $k"); 
					$db->query("DELETE FROM {$tblprefix}mfields WHERE ename='$k'");
					unset($initmfields[$k]);
					unset($fieldsnew[$k]);
					foreach($mchids as $mchid){
						del_cache('mfield',$mchid,$k);
					}
				}
			}
			foreach($mchids as $mchid){
				updatecache('mfields',$mchid);
			}
			updatecache('usednames','mfields');
			updatecache('btagnames');
		}
		foreach($initmfields as $id => $field){
			$field['cname'] = trim($fieldsnew[$id]['cname']) ? trim($fieldsnew[$id]['cname']) : $field['cname'];
			$db->query("UPDATE {$tblprefix}mfields SET cname='$field[cname]' WHERE ename='$id' AND mchid='0'");
		}
		adminlog(lang('edit member common message field manager list'));
		updatecache('initmfields');
		amessage(lang('field edit finish'),'?entry=mchannels&action=initmfieldsedit');
	}
}elseif($action == 'initmfielddetail' && $fieldename){
	!checkapermission('initmfields') && amessage(lang('no_apermission'));
	if(empty($initmfields[$fieldename])){
		amessage(lang('confirmchoose field'), '?entry=mchannels&action=initmfieldsedit');
	}
	$field = $initmfields[$fieldename];
	if(!submitcheck('binitfielddetail')){
		a_guide('binitmfielddetail');
		tabheader(lang('member common field manager'),'initmfielddetail',"?entry=mchannels&action=initmfielddetail&fieldename=$fieldename",2,0,1);
		$submitstr = '';
		list($fmode,$fnew,$fsave) = array('im',false,false);
		include_once M_ROOT."./include/fields/$field[datatype].php";
		tabfooter('binitfielddetail');
		check_submit_func($submitstr);
	}else{
		$tblname = $field['tbl'] == 'main' ? 'members' : 'members_sub';
		$fconfigarr = array(
			'altertable' => $tblprefix.$tblname,
			'fieldtable' => $tblprefix.'mfields',
			'wherestr' => "WHERE ename='$fieldename' AND mchid=0",
		);
		list($fmode,$fnew,$fsave) = array('im',false,true);
		include_once M_ROOT."./include/fields/$field[datatype].php";
		adminlog(lang('detail0 modify member common message field'));
		updatecache('initmfields');
		amessage(lang('field modify finish'),'?entry=mchannels&action=initmfieldsedit');
	}
}
?>