root/dev/mods/ajcron/init.php @ 363

Revision 363, 4.4 KB (checked in by exi, 14 years ago)

Commit of the reworked ajax mod
Preview of the new ajcron mod (80% done)

Line 
1<?php
2
3// make sure we are only running if xajax is enabled
4event::register('mod_xajax_initialised', 'ajcron::run');
5
6class ajcron
7{
8    function run()
9    {
10        global $xajax;
11        if (isset($xajax))
12        {
13            if (get_class($xajax) == 'xajax')
14            {
15                // we're good to go, set up our asynchronous callback
16                $xajax->registerFunction(array('ajcron', 'ajcron', 'xajax_req'));
17
18                // fastest way to check wether we have to run or not
19                if (config::get('ajcron_nextrun') < time())
20                {
21                    // we need to run
22                    mod_xajax::xajax();
23                    $xajax->configure('waitCursor', false);
24                    event::register('page_assembleheader', 'ajcron::insertHTML');
25                }
26            }
27        }
28    }
29
30    function insertHTML($page)
31    {
32        $page->addBody('<script type="text/javascript" charset="UTF-8">
33            var myLocalCallback = xajax.callback.create(400, 1000);
34            myLocalCallback.onExpiration = function(req) { xajax.abortRequest(req); }
35            xajax.call(\'xajax_req\', {callback: myLocalCallback});</script>');
36    }
37
38    function getNextRunDisplay()
39    {
40        $nextrun = config::get('ajcron_nextrun');
41        if ($nextrun == 0)
42        {
43            return 'never';
44        }
45        else
46        {
47            return date('Y-m-d H:i:s', $nextrun);
48        }
49    }
50
51    function resetNextRunCheckbox()
52    {
53        if (config::get('ajcron_resetNextRun'))
54        {
55            config::set('ajcron_resetNextRun', 0);
56            config::set('ajcron_nextrun', time());
57        }
58        if (config::get('ajcron_resetRunning'))
59        {
60            config::set('ajcron_resetRunning', 0);
61            config::set('ajcron_running', array());
62        }
63    }
64
65    function getNextRun($intervall)
66    {
67        $time = time();
68
69        if (strstr($intervall, ':'))
70        {
71            $nextrun = strtotime($intervall);
72            if ($nextrun < $time)
73            {
74                $nextrun = strtotime('tomorrow '.$intervall);
75            }
76        }
77        elseif (strstr($intervall, '/'))
78        {
79            $int = substr($intervall, 1);
80            if ($int == 60)
81            {
82                $mintoh = 59-date('i', $time);
83                $stoh = 60-date('s', $time);
84                $nextrun = $time+$mintoh*60+$stoh;
85            }
86            else
87            {
88                $mintot = 59 % $int - date('i', $time);
89                $stot = 60 - date('s', $time);
90                while ($mintot < 0)
91                {
92                    $mintot += $int;
93                }
94                $nextrun = $time + $mintot * 60 + $stot;
95            }
96        }
97        return $nextrun;
98    }
99
100    function parseJobs()
101    {
102        $jobs = array();
103        $arr = explode("\n", config::get('ajcron_jobs'));
104        $i = 0;
105        foreach ($arr as $job)
106        {
107            $tmp = preg_split("/".chr(32)."/", trim($job), -1, PREG_SPLIT_NO_EMPTY);
108            $nextrun = date('Y-m-d H:i:s' ,ajcron::getNextRun($tmp[0]));
109            $jobs[$i++] = array('id' => md5(trim($job)), 'nextrun' => $nextrun, 'name' => $tmp[2],  'url' => $tmp[1]);
110        }
111
112        return nl2br(var_export($jobs, true));
113    }
114
115    function xajax_req()
116    {
117        @ignore_user_abort(true);
118        @set_time_limit(0);
119        // actual code goes here
120
121        // load up our crontasks
122        $jobs = ajcron::parseJobs();
123
124        if (!count($jobs))
125        {
126            return;
127        }
128        $nextrun = $jobs[0]['nextrun'];
129        $id = null;
130        // see which one should be started now
131        foreach ($jobs as $job)
132        {
133            if ($nextrun > $job['nextrun'])
134            {
135                $nextrun = $job['nextrun'];
136                $id = $job['id'];
137            }
138        }
139
140        // start
141        #include_once('common/includes/class.http.php');
142        #$http = new http_request($fetchurl);
143        #$http->set_timeout(120);
144        #$data = $http->get_content();
145
146        // calculate and set new runtime
147        #config::set('ajcron_nextrun', time());
148
149        // testfun!
150        $objResponse = new xajaxResponse();
151        $objResponse->Assign("header", "innerHTML", ajcron::parseJobs());
152        #sleep(15);
153        return $objResponse;
154    }
155}
Note: See TracBrowser for help on using the browser.