source: branches/2.2/workflow/inc/class.JobRunner.inc.php @ 3167

Revision 3167, 3.6 KB checked in by viani, 14 years ago (diff)

Ticket #1135 - Merged r1990:3166 from /trunk/workflow into /branches/2.2/workflow

Line 
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 */
19class 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();
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) */
98if ((php_sapi_name() !== 'cli') || (!isset($argv[1])))
99        exit;
100
101require_once 'common.inc.php';
102Factory::getInstance('WorkflowMacro')->prepareEnvironment();
103
104$jobRunner = &Factory::newInstance('JobRunner', $argv[1]);
105$jobRunner->run();
106?>
Note: See TracBrowser for help on using the repository browser.