<?php
/**
 * 任務操作
 *
 * @version        $Id: task_do.php 1 23:07 2010年7月20日Z tianya $
 * @package        DedeCMS.Administrator
 * @copyright      Copyright (c) 2007 - 2010, DesDev, Inc.
 * @license        http://help.dedecms.com/usersguide/license.html
 * @link           http://www.dedecms.com
 */
require(dirname(__FILE__).'/config.php');
$dopost = (!isset($dopost) ? '' : $dopost);
/******************************
返回到下一任務的URL
特殊變量，除非知道作用，否則不能在任務傳遞中佔用
f 臨時，僅為了方便網址結構
dopost 當前任務(指向下一個任務)， 由用戶自行處理或在 nextdo 中自動獲得
del 上一次任務刪除的變量
morejob ，設定後，表示當前任務需請求多次，會把 dopost 和 nextdo 處理後轉為 doposttmp, nextdotmp，然後由用戶自行處理
******************************/
function GetNextUrl($notallowArr = array('dopost', 'f', 'del'))
{
    $reurl = "task_do.php?f=0";
    foreach($_GET as $k=>$v)
    {
        if($k=='nextdo')
        {
            $nextdo = '';
            $nextdos = explode(',', $GLOBALS[$k]);
            if(isset($nextdos[1]))
            {
                for($i=1; $i < count($nextdos); $i++)
                {
                    if( trim($nextdos[$i]) == '' ) continue;
                    $nextdo .= ($nextdo=='' ? $nextdos[$i] : ','.$nextdos[$i]);
                }
            }
            //如果系統有多重任務， 把下一任務和任務列表參數提交給程序處理
            if( in_array('morejob', $notallowArr) )
            {
                $reurl .= "&doposttmp=".$nextdos[0];
                if($nextdo != '') $reurl .= "&nextdotmp=$nextdo";
            }
            else
            {
                $reurl .= "&dopost=".$nextdos[0];
                if($nextdo != '') $reurl .= "&nextdo=$nextdo";
            }
        }
        else if( in_array($k, $notallowArr) )
        {
            continue;
        }
        else
        {
            $reurl .= "&{$k}=".urlencode($GLOBALS[$k]);
        }
    }
    return $reurl;
}
/******************************
//更新上一篇和下一篇
function makeprenext() {  }
******************************/
if($dopost=='makeprenext')
{
    require_once(DEDEINC.'/arc.archives.class.php');
    $aid = intval($aid);
    $preRow =  $dsql->GetOne("SELECT id FROM `#@__arctiny` WHERE id<$aid AND arcrank>-1 AND typeid='$typeid' ORDER BY id DESC");
    $nextRow = $dsql->GetOne("SELECT id FROM `#@__arctiny` WHERE id>$aid AND arcrank>-1 AND typeid='$typeid' ORDER BY id ASC");
    if(is_array($preRow))
    {
        $envs['aid'] = $preRow['id'];
        $arc = new Archives($preRow['id']);
        $arc->MakeHtml();
    }
    if(is_array($nextRow))
    {
        $envs['aid'] = $nextRow['id'];
        $arc = new Archives($nextRow['id']);
        $arc->MakeHtml();
    }
    if( empty($nextdo) )
    {
        ShowMsg("<b>完成上下篇文檔更新任務！完成所有更新任務！</b>", "close::tgtable");
        exit();
    }
    else
    {
        $jumpurl = GetNextUrl();
        ShowMsg("完成下篇文檔更新任務！ 繼續執行其它任務...", $jumpurl,0,500);
        exit();
    }
}
/******************************
//更新主頁的任務
function makeindex() {  }
******************************/
if($dopost=='makeindex')
{
    require_once(DEDEINC.'/arc.partview.class.php');
    $envs = $_sys_globals = array();
    $envs['aid'] = 0;
    $pv = new PartView();
    $row = $pv->dsql->GetOne('SELECT * FROM `#@__homepageset`');
    $templet = str_replace("{style}", $cfg_df_style, $row['templet']);
    $homeFile = dirname(__FILE__).'/'.$row['position'];
    $homeFile = str_replace("//", "/", str_replace("\\", "/", $homeFile));
    $fp = fopen($homeFile, 'w') or die("無法更新網站主頁到：$homeFile 位置");
    fclose($fp);
    $tpl = $cfg_basedir.$cfg_templets_dir.'/'.$templet;
    if(!file_exists($tpl))
    {
        $tpl = $cfg_basedir.$cfg_templets_dir.'/default/index.htm';
        if(!file_exists($tpl)) exit("無法找到主頁模板：$tpl ");
    }
    $GLOBALS['_arclistEnv'] = 'index';
    $pv->SetTemplet($tpl);
    $pv->SaveToHtml($homeFile);
    $pv->Close();
    if( empty($nextdo) )
    {
        ShowMsg("<b>完成主頁更新任務！完成所有更新任務！</b>", "close::tgtable");
        exit();
    }
    else
    {
        $jumpurl = GetNextUrl();
        ShowMsg("完成主頁更新！ 現在跳轉到其它更新任務...", $jumpurl,0,500);
        exit();
    }
}
/******************************
//更新所有關連的欄目
function makeparenttype() {  }
******************************/
else if($dopost=='makeparenttype')
{
    require_once(DEDEDATA."/cache/inc_catalog_base.inc");
    require_once(DEDEINC.'/arc.listview.class.php');
    $notallowArr = array('dopost', 'f', 'del', 'curpage', 'morejob');

    $jumpurl = GetNextUrl($notallowArr);
    
    if( empty($typeid) )
    {
        ShowMsg("<b>完成欄目更新任務！完成所有更新任務！</b>", "close::tgtable");
        exit();
    }
    $topids = explode(',', GetTopids($typeid));
    if(empty($curpage)) $curpage = 0;
    $tid = $topids[$curpage];
    
    if(isset($cfg_Cs[$tid]) && $cfg_Cs[$tid][1]>0)
    {
        require_once(DEDEINC."/arc.listview.class.php");
        $lv = new ListView($tid);
        $lv->MakeHtml();
        $lv->Close();
    }
    else
    {
        require_once(DEDEINC."/arc.sglistview.class.php");
        $lv = new SgListView($tid);
        $lv->MakeHtml();
        $lv->Close();
    }
    
    if($curpage >= count($topids)-1)
    {
        if( !empty($doposttmp) )
        {
            $jumpurl = preg_replace("#doposttmp|nextdotmp#", 'del', $jumpurl);
            $jumpurl .= "&dopost={$doposttmp}&nextdo={$nextdotmp}";
            ShowMsg("完成欄目:{$tid}  更新！<br /><b>完成欄目更新任務，繼續執行後續任務...</b>", $jumpurl,0,500);
            exit();
        }
        else
        {
            ShowMsg("完成欄目:{$tid}  更新！<br /><b>完成欄目更新任務，完成所有更新任務！</b>", "close::tgtable");
            exit();
        }
    }
    else
    {
        $curpage++;
        $jumpurl .= "&curpage={$curpage}&dopost=makeparenttype";
        ShowMsg("完成欄目:{$tid}  更新，繼續更新其它欄目...", $jumpurl,0,500);
        exit();
    }
}