source: contrib/listAdmin/inc/class.db_functions.inc.php @ 3312

Revision 3312, 17.7 KB checked in by rafaelraymundo, 14 years ago (diff)

Ticket #1174 - Disponibilização do módulo de Listas(Mailman)

Line 
1<?php
2define('PHPGW_INCLUDE_ROOT','../');     
3define('PHPGW_API_INC','../phpgwapi/inc');
4include_once(PHPGW_API_INC.'/class.db.inc.php');
5
6class db_functions
7{       
8        var $db;
9        var $user_id;
10       
11        function db_functions(){
12               
13                if (is_array($_SESSION['phpgw_info']['expresso']['server']))
14                        $GLOBALS['phpgw_info']['server'] = $_SESSION['phpgw_info']['expresso']['server'];
15                else
16                        $_SESSION['phpgw_info']['expresso']['server'] = $GLOBALS['phpgw_info']['server'];
17               
18                $this->db = new db();
19                $this->db->Halt_On_Error = 'no';
20                $this->db->connect(
21                                $_SESSION['phpgw_info']['expresso']['server']['db_name'],
22                                $_SESSION['phpgw_info']['expresso']['server']['db_host'],
23                                $_SESSION['phpgw_info']['expresso']['server']['db_port'],
24                                $_SESSION['phpgw_info']['expresso']['server']['db_user'],
25                                $_SESSION['phpgw_info']['expresso']['server']['db_pass'],
26                                $_SESSION['phpgw_info']['expresso']['server']['db_type']
27                );             
28                $this->user_id = $_SESSION['phpgw_info']['expresso']['user']['account_id'];     
29        }
30
31        // BEGIN of functions.
32        function read_acl($account_lid)
33        {
34                $query = "SELECT * FROM phpgw_expressoadmin WHERE manager_lid = '" . $account_lid . "'";
35                $this->db->query($query);
36                while($this->db->next_record())
37                        $result[] = $this->db->row();
38                return $result;
39        }
40       
41        /*
42        function get_sectors($params)
43        {
44                $organization = strtolower($params['organization']);
45               
46                $result = array();
47                // Pesquisa no BD os nomes setores no tabela phpgw_expressoadmin_sectors.
48                $query = "SELECT sector FROM phpgw_expressoadmin_sectors WHERE organization='$organization' ORDER by sector ASC";
49
50        if (!$this->db->query($query))
51                return 'Erro em get_sectors:' . pg_last_error();
52
53                while($this->db->next_record())
54                        $result[] = $this->db->row();
55
56                return $result;
57        }
58        */
59       
60        function get_next_id()
61        {
62                // Busco o ID dos accounts
63                $query_accounts = "SELECT id FROM phpgw_nextid WHERE appname = 'accounts'";
64        if (!$this->db->query($query_accounts))
65                return 'Erro em get_next_id:' . pg_last_error();
66                while($this->db->next_record())
67                        $result_accounts[] = $this->db->row();
68                $accounts_id = $result_accounts[0]['id'];
69               
70                // Busco o ID dos groups
71                $query_groups = "SELECT id FROM phpgw_nextid WHERE appname = 'groups'";
72        if (!$this->db->query($query_groups))
73                return 'Erro em get_next_id:' . pg_last_error();
74                while($this->db->next_record())
75                        $result_groups[] = $this->db->row();
76                $groups_id = $result_groups[0]['id'];
77               
78                //Retorna o maior dos ID's
79                if ($accounts_id >= $groups_id)
80                        return $accounts_id;
81                else
82                        return $groups_id;
83                }
84       
85        function increment_id($id, $type)
86        {
87                $sql = "UPDATE phpgw_nextid set id = '".$id."' WHERE appname = '" . $type . "'";
88                if (!$this->db->query($sql))
89                        return 'Erro em increment_id:' . pg_last_error();
90                else
91                        return true;
92        }
93       
94        function add_user2group($gidnumber, $uidnumber)
95        {
96                $query = "SELECT acl_location FROM phpgw_acl WHERE acl_appname = 'phpgw_group' AND acl_location = '" . $gidnumber . "' AND acl_account = '" . $uidnumber . "'";
97                if (!$this->db->query($query))
98                {
99                        $result['status'] = false;
100                        $result['msg'] = 'Erro em add_user2group:' . pg_last_error();
101                        return $result;
102                }
103                while($this->db->next_record())
104                        $user_in_group[] = $this->db->row();
105               
106                if (count($user_in_group) == 0)
107                {
108                        $sql = "INSERT INTO phpgw_acl (acl_appname, acl_location, acl_account, acl_rights) "
109                        . "VALUES('phpgw_group','" . $gidnumber . "','" . $uidnumber . "','1')";
110                        if (!$this->db->query($sql))
111                        {
112                                $result['status'] = false;
113                                $result['msg'] = 'Erro em add_user2group:' . pg_last_error();
114                                return $result;
115                        }
116                }
117                $result['status'] = true;
118                return $result;
119        }
120
121        function remove_user2group($gidnumber, $uidnumber)
122        {
123                $query = "SELECT acl_location FROM phpgw_acl WHERE acl_appname = 'phpgw_group' AND acl_location = '" . $gidnumber . "' AND acl_account = '" . $uidnumber . "'";
124                if (!$this->db->query($query))
125                {
126                        $result['status'] = false;
127                        $result['msg'] = 'Erro em add_user2group:' . pg_last_error();
128                        return $result;
129                }
130                while($this->db->next_record())
131                        $user_in_group[] = $this->db->row();
132               
133                if (count($user_in_group) > 0)
134                {
135                        $sql = "DELETE FROM phpgw_acl WHERE acl_appname = 'phpgw_group' AND acl_location = '" . $gidnumber . "' AND acl_account = '".$uidnumber."'";
136                        if (!$this->db->query($sql))
137                        {
138                                $result['status'] = false;
139                                $result['msg'] = 'Erro em add_user2group:' . pg_last_error();
140                                return $result;
141                        }
142                }
143                $result['status'] = true;
144                return $result;
145        }
146
147        function add_pref_changepassword($uidnumber)
148        {
149                $query = "SELECT * FROM phpgw_acl WHERE acl_appname = 'preferences' AND acl_location = 'changepassword' AND acl_account = '" . $uidnumber . "'";
150                if (!$this->db->query($query))
151                {
152                        $result['status'] = false;
153                        $result['msg'] = 'Erro em add_pref_changepassword:' . pg_last_error();
154                        return $result;
155                }
156                while($this->db->next_record())
157                        $user_pref_changepassword[] = $this->db->row();
158               
159                if (count($user_pref_changepassword) == 0)
160                {
161                        $sql = "INSERT INTO phpgw_acl (acl_appname, acl_location, acl_account, acl_rights) "
162                        . "VALUES('preferences','changepassword','" . $uidnumber . "','1')";
163                        if (!$this->db->query($sql))
164                        {
165                                $result['status'] = false;
166                                $result['msg'] = 'Erro em add_pref_changepassword:' . pg_last_error();
167                                return $result;
168                        }
169                }
170                $result['status'] = true;
171                return $result;
172        }       
173
174        function remove_pref_changepassword($uidnumber)
175        {
176                $query = "SELECT * FROM phpgw_acl WHERE acl_appname = 'preferences' AND acl_location = 'changepassword' AND acl_account = '" . $uidnumber . "'";
177                if (!$this->db->query($query))
178                {
179                        $result['status'] = false;
180                        $result['msg'] = 'Erro em add_pref_changepassword:' . pg_last_error();
181                        return $result;
182                }
183                while($this->db->next_record())
184                        $user_pref_changepassword[] = $this->db->row();
185               
186                if (count($user_pref_changepassword) != 0)
187                {
188                        $sql = "DELETE FROM phpgw_acl WHERE acl_appname = 'preferences' AND acl_location = 'changepassword' AND acl_account = '".$uidnumber."'";
189                        if (!$this->db->query($sql))
190                        {
191                                $result['status'] = false;
192                                $result['msg'] = 'Erro em remove_pref_changepassword:' . pg_last_error();
193                                return $result;
194                        }
195                }
196                $result['status'] = true;
197                return $result;
198        }       
199       
200        function add_id2apps($id, $apps)
201        {
202                $result['status'] = true;
203                if ($apps)
204                {
205                        foreach($apps as $app => $value)
206                        {
207                                $query = "SELECT * FROM phpgw_acl WHERE acl_appname = '".$app."' AND acl_location = 'run' AND acl_account = '" . $id . "'";
208                                if (!$this->db->query($query))
209                                {
210                                        $result['status'] = false;
211                                        $result['msg'] = 'Erro em add_id2apps: ' . pg_last_error();
212                                        return $result;
213                                }
214                               
215                                while($this->db->next_record())
216                                        $user_app[] = $this->db->row();
217                                       
218                                if (count($user_app) == 0)
219                                {
220                                        $sql = "INSERT INTO phpgw_acl (acl_appname, acl_location, acl_account, acl_rights) "
221                                        . "VALUES('".$app."','run','" . $id . "','1')";
222                                               
223                                        if (!$this->db->query($sql))
224                                        {
225                                                $result['status'] = false;
226                                                $result['msg'] = 'Erro em add_id2apps: ' . pg_last_error();
227                                                return $result;
228                                        }
229                                        else
230                                        {
231                                                $this->write_log("Adicionado aplicativo $app ao id",$id,'','','');     
232                                        }
233                                }
234                        }
235                }
236                return $result;
237        }
238
239        function remove_id2apps($id, $apps)
240        {
241                $result['status'] = true;
242                if ($apps)
243                {
244                        foreach($apps as $app => $value)
245                        {
246                                $query = "SELECT acl_location FROM phpgw_acl WHERE acl_appname = '" . $app . "' AND acl_location = 'run' AND acl_account = '" . $id . "'";
247                               
248                                if (!$this->db->query($query))
249                                {
250                                        $result['status'] = false;
251                                        $result['msg'] = 'Erro em remove_id2apps:' . pg_last_error();
252                                        return $result;
253                                }
254                                while($this->db->next_record())
255                                        $user_in_group[] = $this->db->row();
256                               
257                                if (count($user_in_group) > 0)
258                                {
259                                        $sql = "DELETE FROM phpgw_acl WHERE acl_appname = '" . $app . "' AND acl_location = 'run' AND acl_account = '".$id."'";
260                                        if (!$this->db->query($sql))
261                                        {
262                                                $result['status'] = false;
263                                                $result['msg'] = 'Erro em remove_id2apps:' . pg_last_error();
264                                                return $result;
265                                        }
266                                        else
267                                        {
268                                                $this->write_log("Removido aplicativo $app do id",$id,'','','');       
269                                        }
270                                }
271                        }
272                }
273                return $result;
274        }
275
276
277        function get_user_info($uidnumber)
278        {
279                // Groups
280                $query = "SELECT acl_location FROM phpgw_acl WHERE acl_appname = 'phpgw_group' AND acl_account = '".$uidnumber."'";
281                $this->db->query($query);
282                while($this->db->next_record())
283                        $user_app[] = $this->db->row();
284               
285                for ($i=0; $i<count($user_app); $i++)
286                        $return['groups'][] = $user_app[$i]['acl_location'];
287               
288                // ChangePassword
289                $query = "SELECT acl_rights FROM phpgw_acl WHERE acl_appname = 'preferences' AND acl_location = 'changepassword' AND acl_account = '".$uidnumber."'";
290                $this->db->query($query);
291                while($this->db->next_record())
292                        $changepassword[] = $this->db->row();
293                $return['changepassword'] = $changepassword[0]['acl_rights'];
294               
295                // Apps
296                $query = "SELECT acl_appname FROM phpgw_acl WHERE acl_account = '".$uidnumber."' AND acl_location = 'run'";
297                $this->db->query($query);
298                while($this->db->next_record())
299                        $user_apps[] = $this->db->row();
300                       
301                if ($user_apps)
302                {                       
303                        foreach ($user_apps as $app)
304                        {
305                                $return['apps'][$app['acl_appname']] = '1';
306                        }
307                }
308               
309                return $return;
310        }
311       
312        function get_group_info($gidnumber)
313        {
314                // Apps
315                $query = "SELECT acl_appname FROM phpgw_acl WHERE acl_account = '".$gidnumber."' AND acl_location = 'run'";
316                $this->db->query($query);
317                while($this->db->next_record())
318                        $group_apps[] = $this->db->row();
319               
320                if ($group_apps)
321                {                       
322                        foreach ($group_apps as $app)
323                        {
324                                $return['apps'][$app['acl_appname']] = '1';
325                        }
326                }
327               
328                // Members
329                $query = "SELECT acl_account FROM phpgw_acl WHERE acl_appname = 'phpgw_group' AND acl_location = '" . $gidnumber . "'";
330               
331                $this->db->query($query);
332                while($this->db->next_record())
333                        $group_members[] = $this->db->row();
334
335                if ($group_members)
336                {
337                        foreach ($group_members as $member)
338                        {
339                                $return['members'][] = $member['acl_account'];
340                        }
341                }
342                else
343                        $return['members'] = array();
344
345                return $return;
346        }
347       
348        function default_user_password_is_set($uid)
349        {
350                $query = "SELECT uid FROM phpgw_expressoadmin_passwords WHERE uid = '" . $uid . "'";
351                $this->db->query($query);
352                while($this->db->next_record())
353                {
354                        $userPassword[] = $this->db->row();
355                }
356                if (count($userPassword) == 0)
357                        return false;
358                else
359                        return true;
360        }
361       
362        function set_user_password($uid, $password)
363        {
364                $query = "SELECT uid FROM phpgw_expressoadmin_passwords WHERE uid = '" . $uid . "'";
365                $this->db->query($query);
366                while($this->db->next_record())
367                {
368                        $user[] = $this->db->row();
369                }
370                if (count($user) == 0)
371                {
372                        $sql = "INSERT INTO phpgw_expressoadmin_passwords (uid, password) VALUES('".$uid."','".$password."')";
373
374                        if (!$this->db->query($sql))
375                        {
376                                $result['status'] = false;
377                                $result['msg'] = 'Erro em set_user_password: ' . pg_last_error();
378                                return $result;
379                        }
380                }
381                return true;
382        }
383       
384        function get_user_password($uid)
385        {
386                $query = "SELECT password FROM phpgw_expressoadmin_passwords WHERE uid = '" . $uid . "'";
387                $this->db->query($query);
388                while($this->db->next_record())
389                {
390                        $userPassword[] = $this->db->row();
391                }
392               
393                if (count($userPassword) == 1)
394                {
395                        $sql = "DELETE FROM phpgw_expressoadmin_passwords WHERE uid = '" . $uid . "'";
396                        $this->db->query($sql);
397                        return $userPassword[0]['password'];
398                }
399                else
400                        return false;
401        }
402       
403        function delete_user($uidnumber)
404        {
405                // AGENDA
406                $this->db->query('SELECT cal_id FROM phpgw_cal WHERE owner ='.$uidnumber);
407                while($this->db->next_record())
408                {
409                        $ids[] = $this->db->row();
410                }
411                if (count($ids))
412                {
413                        foreach($ids as $i => $id)
414                        {
415                                $this->db->query('DELETE FROM phpgw_cal WHERE cal_id='.$id['cal_id']);
416                                $this->db->query('DELETE FROM phpgw_cal_user WHERE cal_id='.$id['cal_id']);
417                                $this->db->query('DELETE FROM phpgw_cal_repeats WHERE cal_id='.$id['cal_id']);
418                                $this->db->query('DELETE FROM phpgw_cal_extra WHERE cal_id='.$id['cal_id']);
419                        }
420                }
421                       
422                // CONATOS pessoais e grupos.
423                $this->db->query('SELECT id_contact FROM phpgw_cc_contact WHERE id_owner ='.$uidnumber);
424                while($this->db->next_record())
425                {
426                        $ids[] = $this->db->row();
427                }
428
429                if (count($ids))
430                {
431                        foreach($ids as $i => $id_contact)
432                        {
433                                $this->db->query('SELECT id_connection FROM phpgw_cc_contact_conns WHERE id_contact='.$id_contact['id_contact']);
434                                while($this->db->next_record())
435                                {
436                                        $id_conns[] = $this->db->row();
437                                }
438                                if (count($id_conns))
439                                {
440                                        foreach($id_conns as $j => $id_conn)
441                                        {
442                                                $this->db->query('DELETE FROM phpgw_cc_connections WHERE id_connection='.$id_conn['id_connection']);
443                                                $this->db->query('DELETE FROM phpgw_cc_contact_grps WHERE id_connection='.$id_conn['id_connection']);
444                                        }
445                                }
446                                       
447                                $this->db->query('SELECT id_address FROM phpgw_cc_contact_addrs WHERE id_contact='.$id_contact['id_contact']);
448                                while($this->db->next_record())
449                                {
450                                        $id_addresses[] = $$this->db->row();
451                                }
452                                if (count($id_addresses))
453                                {
454                                        foreach($id_addresses as $j => $id_addrs)
455                                        {
456                                                $this->db->query('DELETE FROM phpgw_cc_addresses WHERE id_address='.$id_addrs['id_address']);
457                                        }
458                                }
459                                $this->db->query('DELETE FROM phpgw_cc_contact WHERE id_contact='.$id_contact['id_contact']);
460                                $this->db->query('DELETE FROM phpgw_cc_contact_conns WHERE id_contact='.$id_contact['id_contact']);
461                                $this->db->query('DELETE FROM phpgw_cc_contact_addrs WHERE id_contact='.$id_contact['id_contact']);
462                        }
463                }
464                $this->db->query('DELETE FROM phpgw_cc_groups WHERE owner='.$uidnumber);
465                       
466                // PREFERENCIAS
467                $this->db->query('DELETE FROM phpgw_preferences WHERE preference_owner='.$uidnumber);
468                       
469                // ACL
470                $this->db->query('DELETE FROM phpgw_acl WHERE acl_account='.$uidnumber);
471               
472                // Corrigir
473                $return['status'] = true;
474                return $return;
475        }
476
477        function delete_group($gidnumber)
478        {
479                // ACL
480                $this->db->query('DELETE FROM phpgw_acl WHERE acl_location='.$gidnumber);
481                $this->db->query('DELETE FROM phpgw_acl WHERE acl_account='.$gidnumber);
482               
483                // Corrigir
484                $return['status'] = true;
485                return $return;
486        }
487       
488        function write_log($action, $groupinfo='', $userinfo='', $appinfo='', $msg_log='')
489        {
490                $sql = "INSERT INTO phpgw_expressoadmin_log (date, manager, action, groupinfo, userinfo, appinfo, msg) "
491                . "VALUES('now','" . $_SESSION['phpgw_info']['expresso']['user']['account_lid'] . "','" . strtolower($action) . "','" . strtolower($groupinfo) . "','" . strtolower($userinfo) . "','" . strtolower($appinfo) . "','" .strtolower($msg_log) . "')";
492                $this->db->query($sql);
493                return;
494        }
495       
496        function get_sieve_info()
497        {
498                $this->db->query('SELECT profileID,imapenablesieve,imapsieveserver,imapsieveport FROM phpgw_emailadmin');
499               
500                $i=0;
501                while($this->db->next_record())
502                {
503                        $serverList[$i]['profileID']            = $this->db->f(0);
504                        $serverList[$i]['imapenablesieve']      = $this->db->f(1);
505                        $serverList[$i]['imapsieveserver']      = $this->db->f(2);
506                        $serverList[$i]['imapsieveport']        = $this->db->f(3);
507                        $i++;
508                }
509               
510                return $serverList;
511        }
512       
513        function get_apps($account_lid)
514        {
515                $this->db->query("SELECT * FROM phpgw_expressoadmin_apps WHERE manager_lid = '".$account_lid."'");
516               
517                while($this->db->next_record())
518                {
519                        $tmp = $this->db->row();
520                        $availableApps[$tmp['app']] = 'run';
521                }
522                       
523                return $availableApps;
524        }
525       
526        function get_sambadomains_list()
527        {
528                $query = "SELECT * FROM phpgw_expressoadmin_samba ORDER by samba_domain_name ASC";
529                $this->db->query($query);
530                while($this->db->next_record())
531                        $result[] = $this->db->row();
532                return $result;
533        }
534       
535        function exist_domain_name_sid($sambadomainname, $sambasid)
536        {
537                $query = "SELECT * FROM phpgw_expressoadmin_samba WHERE samba_domain_name='$sambadomainname' OR samba_domain_sid='$sambasid'";
538                $this->db->query($query);
539                while($this->db->next_record())
540                        $result[] = $this->db->row();
541               
542                if (count($result) > 0)
543                        return true;
544                else
545                        return false;
546        }
547       
548        function delete_sambadomain($sambadomainname)
549        {
550                $this->db->query("DELETE FROM phpgw_expressoadmin_samba WHERE samba_domain_name='$sambadomainname'");
551                return;
552        }
553       
554        function add_sambadomain($sambadomainname, $sambasid)
555        {
556                $sql = "INSERT INTO phpgw_expressoadmin_samba (samba_domain_name, samba_domain_sid) VALUES('$sambadomainname','$sambasid')";
557                $this->db->query($sql);
558                return;
559        }
560
561        function add_edit_user_data($edit_user)
562                {
563                $query = "SELECT 'uidnumber' FROM phpgw_ldap_users WHERE uidnumber='".$edit_user['uidnumber']."'";
564                $this->db->query($query);
565                if($this->db->next_record())
566                        {
567                        $sql = "UPDATE phpgw_ldap_users SET uid='".$edit_user['uid']."',uidnumber='".$edit_user['uidnumber']."',givenname='".$edit_user['givenname']."',sn='".$edit_user['sn']."',cn='".$edit_user['cn']."',mail='".$edit_user['mail']."',mailalternateaddress='".$edit_user['mailalternateaddress']."' WHERE uid='".$edit_user['uid']."'";
568                        $this->db->query($sql);
569                        }
570                        else
571                        {
572                        $sql = "INSERT INTO phpgw_ldap_users VALUES('".$edit_user['uid']."','".$edit_user['uidnumber']."','".$edit_user['sn']."','".$edit_user['cn']."','".$edit_user['givenname']."','".$edit_user['mail']."','".$edit_user['mailalternateaddress']."')";
573                        $this->db->query($sql);
574                        }
575                return true;
576                }
577/*        function get_user_list($search)
578                {
579                $users_ldap="";
580                $query = "SELECT * FROM phpgw_ldap_users WHERE uidnumber LIKE '%".$search."%' OR uid LIKE '%".$search."%' OR cn LIKE '%".$search."%' OR sn LIKE '%".$search."%' OR givenname LIKE '%".$search."%' OR mail LIKE '%".$search."%' OR mailalternateaddress LIKE '%".$search."%'";
581                $this->db->query($query);
582                $i=0;
583                while($this->db->next_record())
584                        {
585                        $users_ldap[$i]['uid']                  = $this->db->f(0);
586                        $users_ldap[$i]['uidnumber']            = $this->db->f(1);
587                        $users_ldap[$i]['cn']                   = $this->db->f(3);
588                        $users_ldap[$i]['mail']                 = $this->db->f(5);
589                        $i++;
590                        }           
591                return $users_ldap;
592                }
593*/
594
595}
596?>
Note: See TracBrowser for help on using the repository browser.