source: trunk/workflow/inc/class.bo_adminaccess.inc.php @ 3255

Revision 3255, 12.9 KB checked in by pereira.jair, 14 years ago (diff)

Ticket #1186 - Alterado modulo administrativo do organograma p/ definir diferentes niveis de usuarios.

  • Property svn:executable set to *
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
12require_once('class.bo_ajaxinterface.inc.php');
13require_once(PHPGW_API_INC . SEP . 'common_functions.inc.php');
14
15/**
16 * Implementa métodos para administração do controle de acesso ao workflow.
17 * Controla administradores de processos e administradores de organograma
18 *
19 * @package Workflow
20 * @license http://www.gnu.org/copyleft/gpl.html GPL
21 * @author Rodrigo Daniel C de Lira - rodrigo.lira@gmail.com
22 * @author Sidnei Augusto Drovetto Jr. - drovetto@gmail.com
23 */
24class bo_adminaccess extends bo_ajaxinterface
25{
26        /**
27        * @var object $so Objeto para acesso à camada de dados
28        * @access public
29        */
30        var $so;
31
32        /**
33        * Construtor
34        *
35        * @return object
36        * @access public
37        */
38        function bo_adminaccess()
39        {
40                parent::bo_ajaxinterface();
41
42                if (!Factory::getInstance('workflow_acl')->checkWorkflowAdmin($_SESSION['phpgw_info']['workflow']['account_id']))
43                        exit(serialize(array('error' => 'Você não tem permissão para executar esta operação.')));
44
45                $this->so = &Factory::getInstance('so_adminaccess', Factory::getInstance('WorkflowObjects')->getDBGalaxia()->Link_ID);
46        }
47
48        /**
49        * Obtém a lista de processos (consulta ao engine)
50        *
51        * @return array process data
52        * @access public
53        */
54        function get_all_processes()
55        {
56                $proc_mng = &Factory::newInstance('ProcessManager');
57                $proc_list = $proc_mng->list_processes(0,-1,'wf_name__ASC');
58
59                $proc_data = array();
60
61                foreach($proc_list['data'] as $p)
62                {
63                        $proc_data[] = array(
64                                'proc_st_name' => $p['wf_name'] . ' ' . $p['wf_version'],
65                                'proc_in_id'   => $p['wf_p_id']
66                        );
67                }
68
69                @sort($proc_data);
70                @reset($proc_data);
71
72                return $proc_data;
73        }
74
75        /**
76        * Obtém a lista de administradores de um organograma
77        *
78        * @param array $p processo
79        * @return array ids dos admins do organograma
80        * @access public
81        */
82        function get_organogram_admins($p)
83        {
84                $admins_id = $this->so->get_organogram_admins_id($p['org_id']);
85                return $this->so->getUserNames($admins_id);
86        }
87       
88        /**
89        * Retorna o nivel administrativo do organograma do processo
90        *
91        * @param array $p processo
92        * @return array o nivel administrativo do monitor do processo
93        * @access public
94        */
95        function get_organogram_admin_level($p)
96        {
97                return $this->so->getUserAdminLevel('ORG', $p['uid'], $p['pid']);
98        }
99
100        /**
101        * Obtém a lista de administradores de um processo
102        *
103        * @param array $p processo
104        * @return array lista de administradores de um processo
105        * @access public
106        */
107        function get_process_admins($p)
108        {
109                $admins_id = $this->so->get_process_admins_id($p['proc_id']);
110                return $this->so->getUserNames($admins_id);
111        }
112
113        /**
114        * Remove um administrador de organograma
115        *
116        * @param array $p processo
117        * @return array lista de administradores de um organograma
118        * @access public
119        */
120        function del_organogram_admin($p)
121        {
122                $this->so->del_organogram_admin($p['org_id'],$p['admin_id']);
123        return $this->get_organogram_admins($p);
124        }
125
126        /**
127        * Remove um administrador de um processo
128        *
129        * @param array $p processo
130        * @return array lista de administradores de um processo
131        * @access public
132        */
133        function del_process_admin($p)
134        {
135                $this->so->del_process_admin($p['proc_id'],$p['admin_id']);
136        return $this->get_process_admins($p);
137        }
138
139        /**
140        * Insere administradores de organograma
141        *
142        * @param array $p processo
143        * @return array administradores do organograma
144        * @access public
145        */
146        function add_organogram_admins($p)
147        {
148                $ids = explode('.', str_replace('u','',$p['user_ids'] ) );
149                $this->so->add_organogram_admins($p['org_id'],$ids);
150                return $this->get_organogram_admins($p);
151        }
152
153        /**
154        * Insere administradores de processo
155        *
156        * @param array $p processo
157        * @return array administradores do processo
158        * @access public
159        */
160        function add_process_admins($p)
161        {
162                $ids = explode('.', str_replace('g', '', str_replace('u','',$p['user_ids'])));
163                $this->so->add_process_admins($p['proc_id'],$ids);
164                return $this->get_process_admins($p);
165        }
166    /**
167        * Retorna os monitores do processo
168        *
169        * @param array $p processo
170        * @return array monitores do processo
171        * @access public
172        */
173        function get_monitor_admins($p)
174        {
175                $admins_id = $this->so->getResourceAdmins('MON', $p['proc_id']);
176                return $this->so->getUserNames($admins_id);
177        }
178    /**
179        * Adiciona monitores do processo
180        *
181        * @param array $p processo
182        * @return array monitores do processo
183        * @access public
184        */
185        function add_monitor_admins($p)
186        {
187                $ids = explode('.', str_replace('u','',$p['user_ids'] ) );
188                $this->so->addAdmin('MON', $ids, $p['proc_id']);
189                return $this->get_monitor_admins($p);
190        }
191        /**
192        * Remove monitores do processo
193        *
194        * @param array $p
195        * @return array monitores do processo
196        * @access public
197        */
198        function del_monitor_admin($p)
199        {
200                $this->so->removeAdmin('MON', $p['admin_id'], $p['proc_id']);
201        return $this->get_monitor_admins($p);
202        }
203
204        /**
205        * Retorna o nivel administrativo do monitor do processo
206        *
207        * @param array $p processo
208        * @return array o nivel administrativo do monitor do processo
209        * @access public
210        */
211        function get_monitor_admin_level($p)
212        {
213                return $this->so->getUserAdminLevel('MON', $p['uid'], $p['pid']);
214        }
215        /**
216        * Seta o nivel administrativo do monitor
217        *
218        * @param array $p processo
219        * @return arraym
220        * @access public
221        */
222        function set_monitor_admin_level($p)
223        {
224                $np = explode('_', $p['np']);
225                $levels = array();
226                foreach ($np as $pair)
227                {
228                        list($key, $value) = explode('=', $pair, 2);
229                        $levels[$key] = ($value == '1') ? true : false;
230                }
231
232                $this->so->setAdminLevel('MON', $p['uid'], $p['pid'], $levels);
233                return null;
234        }
235       
236        /**
237        * Seta o nivel administrativo do organograma
238        *
239        * @param array $p processo
240        * @return arraym
241        * @access public
242        */
243        function set_organogram_admin_level($p)
244        {
245                $np = explode('_', $p['np']);
246                $levels = array();
247                foreach ($np as $pair)
248                {
249                        list($key, $value) = explode('=', $pair, 2);
250                        $levels[$key] = ($value == '1') ? true : false;
251                }
252               
253
254                $result = $this->so->setAdminLevel('ORG', $p['uid'], $p['pid'], $levels);
255               
256                if (!$result) {
257                        return "Não atualizou as permissões.";
258                }
259               
260        }
261
262        /**
263        * Busca os usuários/grupos que possuem acesso a uma determinada aplicação externa
264        *
265        * @param array $params Lista de parâmetros vindas do Ajax
266        * @return array lista dos usuarios com direito de accesso
267        * @access public
268        */
269        function getExternalApplicationAdmins($params)
270        {
271                $admins_id = $this->so->getResourceAdmins('APX', $params['external_application_id']);
272                return $this->so->getUserNames($admins_id);
273        }
274
275        /**
276        * Remove o acesso de um usuário/grupo a uma aplicação externa
277        *
278        * @param array $params Lista de parâmetros vindas do Ajax
279        * @return array lista de administradores de uma aplicacao externa
280        * @access public
281        */
282        function deleteExternalApplicationAdmin($params)
283        {
284                $this->so->removeAdmin('APX', $params['admin_id'], $params['external_application_id']);
285        return $this->getExternalApplicationAdmins($params);
286        }
287
288        /**
289        * Dá acesso para um usuário/grupo a uma aplicação externa
290        *
291        * @param array $params Lista de parâmetros vindas do Ajax
292        * @return array lista de administradores de uma aplicacao externa
293        * @access public
294        */
295        function addExternalApplicationAdmins($params)
296        {
297                $ids = explode('.', str_replace('g', '', str_replace('u', '', $params['user_ids'])));
298                $this->so->addAdmin('APX', $ids, $params['external_application_id']);
299                return $this->getExternalApplicationAdmins($params);
300        }
301
302        /**
303        * Busca os usuários/grupos que podem administrar o módulo Workflow
304        *
305        * @param array $params Lista de parâmetros advindos do Ajax
306        * @return array Lista dos usuários com direito de administrar o módulo Workflow
307        * @access public
308        */
309        function getWorkflowAdministrators()
310        {
311                $admins_id = $this->so->getResourceAdmins('ADM', 0);
312                return $this->so->getUserNames($admins_id);
313        }
314
315        /**
316        * Dá privilégio de administrar o módulo Workflow para um usuário/grupo
317        *
318        * @param array $params Lista de parâmetros advindos do Ajax
319        * @return array Lista dos usuários com direito de administrar o módulo Workflow
320        * @access public
321        */
322        function addWorkflowAdministrators($params)
323        {
324                $ids = explode('.', str_replace('g', '', str_replace('u', '', $params['user_ids'])));
325                $this->so->addAdmin('ADM', $ids, 0);
326                return $this->getWorkflowAdministrators($params);
327        }
328
329        /**
330        * Remove o privilégio de administrar o módulo Workflow de um usuário/grupo
331        *
332        * @param array $params Lista de parâmetros advindos do Ajax
333        * @return array Lista dos usuários com direito de administrar o módulo Workflow
334        * @access public
335        */
336        function deleteWorkflowAdministrators($params)
337        {
338                $this->so->removeAdmin('ADM', $params['admin_id'], 0);
339        return $this->getWorkflowAdministrators($params);
340        }
341
342        /**
343        * Busca os usuários/grupos que podem criar/administrar processos de Workflow
344        *
345        * @param array $params Lista de parâmetros vindas do Ajax
346        * @return array Lista dos usuarios com direito de criar/administrar processos
347        * @access public
348        */
349        function getDevelopmentAdministrators()
350        {
351                $GLOBALS['phpgw']->db = $GLOBALS['ajax']->db;
352                $acl = &Factory::getInstance('acl');
353                $output = $this->so->getUserNames($acl->get_ids_for_location('admin_workflow', 1, 'workflow'));
354                unset($GLOBALS['phpgw']->db);
355                return $output;
356        }
357
358        /**
359        * Dá privilégio de criar/administrar processos de Workflow para um usuário/grupo
360        *
361        * @param array $params Lista de parâmetros vindas do Ajax
362        * @return array lista dos usuarios com direito de criar/administrar processos
363        * @access public
364        */
365        function addDevelopmentAdministrators($params)
366        {
367                $ids = explode('.', str_replace('g', '', str_replace('u', '', $params['user_ids'])));
368                $GLOBALS['phpgw']->db = $GLOBALS['ajax']->db;
369                $acl = &Factory::getInstance('acl');
370                foreach ($ids as $id)
371                        $acl->add_repository('workflow', 'admin_workflow', $id, 1);
372
373                unset($GLOBALS['phpgw']->db);
374                return $this->getDevelopmentAdministrators($params);
375        }
376
377        /**
378        * Remove o privilégio de criar/administrar processos de Workflow de um usuário/grupo
379        *
380        * @param array $params Lista de parâmetros vindas do Ajax
381        * @return array Lista dos usuarios com direito de criar/administrar processos
382        * @access public
383        */
384        function deleteDevelopmentAdministrators($params)
385        {
386                $GLOBALS['phpgw']->db = $GLOBALS['ajax']->db;
387                $acl = &Factory::getInstance('acl');
388                $acl->delete_repository('workflow', 'admin_workflow', (int) $params['admin_id']);
389                unset($GLOBALS['phpgw']->db);
390
391                return $this->getDevelopmentAdministrators($params);
392        }
393
394        /**
395        * Retorna os recursos disponiveis ao Administrador
396        *
397        * @param string $type type of resource
398        * @param integer $rid resource id
399        * @return array array de recursos permitidos
400        * @access public
401        */
402        function getResourceAdmins($type, $rid)
403        {
404                return $this->so->getResourceAdmins($type, $rid);
405        }
406
407        /**
408        * Verifica se o usuario tem acesso a um tipo de recurso
409        *
410        * @param string $type type of resource
411        * @param integer $uid user id
412        * @return bool accesso permitido false nao
413        * @access public
414        */
415        function checkUserAccessToType($type, $uid)
416        {
417                return $this->so->checkUserAccessToType($type, $uid);
418        }
419
420        /**
421        * Verifica se o usuário tem direito de acesso a um recurso
422        *
423        * @param string $type tipo de recurso
424        * @param integer $uid id do usuário
425        * @param integer $rid id do recurso
426        * @return bool true accesso permitido false nao
427        * @access public
428        */
429        function checkUserAccessToResource($type, $uid, $rid, $requiredLevel = null)
430        {
431                return $this->so->checkUserAccessToResource($type, $uid, $rid, $requiredLevel);
432        }
433
434        /**
435        * Retorna as permissoes do usúario
436        *
437        * @param string $type tipo do usuario
438        * @param integer $uid id do usuário
439        * @param integer $rid id do recurso
440        * @return array array com as permissoes do usuario
441        * @access public
442        */
443        function getUserPermissions($type, $uid)
444        {
445                return $this->so->getUserPermissions($type, $uid);
446        }
447
448        /**
449        * Informa o nível de administração do usuário
450        * @param string $type O tipo do recurso
451        * @param int $uid O ID do usuário
452        * @param int $numvalue O ID do recurso
453        * @return array As permissões do usuário (em forma de número e de bits)
454        * @access public
455        */
456        function getUserAdminLevel($type, $uid, $rid)
457        {
458                return $this->so->getUserAdminLevel($type, $uid, $rid);
459        }
460
461        /**
462        * Informa o nível de administração do usuário (incluindo herança por grupo)
463        * @param string $type O tipo do recurso
464        * @param int $uid O ID do usuário
465        * @param int $numvalue O ID do recurso
466        * @return array As permissões do usuário, inclusive herança por grupo. As permissões são retornadas em forma de número e de bits
467        * @access public
468        */
469        function getUserGroupAdminLevel($type, $uid, $numvalue)
470        {
471                return $this->so->getUserGroupAdminLevel($type, $uid, $rid);
472        }
473}
474
475?>
Note: See TracBrowser for help on using the repository browser.