www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/admina/subsetup.inc.php
<? (!defined('M_COM') || !defined('M_ADMIN')) && exit('No Permission'); include_once M_ROOT."./include/subsetup.fun.php"; include_once M_ROOT."./include/fields.fun.php"; aheader(); $subsetupdir = M_ROOT.'./dynamic/subsetup/'; if(!is_dir($subsetupdir) || !is_file($subsetupdir.'setupsids.cac.php') || !is_dir($subsetupdir.'cache/') || !is_dir($subsetupdir.'template/')) amessage(lang('please upload want install of subsite init data !<br><br> data upload path : ').'dynamic/subsetup/'); //作个初始资料是否合法的分析???????????? $action = empty($action) ? 'subsites' : $action; $setupsids = oread_cache('setupsids');//记录原始资料包中的子站id--$osid,及要安装成的子站id--$nsid @extract($setupsids); $stepeds = oread_cache('stepeds');//记录已经操作的步骤 $stepadds = oread_cache('stepadds');//记录每个步骤中添加的id记录,直接用表名来记录id $idsmap = oread_cache('idsmap');//记录新旧id的对应关系 $stepsarr = array(//所有需要操作的步骤 'subsites' => lang('subsite setting'), 'currencys' => lang('currency type'), 'mchannels' => lang('member channel'), 'grouptypes' => lang('grouptype'), 'usergroups' => lang('usergroup'), 'commus' => lang('commu item'),//包含购买字段及送货方式等设置 'channels' => lang('archive channel'), 'altypes' => lang('altype'), 'catalogs' => lang('catalog'), 'cotypes' => lang('cotypem'), 'coclasses' => lang('coclass setting'), 'cnodes' => lang('catas cnode'),//包含节点结构 'fchannels' => lang('affix channel'), 'fcatalogs' => lang('affix coclass'), 'freeinfos' => lang('isolute page'), 'templates' => lang('template'),//包含标识,常规模板,功能模板 ); //显示页面顶部链接 $stepurls = array(); $i = 1; foreach($stepsarr as $k => $v){ $stepurls[] = "$i ".($k == $action ? "<b>$v</b>" : "<a href=\"?entry=subsetup&action=$k\">$v</a>").(isset($stepeds[$k]) ? 'ok' : ''); $i ++; } tabheader(lang('content subsite install').' >><a href="?entry=subsetup&action=delupload">'.lang('delete install upload data and record').'</a>'); echo "<tr><td class=\"item2\" colspan=\"2\">"; echo tab_list($stepurls,8); echo "</td></tr>"; tabfooter(); unset($stepurls); if($action == 'subsites'){ $n_operated = empty($nsid) ? false : true; load_cache('subsites'); $do_enable = $n_operated ? false : true; $undo_enable = !$n_operated || isset($stepeds['currencys']) ? false : true; if(!submitcheck('bdo') && !submitcheck('bundo')){ if(!$n_operated){ $submitstr = ''; tabheader(lang('add content subsite'),'subsiteadd',"?entry=subsetup&action=subsites",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'); $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('bdo',lang('nextstep')); check_submit_func($submitstr); }else{ tabheader(lang('add content subsite'),'subsiteadd',"?entry=subsetup&action=subsites"); trbasic(lang('subsite id'),'',$nsid,''); trbasic(lang('subsite cname'),'',$subsites[$nsid]['sitename'],''); trbasic(lang('subsite static dir'),'',$subsites[$nsid]['dirname'],''); trbasic(lang('subsite template dir'),'',$subsites[$nsid]['templatedir'],''); tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; } }elseif(submitcheck('bdo')){ if(!$do_enable) amessage(lang('please dont repeat operate !')); $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')); if(preg_match("/[^a-zA-Z_0-9]+/",$subsitenew['dirname'])) amessage(lang('subsite static dir illegal')); if(preg_match("/[^a-zA-Z_0-9]+/",$subsitenew['templatedir'])) amessage(lang('subsite template dir illegal')); $subsitenew['dirname'] = strtolower($subsitenew['dirname']); $subsitenew['templatedir'] = strtolower($subsitenew['templatedir']); if(!mmkdir(M_ROOT.$subsitenew['dirname'],0)) amessage(lang('noway create subsite static dir')); if(!mmkdir(M_ROOT.'template/'.$subsitenew['templatedir'],0)) amessage(lang('noway create subsite template dir')); $db->query("INSERT INTO {$tblprefix}subsites SET sitename='$subsitenew[sitename]', dirname='$subsitenew[dirname]', templatedir='$subsitenew[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); $setupsids['nsid'] = $nsid; ocache2file($setupsids,'setupsids'); $stepeds['subsites'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed'),'?entry=subsetup&action=currencys'); }else amessage(lang('subsite add failed')); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); clear_dir(M_ROOT.'template/'.$subsites[$nsid]['templatedir'],true); clear_dir(M_ROOT.$subsites[$nsid]['dirname'],true); $db->query("DELETE FROM {$tblprefix}subsites WHERE sid='$nsid'",'SILENT'); updatecache('subsites'); $setupsids['nsid'] = 0; ocache2file($setupsids,'setupsids'); unset($stepeds['subsites']); ocache2file($stepeds,'stepeds'); amessage(lang('undo succeed'),'?entry=subsetup&action=subsites'); } }elseif($action == 'currencys'){ load_cache('currencys'); $ocurrencys = oread_cache('currencys','','','cache'); $n_operated = isset($stepeds['currencys']); $do_enable = $n_operated || !isset($stepeds['subsites']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['mchannels']) ? false : true;//如果上一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('currency type transto').' - '.($n_operated ? ' Y' : ' N'),'currencys','?entry=subsetup&action=currencys','3'); trcategory(array(lang('source currency id'),lang('source currency cname'),lang('transto current system'))); foreach($ocurrencys as $k => $v){ echo "<tr align=\"center\"><td class=\"item1\">$k</td>\n". "<td class=\"item2\">$v[cname]</td>\n". "<td class=\"item1\"><select style=\"vertical-align: middle;\" name=\"currencysnew[$k]\">".makeoption(array(0 => lang('add')) + cridsarr(),empty($idsmap['crids'][$k]) ? 0 : $idsmap['crids'][$k])."</select></td></tr>\n"; } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ if(!$do_enable) amessage(lang('please dont repeat operate !')); if(!empty($currencysnew)){ foreach($currencysnew as $k => $v){ if(empty($v)){//新增id $sqlstr = ''; foreach($ocurrencys[$k] as $key => $val){ !in_array($key,array('crid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}currencys SET $sqlstr"); if(!($crid = $db->insert_id())){ amessage(lang('subsetupcanceling'));//?????????创建积分不成功,需要将本步当前已进行的操作全部自动撤消 } $db->query("ALTER TABLE {$tblprefix}members ADD currency$crid int(10) NOT NULL default 0", 'SILENT'); $stepadds['currencys'][] = $crid;//将新加入的crid记录在案 $idsmap['crids'][$k] = $crid;//将新旧id的对应关系记录在案 }else{//将id指定为对应现有id $idsmap['crids'][$k] = $v; } } //将子站中的价格方案转入进来 load_cache('crprices'); $ocrprices = oread_cache('crprices','','','cache'); foreach($ocrprices as $k => $v){//记录积分方案的id对应关系 if(!isset($crprices[$idsmap['crids'][$v['crid']].'_'.$v['crvalue']])){//如果子站的价格方案不存在,则需要加入 $sqlstr = ''; $sqlstr .= (!$sqlstr ? '' : ',')."crid='".$idsmap['crids'][$v['crid']]."'"; $sqlstr .= (!$sqlstr ? '' : ',')."ename='".($idsmap['crids'][$v['crid']].'_'.$v['crvalue'])."'"; foreach($v as $key => $val){ !in_array($key,array('cpid','crid','ename')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}crprices SET $sqlstr"); if(!($cpid = $db->insert_id())){ amessage(lang('subsetupcanceling'));//?????????创建不成功,需要将本步当前已进行的操作全部自动撤消 } $stepadds['crprices'][] = $cpid; } $idsmap['crprices'][$k] = $idsmap['crids'][$v['crid']].'_'.$v['crvalue']; } //将子站中的积分兑换方案转入进来 load_cache('crprojects'); $ocrprojects = oread_cache('crprojects','','','cache'); foreach($ocrprojects as $k => $v){ $nename = $idsmap['crids'][$v['scrid']].'_'.$idsmap['crids'][$v['ecrid']]; $nexist = 0; foreach($crprojects as $nk => $nv){ if($nename == $nv['ename']){ $idsmap['crprojects'][$k] = $nk; $nexist = 1; break; } } if(!$nexist){//需要新增积分兑换方案 $sqlstr = ''; $sqlstr .= (!$sqlstr ? '' : ',')."scrid='".$idsmap['crids'][$v['scrid']]."'"; $sqlstr .= (!$sqlstr ? '' : ',')."ecrid='".$idsmap['crids'][$v['ecrid']]."'"; $sqlstr .= (!$sqlstr ? '' : ',')."ename='".($idsmap['crids'][$v['scrid']].'_'.$idsmap['crids'][$v['ecrid']])."'"; foreach($v as $key => $val){ !in_array($key,array('crpid','ename','scrid','ecrid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}crprojects SET $sqlstr"); if(!($crpid = $db->insert_id())){ amessage(lang('subsetupcanceling'));//?????????创建不成功,需要将本步当前已进行的操作全部自动撤消 } $stepadds['crprojects'][] = $crpid; $idsmap['crprojects'][$k] = $crpid; } } //更新缓存 updatecache('currencys'); updatecache('crprices'); updatecache('crprojects'); } $stepeds['currencys'] = 1; ocache2file($stepeds,'stepeds'); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); amessage(lang('operate succeed !'),'?entry=subsetup&action=mchannels'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['currencys'])){ $db->query("DELETE FROM {$tblprefix}currencys WHERE crid IN (".mimplode($stepadds['currencys']).")",'SILENT'); foreach($stepadds['currencys'] as $crid){ $db->query("ALTER TABLE {$tblprefix}members DROP currency$crid",'SILENT'); $db->query("DELETE FROM {$tblprefix}crprices WHERE crid='$crid'",'SILENT'); $db->query("DELETE FROM {$tblprefix}crprojects WHERE scrid='$crid' OR ecrid='$crid'",'SILENT'); } } if(!empty($stepadds['crprices'])){ $db->query("DELETE FROM {$tblprefix}crprices WHERE cpid IN (".mimplode($stepadds['crprices']).")",'SILENT'); } if(!empty($stepadds['crprojects'])){ $db->query("DELETE FROM {$tblprefix}crprojects WHERE crpid IN (".mimplode($stepadds['crprojects']).")",'SILENT'); } updatecache('currencys'); updatecache('crprices'); updatecache('crprojects'); unset($stepeds['currencys'],$idsmap['crids'],$idsmap['crprices'],$idsmap['crprojects'],$stepadds['currencys'],$stepadds['crprices'],$stepadds['crprojects']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=currencys'); } }elseif($action == 'mchannels'){ //需要处理会员通用字段 //会员模型 //模型定义字段,就不要处理了. //会员模型变更方案 load_cache('mchannels'); $omchannels = oread_cache('mchannels','','','cache'); $n_operated = isset($stepeds['mchannels']); $do_enable = $n_operated || !isset($stepeds['currencys']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['grouptypes']) ? false : true;//如果上一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('member channel transto').' - '.($n_operated ? ' Y' : ' N'),'mchannels','?entry=subsetup&action=mchannels','3'); trcategory(array(lang('source member channel id'),lang('source member channel cname'),lang('transto current system'))); foreach($omchannels as $k => $v){ echo "<tr align=\"center\"><td class=\"item1\">$k</td>\n". "<td class=\"item2\">$v[cname]</td>\n". "<td class=\"item1\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k]\">".makeoption(array(0 => lang('add')) + mchidsarr(),empty($idsmap['mchids'][$k]) ? 0 : $idsmap['mchids'][$k])."</select></td></tr>\n"; } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ if(!$do_enable) amessage(lang('invalid operate !')); if(!empty($transtonew)){ //处理会员模型 load_cache('initmfields,fieldwords'); foreach($omchannels as $k => $v){ if(empty($transtonew[$k])){//新建会员模型 $sqlstr = ''; foreach($v as $key => $val){ !in_array($key,array('mchid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}mchannels SET $sqlstr"); if($mchid = $db->insert_id()){ $db->query("CREATE TABLE {$tblprefix}members_$mchid (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($field as $key => $val){ !in_array($key,array('mfid','mchid','available')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}mfields SET $sqlstr"); if(!($mfid = $db->insert_id())) continue; $stepadds['mfields'][] = $mfid; } //将模型专用的字段转入进来 $fields = oread_cache('mfields',$k,'','cache'); foreach($fields as $k1 => $v1){ if($v1['tbl'] == 'custom'){//只转入模型定义的字段 $fieldnew = oread_cache('mfield',$k,$k1,'cache'); $fieldnew = maddslashes($fieldnew); $fconfigarr = array( 'errorurl' => '', 'enamearr' => $usednames['mfields'], '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 M_ROOT."./include/fields/$v1[datatype].php"; if(!($mfid = $db->insert_id())) continue;//通用字段记录 $stepadds['mfields'][] = $mfid; } } $stepadds['mchannels'][] = $mchid;//将新增的id记录在案 $idsmap['mchids'][$k] = $mchid;//将新旧id的对应关系记录在案 } updatecache('mfields',$mchid); }else{//指定对应会员模型 $idsmap['mchids'][$k] = $transtonew[$k];//将新旧id的对应关系记录在案 } } updatecache('mchannels'); $mchannels = reload_cache('mchannels'); //将子站中的通用会员字段转入进来 $oinitmfields = oread_cache('initmfields','','','cache'); $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' => '', 'enamearr' => $enamearr, 'altertable' => $tblprefix.'members_sub', 'fieldtable' => $tblprefix.'mfields', 'sqlstr' => "iscustom='1',available='1',tbl='sub'", 'filterstr' => "/[^a-zA-Z_0-9]+|^[0-9_]+|^grouptype(.*?)|^currency(.*?)/", ); $mchids = array_keys($mchannels); foreach($oinitmfields as $k => $v){ if(!in_array($v['ename'],$enamearr)){ $fieldnew = &$v; $fieldnew = maddslashes($fieldnew); list($fmode,$fnew,$fsave) = array('im',true,true); include M_ROOT."./include/fields/$v[datatype].php"; if(!($mfid = $db->insert_id())) continue;//通用字段记录 $stepadds['mfields'][] = $mfid; $stepadds['initmfields'][] = $v['ename'];//记录了增加的通用字段的id foreach($mchids as $mchid){//将通用字段加入到每个会员模型中 $sqlstr = "issystem='0',iscustom='1',mcommon='1',mchid='$mchid',tbl='sub'"; foreach($v as $key => $val){ !in_array($key,array('fid','issystem','iscustom','mcommon','mchid','tbl')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='$val'"; } $db->query("INSERT INTO {$tblprefix}mfields SET $sqlstr"); if(!($mfid = $db->insert_id())) continue; $stepadds['mfields'][] = $mfid; updatecache('mfields',$mchid); } } } updatecache('initmfields'); updatecache('usednames','mfields'); //将模型变更方案转入进来 $omprojects = oread_cache('mprojects','','','cache'); foreach($omprojects as $k => $v){ $v['smchid'] = str2newid($v['smchid'],'chids'); $v['tmchid'] = str2newid($v['tmchid'],'chids'); $v['ename'] = $v['smchid'].'_'.$v['tmchid']; $sqlstr = ''; foreach($v as $key => $val){ !in_array($key,array('mpid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='$val'"; } $db->query("INSERT INTO {$tblprefix}mprojects SET $sqlstr"); if(!($mpid = $db->insert_id())) continue; $stepadds['mprojects'][] = $mpid; } updatecache('mprojects'); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); } $stepeds['mchannels'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=grouptypes'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['mchannels'])){//清除所增会员模型的所有资料及缓存 foreach($stepadds['mchannels'] as $mchid){ $db->query("DROP TABLE IF EXISTS {$tblprefix}members_$mchid",'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); } } if(!empty($stepadds['initmfields'])){//删除通用字段在主表中增加的字段 foreach($stepadds['initmfields'] as $ename){ $db->query("ALTER TABLE {$tblprefix}members_sub DROP $ename",'SILENT');//会员通用字段是放在sub表中的 //还要删除每个模型中该通用字段的缓存 foreach($mchannels as $k => $v){ del_cache('mfield',$k,$ename); } } } updatecache('initmfields'); if(!empty($stepadds['mfields'])){//删除在mfields表中增加的记录 $db->query("DELETE FROM {$tblprefix}mfields WHERE mfid IN (".mimplode($stepadds['mfields']).")",'SILENT'); } if(!empty($stepadds['mprojects'])){//删除模型变更方案 $db->query("DELETE FROM {$tblprefix}mprojects WHERE mpid IN (".mimplode($stepadds['mprojects']).")",'SILENT'); } updatecache('mprojects'); updatecache('mchannels'); $mchannels = reload_cache('mchannels'); foreach($mchannels as $k => $v){ updatecache('mfields',$k); } unset($stepeds['mchannels'],$idsmap['mchids'],$stepadds['mchannels'],$stepadds['initmfields'],$stepadds['mfields'],$stepadds['mprojects']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=mchannels'); } }elseif($action == 'grouptypes'){ load_cache('grouptypes'); $ogrouptypes = oread_cache('grouptypes','','','cache'); $n_operated = isset($stepeds['grouptypes']); $do_enable = $n_operated || !isset($stepeds['mchannels']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['usergroups']) ? false : true;//如果上一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ $gtidsarr = array(); foreach($grouptypes as $k => $v){ if(!$v['issystem']) $gtidsarr[$k] = $v['cname']; } tabheader(lang('grouptype transto').' - '.($n_operated ? ' Y' : ' N'),'grouptypes','?entry=subsetup&action=grouptypes','3'); trcategory(array(lang('source grouptype id'),lang('source grouptype cname'),lang('transto current system'))); foreach($ogrouptypes as $k => $v){ if(!$v['issystem']){ echo "<tr align=\"center\"><td class=\"item1\">$k</td>\n". "<td class=\"item2\">$v[cname]</td>\n". "<td class=\"item1\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k]\">".makeoption(array(0 => lang('add')) + $gtidsarr,empty($idsmap['gtids'][$k]) ? 0 : $idsmap['gtids'][$k])."</select></td></tr>\n"; } } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ foreach($ogrouptypes as $k => $v){ if(!$v['issystem']){ if(empty($transtonew[$k])){ $sqlstr = "crid='".str2newid($v['crid'],'crids')."',mchids='".str2newid($v['mchids'],'mchids')."'"; foreach($v as $key => $val){ !in_array($key,array('gtid','crid','mchids')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}grouptypes SET $sqlstr"); if($gtid = $db->insert_id()){ $addfieldid = 'grouptype'.$gtid; $addfielddate = 'grouptype'.$gtid.'date'; $db->query("ALTER TABLE {$tblprefix}members ADD $addfieldid smallint(6) unsigned NOT NULL default 0", 'SILENT'); $db->query("ALTER TABLE {$tblprefix}members ADD $addfielddate int(10) unsigned NOT NULL default 0", 'SILENT'); $stepadds['grouptypes'][] = $gtid;//将新增的id记录在案 $idsmap['gtids'][$k] = $gtid;//将新旧id的对应关系记录在案 } }else{ $idsmap['gtids'][$k] = $transtonew[$k];//将新旧id的对应关系记录在案 } } } updatecache('grouptypes'); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); $stepeds['grouptypes'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=usergroups'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['grouptypes'])){ $db->query("DELETE FROM {$tblprefix}grouptypes WHERE gtid IN (".mimplode($stepadds['grouptypes']).")",'SILENT'); foreach($stepadds['grouptypes'] as $gtid){ $addfieldid = 'grouptype'.$gtid; $addfielddate = 'grouptype'.$gtid.'date'; $db->query("ALTER TABLE {$tblprefix}members DROP $addfieldid", 'SILENT'); $db->query("ALTER TABLE {$tblprefix}members DROP $addfielddate", 'SILENT'); del_cache('usergroups',$gtid); } } updatecache('grouptypes'); unset($stepeds['grouptypes'],$idsmap['gtids'],$stepadds['grouptypes']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=grouptypes'); } }elseif($action == 'usergroups'){ load_cache('grouptypes'); $ogrouptypes = oread_cache('grouptypes','','','cache'); $n_operated = isset($stepeds['usergroups']); $do_enable = $n_operated || !isset($stepeds['grouptypes']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['commus']) ? false : true;//如果下一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('usergroup transto').' - '.($n_operated ? ' Y' : ' N'),'usergroups','?entry=subsetup&action=usergroups','4'); trcategory(array(lang('source grouptype'),lang('source usergroup id'),lang('source usergroup cname'),lang('transto current system'))); foreach($ogrouptypes as $k => $v){ if(!$v['issystem']){ $ousergroups = oread_cache('usergroups',$k,'','cache'); foreach($ousergroups as $k1 => $v1){ echo "<tr align=\"center\"><td class=\"item1\">$v[cname]</td>\n<td class=\"item2\">$k1</td>\n". "<td class=\"item1\">$v1[cname]</td>\n". "<td class=\"item2\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k1]\">".makeoption(array(0 => lang('add')) + ugidsarr($idsmap['gtids'][$k]),empty($idsmap['ugids'][$k1]) ? 0 : $idsmap['ugids'][$k1])."</select></td></tr>\n"; } } } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ foreach($ogrouptypes as $k => $v){ if(!$v['issystem']){ $ousergroups = oread_cache('usergroups',$k,'','cache'); foreach($ousergroups as $k1 => $v1){ if(empty($transtonew[$k1])){ $v1 = oread_cache('usergroup',$k,$k1,'cache'); $sqlstr = "gtid='".$idsmap['gtids'][$k]."',mchids='".str2newid($v1['mchids'],'mchids')."'"; foreach($v1 as $key => $val){ !in_array($key,array('ugid','gtid','mchids')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}usergroups SET $sqlstr"); if($ugid = $db->insert_id()){ $stepadds['usergroups'][] = $ugid;//将新增的id记录在案 $idsmap['ugids'][$k1] = $ugid;//将新旧id的对应关系记录在案 } }else{ $idsmap['ugids'][$k1] = $transtonew[$k1];//将新旧id的对应关系记录在案 } } updatecache('usergroups',$idsmap['gtids'][$k]); } } //将会员组变更方案转入进来 $ouprojects = oread_cache('uprojects','','','cache'); foreach($ouprojects as $k => $v){ $v['gtid'] = str2newid($v['gtid'],'gtids'); $v['sugid'] = str2newid($v['sugid'],'ugids'); $v['tugid'] = str2newid($v['tugid'],'ugids'); $v['ename'] = $v['sugid'].'_'.$v['tugid']; $sqlstr = ''; foreach($v as $key => $val){ !in_array($key,array('upid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='$val'"; } $db->query("INSERT INTO {$tblprefix}uprojects SET $sqlstr"); if(!($upid = $db->insert_id())) continue; $stepadds['uprojects'][] = $upid; } updatecache('uprojects'); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); $stepeds['usergroups'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=commus'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['usergroups'])){ $db->query("DELETE FROM {$tblprefix}usergroups WHERE ugid IN (".mimplode($stepadds['usergroups']).")",'SILENT'); foreach($grouptypes as $k => $v){//删除缓存 $usergroups = read_cache('usergroups',$k); foreach($usergroups as $k1 => $v1){ if(in_array($k1,$stepadds['usergroups'])) del_cache('usergroup',$k,$k1); } updatecache('usergroups',$k); } } if(!empty($stepadds['uprojects'])){//删除会员组变更方案 $db->query("DELETE FROM {$tblprefix}uprojects WHERE upid IN (".mimplode($stepadds['uprojects']).")",'SILENT'); } updatecache('uprojects'); unset($stepeds['usergroups'],$idsmap['ugids'],$stepadds['usergroups'],$stepadds['uprojects']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=usergroups'); } }elseif($action == 'commus'){ load_cache('commus,fieldwords'); $ocommus = oread_cache('commus','','','cache'); load_cache('shipings'); $oshipings = oread_cache('shipings','','','cache'); $n_operated = isset($stepeds['commus']); $do_enable = $n_operated || !isset($stepeds['usergroups']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['channels']) ? false : true;//如果下一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('commu item transto').' - '.($n_operated ? ' Y' : ' N'),'commus','?entry=subsetup&action=commus','3'); trcategory(array(lang('source commu item id'),lang('source commu item cname'),lang('transto current system'))); $cuidsarr = array(); foreach($commus as $k => $v){ if($v['ch']) $cuidsarr[$k] = $v['cname']; } foreach($ocommus as $k => $v){ if($v['ch']){ echo "<tr align=\"center\"><td class=\"item2\">$k</td>\n". "<td class=\"item1\">$v[cname]</td>\n". "<td class=\"item2\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k]\">".makeoption(array(0 => lang('add')) + $cuidsarr,empty($idsmap['cuids'][$k]) ? 0 : $idsmap['cuids'][$k])."</select></td></tr>\n"; } } tabfooter(); tabheader(lang('shiping transto'),'','',3); trcategory(array(lang('source shiping id'),lang('source shiping cname'),lang('transto current system'))); $shidsarr = array(); foreach($shipings as $k => $v){ $shidsarr[$k] = $v['cname']; } foreach($oshipings as $k => $v){ echo "<tr align=\"center\"><td class=\"item2\">$k</td>\n". "<td class=\"item1\">$v[cname]</td>\n". "<td class=\"item2\"><select style=\"vertical-align: middle;\" name=\"transtonew1[$k]\">".makeoption(array(0 => lang('add')) + $shidsarr,empty($idsmap['shids'][$k]) ? 0 : $idsmap['shids'][$k])."</select></td></tr>\n"; } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ $s_commus = array(); foreach($ocommus as $k => $v){ $v = oread_cache('commu',$k,'','cache'); if($v['ch']){ if(empty($transtonew[$k])){ foreach($v['setting'] as $k1 => $v1){//先处理一下设置中一些要转换的id if($k1 == 'crid') $v['setting'][$k1] = str2newid($v['setting'][$k1],'crids'); if($k1 == 'ugids') $v['setting'][$k1] = str2newid($v['setting'][$k1],'ugids'); } $v['setting'] = empty($v['setting']) ? '' : serialize($v['setting']); $sqlstr = "issystem='0'"; foreach($v as $key => $val){ !in_array($key,array('cuid','issystem')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}commus SET $sqlstr"); if($cuid = $db->insert_id()){ $stepadds['commus'][] = $cuid;//将新增的id记录在案 $idsmap['cuids'][$k] = $cuid;//将新旧id的对应关系记录在案 } }else{ $idsmap['cuids'][$k] = $transtonew[$k];//将新旧id的对应关系记录在案 } } $s_commus[str2newid($k,'cuids')]['available'] = $v['available']; $s_commus[str2newid($k,'cuids')]['cutpl'] = $v['cutpl']; } updatecache('commus'); $s_commus = empty($s_commus) ? '' : addslashes(serialize($s_commus)); $db->query("UPDATE {$tblprefix}subsites SET commus='$s_commus' WHERE sid='$nsid'"); updatecache('subsites'); //转入送货方式 foreach($oshipings as $k => $v){ if(empty($transtonew1[$k])){ $sqlstr = ''; foreach($v as $key => $val){ !in_array($key,array('shid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}shipings SET $sqlstr"); if($shid = $db->insert_id()){ $stepadds['shipings'][] = $shid;//将新增的id记录在案 $idsmap['shids'][$k] = $shid;//将新旧id的对应关系记录在案 } }else{ $idsmap['shids'][$k] = $transtonew1[$k];//将新旧id的对应关系记录在案 } } updatecache('shipings'); //将子站中的购买信息字段转入进来 $opfields = oread_cache('pfields','','','cache'); $enamearr = empty($usednames['pfields']) ? array() : $usednames['pfields']; $fconfigarr = array( 'errorurl' => '', 'enamearr' => $enamearr, 'altertable' => $tblprefix.'orders', 'fieldtable' => $tblprefix.'cufields', 'sqlstr' => "cu='1'", ); foreach($opfields as $k => $v){ if(!in_array($v['ename'],$enamearr)){ $fieldnew = &$v; $fieldnew = maddslashes($fieldnew); list($fmode,$fnew,$fsave) = array('cu',true,true); include M_ROOT."./include/fields/$v[datatype].php"; if(!($fid = $db->insert_id())) continue;//字段记录 $stepadds['pfields'][] = $v['ename'];//以英文id来记录增加的字段 } } updatecache('pfields'); updatecache('usednames','pfields'); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); $stepeds['commus'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=channels'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['commus'])){ $db->query("DELETE FROM {$tblprefix}commus WHERE cuid IN (".mimplode($stepadds['commus']).")",'SILENT'); foreach($stepadds['commus'] as $cuid){ del_cache('commu',$cuid); } } updatecache('commus'); if(!empty($stepadds['shipings'])){ $db->query("DELETE FROM {$tblprefix}shipings WHERE shid IN (".mimplode($stepadds['shipings']).")",'SILENT'); } updatecache('shipings'); if(!empty($stepadds['pfields'])){ foreach($stepadds['pfields'] as $ename){ $db->query("ALTER TABLE {$tblprefix}orders DROP $ename",'SILENT'); $db->query("DELETE FROM {$tblprefix}cufields WHERE ename='$ename' AND cu='1'",'SILENT'); } } updatecache('pfields'); updatecache('usednames','pfields'); $db->query("UPDATE {$tblprefix}subsites SET commus='' WHERE sid='$nsid'"); updatecache('subsites'); unset($stepeds['commus'],$idsmap['cuids'],$idsmap['shids'],$stepadds['commus'],$stepadds['shipings'],$stepadds['pfields']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=commus'); } }elseif($action == 'channels'){ include_once M_ROOT."./include/commu.fun.php"; load_cache('channels'); $ochannels = oread_cache('channels','','','cache'); $n_operated = isset($stepeds['channels']); $do_enable = $n_operated || !isset($stepeds['commus']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['altypes']) ? false : true;//如果上一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('archive channel transto').' - '.($n_operated ? ' Y' : ' N'),'channels','?entry=subsetup&action=channels','3'); trcategory(array(lang('source archive channel id'),lang('source archive channel cname'),lang('transto current system'))); foreach($ochannels as $k => $v){ echo "<tr align=\"center\"><td class=\"item1\">$k</td>\n". "<td class=\"item2\">$v[cname]</td>\n". "<td class=\"item1\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k]\">".makeoption(array(0 => lang('add')) + chidsarr(1),empty($idsmap['chids'][$k]) ? 0 : $idsmap['chids'][$k])."</select></td></tr>\n"; } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ if(!$do_enable) amessage(lang('invalid operate !')); if(!empty($transtonew)){ //处理文档模型 load_cache('initfields,fieldwords'); $s_channels = array();//新建子站的模型有关的设置 foreach($ochannels as $k => $v){ $v = oread_cache('channel',$k,'','cache'); if(empty($transtonew[$k])){//新建会员模型 $v['ugids'] = empty($v['ugids']) ? '' : implode(',',$v['ugids']); $v['ugids'] = str2newid($v['ugids'],'ugids'); $v['cuid'] = str2newid($v['cuid'],'cuids'); $sqlstr = ''; foreach($v as $key => $val){ !in_array($key,array('chid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}channels SET $sqlstr"); if($chid = $db->insert_id()){ $db->query("CREATE TABLE {$tblprefix}archives_$chid (aid mediumint(8) unsigned NOT NULL default '0',PRIMARY KEY (aid))".(mysql_get_server_info() > '4.1' ? " ENGINE=MYISAM DEFAULT CHARSET=$dbcharset" : " TYPE=MYISAM")); //将系统的已有通用字段转入进来 foreach($initfields as $field){ $sqlstr = "chid='$chid',available='1'"; foreach($field as $key => $val){ !in_array($key,array('fid','chid','available')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}fields SET $sqlstr"); if(!($fid = $db->insert_id())) continue; $stepadds['fields'][] = $fid; } cu_addfields($chid,$v['cuid']); //将模型专用的字段转入进来 $fields = oread_cache('fields',$k,'','cache'); foreach($fields as $k1 => $v1){ if($v1['tbl'] == 'custom'){//只转入模型定义的字段 $fieldnew = oread_cache('field',$k,$k1,'cache'); $fieldnew = maddslashes($fieldnew); $fconfigarr = array( 'errorurl' => '', 'enamearr' => $usednames['fields'], 'altertable' => $tblprefix.'archives_'.$chid, 'fieldtable' => $tblprefix.'fields', 'sqlstr' => "chid=$chid,iscustom='1',available='1',tbl='custom'", 'filterstr' => "/[^a-zA-Z_0-9]+|^[0-9_]+|^cotype(.*?)/", ); list($fmode,$fnew,$fsave) = array('a',true,true); include M_ROOT."./include/fields/$v1[datatype].php"; if(!($fid = $db->insert_id())) continue; $stepadds['fields'][] = $fid;//记录增加字段 } } $stepadds['channels'][] = $chid;//将新增的id记录在案 $idsmap['chids'][$k] = $chid;//将新旧id的对应关系记录在案 } updatecache('fields',$chid); }else{//指定对应模型 $idsmap['chids'][$k] = $transtonew[$k];//将新旧id的对应关系记录在案 } //将新建子站的模型有关的设置加入进来 $s_channels[str2newid($k,'chids')]['available'] = $v['available']; $s_channels[str2newid($k,'chids')]['arctpl'] = $v['arctpl']; $s_channels[str2newid($k,'chids')]['pretpl'] = $v['pretpl']; $s_channels[str2newid($k,'chids')]['srhtpl'] = $v['srhtpl']; } $s_channels = empty($s_channels) ? '' : addslashes(serialize($s_channels)); $db->query("UPDATE {$tblprefix}subsites SET channels='$s_channels' WHERE sid='$nsid'"); updatecache('subsites'); updatecache('channels'); $channels = reload_cache('channels'); //将子站中的通用字段转入进来 $oinitfields = oread_cache('initfields','','','cache'); $enamearr = $usednames['fields']; foreach($channels as $k => $v){ $fields = read_cache('fields',$k); $enamearr = array_unique(array_merge($enamearr,array_keys($fields))); } $fconfigarr = array( 'errorurl' => '', 'enamearr' => $enamearr, 'altertable' => $tblprefix.'archives', 'fieldtable' => $tblprefix.'fields', 'sqlstr' => "iscustom='1',mcommon='1',available='1',tbl='main'", 'filterstr' => "/[^a-zA-Z_0-9]+|^[0-9_]+|^cotype(.*?)|^album(.*?)/", ); $chids = array_keys($channels); foreach($oinitfields as $k => $v){ if(!in_array($v['ename'],$enamearr)){ $fieldnew = &$v; $fieldnew = maddslashes($fieldnew); list($fmode,$fnew,$fsave) = array('i',true,true); include M_ROOT."./include/fields/$v[datatype].php"; if(!($fid = $db->insert_id())) continue;//通用字段记录 $stepadds['fields'][] = $fid; $stepadds['initfields'][] = $v['ename'];//记录了增加的通用字段的id foreach($chids as $chid){//将通用字段加入到每个会员模型中 $sqlstr = "issystem='0',iscustom='1',mcommon='1',chid='$chid',tbl='main'"; foreach($v as $key => $val){ !in_array($key,array('fid','issystem','iscustom','mcommon','chid','tbl')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='$val'"; } $db->query("INSERT INTO {$tblprefix}fields SET $sqlstr"); if(!($fid = $db->insert_id())) continue; $stepadds['fields'][] = $fid; updatecache('fields',$chid); } } } updatecache('initfields'); updatecache('usednames','fields'); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); } $stepeds['channels'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=altypes'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['channels'])){//清除所增文档模型的所有资料及缓存 foreach($stepadds['channels'] as $chid){ $db->query("DROP TABLE IF EXISTS {$tblprefix}archives_$chid",'SILENT'); $db->query("DELETE FROM {$tblprefix}channels WHERE chid='$chid'",'SILENT'); $db->query("DELETE FROM {$tblprefix}fields WHERE chid='$chid'",'SILENT'); //清除相关缓存 $fields = array_keys(read_cache('fields',$chid)); foreach($fields as $k){ del_cache('field',$chid,$k); } del_cache('fields',$chid); } } if(!empty($stepadds['initfields'])){//删除通用字段在主表中增加的字段 foreach($stepadds['initfields'] as $ename){ $db->query("ALTER TABLE {$tblprefix}archives DROP $ename",'SILENT'); //还要删除每个模型中该通用字段的缓存 foreach($channels as $k => $v){ del_cache('field',$k,$ename); } } } if(!empty($stepadds['fields'])){//删除在mfields表中增加的记录 $db->query("DELETE FROM {$tblprefix}fields WHERE fid IN (".mimplode($stepadds['fields']).")",'SILENT'); } updatecache('initfields'); updatecache('channels'); $channels = reload_cache('channels'); foreach($channels as $k => $v){ updatecache('fields',$k); } $db->query("UPDATE {$tblprefix}subsites SET channels='' WHERE sid='$nsid'"); updatecache('subsites'); unset($stepeds['channels'],$idsmap['chids'],$stepadds['channels'],$stepadds['initfields'],$stepadds['fields']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=channels'); } }elseif($action == 'altypes'){ load_cache('altypes',$nsid); $oaltypes = oread_cache('altypes','','','cache'); $n_operated = isset($stepeds['altypes']); $do_enable = $n_operated || !isset($stepeds['channels']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['catalogs']) ? false : true;//如果上一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('altype transto').' - '.($n_operated ? ' Y' : ' N'),'altypes','?entry=subsetup&action=altypes','3'); trcategory(array(lang('source altype id'),lang('source altype cname'),lang('transto current system'))); foreach($oaltypes as $k => $v){ echo "<tr align=\"center\"><td class=\"item1\">$k</td>\n". "<td class=\"item2\">$v[cname]</td>\n". "<td class=\"item1\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k]\">".makeoption(array(0 => lang('add')) + atidsarr(),empty($idsmap['atids'][$k]) ? 0 : $idsmap['atids'][$k])."</select></td></tr>\n"; } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ foreach($oaltypes as $k => $v){ $v = oread_cache('altype',$k,'','cache'); $v['chid'] = str2newid($v['chid'],'chids'); $v['chids'] = empty($v['chids']) ? '' : implode(',',$v['chids']); $v['chids'] = str2newid($v['chids'],'chids'); $v['atids'] = empty($v['atids']) ? '' : implode(',',$v['atids']);//atids还需要转换 $v['ugids'] = empty($v['ugids']) ? '' : implode(',',$v['ugids']); $v['ugids'] = str2newid($v['ugids'],'ugids'); $sqlstr = "sid='$nsid'"; foreach($v as $key => $val){ !in_array($key,array('atid','sid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}altypes SET $sqlstr"); if(!($atid = $db->insert_id())) continue; $stepadds['altypes'][] = $atid; $idsmap['atids'][$k] = $atid;//将新旧id的对应关系记录在案 } $query = $db->query("SELECT * FROM {$tblprefix}altypes WHERE sid='$nsid' ORDER BY atid"); while($row = $db->fetch_array($query)){ $row['atids'] = str2newid($row['atids'],'atids'); $db->query("UPDATE {$tblprefix}altypes SET atids='$row[atids]' WHERE atid='$row[atid]'"); } updatecache('altypes','',$nsid); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); $stepeds['altypes'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=catalogs'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['altypes'])){ $db->query("DELETE FROM {$tblprefix}altypes WHERE atid IN (".mimplode($stepadds['altypes']).")",'SILENT'); foreach($stepadds['altypes'] as $atid){ del_cache('altype',$atid,'',$nsid); } } updatecache('altypes','',$nsid); unset($stepeds['altypes'],$idsmap['atids'],$stepadds['altypes']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=altypes'); } }elseif($action == 'catalogs'){ load_cache('catalogs',$nsid); $ocatalogs = oread_cache('catalogs','','','cache'); $n_operated = isset($stepeds['catalogs']); $do_enable = $n_operated || !isset($stepeds['altypes']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['cotypes']) ? false : true;//如果上一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('catalog transto').' - '.($n_operated ? ' Y' : ' N'),'catalogs','?entry=subsetup&action=catalogs','3'); trcategory(array(lang('source catalog id'),lang('source catalog cname'),lang('transto current system'))); foreach($ocatalogs as $k => $v){ $space =''; for($i=0;$i<$v['level'];$i++) $space .= " "; echo "<tr><td class=\"item1\" width=\"80\" align=\"center\">$k</td>\n". "<td class=\"item2\">$space$v[title]</td>\n". "<td class=\"item1\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k]\">".makeoption(array(0 => lang('add')) + caidsarr(),empty($idsmap['caids'][$k]) ? 0 : $idsmap['caids'][$k])."</select></td></tr>\n"; } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ //将子站中的栏目信息字段转入进来 $ocafields = oread_cache('cafields','','','cache'); $enamearr = $usednames['cafields']; $fconfigarr = array( 'errorurl' => '', 'enamearr' => $enamearr, 'altertable' => $tblprefix.'catalogs', 'fieldtable' => $tblprefix.'cnfields', 'sqlstr' => "iscc='0'", ); foreach($ocafields as $k => $v){ if(!in_array($v['ename'],$enamearr)){ $fieldnew = &$v; $fieldnew = maddslashes($fieldnew); list($fmode,$fnew,$fsave) = array('cn',true,true); include M_ROOT."./include/fields/$v[datatype].php"; if(!($fid = $db->insert_id())) continue;//字段记录 $stepadds['cafields'][] = $v['ename'];//以英文id来记录增加的字段 } } updatecache('cafields'); updatecache('usednames','cafields'); foreach($ocatalogs as $k => $v){//需要先转栏目字段 $v = oread_cache('catalog',$k,'','cache'); $v['pid'] = str2newid($v['pid'],'caids'); $v['chids'] = str2newid($v['chids'],'chids'); $v['atids'] = str2newid($v['atids'],'atids'); $v['taxcp'] = str2newid($v['taxcp'],'crprices'); $v['awardcp'] = str2newid($v['awardcp'],'crprices'); $v['ftaxcp'] = str2newid($v['ftaxcp'],'crprices'); $sqlstr = "sid='$nsid'"; foreach($v as $key => $val){ !in_array($key,array('caid','sid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}catalogs SET $sqlstr"); if(!($caid = $db->insert_id())) continue; $stepadds['catalogs'][] = $caid; $idsmap['caids'][$k] = $caid;//将新旧id的对应关系记录在案 } updatecache('catalogs','',$nsid); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); $stepeds['catalogs'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=cotypes'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['cafields'])){//处理栏目字段 foreach($stepadds['cafields'] as $ename){ $db->query("ALTER TABLE {$tblprefix}catalogs DROP $ename",'SILENT'); $db->query("DELETE FROM {$tblprefix}cnfields WHERE ename='$ename' AND iscc='0'",'SILENT'); } } updatecache('cafields'); updatecache('usednames','cafields'); if(!empty($stepadds['catalogs'])){//处理栏目 $db->query("DELETE FROM {$tblprefix}catalogs WHERE caid IN (".mimplode($stepadds['catalogs']).")",'SILENT'); foreach($stepadds['catalogs'] as $caid){ del_cache('catalog',$caid,'',$nsid); } } updatecache('catalogs','',$nsid); unset($stepeds['catalogs'],$idsmap['caids'],$stepadds['catalogs'],$stepadds['cafields']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=catalogs'); } }elseif($action == 'cotypes'){ load_cache('cotypes'); $ocotypes = oread_cache('cotypes','','','cache'); $n_operated = isset($stepeds['cotypes']); $do_enable = $n_operated || !isset($stepeds['catalogs']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['coclasses']) ? false : true;//如果上一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ $coidsarr = array(); foreach($cotypes as $k => $v){ $coidsarr[$k] = $v['cname']; } tabheader(lang('cotype transto').' - '.($n_operated ? ' Y' : ' N'),'cotypes','?entry=subsetup&action=cotypes','3'); trcategory(array(lang('source grouptype id'),lang('source grouptype cname'),lang('transto current system'))); foreach($ocotypes as $k => $v){ echo "<tr align=\"center\"><td class=\"item1\">$k</td>\n". "<td class=\"item2\">$v[cname]</td>\n". "<td class=\"item1\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k]\">".makeoption(array(0 => lang('add')) + $coidsarr,empty($idsmap['coids'][$k]) ? 0 : $idsmap['coids'][$k])."</select></td></tr>\n"; } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ foreach($ocotypes as $k => $v){ if(empty($transtonew[$k])){ $sqlstr = "chids='".str2newid($v['chids'],'chids')."',atids='".str2newid($v['atids'],'atids')."'"; foreach($v as $key => $val){ !in_array($key,array('coid','chids','atids')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}cotypes SET $sqlstr"); if($coid = $db->insert_id()){ $db->query("ALTER TABLE {$tblprefix}archives ADD cotype$coid smallint(6) unsigned NOT NULL default 0",'SILENT'); $stepadds['cotypes'][] = $coid;//将新增的id记录在案 $idsmap['coids'][$k] = $coid;//将新旧id的对应关系记录在案 } }else{ $idsmap['coids'][$k] = $transtonew[$k];//将新旧id的对应关系记录在案 } } updatecache('cotypes'); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); $stepeds['cotypes'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=coclasses'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['cotypes'])){ $db->query("DELETE FROM {$tblprefix}cotypes WHERE coid IN (".mimplode($stepadds['cotypes']).")",'SILENT'); foreach($stepadds['cotypes'] as $coid){ $db->query("ALTER TABLE {$tblprefix}archives DROP cotype$coid",'SILENT'); del_cache('coclasses',$coid); } } updatecache('cotypes'); unset($stepeds['cotypes'],$idsmap['coids'],$stepadds['cotypes']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=cotypes'); } }elseif($action == 'coclasses'){ load_cache('cotypes'); $ocotypes = oread_cache('cotypes','','','cache'); $n_operated = isset($stepeds['coclasses']); $do_enable = $n_operated || !isset($stepeds['cotypes']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['cnodes']) ? false : true;//如果下一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('coclass transto').' - '.($n_operated ? ' Y' : ' N'),'coclasses','?entry=subsetup&action=coclasses','4'); trcategory(array(lang('source cotype'),lang('source coclass id'),lang('source coclass cname'),lang('transto current system'))); foreach($ocotypes as $k => $v){ $ococlasses = oread_cache('coclasses',$k,'','cache'); foreach($ococlasses as $k1 => $v1){ $space =''; for($i=0;$i<$v1['level'];$i++) $space .= " "; echo "<tr><td class=\"item1\" width=\"80\" align=\"center\">$v[cname]</td>\n". "<td class=\"item2\" width=\"80\" align=\"center\">$k1</td>\n". "<td class=\"item1\">$space$v1[title]</td>\n". "<td class=\"item2\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k1]\">".makeoption(array(0 => lang('add')) + ccidsarr($idsmap['coids'][$k]),empty($idsmap['ccids'][$k1]) ? 0 : $idsmap['ccids'][$k1])."</select></td></tr>\n"; } } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ //将子站中的分类信息字段转入进来 $occfields = oread_cache('ccfields','','','cache'); $enamearr = $usednames['ccfields']; $fconfigarr = array( 'errorurl' => '', 'enamearr' => $enamearr, 'altertable' => $tblprefix.'coclass', 'fieldtable' => $tblprefix.'cnfields', 'sqlstr' => "iscc='1'", ); foreach($occfields as $k => $v){ if(!in_array($v['ename'],$enamearr)){ $fieldnew = &$v; $fieldnew = maddslashes($fieldnew); list($fmode,$fnew,$fsave) = array('cn',true,true); include M_ROOT."./include/fields/$v[datatype].php"; if(!($fid = $db->insert_id())) continue;//字段记录 $stepadds['ccfields'][] = $v['ename'];//以英文id来记录增加的字段 } } updatecache('ccfields'); updatecache('usednames','ccfields'); foreach($ocotypes as $k => $v){ $ococlasses = oread_cache('coclasses',$k,'','cache'); foreach($ococlasses as $k1 => $v1){ if(empty($transtonew[$k1])){ $v1 = oread_cache('coclass',$k,$k1,'cache'); $v1['coid'] = $idsmap['coids'][$k]; $v1['pid'] = str2newid($v1['pid'],'ccids'); $v1['chids'] = str2newid($v1['chids'],'chids'); $v1['atids'] = str2newid($v1['atids'],'atids'); $v1['taxcp'] = str2newid($v1['taxcp'],'crprices'); $v1['awardcp'] = str2newid($v1['awardcp'],'crprices'); $v1['ftaxcp'] = str2newid($v1['ftaxcp'],'crprices'); $v1['conditions'] = empty($v1['conditions']) ? '' : serialize($v1['conditions']); $sqlstr = ''; foreach($v1 as $key => $val){ !in_array($key,array('ccid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}coclass SET $sqlstr"); if($ccid = $db->insert_id()){ $stepadds['coclasses'][] = $ccid;//将新增的id记录在案 $idsmap['ccids'][$k1] = $ccid;//将新旧id的对应关系记录在案 } }else{ $idsmap['ccids'][$k1] = $transtonew[$k1];//将新旧id的对应关系记录在案 } } updatecache('coclasses',$idsmap['coids'][$k]); } ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); $stepeds['coclasses'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=cnodes'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['ccfields'])){//处理栏目字段 foreach($stepadds['ccfields'] as $ename){ $db->query("ALTER TABLE {$tblprefix}coclass DROP $ename",'SILENT'); $db->query("DELETE FROM {$tblprefix}cnfields WHERE ename='$ename' AND iscc='1'",'SILENT'); } } updatecache('ccfields'); updatecache('usednames','ccfields'); if(!empty($stepadds['coclasses'])){ $db->query("DELETE FROM {$tblprefix}coclass WHERE ccid IN (".mimplode($stepadds['coclasses']).")",'SILENT'); foreach($cotypes as $k => $v){//删除缓存 $coclasses = read_cache('coclasses',$k); foreach($coclasses as $k1 => $v1){ if(in_array($k1,$stepadds['coclasses'])) del_cache('coclass',$k,$k1); } updatecache('coclasses',$k); } } unset($stepeds['coclasses'],$idsmap['ccids'],$stepadds['coclasses'],$stepadds['ccfields']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=coclasses'); } }elseif($action == 'cnodes'){ $ocnconfigs = oread_cache('cnconfigs','','','cache'); $n_operated = isset($stepeds['cnodes']); $do_enable = $n_operated || !isset($stepeds['coclasses']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['fchannels']) ? false : true;//如果下一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('catas cnode transto').' - '.($n_operated ? ' Y' : ' N'),'coclasses','?entry=subsetup&action=cnodes','4'); trcategory(array(lang('source catas configs id'),lang('source catas configs cname'),lang('transto current system'))); foreach($ocnconfigs as $k => $v){ echo "<tr><td class=\"item1\" width=\"100\" align=\"center\">$k</td>\n". "<td class=\"item2\">$v[cname]</td>\n". "<td class=\"item1\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k]\">".makeoption(array(0 => lang('add')))."</select></td></tr>\n"; } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ foreach($ocnconfigs as $k => $v){//先处理节点结构 $v['sid'] = $nsid; $idsarr = array();//重新组建数组 foreach($v['idsarr'] as $k1 => $v1){ if($k1 == 'ca'){ $idsarr['ca'] = array(); foreach($v1 as $key => $val) $idsarr['ca'][] = str2newid($val,'caids'); }else{ $coid = str2newid($k1,'coids'); $idsarr[$coid] = array(); foreach($v1 as $key => $val) $idsarr[$coid][] = str2newid($val,'ccids'); } } $v['idsarr'] = empty($idsarr) ? '' : serialize($idsarr); $sqlstr = ''; foreach($v as $key => $val){ !in_array($key,array('cncid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}cnconfigs SET $sqlstr"); if($cncid = $db->insert_id()){ $stepadds['cnconfigs'][] = $cncid;//将新增的id记录在案 $idsmap['cncids'][$k1] = $cncid;//将新旧id的对应关系记录在案 } } updatecache('cnconfigs','',$nsid); $ocnodes = oread_cache('cnodes','','','cache');//处理节点 foreach($ocnodes as $k => $v){ $v = oread_cache('cnode',$k,'','cache'); $v['sid'] = $nsid; $v['cncid'] = str2newid($v['cncid'],'cncids'); $v['mainline'] = str2newid($v['mainline'],'coids'); $v['caid'] = str2newid($v['caid'],'caids'); $v['ename'] = cnstr2newid($v['ename']); $sqlstr = ''; foreach($v as $key => $val){ !in_array($key,array('cnid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}cnodes SET $sqlstr"); if($cnid = $db->insert_id()){ $stepadds['cnodes'][] = $v['ename'];//将新增的id记录在案//以ename保存便于删除细分缓存 } } updatecache('cnodes','',$nsid); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); $stepeds['cnodes'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=fchannels'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['cnconfigs'])){ $db->query("DELETE FROM {$tblprefix}cnconfigs WHERE cncid IN (".mimplode($stepadds['cnconfigs']).")",'SILENT'); } updatecache('cnconfigs','',$nsid); if(!empty($stepadds['cnodes'])){ $db->query("DELETE FROM {$tblprefix}cnodes WHERE ename IN (".mimplode($stepadds['cnodes']).") AND sid='$nsid'",'SILENT'); foreach($stepadds['cnodes'] as $cnstr){ del_cache('cnode',$cnstr,'',$nsid); } } updatecache('cnodes','',$nsid); unset($stepeds['cnodes'],$idsmap['cncids'],$stepadds['cnconfigs'],$stepadds['cnodes']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=cnodes'); } }elseif($action == 'fchannels'){ load_cache('fchannels'); $ofchannels = oread_cache('fchannels','','','cache'); $n_operated = isset($stepeds['fchannels']); $do_enable = $n_operated || !isset($stepeds['cnodes']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['fcatalogs']) ? false : true;//如果上一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('freeinfo channel transto').' - '.($n_operated ? ' Y' : ' N'),'fchannels','?entry=subsetup&action=fchannels','3'); trcategory(array(lang('source freeinfo channel id'),lang('source freeinfo channel cname'),lang('transto current system'))); foreach($ofchannels as $k => $v){ echo "<tr align=\"center\"><td class=\"item1\">$k</td>\n". "<td class=\"item2\">$v[cname]</td>\n". "<td class=\"item1\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k]\">".makeoption(array(0 => lang('add')) + fchidsarr(1),empty($idsmap['fchids'][$k]) ? 0 : $idsmap['fchids'][$k])."</select></td></tr>\n"; } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ if(!$do_enable) amessage(lang('invalid operate !')); if(!empty($transtonew)){ //处理文档模型 load_cache('fieldwords'); foreach($ofchannels as $k => $v){ if(empty($transtonew[$k])){//新建会员模型 $sqlstr = ''; foreach($v as $key => $val){ !in_array($key,array('chid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}fchannels SET $sqlstr"); if($fchid = $db->insert_id()){ $db->query("CREATE TABLE {$tblprefix}farchives_$fchid (aid mediumint(8) unsigned NOT NULL default '0',PRIMARY KEY (aid))".(mysql_get_server_info() > '4.1' ? " ENGINE=MYISAM DEFAULT CHARSET=$dbcharset" : " TYPE=MYISAM")); //将模型专用的字段转入进来 $fields = oread_cache('ffields',$k,'','cache'); foreach($fields as $k1 => $v1){ $fieldnew = oread_cache('ffield',$k,$k1,'cache'); $fieldnew = maddslashes($fieldnew); if(!$v1['issystem']){//只转入模型定义的字段 $fconfigarr = array( 'errorurl' => '', 'enamearr' => $usednames['ffields'], 'altertable' => $tblprefix.'farchives_'.$fchid, 'fieldtable' => $tblprefix.'ffields', 'sqlstr' => "chid=$fchid,available='1'", ); list($fmode,$fnew,$fsave) = array('fa',true,true); include M_ROOT."./include/fields/$v1[datatype].php"; if(!($fid = $db->insert_id())) continue; $stepadds['ffields'][] = $fid;//记录增加字段 }else{//subject字段 $sqlstr = "chid='$fchid'"; foreach($field as $key => $val){ !in_array($key,array('fid','chid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}ffields SET $sqlstr"); if(!($fid = $db->insert_id())) continue; $stepadds['ffields'][] = $fid; } } $stepadds['fchannels'][] = $fchid;//将新增的id记录在案 $idsmap['fchids'][$k] = $fchid;//将新旧id的对应关系记录在案 } updatecache('ffields',$fchid); }else{//指定对应模型 $idsmap['fchids'][$k] = $transtonew[$k];//将新旧id的对应关系记录在案 } } updatecache('fchannels'); updatecache('usednames','ffields'); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); } $stepeds['fchannels'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=fcatalogs'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['fchannels'])){//清除所增文档模型的所有资料及缓存 foreach($stepadds['fchannels'] as $fchid){ $db->query("DROP TABLE IF EXISTS {$tblprefix}farchives_$fchid",'SILENT'); $db->query("DELETE FROM {$tblprefix}fchannels WHERE chid='$fchid'",'SILENT'); $db->query("DELETE FROM {$tblprefix}ffields WHERE chid='$fchid'",'SILENT'); //清除相关缓存 $ffields = array_keys(read_cache('ffields',$fchid)); foreach($ffields as $k){ del_cache('ffield',$fchid,$k); } del_cache('ffields',$fchid); } } updatecache('fchannels'); if(!empty($stepadds['ffields'])){//删除在ffields表中增加的记录 $db->query("DELETE FROM {$tblprefix}ffields WHERE fid IN (".mimplode($stepadds['ffields']).")",'SILENT'); } unset($stepeds['fchannels'],$idsmap['fchids'],$stepadds['fchannels'],$stepadds['ffields']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=fchannels'); } }elseif($action == 'fcatalogs'){ load_cache('fcatalogs'); $ofcatalogs = oread_cache('fcatalogs','','','cache'); $n_operated = isset($stepeds['fcatalogs']); $do_enable = $n_operated || !isset($stepeds['fchannels']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['freeinfos']) ? false : true;//如果上一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('freeinfo coclass transto').' - '.($n_operated ? ' Y' : ' N'),'fcatalogs','?entry=subsetup&action=fcatalogs','3'); trcategory(array(lang('source freeinfo coclass id'),lang('source freeinfo coclass cname'),lang('transto current system'))); foreach($ofcatalogs as $k => $v){ echo "<tr><td class=\"item1\" width=\"80\" align=\"center\">$k</td>\n". "<td class=\"item2\">$v[title]</td>\n". "<td class=\"item1\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k]\">".makeoption(array(0 => lang('add')) + fcaidsarr(),empty($idsmap['fcaids'][$k]) ? 0 : $idsmap['fcaids'][$k])."</select></td></tr>\n"; } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ foreach($ofcatalogs as $k => $v){//需要先转栏目字段 if(empty($transtonew[$k])){ $v = oread_cache('fcatalog',$k,'','cache'); $v['chid'] = str2newid($v['chid'],'fchids'); $v['rugids'] = str2newid($v['rugids'],'ugids'); $v['taxcrid'] = str2newid($v['taxcrid'],'crids'); $v['ugids'] = implode(',',$v['ugids']); $v['ugids'] = str2newid($v['ugids'],'ugids'); $sqlstr = ''; foreach($v as $key => $val){ !in_array($key,array('caid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}fcatalogs SET $sqlstr"); if(!($fcaid = $db->insert_id())) continue; $stepadds['fcatalogs'][] = $fcaid; $idsmap['fcaids'][$k] = $fcaid;//将新旧id的对应关系记录在案 }else{ $idsmap['fcaids'][$k] = $transtonew[$k];//将新旧id的对应关系记录在案 } } updatecache('fcatalogs'); ocache2file($stepadds,'stepadds'); ocache2file($idsmap,'idsmap'); $stepeds['fcatalogs'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=freeinfos'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['fcatalogs'])){//处理栏目 $db->query("DELETE FROM {$tblprefix}fcatalogs WHERE caid IN (".mimplode($stepadds['fcatalogs']).")",'SILENT'); foreach($stepadds['fcatalogs'] as $fcaid){ del_cache('fcatalog',$fcaid); } } updatecache('fcatalogs'); unset($stepeds['fcatalogs'],$idsmap['fcaids'],$stepadds['fcatalogs']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=fcatalogs'); } }elseif($action == 'freeinfos'){ $ofreeinfos = oread_cache('freeinfos','','','cache'); $n_operated = isset($stepeds['freeinfos']); $do_enable = $n_operated || !isset($stepeds['fcatalogs']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated || isset($stepeds['templates']) ? false : true;//如果上一步没有撤消,这一步不能撤消 if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('isolute page transto').' - '.($n_operated ? ' Y' : ' N'),'freeinfos','?entry=subsetup&action=freeinfos','3'); trcategory(array(lang('source isolute page id'),lang('source isolute page cname'),lang('transto current system'))); foreach($ofreeinfos as $k => $v){ if($v['sid'] == $osid){ echo "<tr><td class=\"item1\" width=\"80\" align=\"center\">$k</td>\n". "<td class=\"item2\">$v[cname]</td>\n". "<td class=\"item1\"><select style=\"vertical-align: middle;\" name=\"transtonew[$k]\">".makeoption(array(0 => lang('add')))."</select></td></tr>\n"; } } tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ foreach($ofreeinfos as $k => $v){//需要先转栏目字段 $v['sid'] = $nsid; $v['arcurl'] = ''; $sqlstr = ''; foreach($v as $key => $val){ !in_array($key,array('fid')) && $sqlstr .= (!$sqlstr ? '' : ',')."$key='".addslashes($val)."'"; } $db->query("INSERT INTO {$tblprefix}freeinfos SET $sqlstr"); if(!($fid = $db->insert_id())) continue; $stepadds['freeinfos'][] = $fid; } updatecache('freeinfos'); ocache2file($stepadds,'stepadds'); $stepeds['freeinfos'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=templates'); }elseif(submitcheck('bundo')){ if(!$undo_enable) amessage(lang('invalid operate !')); if(!empty($stepadds['freeinfos'])){//处理栏目 $db->query("DELETE FROM {$tblprefix}freeinfos WHERE fid IN (".mimplode($stepadds['freeinfos']).")",'SILENT'); } updatecache('freeinfos'); unset($stepeds['freeinfos'],$stepadds['freeinfos']); ocache2file($stepeds,'stepeds'); ocache2file($idsmap,'idsmap'); ocache2file($stepadds,'stepadds'); updatecache('btagnames'); amessage(lang('undo succeed !'),'?entry=subsetup&action=freeinfos'); } }elseif($action == 'templates'){ $n_operated = isset($stepeds['templates']); $do_enable = $n_operated || !isset($stepeds['freeinfos']) ? false : true;//如果上一步没有完成,这一步不能开始 $undo_enable = !$n_operated ? false : true;//如果上一步没有撤消,这一步不能撤消 $true_tpldir = M_ROOT."./template/".$subsites[$nsid]['templatedir'].'/'; if(!submitcheck('bdo') && !submitcheck('bundo')){ tabheader(lang('subsite template transto').' - '.($n_operated ? ' Y' : ' N'),'templates','?entry=subsetup&action=templates'); echo "<tr><td class=\"item2\" colspan=\"2\" align=\"center\"><br>"; echo empty($n_operated) ? lang('templatesdo') : lang('templatesundo'); echo "<br><br></td></tr>"; tabfooter(); echo "<input class=\"button\" type=\"submit\" name=\"bdo\" value=\"".lang('nextstep')."\"".($do_enable ? '' : ' disabled')."> "; echo "<input class=\"button\" type=\"submit\" name=\"bundo\" value=\"".lang('undo setting')."\"".($undo_enable ? '' : ' disabled')."> "; echo "</form>\n"; }elseif(submitcheck('bdo')){ if(!dir_copy($subsetupdir.'template/',$true_tpldir,1,1)) amessage(lang('template copy error !')); $tagsarr = $tplsarr = array(); $omtpls = oread_cache('mtpls','','','template'); foreach($omtpls as $k => $v){ $tplsarr[] = $k; } $osptpls = oread_cache('sptpls','','','template'); foreach($osptpls as $k => $v){ $tplsarr[] = $v; } foreach($tplsarr as $v){ $str = @file2str($subsetupdir.'template/'.$v); oreplace($str,'p'); oreplace($str,'c'); str2file($str,$true_tpldir.$v); } $tagsarr[] = array('mtpls',''); $tagsarr[] = array('sptpls', ''); $tagsarr[] = array('rtags',''); $ortags = oread_cache('rtags','','','template'); foreach($ortags as $k => $v){ $tagsarr[] = array('rtag',$k); } $tagsarr[] = array('ptags',''); $optags = oread_cache('ptags','','','template'); foreach($optags as $k => $v){ $tagsarr[] = array('ptag',$k); } $tagsarr[] = array('ctags',''); $octags = oread_cache('ctags','','','template'); foreach($octags as $k => $v){ $tagsarr[] = array('ctag',$k); } $tagsarr[] = array('utags',''); $outags = oread_cache('utags','','','template'); foreach($outags as $k => $v){ $tagsarr[] = array('utag',$k); } foreach($tagsarr as $k => $v){ $ocache = oread_cache($v[0],$v[1],'','template'); if(!$v[1]){ cache2file($ocache,$v[0],$v[0],$nsid); }else{ if(!empty($ocache['template'])){ oreplace($ocache['template'],'p'); oreplace($ocache['template'],'c'); } cache2file($ocache,cache_name($v[0],$v[1]),$v[0],$nsid); } } //将一些站点信息写入进来 $omconfigs = oread_cache('mconfigs','','','cache'); $sqlstr = ''; foreach(array('cmslogo','cmstitle','cmskeyword','cmsdescription','hometpl',) as $var){ isset($omconfigs[$var]) && $sqlstr .= ($sqlstr ? ',' : '')."$var='".addslashes($omconfigs[$var])."'"; } $db->query("UPDATE {$tblprefix}subsites SET $sqlstr WHERE sid='$nsid'"); updatecache('subsites'); $stepeds['templates'] = 1; ocache2file($stepeds,'stepeds'); amessage(lang('operate succeed !'),'?entry=subsetup&action=templates'); }elseif(submitcheck('bundo')){ clear_dir($true_tpldir); unset($stepeds['templates']); ocache2file($stepeds,'stepeds'); amessage(lang('undo succeed !'),'?entry=subsetup&action=templates'); } }elseif($action == 'delupload'){ if(empty($confirm)){ $message = lang('delete subsite install upload data and install record !').'<br><br>'.lang('del_alert')."<br><br>"; $message .= lang('confirm click')."[<a href=?entry=subsetup&action=delupload&confirm=1>".lang('delete')."</a>] "; $message .= lang('giveup click')."[<a href=?entry=subsetup>".lang('goback')."</a>]"; amessage($message); } clear_dir(M_ROOT."dynamic/subsetup/",false); amessage(lang('record delete finish'),"?entry=subsetup"); } ?>