source: trunk/workflow/inc/class.JobRunner.inc.php @ 795

Revision 795, 3.5 KB checked in by viani, 15 years ago (diff)

Ticket #488 - Inclusão do módulo workflow no ramo trunk do repositório Expresso.

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 = &$GLOBALS['workflow']['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                $GLOBALS['workflow']['factory']->getInstance('WorkflowSecurity')->enableSecurityPolicy();
69
70                if (!file_exists($this->parameters['file']))
71                        $this->fail('Arquivo contendo o código do Job não foi encontrado');
72
73                require_once dirname(__FILE__) . '/local/classes/class.JobBase.php';
74                require_once $this->parameters['file'];
75
76                if (!class_exists($this->parameters['className']))
77                        $this->fail('A classe "' . $this->parameters['className'] . '" não foi encontrada');
78
79                $job = new $this->parameters['className']($this->parameters['jobID'], $this->parameters['processID'], $this->parameters['currentDate'], $this->parameters['testMode'], $this->parameters['maximumExecutionTime']);
80
81                if (!is_subclass_of($job, 'JobBase'))
82                        $this->fail('A classe "' . $this->parameters['className'] . '" não está estendendo a classe JobBase');
83
84                $GLOBALS['workflow']['job']['processID'] = $this->parameters['processID'];
85                $job->run();
86                $job->finalize();
87        }
88}
89
90/* esta classe só pode ser executada a partir da linha de comando.
91 * Além disso, ela exige um parâmetro (que é uma string serializada e codificada em base64) */
92if ((php_sapi_name() !== 'cli') || (!isset($argv[1])))
93        exit;
94
95require_once 'common.inc.php';
96$GLOBALS['workflow']['factory']->getInstance('WorkflowMacro')->prepareEnvironment();
97
98$jobRunner = new JobRunner($argv[1]);
99$jobRunner->run();
100?>
Note: See TracBrowser for help on using the repository browser.