You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

426 lines
15 KiB

<?php
/**
* ECSHOP 计划任务
* ===========================================================
* * 版权所有 2005-2016 上海商创网络科技有限公司,并保留所有权利。
* 网站地址: http://www.ecmoban.com;
* ----------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
* 使用;不允许对程序代码以任何形式任何目的的再发布。
* ==========================================================
* $Author: liubo $
* $Id: cron.php 17217 2011-01-19 06:29:08Z liubo $
*/
define('IN_ECS', true);
require(dirname(__FILE__) . '/includes/init.php');
$_REQUEST['act'] = trim($_REQUEST['act']);
admin_priv('cron');
$exc = new exchange($ecs->table('crons'), $db, 'cron_code', 'cron_name');
if ($_REQUEST['act'] == 'list')
{
$cron_list = array();
$sql = "SELECT * FROM " . $ecs->table('crons');
$res = $db->query($sql);
while ($row = $db->fetchRow($res))
{
$cron_list[$row['cron_code']] = $row;
}
$modules = read_modules('../includes/modules/cron');
for ($i = 0; $i < count($modules); $i++)
{
$code = $modules[$i]['code'];
/* 如果数据库中有,取数据库中的名称和描述 */
if (isset($cron_list[$code]))
{
$modules[$i]['name'] = $cron_list[$code]['cron_name'];
$modules[$i]['desc'] = $cron_list[$code]['cron_desc'];
$modules[$i]['cron_order'] = $cron_list[$code]['cron_order'];
$modules[$i]['enable'] = $cron_list[$code]['enable'];
$modules[$i]['nextime'] = local_date('Y-m-d/H:i:s',$cron_list[$code]['nextime']);
$modules[$i]['thistime'] = $cron_list[$code]['thistime'] ? local_date('Y-m-d/H:i:s',$cron_list[$code]['thistime']) : '-';
$modules[$i]['install'] = '1';
}
else
{
$modules[$i]['name'] = $_LANG[$modules[$i]['code']];
$modules[$i]['desc'] = $_LANG[$modules[$i]['desc']];
$modules[$i]['nextime'] = '-';
$modules[$i]['thistime'] = '-';
$modules[$i]['install'] = '0';
}
}
assign_query_info();
$smarty->assign('ur_here', $_LANG['07_cron_schcron']);
$smarty->assign('modules', $modules);
$smarty->display('cron_list.htm');
}
elseif ($_REQUEST['act'] == 'install')
{
if (empty($_POST['step']))
{
/* 取相应插件信息 */
$set_modules = true;
include_once(ROOT_PATH.'includes/modules/cron/' . $_REQUEST['code'] . '.php');
$data = $modules[0];
$cron['cron_code'] = $data['code'];
$cron['cron_act'] = 'install';
$cron['cron_name'] = $_LANG[$data['code']];
$cron['cron_desc'] = $_LANG[$data['desc']];
$cron['cron_config'] = array();
if (!empty($data['config']))
{
foreach ($data['config'] AS $key => $value)
{
$cron['cron_config'][$key] = $value + array('label' => $_LANG[$value['name']], 'value' => $value['value']);
if ($cron['cron_config'][$key]['type'] == 'select')
{
$cron['cron_config'][$key]['range'] = $_LANG[$cron['cron_config'][$key]['name'] . '_range'];
}
}
}
list($day, $week, $hours) = get_dwh();
assign_query_info();
$page_list = array( 'index' => 0,
'user' => 0,
'pick_out' => 0,
'flow' => 0,
'group_buy' => 0,
'snatch' => 0,
'tag_cloud' => 0,
'category' => 0,
'goods' => 0,
'article_cat' => 0,
'article' => 0,
'brand' => 0,
'search' => 0,
);
$smarty->assign('days', $day);
$smarty->assign('page_list', $page_list);
$smarty->assign('week', $week);
$smarty->assign('hours', $hours);
$smarty->assign('cron', $cron);
$smarty->display('cron_edit.htm');
}
elseif ($_POST['step'] == 2)
{
$links[] = array('text' => $_LANG['back_list'], 'href' => 'cron.php?act=list');
if (empty($_POST['cron_name']))
{
sys_msg($_LANG['cron_name'] . $_LANG['empty']);
}
$sql = "SELECT COUNT(*) FROM " . $ecs->table('crons') .
" WHERE cron_code = '$_POST[cron_code]'";
if ($db->GetOne($sql) > 0)
{
sys_msg($_LANG['cron_code'] . $_LANG['repeat'], 1);
}
/* 取得配置信息 */
$cron_config = array();
if (isset($_POST['cfg_value']) && is_array($_POST['cfg_value']))
{
$temp = count($_POST['cfg_value']);
for ($i = 0; $i < $temp; $i++)
{
$cron_config[] = array('name' => trim($_POST['cfg_name'][$i]),
'type' => trim($_POST['cfg_type'][$i]),
'value' => trim($_POST['cfg_value'][$i])
);
}
}
$cron_config = serialize($cron_config);
$cron_minute = get_minute($_POST['cron_minute']);
if ($_POST['ttype'] == 'day')
{
$cron_day = $_POST['cron_day'];
$cron_week = '';
}
elseif($_POST['ttype'] == 'week')
{
$cron_day = '';
$cron_week = $_POST['cron_week'];
}
else
{
$cron_day = $cron_week = '';
}
if ($cron_week == 7)
{
$cron_week = 0;
}
$_POST['alow_files'] = isset($_POST['alow_files']) ? implode(' ', $_POST['alow_files']) : "";
!isset($_POST['cron_run_once']) && $_POST['cron_run_once'] = 0;
$cron_hour = $_POST['cron_hour'];
$cron = array('day'=>$cron_day,'week'=>$cron_week,'m'=>$cron_minute,'hour'=>$cron_hour);
$next = get_next_time($cron);
$sql = "INSERT INTO " . $ecs->table('crons') . " (cron_code, cron_name, cron_desc, cron_config, nextime, day, week, hour, minute, run_once, allow_ip, alow_files)" .
"VALUES ('$_POST[cron_code]', '$_POST[cron_name]', '$_POST[cron_desc]', '$cron_config', '$next', '$cron_day', '$cron_week', '$cron_hour', '$cron_minute', '$_POST[cron_run_once]', '$_POST[allow_ip]', '$_POST[alow_files]')";
$db->query($sql);
sys_msg($_LANG['install_ok'], 0, $links);
}
}
elseif ($_REQUEST['act'] == 'edit')
{
if (empty($_POST['step']))
{
if (isset($_REQUEST['code']))
{
$_REQUEST['code'] = trim($_REQUEST['code']);
}
else
{
die('invalid cron');
}
$sql = "SELECT * FROM " . $ecs->table('crons') . " WHERE cron_code = '$_REQUEST[code]'";
$cron = $db->getRow($sql);
if (empty($cron))
{
$links[] = array('text' => $_LANG['back_list'], 'href' => 'cron.php?act=list');
sys_msg($_LANG['cron_not_available'], 0, $links);
}
/* 取相应插件信息 */
$set_modules = true;
include_once(ROOT_PATH . 'includes/modules/cron/' . $_REQUEST['code'] . '.php');
$data = $modules[0];
/* 取得配置信息 */
$cron['cron_config'] = unserialize($cron['cron_config']);
if (!empty($cron['cron_config']))
{
foreach ($cron['cron_config'] AS $key => $value)
{
$cron['cron_config'][$key]['label'] = $_LANG[$value['name']];
if ($cron['cron_config'][$key]['type'] == 'select')
{
$cron['cron_config'][$key]['range'] = $_LANG[$cron['cron_config'][$key]['name'] . '_range'];
}
}
}
$cron['cron_act'] = 'edit';
$cron['cronweek'] = $cron['week'] == '0' ? 7 : $cron['week'];
$cron['cronday'] = $cron['day'];
$cron['cronhour'] = $cron['hour'];
$cron['cronminute'] = $cron['minute'];
$cron['run_once'] && $cron['autoclose'] = 'checked';
list($day, $week, $hours) = get_dwh();
$page_list = array( 'index' => 0,
'user' => 0,
'pick_out' => 0,
'flow' => 0,
'group_buy' => 0,
'snatch' => 0,
'tag_cloud' => 0,
'category' => 0,
'goods' => 0,
'article_cat' => 0,
'article' => 0,
'brand' => 0,
'search' => 0,
);
$cron['alow_files'] .= " ";
foreach(explode(' ', $cron['alow_files']) as $k=>$v)
{
$v = str_replace('.php', '', $v);
if(!empty($v))
{
$page_list[$v] = 1;
}
}
assign_query_info();
$smarty->assign('ur_here', $_LANG['edit'] . $_LANG['cron_code']);
$smarty->assign('cron', $cron);
$smarty->assign('days', $day);
$smarty->assign('week', $week);
$smarty->assign('hours', $hours);
$smarty->assign('page_list', $page_list);
$smarty->display('cron_edit.htm');
}
elseif($_POST['step'] == 2)
{
$links[] = array('text' => $_LANG['back_list'], 'href' => 'cron.php?act=list');
if (empty($_POST['cron_id']))
{
sys_msg($_LANG['cron_not_available'], 0, $links);
}
$cron_config = array();
if (isset($_POST['cfg_value']) && is_array($_POST['cfg_value']))
{
$temp = count($_POST['cfg_value']);
for ($i = 0; $i < $temp; $i++)
{
$cron_config[] = array('name' => trim($_POST['cfg_name'][$i]),
'type' => trim($_POST['cfg_type'][$i]),
'value' => trim($_POST['cfg_value'][$i])
);
}
}
$cron_config = serialize($cron_config);
$cron_minute = get_minute($_POST['cron_minute']);
if ($_POST['ttype'] == 'day')
{
$cron_day = $_POST['cron_day'];
$cron_week = '';
}
elseif($_POST['ttype'] == 'week')
{
$cron_day = '';
$cron_week = $_POST['cron_week'];
}
else
{
$cron_day = $cron_week = '';
}
if ($cron_week == 7)
{
$cron_week = 0;
}
$_POST['alow_files'] = isset($_POST['alow_files']) ? implode(' ', $_POST['alow_files']) : "";
!isset($_POST['cron_run_once']) && $_POST['cron_run_once'] = 0;
//$_POST['cron_run_once'] = (int)$_POST['cron_run_once'];
$cron_hour = $_POST['cron_hour'];
$cron = array('day'=>$cron_day,'week'=>$cron_week,'m'=>$cron_minute,'hour'=>$cron_hour);
$next = get_next_time($cron);
$sql = "UPDATE " . $ecs->table('crons') .
"SET cron_name = '$_POST[cron_name]', cron_desc = '$_POST[cron_desc]', cron_config = '$cron_config', nextime='$next', day = '$cron_day', week = '$cron_week', hour = '$cron_hour', minute = '$cron_minute', run_once = '$_POST[cron_run_once]', allow_ip = '$_POST[allow_ip]', alow_files = '$_POST[alow_files]'" .
"WHERE cron_id = '$_POST[cron_id]' LIMIT 1";
$db->query($sql);
sys_msg($_LANG['edit_ok'], 0 ,$links);
}
}
elseif ($_REQUEST['act'] == 'uninstall')
{
$sql = "DELETE FROM " . $ecs->table('crons') .
"WHERE cron_code = '$_REQUEST[code]' LIMIT 1";
$db->query($sql);
$links[] = array('text' => $_LANG['back_list'], 'href' => 'cron.php?act=list');
sys_msg($_LANG['uninstall_ok'], 0, $links);
}
elseif ($_REQUEST['act'] == 'toggle_show')
{
$id = trim($_POST['id']);
$val = intval($_POST['val']);
$sql = "UPDATE " . $ecs->table('crons') .
"SET enable = '$val' " .
"WHERE cron_code = '$id' LIMIT 1";
$db->query($sql);
make_json_result($val);
}
elseif ($_REQUEST['act'] == 'do')
{
if (isset($set_modules))
{
$set_modules = false;
unset($set_modules);
}
if (file_exists(ROOT_PATH.'includes/modules/cron/' . $_REQUEST['code'] . '.php'))
{
$cron = array();
$sql = "SELECT cron_config FROM " . $ecs->table('crons') . " WHERE cron_code = '$_REQUEST[code]'";
$temp = $db->getRow($sql);
$temp = unserialize($temp['cron_config']);
if (!empty($temp))
{
foreach ($temp as $key => $val)
{
$cron[$val['name']] = $val['value'];
}
}
include_once(ROOT_PATH.'includes/modules/cron/' . $_REQUEST['code'] . '.php');
$timestamp = gmtime();
$sql = "UPDATE " . $ecs->table('crons') .
"SET thistime = '$timestamp' " .
"WHERE cron_code = '$_REQUEST[code]' LIMIT 1";
$db->query($sql);
}
$links[] = array('text' => $_LANG['back_list'], 'href' => 'cron.php?act=list');
sys_msg($_LANG['do_ok'], 0, $links);
}
function get_next_time($cron)
{
$timestamp = gmtime();
$y = local_date('Y', $timestamp);
$mo = local_date('n', $timestamp);
$d = local_date('j', $timestamp);
$w = local_date('w', $timestamp);
$h = local_date('G', $timestamp);
$sh = $sm = 0;
$sy = $y;
if ($cron['day'])
{
$sd = $cron['day'];
$smo = $mo;
}
else
{
$sd = $d;
$smo = $mo;
if ($cron['week'] !== '')
{
$sd += $cron['week'] - $w;
}
}
if ($cron['hour'])
{
$sh = $cron['hour'];
}
$next = local_strtotime("$sy-$smo-$sd $sh:$sm:0");
//$next = gmmktime($sh,$sm,0,$smo,$sd,$sy);
return $next;
}
function get_minute($cron_minute)
{
$cron_minute = explode(',',$cron_minute);
$cron_minute = array_unique($cron_minute);
foreach ($cron_minute as $key => $val)
{
if ($val)
{
$val = intval($val);
$val < 0 && $val = 0;
$val > 59 && $val = 59;
$cron_minute[$key] = $val;
}
}
return trim(implode(',',$cron_minute));
}
function get_dwh()
{
$days = $week = $hours = array();
for ($i = 1 ; $i<=31 ; $i++)
{
$days[$i] = str_pad($i,2,'0',STR_PAD_LEFT);
}
for ($i = 1 ; $i<8 ; $i++)
{
$week[$i] = $GLOBALS['_LANG']['week'][$i];
}
for ($i = 0 ; $i<24 ; $i++)
{
$hours[$i] = str_pad($i,2,'0',STR_PAD_LEFT);
}
return array($days,$week,$hours);
}
?>