[795] | 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']); |
---|
[2233] | 45 | $this->jobManager =& Factory::getInstance('WorkflowJobManager'); |
---|
[795] | 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 */ |
---|
[2233] | 68 | Factory::getInstance('WorkflowSecurity')->enableSecurityPolicy(); |
---|
[795] | 69 | |
---|
[2338] | 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 | |
---|
[795] | 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(); |
---|
| 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'; |
---|
[2233] | 102 | Factory::getInstance('WorkflowMacro')->prepareEnvironment(); |
---|
[795] | 103 | |
---|
[2311] | 104 | $jobRunner = &Factory::newInstance('JobRunner', $argv[1]); |
---|
[795] | 105 | $jobRunner->run(); |
---|
| 106 | ?> |
---|