1 | <?php |
---|
2 | /**************************************************************************\ |
---|
3 | * eGroupWare * |
---|
4 | * http://www.egroupware.org * |
---|
5 | * -------------------------------------------- * |
---|
6 | * This program is free software; you can redistribute it and/or modify it * |
---|
7 | * under the terms of the GNU General Public License as published by the * |
---|
8 | * Free Software Foundation; either version 2 of the License, or (at your * |
---|
9 | * option) any later version. * |
---|
10 | \**************************************************************************/ |
---|
11 | |
---|
12 | /** |
---|
13 | * Classe responsável pela execução dos Jobs |
---|
14 | * @package Workflow |
---|
15 | * @author Sidnei Augusto Drovetto Jr. - drovetto@gmail.com |
---|
16 | * @license http://www.gnu.org/copyleft/gpl.html GPL |
---|
17 | * @subpackage Job |
---|
18 | */ |
---|
19 | class JobRunner |
---|
20 | { |
---|
21 | /** |
---|
22 | * @var array $parameters Parâmetros passados pela linha de comando |
---|
23 | * @access private |
---|
24 | */ |
---|
25 | private $parameters; |
---|
26 | |
---|
27 | /** |
---|
28 | * @var object $jobManager Objeto da classe JobManager |
---|
29 | * @access private |
---|
30 | */ |
---|
31 | private $jobManager; |
---|
32 | |
---|
33 | /** |
---|
34 | * Construtor da classe JobRunner |
---|
35 | * @param array $parameters Parâmetros passados pela linha de comando |
---|
36 | * @return object Objeto da classe JobRunner |
---|
37 | * @access public |
---|
38 | */ |
---|
39 | public function JobRunner($parameters) |
---|
40 | { |
---|
41 | ini_set('display_errors', false); |
---|
42 | ini_set('log_errors', true); |
---|
43 | $this->parameters = unserialize(base64_decode($parameters)); |
---|
44 | $this->parameters['currentDate'] = new DateTime($this->parameters['currentDate']); |
---|
45 | $this->jobManager =& Factory::getInstance('WorkflowJobManager'); |
---|
46 | } |
---|
47 | |
---|
48 | /** |
---|
49 | * Indica que a execução do Job falhou (este Status de falha implica que o Job não foi executado). Após a execução deste método, a execução do PHP é encerrada |
---|
50 | * @param string $message A mensagem que será armazenada |
---|
51 | * @return void |
---|
52 | * @access private |
---|
53 | */ |
---|
54 | private function fail($message) |
---|
55 | { |
---|
56 | $this->jobManager->writeLog($this->parameters['jobID'], $this->parameters['currentDate'], $message, JobManager::STATUS_FAIL); |
---|
57 | exit; |
---|
58 | } |
---|
59 | |
---|
60 | /** |
---|
61 | * Executa o Job |
---|
62 | * @return void |
---|
63 | * @access public |
---|
64 | */ |
---|
65 | public function run() |
---|
66 | { |
---|
67 | /* activate the security policy */ |
---|
68 | Factory::getInstance('WorkflowSecurity')->enableSecurityPolicy(); |
---|
69 | |
---|
70 | /** |
---|
71 | * Since all jobs must run in process mode, e. g. it's user code, |
---|
72 | * we must enable the security. |
---|
73 | */ |
---|
74 | Security::enable(); |
---|
75 | |
---|
76 | if (!file_exists($this->parameters['file'])) |
---|
77 | $this->fail('Arquivo contendo o código do Job não foi encontrado'); |
---|
78 | |
---|
79 | require_once dirname(__FILE__) . '/local/classes/class.JobBase.php'; |
---|
80 | require_once $this->parameters['file']; |
---|
81 | |
---|
82 | if (!class_exists($this->parameters['className'])) |
---|
83 | $this->fail('A classe "' . $this->parameters['className'] . '" não foi encontrada'); |
---|
84 | |
---|
85 | $job = new $this->parameters['className']($this->parameters['jobID'], $this->parameters['processID'], $this->parameters['currentDate'], $this->parameters['testMode'], $this->parameters['maximumExecutionTime']); |
---|
86 | |
---|
87 | if (!is_subclass_of($job, 'JobBase')) |
---|
88 | $this->fail('A classe "' . $this->parameters['className'] . '" não está estendendo a classe JobBase'); |
---|
89 | |
---|
90 | $GLOBALS['workflow']['job']['processID'] = $this->parameters['processID']; |
---|
91 | $job->run(!empty($this->parameters['jobParams']) ? $this->parameters['jobParams'] : null); |
---|
92 | $job->finalize(); |
---|
93 | } |
---|
94 | } |
---|
95 | |
---|
96 | /* esta classe só pode ser executada a partir da linha de comando. |
---|
97 | * Além disso, ela exige um parâmetro (que é uma string serializada e codificada em base64) */ |
---|
98 | if ((php_sapi_name() !== 'cli') || (!isset($argv[1]))) |
---|
99 | exit; |
---|
100 | |
---|
101 | require_once 'common.inc.php'; |
---|
102 | Factory::getInstance('WorkflowMacro')->prepareEnvironment(); |
---|
103 | |
---|
104 | $jobRunner = &Factory::newInstance('JobRunner', $argv[1]); |
---|
105 | $jobRunner->run(); |
---|
106 | ?> |
---|