<commit_before><?php

/*定义一个数据结构

任务
ZblogTasks
{
id: 英文+数字 (ID不可重复，建议用插件ID_事件名)
name: 名称
function: 要执行的无显式参数的函数 （函数返回值是字符串 或是bool值 True，执行失败则返回bool值False）
begintime: 起始时间 int unixtime 秒
endtime: 结束时间 int unixtime 秒
interval: 间隔 （以秒为单位）
lasttime: 最后一次执行的时间 （新任务为空）
lastresult: 最后一次执行的结果 （新任务为空）
suspend：挂起（boolean）暂停该计划
operate:正在执行中(boolean) 为了防止多次刷新执行同一个任务
}

任务队列
List of ZblogTasks array(ZblogTask task)

按间隔时间进行从高到低的排序

function ScheduledTasks_Polling(){} //主函数，轮询任务队列
从间隔最长的任务依次向间隔最短的任务判断下去，如果nowtime > lasttime + interval的话，就执行该任务

function ScheduledTasks_RegTasks(array $array){} //注册或是更新一个任务

function ScheduledTasks_DelTasks($id){} //从任务队列中删除一个任务

function ScheduledTasks_GetTasks($id){} //获取一个任务的详细信息

function ScheduledTasks_GetTasksAll(){} //获取所有任务的array

function ScheduledTasks_Command($function, $interval = 3600, $begintime = 0, $endtime = 2147483647){} //快捷注册计划任务,默认1小时执行一次

function ScheduledTasks_Execute($id){} //执行一个任务

数据存储

任务队列存储在$zbp->cache('ScheduledTasks')里
每一个任务的ID都做为一个键值key（"Tasks_" + task_id），value为数据结构
$zbp->cache('ScheduledTasks')->task_id = array(ZblogTask结构);

*/

//注册插件
RegisterPlugin("ScheduledTasks", "ActivePlugin_ScheduledTasks");

function ActivePlugin_ScheduledTasks(){
}

function test_abc(){
    $a = 1/0;

    return 'OK';
}

//ScheduledTasks_Command('test_abc');
//ScheduledTasks_Execute('test_abc');

function ScheduledTasks_Polling(){
    //先对key<=>interval数组进行自然排序，从大到小
    $alltasks = ScheduledTasks_GetTasksAll();
    $aryinterval = array();
    $newtasks = array();
    foreach ($alltasks as $key => $value) {
        $aryinterval[$key] = $value['interval'];
    }
    arsort($aryinterval);
    foreach ($aryinterval as $key => $value) {
        $newtasks[$key] = $alltasks[$key];
    }

    foreach ($newtasks as $key => $tasks) {
        if ($tasks['operate'] == false) {
            if ($tasks['suspend'] == false) {
                if (time() > $tasks['begintime']) {
                    if ($tasks['endtime'] > time()) {
                        if (time() > $tasks['lasttime'] + $tasks['interval']) {
                            //var_dump($tasks['id']);
                            $result = ScheduledTasks_Execute($tasks['id']);
                            return $tasks['id'] . ':' . $result;
                        }
                    }
                }
            }
        }
    }
}

function ScheduledTasks_RegTasks(array $array){
    global $zbp;
    $tasks = array();
    $tasks['id'] = mb_substr(str_replace(' ', '', GetValueInArray($array, 'id')), 0, 50);
    $tasks['name'] = (string)GetValueInArray($array, 'name');<commit_msg>继续计划任务插件;<commit_after><?php

/*定义一个数据结构

任务
ZblogTasks
{
id: 英文+数字 (ID不可重复，建议用插件ID_事件名)
name: 名称
function: 要执行的无显式参数的函数 （函数返回值是字符串 或是bool值 True，执行失败则返回bool值False）
begintime: 起始时间 int unixtime 秒
endtime: 结束时间 int unixtime 秒
interval: 间隔 （以秒为单位）
lasttime: 最后一次执行的时间 （新任务为空）
lastresult: 最后一次执行的结果 （新任务为空）
suspend：挂起（boolean）暂停该计划
operate:正在执行中(boolean) 为了防止多次刷新执行同一个任务
}

任务队列
List of ZblogTasks array(ZblogTask task)

按间隔时间进行从高到低的排序

function ScheduledTasks_Polling(){} //主函数，轮询任务队列
从间隔最长的任务依次向间隔最短的任务判断下去，如果nowtime > lasttime + interval的话，就执行该任务

function ScheduledTasks_RegTasks(array $array){} //注册或是更新一个任务

function ScheduledTasks_DelTasks($id){} //从任务队列中删除一个任务

function ScheduledTasks_GetTasks($id){} //获取一个任务的详细信息

function ScheduledTasks_GetTasksAll(){} //获取所有任务的array

function ScheduledTasks_Command($function, $interval = 3600, $begintime = 0, $endtime = 2147483647){} //快捷注册计划任务,默认1小时执行一次

function ScheduledTasks_Execute($id){} //执行一个任务

数据存储

任务队列存储在$zbp->cache('ScheduledTasks')里
每一个任务的ID都做为一个键值key（"Tasks_" + task_id），value为数据结构
$zbp->cache('ScheduledTasks')->task_id = array(ZblogTask结构);

*/

//注册插件
RegisterPlugin("ScheduledTasks", "ActivePlugin_ScheduledTasks");

function ActivePlugin_ScheduledTasks(){
}

function test_abc(){
    $a = 1/0;

    return 'OK';
}

//ScheduledTasks_Command('test_abc');
//ScheduledTasks_Execute('test_abc');

function ScheduledTasks_Polling(){
    //先对key<=>interval数组进行自然排序，从大到小
    $alltasks = ScheduledTasks_GetTasksAll();
    $aryinterval = array();
    $newtasks = array();
    foreach ($alltasks as $key => $value) {
        $aryinterval[$key] = $value['interval'];
    }
    arsort($aryinterval);
    foreach ($aryinterval as $key => $value) {
        $newtasks[$key] = $alltasks[$key];
    }

    foreach ($newtasks as $key => $tasks) {
        if ($tasks['operate'] == false) {
            if ($tasks['suspend'] == false) {
                if (time() > $tasks['begintime']) {
                    if ($tasks['endtime'] > time()) {
                        if (time() >= $tasks['lasttime'] + $tasks['interval'] - round(1 + $tasks['interval']*0.01)) {//减1%时间应对网络波动
                            //var_dump($tasks['id']);
                            $result = ScheduledTasks_Execute($tasks['id']);
                            return $tasks['id'] . ':' . $result;
                        }
                    }
                }
            }
        }
    }
}

function ScheduledTasks_RegTasks(array $array){
    global $zbp;
    $tasks = array();
    $tasks['id'] = mb_substr(str_replace(' ', '', GetValueInArray($array, 'id')), 0, 50);
    $tasks['name'] = (string)GetValueInArray($array, 'name');
{'fraction_non_alphanumeric': 0.151797603195739, 'fraction_numerical': 0.008940460338596157, 'mean_word_length': 3.3926482873851294, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6949340', 'n_tokens_mistral': 2159, 'n_tokens_neox': 2285, 'n_words': 322}