-
Notifications
You must be signed in to change notification settings - Fork 0
/
elysia_cron.api.php
134 lines (123 loc) · 3.47 KB
/
elysia_cron.api.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
/**
* @file
* Hooks provided by the Elysia cron module.
*/
/**
* @addtogroup hooks
* @{
*/
/**
* You can extend cron functionality in you modules by using elysia_cron api.
*
* With it you can:
* - have more than one cron job per module
* - have a different schedule rule for each cron job defined
* - set a description for each cron job.
*
* To do this you should add in you module a new hook. This is the syntax:
*
* - 'key' is the identifier for the task you are defining.
* You can define a timing for the standard cron hook of the module by using
* the "MODULENAME_cron" key. (See examples).
*
* - description:
* a textual description of the job, used in elysia cron's status
* page. Use the untranslated string, without the "t()" wrapper (elysia_cron
* will apply it)
*
* - rule:
* the crontab rule. For example: "0 * * * *" to execute the task every hour.
*
* - weight (optional):
* a numerical value to define order of execution. (Default:0)
*
* - callback (optional):
* you can define here a name of a PHP function that should
* by called to execute the task. This is not mandatory: if you don't specify
* it Elysia cron will search for a function called like the task KEY.
* If this function is not found, Elysia cron will call the "hook_cronapi"
* function with $op = 'execute' and $job = 'KEY' (the key of the task).
* (See examples)
*
* - arguments (optional):
* an array of arguments passed to callback (only if callback is defined).
*
* - file/file path:
* the PHP file that contains the callback (hook_menu's syntax).
*
* @param string $op
* Operation: "list" or "execute".
* @param string|null $job
* Name of current job or it is NULL if we define job list.
*
* @return array
* Job list.
*/
function hook_cronapi($op, $job = NULL) {
// General example of all parameters.
$items['key'] = array(
'description' => 'string',
'rule' => 'string',
'weight' => 1234,
'callback' => 'function_name',
'arguments' => array('first', 'second', 3),
// External file, like in hook_menu.
'file' => 'string',
'file path' => 'string',
);
// Run function example_sendmail_cron() every 2 hours.
// Note: i don't need to define a callback, i'll use "example_sendmail_cron"
// function.
$items['example_sendmail_cron'] = array(
'description' => 'Send mail with news',
'rule' => '0 */2 * * *',
);
// Run example_news_fetch('all') every 5 minutes.
// Note: this function has argument.
$items['example_news_cron'] = array(
'description' => 'Send mail with news',
'rule' => '*/5 * * * *',
'callback' => 'example_news_fetch',
'arguments' => array('all'),
);
// Definition of rules list and embedded code.
if ($op == 'list') {
// Rules list.
$items['job1'] = array(
'description' => 'Send mail with news',
'rule' => '0 */2 * * *',
);
$items['job2'] = array(
'description' => 'Send mail with news',
'rule' => '*/5 * * * *',
);
}
elseif ($op == 'execute') {
// Embedded code.
switch ($job) {
case 'job1':
// ... job1 code.
break;
case 'job2':
// ... job2 code.
break;
}
}
return $items;
}
/**
* Altering hook_cron definition.
*
* You can use the "hook_cron_alter" function to edit cronapi data of other
* modules.
*
* @param array $data
* Array of cron rules.
*/
function hook_cron_alter(&$data) {
$data['key']['rule'] = '0 */6 * * *';
}
/**
* @} End of "addtogroup hooks".
*/