1 <?php
2
3 4 5 6 7 8 9
10
11 class rex_cronjob_phpcallback extends rex_cronjob
12 {
13 public function execute()
14 {
15 if (preg_match('/^\s*(?:(\w*?)\:\:)?(\w*?)(?:\((.*?)\))?\;?\s*$/', $this->getParam('callback'), $matches)) {
16 $callback = $matches[2];
17 if ($matches[1] != '') {
18 $callback = [$matches[1], $callback];
19 }
20 if (!is_callable($callback)) {
21 if (is_array($callback)) {
22 $callback = $callback[0] . '::' . $callback[1];
23 }
24 $this->setMessage($callback . '() not callable');
25 return false;
26 }
27 $params = [];
28 if (isset($matches[3]) && $matches[3] != '') {
29 $params = explode(',', $matches[3]);
30 foreach ($params as $i => $param) {
31 $param = preg_replace('/^(\\\'|\")?(.*?)\\1$/', '$2', trim($param));
32 $params[$i] = $param;
33 }
34 }
35 $return = call_user_func_array($callback, $params);
36 if ($return !== false) {
37 if (is_string($return)) {
38 $this->setMessage($return);
39 }
40 return true;
41 }
42 $this->setMessage('Error in callback');
43 return false;
44 }
45 $this->setMessage('Syntax error in callback');
46 return false;
47 }
48
49 public function getTypeName()
50 {
51 return rex_i18n::msg('cronjob_type_phpcallback');
52 }
53
54 public function getParamFields()
55 {
56 return [
57 [
58 'label' => rex_i18n::msg('cronjob_type_phpcallback'),
59 'name' => 'callback',
60 'type' => 'text',
61 'notice' => rex_i18n::msg('cronjob_examples') . ': foo(), foo(1, \'string\'), foo::bar()',
62 ],
63 ];
64 }
65 }
66