source: trunk/services/class.db.php @ 6528

Revision 6528, 12.3 KB checked in by gustavo, 12 years ago (diff)

Ticket #2766 - Merge do branch das novas funcionalidaes para o trunk

  • Property svn:executable set to *
Line 
1<?php
2/**
3*
4* Copyright (C) 2011 Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
5*
6*  This program is free software; you can redistribute it and/or
7*  modify it under the terms of the GNU General Public License
8*  as published by the Free Software Foundation; either version 2
9*  of the License, or (at your option) any later version.
10*
11*  This program is distributed in the hope that it will be useful,
12*  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*  GNU General Public License for more details.
15*
16*  You should have received a copy of the GNU General Public License
17*  along with this program; if not, write to the Free Software
18*  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19*
20* You can contact Prognus Software Livre headquarters at Av. Tancredo Neves,
21* 6731, PTI, Bl. 05, Esp. 02, Sl. 10, Foz do Iguaçu - PR - Brasil or at
22* e-mail address prognus@prognus.com.br.
23*
24*
25* @package    DBService
26* @license    http://www.gnu.org/copyleft/gpl.html GPL
27* @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
28* @sponsor    Caixa Econômica Federal
29* @version    1.0
30* @since      2.4.0
31*/
32
33    if(!isset($_SESSION['phpgw_info']['expressomail']['server']['db_name'])) {
34        include_once('../header.inc.php');
35        $_SESSION['phpgw_info']['expressomail']['server']['db_name'] = $GLOBALS['phpgw_info']['server']['db_name']; 
36        $_SESSION['phpgw_info']['expressomail']['server']['db_host'] = $GLOBALS['phpgw_info']['server']['db_host'];
37        $_SESSION['phpgw_info']['expressomail']['server']['db_port'] = $GLOBALS['phpgw_info']['server']['db_port'];
38        $_SESSION['phpgw_info']['expressomail']['server']['db_user'] = $GLOBALS['phpgw_info']['server']['db_user'];
39        $_SESSION['phpgw_info']['expressomail']['server']['db_pass'] = $GLOBALS['phpgw_info']['server']['db_pass'];
40        $_SESSION['phpgw_info']['expressomail']['server']['db_type'] = $GLOBALS['phpgw_info']['server']['db_type'];
41    }
42    else{
43        define('PHPGW_INCLUDE_ROOT','../');     
44        define('PHPGW_API_INC','../phpgwapi/inc');       
45        include_once(PHPGW_API_INC.'/class.db.inc.php');
46    }
47
48
49class DBService
50{   
51    var $connection;
52    var $db;
53    var $user_id;
54
55    function DBService()
56    {
57        $this->db = new db();           
58        $this->db->Halt_On_Error = 'no';
59        $this->db->connect(
60            $_SESSION['phpgw_info']['expressomail']['server']['db_name'],
61            $_SESSION['phpgw_info']['expressomail']['server']['db_host'],
62            $_SESSION['phpgw_info']['expressomail']['server']['db_port'],
63            $_SESSION['phpgw_info']['expressomail']['server']['db_user'],
64            $_SESSION['phpgw_info']['expressomail']['server']['db_pass'],
65            $_SESSION['phpgw_info']['expressomail']['server']['db_type']
66        );             
67        $this -> user_id = $_SESSION['phpgw_info']['expressomail']['user']['account_id'];
68    }
69
70    function search_contacts($search_for)
71    {
72
73        $result = array();
74        $query = 'select'
75       
76                                                . ' C.id_connection,'
77                                                . ' A.id_contact,'
78                                                . ' A.names_ordered,'
79                                                . ' A.alias,'
80                                                . ' A.birthdate,'
81                                                . ' A.sex,'
82                                                . ' A.pgp_key,'
83                                                . ' A.notes,'
84                                                . ' A.web_page,'
85                                                . ' A.corporate_name,'
86                                                . ' A.job_title,'
87                                                . ' A.department,'
88                                                . ' C.connection_name,'
89                                                . ' C.connection_value,'
90                                                . ' B.id_typeof_contact_connection,'
91                                                . ' phpgw_cc_contact_addrs.id_typeof_contact_address,'
92                                                . ' phpgw_cc_addresses.address1,'
93                                                . ' phpgw_cc_addresses.address2,'
94                                                . ' phpgw_cc_addresses.complement,'
95                                                . ' phpgw_cc_addresses.postal_code,'
96                                                . ' phpgw_cc_city.city_name,'
97                                                . ' phpgw_cc_state.state_name,'
98                                                . ' phpgw_cc_addresses.id_country'
99                                                ;
100
101                $query .= ' from'
102                        . ' phpgw_cc_contact A'
103                        . ' inner join phpgw_cc_contact_conns B on ( A.id_contact = B.id_contact )'
104                        . ' inner join phpgw_cc_connections C on ( B.id_connection = C.id_connection )'
105                        . ' left join phpgw_cc_contact_addrs on ( A.id_contact = phpgw_cc_contact_addrs.id_contact )'
106                                                . ' left join phpgw_cc_addresses on ( phpgw_cc_contact_addrs.id_address = phpgw_cc_addresses.id_address )'
107                                                . ' left join phpgw_cc_city on ( phpgw_cc_addresses.id_city = phpgw_cc_city.id_city )'
108                                                . ' left join phpgw_cc_state on ( phpgw_cc_addresses.id_state = phpgw_cc_state.id_state)'
109                                                ;
110                       
111                                $query .= ' where '
112                                        . 'A.id_owner=' . $_SESSION['phpgw_info']['expressomail']['user']['account_id']
113                                        . ' and lower(translate(names_ordered, \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))'
114                                                                                . ' LIKE lower(translate(\'%' . $search_for . '%\', \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))'; 
115                               
116                //Se não existir parametro na busca, limita os usuarios no resultado da pesquisa.
117                                if(!$search_for){
118                                        $query .= 'LIMIT 11';       
119                                }
120                               
121        if (!$this->db->query($query))
122             return null;
123         
124         while($this->db->next_record())
125            $result[] = $this->db->row();
126
127         
128         
129         $all_contacts = array();
130                        foreach( $result as $i => $object )
131                        {
132                                if ( ! array_key_exists( $object[ 'id_contact' ], $all_contacts ) )
133                                        $all_contacts[ $object[ 'id_contact' ] ] = array(
134                                                'connection_value' => '',
135                                                'telephonenumber' => '',
136                                                'mobile' => '',
137                                                'cn' => '',
138                                                'id_contact' => '',
139                                                'id_connection' => '',
140                                                'alias' => '',
141                                                'birthdate' => '',
142                                                'sex' => '',
143                                                'pgp_key' => '',
144                                                'notes' => '',
145                                                'web_page' => '',
146                                                'corporate_name' => '',
147                                                'job_title' => '',
148                                                'department' => '',                             
149                                                'mail' => '',
150                                                'aternative-mail' => '',
151                                                'business-phone' => '',
152                                                'business-address' => '',
153                                                'business-complement' => '',
154                                                'business-postal_code' => '',
155                                                'business-city_name' => '',
156                                                'business-state_name' => '',
157                                                'business-id_country' => '',
158                                                'business-fax' => '',
159                                                'business-pager' => '',
160                                                'business-mobile' => '',
161                                                'business-address-2' => '',
162                                                'home-phone' => '',
163                                                'home-address' => '',
164                                                'home-complement' => '',
165                                                'home-postal_code' => '',
166                                                'home-city_name' => '',
167                                                'home-state_name' => '',
168                                                'home-fax' => '',
169                                                'home-pager' => '',
170                                                'home-address-2' => ''
171                                               
172                                               
173                                        );
174
175                                switch( $object[ 'id_typeof_contact_connection' ] )
176                                {
177                                        case 1 :
178                                                $all_contacts[ $object[ 'id_contact' ] ][ 'connection_value' ] = $object[ 'connection_value' ];
179                                                switch ( strtolower( $object[ 'connection_name' ] ) )
180                                                {
181                                                        case 'alternativo' :
182                                                                $all_contacts[ $object[ 'id_contact' ] ][ 'alternative-mail' ] = $object[ 'connection_value' ];
183                                                                break;
184                                                        case 'principal' :
185                                                                $all_contacts[ $object[ 'id_contact' ] ][ 'mail' ] = $object[ 'connection_value' ];
186                                                                break;
187                                                }
188                                                break;
189                                        case 2 :
190                                                $all_contacts[ $object[ 'id_contact' ] ][ 'telephonenumber' ] = $object[ 'connection_value' ];
191                                                switch ( strtolower( $object[ 'connection_name' ] ) )
192                                                {
193                                                        case 'casa' :
194                                                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-phone' ] = $object[ 'connection_value' ];
195                                                                break;
196                                                        case 'celular' :
197                                                                $all_contacts[ $object[ 'id_contact' ] ][ 'mobile' ] = $object[ 'connection_value' ];
198                                                                break;
199                                                        case 'trabalho' :
200                                                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-phone' ] = $object[ 'connection_value' ];
201                                                                break;                                                         
202                                                        case 'fax' :
203                                                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-fax' ] = $object[ 'connection_value' ];
204                                                                break;
205                                                        case 'pager' :
206                                                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-pager' ] = $object[ 'connection_value' ];
207                                                                break;
208                                                        case 'celular corporativo' :
209                                                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-mobile' ] = $object[ 'connection_value' ];
210                                                                break;                                                         
211                                                        case 'pager corporativo' :
212                                                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-pager' ] = $object[ 'connection_value' ];
213                                                                break;
214                                                        case 'fax corporativo' :
215                                                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-fax' ] = $object[ 'connection_value' ];
216                                                                break;
217                                                }
218                                                break;
219                                }
220
221                                $all_contacts[ $object[ 'id_contact' ] ][ 'cn' ] = utf8_encode($object[ 'names_ordered' ]);
222                                $all_contacts[ $object[ 'id_contact' ] ][ 'id_contact' ]    = $object[ 'id_contact' ];
223                                $all_contacts[ $object[ 'id_contact' ] ][ 'id_connection' ] = $object[ 'id_connection' ];
224                                $all_contacts[ $object[ 'id_contact' ] ][ 'alias' ]         = $object[ 'alias' ];                               
225                                $all_contacts[ $object[ 'id_contact' ] ][ 'birthdate' ]         = $object[ 'birthdate' ];
226                                $all_contacts[ $object[ 'id_contact' ] ][ 'sex' ]               = $object[ 'sex' ];
227                                $all_contacts[ $object[ 'id_contact' ] ][ 'pgp_key' ]           = $object[ 'pgp_key' ];
228                                $all_contacts[ $object[ 'id_contact' ] ][ 'notes' ]         = $object[ 'notes' ];
229                                $all_contacts[ $object[ 'id_contact' ] ][ 'web_page' ]          = $object[ 'web_page' ];
230                                $all_contacts[ $object[ 'id_contact' ] ][ 'corporate_name' ]= $object[ 'corporate_name' ];
231                                $all_contacts[ $object[ 'id_contact' ] ][ 'job_title' ]         = $object[ 'job_title' ];
232                                $all_contacts[ $object[ 'id_contact' ] ][ 'department' ]    = $object[ 'department' ];
233
234                                switch( $object[ 'id_typeof_contact_address' ] )
235                                {
236                                        case 1 :
237                                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-address' ]     = $object[ 'address1' ];
238                                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-address-2' ]   = $object[ 'address2' ];
239                                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-complement' ]  = $object[ 'complement' ];
240                                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-postal_code' ] = $object[ 'postal_code' ];
241                                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-city_name' ]   = $object[ 'city_name' ];
242                                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-state_name' ]  = $object[ 'state_name' ];
243                                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-id_country' ]  = $object[ 'id_country' ];
244                                                break;
245                                        case 2 :
246                                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-address' ]     = $object[ 'address1' ];
247                                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-address-2' ]   = $object[ 'address2' ];
248                                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-complement' ]  = $object[ 'complement' ];
249                                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-postal_code' ] = $object[ 'postal_code' ];
250                                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-city_name' ]   = $object[ 'city_name' ];
251                                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-state_name' ]  = $object[ 'state_name' ];
252                                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-id_country' ]  = $object[ 'id_country' ];
253                                                break;
254                                }
255                        }
256
257                        return array_values($all_contacts);
258        }
259
260        function search_groups($search_for)
261    {
262        $result = array();
263                $query = 'select'
264                                                . ' G.oid,'
265                                                . ' G.id_group,'
266                                                . ' G.title,'
267                                                . ' G.short_name';
268                $query .= ' from'
269                        . ' phpgw_cc_groups G';
270                $query .= ' where '
271                                                . ' G.owner=' . $_SESSION['phpgw_info']['expressomail']['user']['account_id']
272                                                . ' and lower(translate(G.title, \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))'
273                                                . ' LIKE lower(translate(\'%' . $search_for . '%\', \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))';       
274                                               
275                if (!$this->db->query($query))
276             return null;
277         
278         while($this->db->next_record())
279            $result[] = $this->db->row();
280
281                $all_contacts = array();
282                foreach( $result as $i => $object )
283                {
284                        if ( ! array_key_exists( $object[ 'oid' ], $all_contacts ) )
285                                $all_contacts[ $object[ 'oid' ] ] = array(
286                                        'title' => '',
287                                        'short_name' => '',
288                                );
289                                $all_contacts[ $object[ 'oid' ] ]['title'] = $object['title'];
290                                $all_contacts[ $object[ 'oid' ] ]['short_name'] = $object['short_name'];
291                                $all_contacts[ $object[ 'oid' ] ]['id'] = $object[ 'id_group' ];
292                }
293                return array_values($all_contacts);
294        }
295}
296
297ServiceLocator::register( 'db', new DBService() );
298
299?>
Note: See TracBrowser for help on using the repository browser.