GetOne("SELECT COUNT(*) AS dd FROM `#@__co_htmls` WHERE nid='$nid' AND isdown='1' ");
$totalcc = $mrow['dd'];
$rrow = $dsql->GetOne("SELECT channelid,usemore FROM `#@__co_note` WHERE nid='$nid' ");
$channelid = $rrow['channelid'];
$usemore = $rrow['usemore'];
}
else
{
$mrow = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__co_htmls` WHERE isdown='1' ");
$totalcc = $mrow['dd'];
}
include DedeInclude("templets/co_export.htm");
exit();
}
else
{
require_once(DEDEINC.'/dedecollection.class.php');
$channelid = isset($channelid) && is_numeric($channelid) ? $channelid : 0;
$typeid = isset($typeid) && is_numeric($typeid) ? $typeid : 0;
$pageno = isset($pageno) && is_numeric($pageno) ? $pageno : 1;
$startid = isset($startid) && is_numeric($startid) ? $startid : 0;
$endid = isset($endid) && is_numeric($endid) ? $endid : 0;
if(!isset($makehtml)) $makehtml = 0;
if(!isset($onlytitle)) $onlytitle = 0;
if(!isset($usetitle)) $usetitle = 0;
if(!isset($autotype)) $autotype = 0;
$co = new DedeCollection();
$co->LoadNote($nid);
$orderway = (($co->noteInfos['cosort']=='desc' || $co->noteInfos['cosort']=='asc') ? $co->noteInfos['cosort'] : 'desc');
if($channelid==0 && $typeid==0)
{
ShowMsg('请指定默认导出栏目或频道ID!','javascript:;');
exit();
}
if($channelid==0)
{
$row = $dsql->GetOne("SELECT ch.* FROM `#@__arctype` tp LEFT JOIN `#@__channeltype` ch ON ch.id=tp.channeltype WHERE tp.id='$typeid'; ");
}
else
{
$row = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE id='$channelid'; ");
}
if(!is_array($row))
{
echo "找不到频道内容模型信息,无法完成操作!";
exit();
}
//分析规则,并生成临时的SQL语句
$channelid = $row['id'];
$maintable = $row['maintable'];
$addtable = $row['addtable'];
if(empty($maintable)) $maintable = '#@__archives';
if(empty($addtable))
{
echo "找不主表配置信息,无法完成操作!";
exit();
}
$adminid = $cuserLogin->getUserID();
//微索引表
$indexSqlTemplate = "INSERT INTO `#@__arctiny`(`arcrank`,`typeid`,`channel`,`senddate`,`sortrank`) VALUES ('$arcrank','@typeid@' ,'$channelid','@senddate@', '@sortrank@'); ";
//基本信息主表
$mainSqlTemplate = "INSERT INTO `$maintable`(id,typeid,sortrank,flag,ismake,channel,arcrank,click,money,title,shorttitle,color,writer,source,litpic,pubdate,senddate,mid,description,keywords)
VALUES ('@aid@','@typeid@','@sortrank@','@flag@','0','$channelid','$arcrank','0','0','@title@','','','@writer@','@source@','@litpic@','@pubdate@','@senddate@','$adminid','@description@','@keywords@'); ";
//生成附加表插入的SQL语句
$inadd_f = $inadd_v = '';
$dtp = new DedeTagParse();
$dtp->SetNameSpace('field','<','>');
$dtp->LoadString($row['fieldset']);
foreach($dtp->CTags as $ctag)
{
$tname = $ctag->GetTagName();
$inadd_f .= ",`$tname`";
$notsend = $ctag->GetAtt('notsend');
$fieldtype = $ctag->GetAtt('type');
if($notsend==1)
{
//对不同类型设置默认值
if($ctag->GetAtt('default')!='')
{
$dfvalue = $ctag->GetAtt('default');
}
else if($fieldtype=='int' || $fieldtype=='float' || $fieldtype=='number')
{
$dfvalue = '0';
}
else if($fieldtype=='dtime')
{
$dfvalue = time();
}
else
{
$dfvalue = '';
}
$inadd_v .= ",'$dfvalue'";
}
else
{
$inadd_v .= ",'@$tname@'";
}
}
$addSqlTemplate = "INSERT INTO `{$addtable}`(`aid`,`typeid`{$inadd_f}) Values('@aid@','@typeid@'{$inadd_v})";
//导出数据的SQL操作
$dtp = new DedeTagParse();
$totalpage = $totalcc / $pagesize;
$startdd = ($pageno-1) * $pagesize;
if(!empty($nid))
{
$dsql->SetQuery("SELECT * FROM `#@__co_htmls` WHERE nid='$nid' AND isdown='1' ORDER BY aid $orderway LIMIT $startdd,$pagesize");
}
else
{
$dsql->SetQuery("SELECT * FROM `#@__co_htmls` WHERE isdown='1' ORDER BY aid $orderway LIMIT $startdd,$pagesize");
}
$dsql->Execute();
while($row = $dsql->GetObject())
{
if(trim($row->result=='')) continue;
//$addSqlTemplate,$mainSqlTemplate,$indexSqlTemplate
$ntypeid = ($autotype==1 && $row->typeid != 0) ? $row->typeid : $typeid;
$indexSql = str_replace('@typeid@', $ntypeid, $indexSqlTemplate);
$mainSql = str_replace('@typeid@', $ntypeid, $mainSqlTemplate);
$addSql = str_replace('@typeid@', $ntypeid, $addSqlTemplate);
$dtp->LoadString($row->result);
$exid = $row->aid;
if(!is_array($dtp->CTags)) continue;
//获取时间和标题
$pubdate = $sortrank = time();
$title = $row->title;
$litpic = '';
foreach ($dtp->CTags as $ctag)
{
$itemName = $ctag->GetAtt('name');
if($itemName == 'title' && $usetitle==0)
{
$title = trim($ctag->GetInnerText());
if($title=='')
{
$title = $row->title;
}
}
else if($itemName == 'pubdate')
{
$pubdate = trim($ctag->GetInnerText());
if(preg_match("#[^0-9]#", $pubdate))
{
$pubdate = $sortrank = GetMkTime($pubdate);
}
else
{
$pubdate = $sortrank = time();
}
}
else if($itemName == 'litpic')
{
$litpic = trim($ctag->GetInnerText());
}
}
//检测重复标题
$title = addslashes($title);
if($onlytitle)
{
$testrow = $dsql->GetOne("SELECT COUNT(ID) AS dd FROM `$maintable` WHERE title LIKE '$title'");
if($testrow['dd']>0)
{
echo "数据库已存在标题为: {$title} 的文档,程序阻止了此本条内容导入
\r\n";
continue;
}
}
//替换固定的项目
$senddate = time();
$flag = '';
if($litpic!='') $flag = 'p';
//随机推荐
if($randcc>0)
{
$rflag = mt_rand(1, $randcc);
if($rflag==$randcc)
{
$flag = ($flag=='' ? 'c' : $flag.',c');
}
}
$indexSql = str_replace('@senddate@', $senddate, $indexSql);
$indexSql = str_replace('@sortrank@', $sortrank, $indexSql);
$mainSql = str_replace('@flag@', $flag, $mainSql);
$mainSql = str_replace('@sortrank@', $sortrank, $mainSql);
$mainSql = str_replace('@pubdate@', $pubdate, $mainSql);
$mainSql = str_replace('@senddate@', $senddate, $mainSql);
$mainSql = str_replace('@title@', cn_substr($title, $cfg_title_maxlen), $mainSql);
//$mainSql = str_replace('@title@', cn_substr($title, 60), $mainSql); 原来的语句,采集的文章导出到栏目后标题不全
$addSql = str_replace('@sortrank@', $sortrank, $addSql);
$addSql = str_replace('@senddate@', $senddate, $addSql);
//替换模型里的其它字段
foreach($dtp->CTags as $ctag)
{
if($ctag->GetName()!='field')
{
continue;
}
$itemname = $ctag->GetAtt('name');
$itemvalue = addslashes(trim($ctag->GetInnerText()));
$mainSql = str_replace("@$itemname@", $itemvalue, $mainSql);
$addSql = str_replace("@$itemname@", $itemvalue, $addSql);
}
//插入数据库
$rs = $dsql->ExecuteNoneQuery($indexSql);
if($rs)
{
$aid = $dsql->GetLastID();
$mainSql = str_replace('@aid@', $aid, $mainSql);
$addSql = str_replace('@aid@', $aid, $addSql);
$mainSql = preg_replace("#@([a-z0-9]{1,})@#", '', $mainSql);
$addSql = preg_replace("#@([a-z0-9]{1,})@#", '', $addSql);
$rs = $dsql->ExecuteNoneQuery($mainSql);
if(!$rs)
{
echo "导入 '$title' 时错误:".$dsql->GetError()."
";
$dsql->ExecuteNoneQuery("DELETE FROM `#@__arctiny` WHERE id='$aid' ");
}
else
{
$rs = $dsql->ExecuteNoneQuery($addSql);
if(!$rs)
{
echo "导入 '$title' 时错误:".$dsql->GetError()."
";
$dsql->ExecuteNoneQuery("DELETE FROM `#@__arctiny` WHERE id='$aid' ");
$dsql->ExecuteNoneQuery("DELETE FROM `$maintable` WHERE id='$aid' ");
}
}
}
$dsql->ExecuteNoneQuery("UPDATE `#@__co_htmls` SET isexport=1 WHERE aid='$exid' ");
}
//检测是否完成或后续操作
if($totalpage <= $pageno)
{
if($channelid>0 && $makehtml==1)
{
if( $autotype==0 && !empty($nid) )
{
$mhtml = "makehtml_archives_action.php?typeid=$typeid&startid=$startid&endid=$endid&pagesize=20";
ShowMsg("完成数据导入,准备生成文档HTML...",$mhtml);
exit();
}
else
{
ShowMsg("完成所有数据导入,请手工更新HTML!","javascript:;");
exit();
}
}
else
{
ShowMsg("完成所有数据导入!","javascript:;");
exit();
}
}
else
{
if($totalpage>0)
{
$rs = substr(($pageno / $totalpage * 100), 0, 2);
}
else
{
$rs = 100;
}
$pageno++;
$gourl = "co_export.php?dopost=done&nid=$nid&totalcc=$totalcc&channelid=$channelid&pageno=$pageno";
$gourl .= "&nid=$nid&typeid=$typeid&autotype=$autotype&arcrank=$arcrank&pagesize=$pagesize&randcc=$randcc";
$gourl .= "&startid=$startid&endid=$endid&onlytitle=$onlytitle&usetitle=$usetitle&makehtml=$makehtml";
ShowMsg("完成 {$rs}% 导入,继续执行操作...",$gourl,'',500);
exit();
}
}