source: branches/1.2/workflow/inc/local/classes/class.wf_engine.php @ 1349

Revision 1349, 12.4 KB checked in by niltonneto, 15 years ago (diff)

Ticket #561 - Inclusão do módulo Workflow faltante nessa versão.

  • 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 = CreateObject('workflow.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                require_once 'class.wf_instance.php';
93                $WFInstance = new wf_instance();
94                return $WFInstance->continueInstance($activityID, $instanceID);
95        }
96
97        /**
98        * Aborta uma instância
99        * @param int $instanceID O ID da instância.
100        * @return boolean true se foi possível abortar a instância e false caso contrário.
101        * @access public
102        * @deprecated 1.7.00.000
103        */
104        function abortInstance($instanceID)
105        {
106                require_once 'class.wf_instance.php';
107                $WFInstance = new wf_instance();
108                return $WFInstance->abort($instanceID);
109        }
110
111        /**
112        * Define o nome (identificador) de uma instância
113        * @param int $instanceID O ID da instância.
114        * @param string $name O novo nome da instância.
115        * @return boolean true se foi possível mudar o nome da instância e false caso contrário.
116        * @access public
117        * @deprecated 1.7.00.000
118        */
119        function setInstanceName($instanceID, $name)
120        {
121                require_once 'class.wf_instance.php';
122                $WFInstance = new wf_instance();
123                return $WFInstance->setName($instanceID, $name);
124        }
125
126        /**
127        * Define a prioridade de uma instância
128        * @param int $instanceID O ID da instância.
129        * @param int $priority A nova prioridade da instância
130        * @return boolean true se foi possível mudar a prioridade da instância e false caso contrário.
131        * @access public
132        * @deprecated 1.7.00.000
133        */
134        function setInstancePriority($instanceID, $priority)
135        {
136                require_once 'class.wf_instance.php';
137                $WFInstance = new wf_instance();
138                return $WFInstance->setPriority($instanceID, $priority);
139        }
140
141        /**
142        * Busca instâncias abandonadas.
143        * @param int $numberOfDays O tempo (em dias) em que a instância está abandonada.
144        * @param array $activities Uma lista de atividades das quais se quer as instâncias abandonadas (também pode ser um valor inteiro).
145        * @return array As instâncias que satisfazem o critério de seleção.
146        * @access public
147        * @deprecated 1.7.00.000
148        */
149        function getIdleInstances($numberOfDays, $activities = null)
150        {
151                require_once 'class.wf_instance.php';
152                $WFInstance = new wf_instance();
153                return $WFInstance->getIdle($numberOfDays, $activities);
154        }
155
156        /**
157        * Busca todas as instâncias.
158        * @param array $activities Uma lista de atividades das quais se quer as instâncias (também pode ser um valor inteiro).
159        * @return array As instâncias que satisfazem o critério de seleção.
160        * @access public
161        * @deprecated 1.7.00.000
162        */
163        function getInstances($activities = null)
164        {
165                return $this->getIdleInstances(0, $activities);
166        }
167
168        /**
169        * Busca todas as instâncias que possuem esse nome (identificador).
170        * @param string $name O nome da instância que se quer encontrar.
171        * @return array As instâncias que satisfazem o critério de seleção.
172        * @access public
173        * @deprecated 1.7.00.000
174        */
175        function getInstancesByName($name)
176        {
177                require_once 'class.wf_instance.php';
178                $WFInstance = new wf_instance();
179                $preOutput = $WFInstance->getByName($name);
180                $output = array();
181                foreach ($preOutput as $childInstance)
182                        if (!is_null($childInstance['wf_activity_id']))
183                                $output[] = $childInstance;
184
185                return $output;
186        }
187
188        /**
189        * Busca as instâncias filhas de uma instância
190        * Se os parâmetros não forem informados, retorna instâncias filhas das instância atual.
191        * @param int $instanceID O ID da instância pai (não obrigatório).
192        * @param int $activityID O ID da atividade corrente da instância pai
193        * @return array As instâncias filhas do par instância/atividade atual
194        * @access public
195        * @deprecated 1.7.00.000
196        */
197        function getChildInstances($instanceID = null, $activityID = null)
198        {
199                require_once 'class.wf_instance.php';
200                $WFInstance = new wf_instance();
201                $preOutput = $WFInstance->getChildren($instanceID, $activityID);
202                $output = array();
203                foreach ($preOutput as $childInstance)
204                        if (!is_null($childInstance['wf_activity_id']))
205                                $output[] = $childInstance;
206
207                return $output;
208        }
209
210        /**
211        * Busca as propriedades de uma instância (do mesmo processo).
212        * @param int $instanceID O ID da instância.
213        * @return mixed Uma array contento as propriedades da instância (no formato "nome_da_propriedade" => "valor"). Ou false em caso de erro.
214        * @access public
215        * @deprecated 1.7.00.000
216        */
217        function getInstanceProperties($instanceID)
218        {
219                require_once 'class.wf_instance.php';
220                $WFInstance = new wf_instance();
221                return $WFInstance->getProperties($instanceID);
222        }
223
224        /**
225        * Busca as propriedades de uma instância filha.
226        * @param int $instanceID O ID da instância filha.
227        * @return array Propriedades da instância filha. Array no formato "nome_da_propriedade" => "valor".
228        * @access public
229        * @deprecated 1.7.00.000
230        */
231        function getChildInstanceProperties($instanceID)
232        {
233                require_once 'class.wf_instance.php';
234                $WFInstance = new wf_instance();
235                return $WFInstance->getProperties($instanceID);
236        }
237
238        /**
239        * Busca os recursos que um usuário pode administrar.
240        * @param string $type Tipo do recurso ("PRO", "MON, etc.).
241        * @param int $uid O usuário do qual se quer obter informações de administração de recursos.
242        * @return array IDs dos recursos ao qual o usuário tem acesso.
243        * @access public
244        */
245        function getUserPermissions($type, $uid)
246        {
247                $flagObject[0] = is_null($this->acl);
248                if ($flagObject[0])
249                        $this->acl = CreateObject('workflow.workflow_acl');
250
251                $output = $this->acl->getUserPermissions($type, $uid);
252
253                if ($flagObject[0])
254                        $this->acl = null;
255
256                return $output;
257        }
258
259        /**
260        * Busca os recursos que um usuário pode administrar (inclusive faz verificação de acordo com permissões advindas de grupos).
261        * @param string $type Tipo do recurso ("PRO", "MON, etc.).
262        * @param int $uid O usuário do qual se quer obter informações de administração de recursos.
263        * @return array IDs dos recursos ao qual o usuário tem acesso.
264        * @access public
265        */
266        function getUserGroupPermissions($type, $uid)
267        {
268                $flagObject[0] = is_null($this->acl);
269                if ($flagObject[0])
270                        $this->acl = CreateObject('workflow.workflow_acl');
271
272                $output = $this->acl->getUserGroupPermissions($type, $uid);
273
274                if ($flagObject[0])
275                        $this->acl = null;
276
277                return $output;
278        }
279
280        /**
281        * Traz informações sobre uma atividade a partir de seu ID
282        * @param int $activityID O ID da atividade
283        * @return mixed Uma array associativa contendo as informações sobre a atividade ou false caso a atividade não seja encontrada
284        * @access public
285        */
286        function getActivityInformationByID($activityID)
287        {
288                $activityID = (int) $activityID;
289                $processID = $this->getCurrentProcessID();
290
291                /* build the SQL query */
292                $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 = ?)";
293                $db = &$GLOBALS['workflow']['workflowObjects']->getDBGalaxia()->Link_ID;
294                $resultSet = $db->query($query, array($activityID, $processID));
295
296                /* return the data */
297                if (($row = $resultSet->fetchRow()))
298                        return array(
299                                'activity_id' => $row['wf_activity_id'],
300                                'name' => $row['wf_name'],
301                                'normalized_name' => $row['wf_normalized_name'],
302                                'type' => $row['wf_type'],
303                                'description' => $row['wf_description']
304                        );
305                else
306                        return false;
307        }
308
309        /**
310        * Traz informações sobre uma atividade a partir de seu nome
311        * @param int $activityName O nome da atividade
312        * @return mixed Uma array associativa contendo as informações sobre a atividade ou false caso a atividade não seja encontrada
313        * @access public
314        */
315        function getActivityInformationByName($activityName)
316        {
317                $processID = $this->getCurrentProcessID();
318
319                /* build the SQL query */
320                $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 = ?)";
321                $db = &$GLOBALS['workflow']['workflowObjects']->getDBGalaxia()->Link_ID;
322                $resultSet = $db->query($query, array($activityName, $processID));
323
324                /* return the data */
325                if (($row = $resultSet->fetchRow()))
326                        return array(
327                                'activity_id' => $row['wf_activity_id'],
328                                'name' => $row['wf_name'],
329                                'normalized_name' => $row['wf_normalized_name'],
330                                'type' => $row['wf_type'],
331                                'description' => $row['wf_description']
332                        );
333                else
334                        return false;
335        }
336
337        /**
338        * Busca as instância de usuários de acordo com alguns critérios
339        * @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)
340        * @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)
341        * @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)
342        * @return array As instâncias que satisfazem o critério de seleção.
343        * @access public
344        * @deprecated 1.7.00.000
345        */
346        function getUserInstances($users, $activities = null, $status = null)
347        {
348                require_once 'class.wf_instance.php';
349                $WFInstance = new wf_instance();
350                return $WFInstance->getByUser($users, $activities, $status);
351        }
352
353        /**
354        * Seta uma propriedade de uma instância.
355        * @param int $instanceID O ID da instância.
356        * @return bool true caso a propriedade tenha sido alterada com sucesso
357        * @access public
358        * @deprecated 1.7.00.000
359        */
360        function setInstanceProperty($instanceID, $nameProperty, $value)
361        {
362                require_once 'class.wf_instance.php';
363                $WFInstance = new wf_instance();
364                return $WFInstance->setProperty($instanceID, $nameProperty, $value);
365        }
366
367        /**
368        * Verifica se um dado usuário tem acesso a uma instância
369        * @param int $userID O ID do usuário que se quer verificar
370        * @param int $instanceID O ID da instância
371        * @param int $activityID O ID da atividade onde a instância está
372        * @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
373        * @return bool true se o usuário tiver acesso à instância (levando em consideração $writeAccess) ou false caso contrário
374        * @access public
375        * @deprecated 1.7.00.000
376        */
377        function checkUserAccessToInstance($userID, $instanceID, $activityID, $writeAccess = true)
378        {
379                require_once 'class.wf_instance.php';
380                $WFInstance = new wf_instance();
381                return $WFInstance->checkUserAccess($userID, $instanceID, $activityID, $writeAccess);
382        }
383}
384?>
Note: See TracBrowser for help on using the repository browser.