source: companies/serpro/workflow/inc/class.bo_utils.inc.php @ 903

Revision 903, 4.9 KB checked in by niltonneto, 15 years ago (diff)

Importacao inicial do Expresso do Serpro

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 GALAXIA_LIBRARY . SEP . 'src' . SEP . 'GUI' . SEP . 'GUI.php';
14require_once GALAXIA_LIBRARY . SEP . 'src' . SEP . 'ProcessManager' . SEP . 'ActivityManager.php';
15
16/**
17 * @package Workflow
18 * @license http://www.gnu.org/copyleft/gpl.html GPL
19 * @author Sidnei Augusto Drovetto Jr. - drovetto@gmail.com
20 */
21class bo_utils extends bo_ajaxinterface
22{
23        /**
24         * @var object $db
25         * @access public
26         */
27        var $db;
28        /**
29         * Construtor da classe bo_utils
30         * @return object
31         * @access public
32         */
33        function bo_utils()
34        {
35                parent::bo_ajaxinterface();
36                $this->db = &$GLOBALS['workflow']['workflowObjects']->getDBExpresso();
37        }
38
39        /**
40         * Retorna as cidades de um estado
41         * @param array $params parametros
42         * @return array Array com IDs e nomes das cidades
43         * @access public
44         */
45        function get_cities($params)
46        {
47                $output = array();
48                $output['target'] = $params['target'];
49                $state_id = $params['state_id'];
50                $sql = "SELECT id_city, city_name FROM phpgw_cc_city WHERE id_state = $state_id ORDER BY city_name";
51                $result = $this->db->query($sql);
52                $output['cities'] = array();
53                while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC))
54                        $output['cities'][] = array(
55                                                                        'id' => $row['id_city'],
56                                                                        'name' => $row['city_name']);
57                return $output;
58        }
59
60        /**
61         * Retorna a lista de registros encontrados no LDAP cujo cn contenha o parâmetro digitado
62         * @param array $params parametros
63         * @return array Array com o nome da combo onde devem ser carregados os resultados da busca, com
64         *                               um array com IDs e names dos registros encontrados e/ou uma mensagem de erro.
65         * @access public
66         */
67        function search_ldap_users_by_cn($params)
68        {
69                // parâmetro a ser procurado no ldap
70                $cn = trim(ereg_replace(' +', ' ', $params['cn']));
71
72                $output           = array();
73                $output['target'] = $params['target'];
74                $output['values'] = array();
75                $output['msg']    = "";
76
77                // verifica se o nome digitado contém apenas letras e/ou espaços
78                if(eregi("^[a-z -]*$", $cn)){
79                        if (strlen($cn) < 3)
80                        {
81                                $output['msg'] = 'Por favor, utilize pelo menos 3 caracteres em sua busca.';
82                                return $output;
83                        }
84                        // atributo a ser retornado como id da option, se não for passado este parâmetro, usar 'dn'
85                        $ret_id   = empty($params['id']) ? 'dn' : $params['id'];
86
87                        // atributo a ser retornado como name da option, se não for passado este parâmetro, usar 'cn'
88                        $ret_name = empty($params['name']) ? 'cn' : $params['name'];
89
90                        $ajaxConfig = new ajax_config('phpgwapi');
91                        $config = $ajaxConfig->read_repository();
92
93                        $ldapconfig['host'] = $config['ldap_host'];
94                        $ldapconfig['basedn'] = $config['ldap_context'];
95                        $usuario = $config['ldap_root_dn'];
96                        $senha = $config['ldap_root_pw'];
97
98                        if($usuario != "" && $senha != ""){
99                                $ds = ldap_connect($ldapconfig['host']);
100
101                                if ($config['ldap_version3'] == 'True')
102                                        ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
103                                ldap_set_option($ds, LDAP_OPT_REFERRALS, 1);
104
105                                $lbind = @ldap_bind($ds, $usuario, $senha);
106
107                                $filter     = '(&(uid=*)(phpgwAccountType=u)(!(phpgwAccountVisible=-1))(cn=*' . $cn . '*))';
108                                $attrib_ret = array('cn', $ret_id, $ret_name);
109
110                                $r = ldap_search($ds, $ldapconfig['basedn'], $filter, $attrib_ret, 0, 0, 5);
111
112                                if($r){
113                                        if(ldap_count_entries($ds, $r) == 0){
114                                                $output['msg'] = 'Não foram encontrados registros.';
115                                        }
116                                        elseif(ldap_count_entries($ds, $r) < 200){
117                                                $result = ldap_get_entries($ds, $r);
118                                                foreach($result as $value){
119                                                        $output['values'][] = array(
120                                                                'id'   => $value[$ret_id],
121                                                                'name' => trim(ucwords(strtolower($value[$ret_name][0]))));
122                                                }
123
124
125                                                foreach ($output['values'] as $key => $value){
126                                                        $nome[$key] = $value['name'];
127                                                        $ids[$key] = $value['id'];
128                                                }
129                                                // faz ordenação de um array multidimensional
130                                                array_multisort($nome, SORT_ASC, $ids, SORT_ASC, $output['values']);
131                                        }
132                                        else{
133                                                $output['msg'] = 'Foram encontrados mais de 200 registros, por favor, refine sua pesquisa.';
134                                        }
135                                }
136                                else{
137                                        $output['msg'] = 'Não foram encontrados registros.';
138                                }
139
140                                ldap_close($ds);
141                        }
142                }
143                else{
144                        $output['msg'] = 'Não digite caracteres especiais nem números. Apenas letras e espaços são permitidos.';
145                }
146                return $output;
147        }
148}
149?>
Note: See TracBrowser for help on using the repository browser.