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

Revision 3060, 12.8 KB checked in by viani, 14 years ago (diff)

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

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