source: sandbox/workflow/trunk/inc/local/classes/class.wf_engine.php @ 2858

Revision 2858, 12.1 KB checked in by viani, 11 years ago (diff)

Ticket #950 - Merged 2589:2838 /trunk/workflow/ em /sandbox/workflow/trunk/

  • Property svn:executable set to *
Line 
1<?php
2/**
3* Provê métodos que acessam informações relacionadas à engine.
4* @author Sidnei Augusto Drovetto Junior - drovetto@gmail.com
5* @version 1.0
6* @license http://www.gnu.org/copyleft/gpl.html GPL
7* @package Workflow
8* @subpackage local
9*/
10class wf_engine
11{
12        /**
13        * @var object $processManager objeto da classe ProcessManager
14        * @access private
15        */
16        var $processManager;
17        /**
18        * @var object $acl objeto da classe workflow_acl
19        * @access private
20        */
21        var $acl;
22        /**
23        * @var object $run_activity objeto da classe run_activity
24        * @access private
25        */
26        var $run_activity;
27
28        /**
29        * Construtor do wf_engine.
30        * @return object
31        * @access public
32        */
33        function wf_engine()
34        {
35                $this->processManager = null;
36                $this->acl = null;
37                $this->run_activity = null;
38        }
39
40        private function getCurrentProcessID()
41        {
42                if (!is_null($GLOBALS['workflow']['wf_runtime']->activity))
43                        return (int) $GLOBALS['workflow']['wf_runtime']->activity->getProcessId();
44
45                if (isset($GLOBALS['workflow']['job']))
46                        return (int) $GLOBALS['workflow']['job']['processID'];
47
48                return false;
49        }
50
51        private function checkProcessAccess($processID)
52        {
53                $processID = (int) $processID;
54                return ($processID === $this->getCurrentProcessID());
55        }
56
57        /**
58        * Busca informações de um (ou mais) processo(s).
59        * @param mixed $pids Uma array de IDs de processo ou um inteiro representando o ID de um processo.
60        * @return array Informações sobre o(s) processo(s).
61        * @access public
62        */
63        function getProcess($pids)
64        {
65                if (!is_array($pids))
66                        $pids = array($pids);
67
68                $flagObject[0] = is_null($this->processManager);
69                if ($flagObject[0])
70                        $this->processManager = Factory::getInstance('workflow_processmanager');
71
72                $output = array();
73                foreach ($pids as $pid)
74                        $output[] = $this->processManager->get_process($pid, false);
75
76                if ($flagObject[0])
77                        $this->processManager = null;
78
79                return $output;
80        }
81
82        /**
83        * Dá seqüência no fluxo de uma instância (simula ação do usuário).
84        * @param int $activityID O ID da atividade da instância.
85        * @param int $instanceID O ID da instância.
86        * @return bool true caso a instância tenha sido continuada e false caso contrário.
87        * @access public
88        * @deprecated 1.7.00.000
89        */
90        function continueInstance($activityID, $instanceID)
91        {
92                $WFInstance = &Factory::getInstance('wf_instance');
93                return $WFInstance->continueInstance($activityID, $instanceID);
94        }
95
96        /**
97        * Aborta uma instância
98        * @param int $instanceID O ID da instância.
99        * @return boolean true se foi possível abortar a instância e false caso contrário.
100        * @access public
101        * @deprecated 1.7.00.000
102        */
103        function abortInstance($instanceID)
104        {
105                $WFInstance = &Factory::getInstance('wf_instance');
106                return $WFInstance->abort($instanceID);
107        }
108
109        /**
110        * Define o nome (identificador) de uma instância
111        * @param int $instanceID O ID da instância.
112        * @param string $name O novo nome da instância.
113        * @return boolean true se foi possível mudar o nome da instância e false caso contrário.
114        * @access public
115        * @deprecated 1.7.00.000
116        */
117        function setInstanceName($instanceID, $name)
118        {
119                $WFInstance = &Factory::getInstance('wf_instance');
120                return $WFInstance->setName($instanceID, $name);
121        }
122
123        /**
124        * Define a prioridade de uma instância
125        * @param int $instanceID O ID da instância.
126        * @param int $priority A nova prioridade da instância
127        * @return boolean true se foi possível mudar a prioridade da instância e false caso contrário.
128        * @access public
129        * @deprecated 1.7.00.000
130        */
131        function setInstancePriority($instanceID, $priority)
132        {
133                $WFInstance = &Factory::getInstance('wf_instance');
134                return $WFInstance->setPriority($instanceID, $priority);
135        }
136
137        /**
138        * Busca instâncias abandonadas.
139        * @param int $numberOfDays O tempo (em dias) em que a instância está abandonada.
140        * @param array $activities Uma lista de atividades das quais se quer as instâncias abandonadas (também pode ser um valor inteiro).
141        * @return array As instâncias que satisfazem o critério de seleção.
142        * @access public
143        * @deprecated 1.7.00.000
144        */
145        function getIdleInstances($numberOfDays, $activities = null)
146        {
147                $WFInstance = &Factory::getInstance('wf_instance');
148                return $WFInstance->getIdle($numberOfDays, $activities);
149        }
150
151        /**
152        * Busca todas as instâncias.
153        * @param array $activities Uma lista de atividades das quais se quer as instâncias (também pode ser um valor inteiro).
154        * @return array As instâncias que satisfazem o critério de seleção.
155        * @access public
156        * @deprecated 1.7.00.000
157        */
158        function getInstances($activities = null)
159        {
160                return $this->getIdleInstances(0, $activities);
161        }
162
163        /**
164        * Busca todas as instâncias que possuem esse nome (identificador).
165        * @param string $name O nome da instância que se quer encontrar.
166        * @return array As instâncias que satisfazem o critério de seleção.
167        * @access public
168        * @deprecated 1.7.00.000
169        */
170        function getInstancesByName($name)
171        {
172                $WFInstance = &Factory::getInstance('wf_instance');
173                $preOutput = $WFInstance->getByName($name);
174                $output = array();
175                foreach ($preOutput as $childInstance)
176                        if (!is_null($childInstance['wf_activity_id']))
177                                $output[] = $childInstance;
178
179                return $output;
180        }
181
182        /**
183        * Busca as instâncias filhas de uma instância
184        * Se os parâmetros não forem informados, retorna instâncias filhas das instância atual.
185        * @param int $instanceID O ID da instância pai (não obrigatório).
186        * @param int $activityID O ID da atividade corrente da instância pai
187        * @return array As instâncias filhas do par instância/atividade atual
188        * @access public
189        * @deprecated 1.7.00.000
190        */
191        function getChildInstances($instanceID = null, $activityID = null)
192        {
193                $WFInstance = &Factory::getInstance('wf_instance');
194                $preOutput = $WFInstance->getChildren($instanceID);
195                $output = array();
196                foreach ($preOutput as $childInstance)
197                        if (!is_null($childInstance['wf_activity_id']))
198                                $output[] = $childInstance;
199
200                return $output;
201        }
202
203        /**
204        * Busca as propriedades de uma instância (do mesmo processo).
205        * @param int $instanceID O ID da instância.
206        * @return mixed Uma array contento as propriedades da instância (no formato "nome_da_propriedade" => "valor"). Ou false em caso de erro.
207        * @access public
208        * @deprecated 1.7.00.000
209        */
210        function getInstanceProperties($instanceID)
211        {
212                $WFInstance = &Factory::getInstance('wf_instance');
213                return $WFInstance->getProperties($instanceID);
214        }
215
216        /**
217        * Busca as propriedades de uma instância filha.
218        * @param int $instanceID O ID da instância filha.
219        * @return array Propriedades da instância filha. Array no formato "nome_da_propriedade" => "valor".
220        * @access public
221        * @deprecated 1.7.00.000
222        */
223        function getChildInstanceProperties($instanceID)
224        {
225                $WFInstance = &Factory::getInstance('wf_instance');
226                return $WFInstance->getProperties($instanceID);
227        }
228
229        /**
230        * Busca os recursos que um usuário pode administrar.
231        * @param string $type Tipo do recurso ("PRO", "MON, etc.).
232        * @param int $uid O usuário do qual se quer obter informações de administração de recursos.
233        * @return array IDs dos recursos ao qual o usuário tem acesso.
234        * @access public
235        */
236        function getUserPermissions($type, $uid)
237        {
238                $flagObject[0] = is_null($this->acl);
239                if ($flagObject[0])
240                        $this->acl = Factory::getInstance('workflow_acl');
241
242                $output = $this->acl->getUserPermissions($type, $uid);
243
244                if ($flagObject[0])
245                        $this->acl = null;
246
247                return $output;
248        }
249
250        /**
251        * Busca os recursos que um usuário pode administrar (inclusive faz verificação de acordo com permissões advindas de grupos).
252        * @param string $type Tipo do recurso ("PRO", "MON, etc.).
253        * @param int $uid O usuário do qual se quer obter informações de administração de recursos.
254        * @return array IDs dos recursos ao qual o usuário tem acesso.
255        * @access public
256        */
257        function getUserGroupPermissions($type, $uid)
258        {
259                $flagObject[0] = is_null($this->acl);
260                if ($flagObject[0])
261                        $this->acl = Factory::getInstance('workflow_acl');
262
263                $output = $this->acl->getUserGroupPermissions($type, $uid);
264
265                if ($flagObject[0])
266                        $this->acl = null;
267
268                return $output;
269        }
270
271        /**
272        * Traz informações sobre uma atividade a partir de seu ID
273        * @param int $activityID O ID da atividade
274        * @return mixed Uma array associativa contendo as informações sobre a atividade ou false caso a atividade não seja encontrada
275        * @access public
276        */
277        function getActivityInformationByID($activityID)
278        {
279                $activityID = (int) $activityID;
280                $processID = $this->getCurrentProcessID();
281
282                /* build the SQL query */
283                $query = "SELECT wf_activity_id, wf_name, wf_normalized_name, wf_type, wf_description FROM egw_wf_activities WHERE (wf_activity_id = ?) AND (wf_p_id = ?)";
284                $db = &Factory::getInstance('WorkflowObjects')->getDBGalaxia()->Link_ID;
285                $resultSet = $db->query($query, array($activityID, $processID));
286
287                /* return the data */
288                if (($row = $resultSet->fetchRow()))
289                        return array(
290                                'activity_id' => $row['wf_activity_id'],
291                                'name' => $row['wf_name'],
292                                'normalized_name' => $row['wf_normalized_name'],
293                                'type' => $row['wf_type'],
294                                'description' => $row['wf_description']
295                        );
296                else
297                        return false;
298        }
299
300        /**
301        * Traz informações sobre uma atividade a partir de seu nome
302        * @param int $activityName O nome da atividade
303        * @return mixed Uma array associativa contendo as informações sobre a atividade ou false caso a atividade não seja encontrada
304        * @access public
305        */
306        function getActivityInformationByName($activityName)
307        {
308                $processID = $this->getCurrentProcessID();
309
310                /* build the SQL query */
311                $query = "SELECT wf_activity_id, wf_name, wf_normalized_name, wf_type, wf_description FROM egw_wf_activities WHERE (wf_name = ?) AND (wf_p_id = ?)";
312                $db = &Factory::getInstance('WorkflowObjects')->getDBGalaxia()->Link_ID;
313                $resultSet = $db->query($query, array($activityName, $processID));
314
315                /* return the data */
316                if (($row = $resultSet->fetchRow()))
317                        return array(
318                                'activity_id' => $row['wf_activity_id'],
319                                'name' => $row['wf_name'],
320                                'normalized_name' => $row['wf_normalized_name'],
321                                'type' => $row['wf_type'],
322                                'description' => $row['wf_description']
323                        );
324                else
325                        return false;
326        }
327
328        /**
329        * Busca as instância de usuários de acordo com alguns critérios
330        * @param mixed $users Um array com IDs de usuários ou perfis (no caso de perfis, deve-se prefixar seu ID com o caractere 'p'). Também pode possuir um único ID (seja de usuário ou de perfil)
331        * @param mixed $activities Um array com IDs de atividades das se quer as instâncias. Também pode ser um inteiro, representando um único ID. Caso possua valor null, o resultado não é filtrado de acordo com as atividades (parâmetro opcional)
332        * @param mixed $status Um array com os status requeridos (para filtrar as instâncias). Também pode ser uma string, representando um único status. Caso possua valor null, o resultado não é filtrado de acordo com o status. Os status podem ser: completed, active, aborted e exception (parâmetro opcional)
333        * @return array As instâncias que satisfazem o critério de seleção.
334        * @access public
335        * @deprecated 1.7.00.000
336        */
337        function getUserInstances($users, $activities = null, $status = null)
338        {
339                $WFInstance = &Factory::getInstance('wf_instance');
340                return $WFInstance->getByUser($users, $activities, $status);
341        }
342
343        /**
344        * Seta uma propriedade de uma instância.
345        * @param int $instanceID O ID da instância.
346        * @return bool true caso a propriedade tenha sido alterada com sucesso
347        * @access public
348        * @deprecated 1.7.00.000
349        */
350        function setInstanceProperty($instanceID, $nameProperty, $value)
351        {
352                $WFInstance = &Factory::getInstance('wf_instance');
353                return $WFInstance->setProperty($instanceID, $nameProperty, $value);
354        }
355
356        /**
357        * Verifica se um dado usuário tem acesso a uma instância
358        * @param int $userID O ID do usuário que se quer verificar
359        * @param int $instanceID O ID da instância
360        * @param int $activityID O ID da atividade onde a instância está
361        * @param bool $writeAccess Se true, indica que é necessário que o usuário tenha acesso para modificar a instância (dar seqüência ao fluxo). Se false, não será verificado se o usuário tem permissão de escrita na instância
362        * @return bool true se o usuário tiver acesso à instância (levando em consideração $writeAccess) ou false caso contrário
363        * @access public
364        * @deprecated 1.7.00.000
365        */
366        function checkUserAccessToInstance($userID, $instanceID, $activityID, $writeAccess = true)
367        {
368                $WFInstance = &Factory::getInstance('wf_instance');
369                return $WFInstance->checkUserAccess($userID, $instanceID, $activityID, $writeAccess);
370        }
371}
372?>
Note: See TracBrowser for help on using the repository browser.