<?php
require_once(dirname(__FILE__).'/../include/common.inc.php');
require_once(DEDEINC.'/dedetag.class.php');
/*****************************************************
计划任务程序使用说明：
本程序本身并不会执行任务任务，职责是跳转到要执行的任务网址（JS调用形式），或直接返回要执行的任务网址（客户端形式）
·为了确保任务能执行完全，建议使用Dede的客户端工具，否则只能通过JS触发，但JS触发有很多不确定因素会导致任务不能完成；
·JS触发方式：在所有文档页面中用JS调用/plus/task.php?client=js（必须禁用计划任务的密码，系统配置参数->其它选项）；
·自行定制客户端：直接访问“http://网址/plus/task.php?clientpwd=管理密码”，会返回其中一个可执行任务的网址（没有可用任务则返回串：notask)，然后客户端运行这个网址即可。 
****************************************************/
if(empty($client)) $client = 'dede';
if(empty($clientpwd)) $clientpwd = '';
$cfg_task_pwd = trim($cfg_task_pwd);

//验证客户端工具密码
if(!empty($cfg_task_pwd) && $clientpwd != $cfg_task_pwd)
{
	echo ($client=='js' ? '' : 'notask');
	exit();
}

//取得当时间的各个值
$ntime = time();
$nformattime = GetDateTimeMk($ntime);
list($ndate, $ntime) = explode(' ', $nformattime);
list($y, $m, $d) = explode('-', $ndate);
list($hh, $mm, $ss) = explode(':', $ntime);

$daylimit = 24 * 3600;

$dsql->Execute('me', 'Select * From `#@__sys_task` where islock=0 order by id asc ');
while($arr = $dsql->GetArray())
{
	$starttime = $arr['starttime'];
	$endtime = $arr['endtime'];
	//跳过一次性运行，并且已经运行的任务
	if($arr['lastrun'] > $starttime && $arr['runtype']==1) continue;
	//超过了设定的任务结束时间
	if($endtime!=0 && $endtime < $ntime) continue;
	//未达到任务开始时间的任务
	if($starttime!=0 && $ntime < $starttime) continue;
	
	$dotime = GetMkTime($ndate.' '.$arr['runtime'].':00');
	$limittime = $daylimit * $arr['freq'];
	
	$isplay = false;
	//判断符合执行条件的任务
	if($arr['freq'] > 1 && $ntime - $arr['lastrun'] > $limittime )
	{
		$isplay = true;
	}
	else
	{
		$ndateInt = intval( str_replace('-', '', $ndate) );
		$rdateInt = intval( str_replace('-', '', GetDateMk($arr['lastrun'])) );
		list($th, $tm) = explode(':', $arr['runtime']);
		if($ndateInt > $rdateInt 
		&& ($hh > $th || ($hh==$th && $mm >= $tm) ) )
		{
			$isplay = true;
		}
	}
	//符合需执行条件的任务
	if($isplay)
	{
		$dourl = trim($arr['dourl']);
		if(!file_exists("task/$dourl"))
		{
			echo ($client=='js' ? '' : 'notask');
			exit();
		}
		else
		{
			$getConfigStr = trim($arr['parameter']);
			$getString = '';
			if(ereg('t:', $getConfigStr))
			{
				$getStrings = array();
				$dtp = new DedeTagParse();
				$dtp->SetNameSpace('t', '<', '>');
				$dtp->LoadString($getConfigStr);
				if(is_array($dtp->CTags))
				{
					foreach($dtp->CTags as $k=>$ctag)
					{
						$getString .= ($getString=='' ? '' : '&').$ctag->GetAtt('key').'='.urlencode($ctag->GetAtt('value'));
					}
				}
			}
			$dsql->ExecuteNoneQuery("Update `#@__sys_task` set lastrun='".time()."', sta='运行' where id='{$arr['id']}' ");
			if($getString !='' ) $dourl .= '?'.$getString; 
			if($client=='js') header("location:{$cfg_phpurl}/task/{$dourl}");
			else echo "{$cfg_phpurl}/task/{$dourl}";
			exit();
		}
	}
}
echo ($client=='js' ? '' : 'notask');
exit();
?>