source: trunk/expressoAdmin1_2/inc/class.group.inc.php @ 2

Revision 2, 11.6 KB checked in by niltonneto, 17 years ago (diff)

Removida todas as tags usadas pelo CVS ($Id, $Source).
Primeira versão no CVS externo.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1<?php
2        /**********************************************************************************\
3        * Expresso Administração                                                                                              *
4        * by Joao Alfredo Knopik Junior (joao.alfredo@gmail.com, jakjr@celepar.pr.gov.br) *
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       
12        include_once('class.ldap_functions.inc.php');
13        include_once('class.db_functions.inc.php');
14        include_once('class.imap_functions.inc.php');
15        include_once('class.functions.inc.php');
16       
17        class group
18        {
19                var $ldap_functions;
20                var $db_functions;
21                var $imap_functions;
22                var $functions;
23                var $current_config;
24               
25               
26                function group()
27                {
28                        $this->ldap_functions = new ldap_functions;
29                        $this->db_functions = new db_functions;
30                        $this->imap_functions = new imap_functions;
31                        $this->functions = new functions;
32                        $this->current_config = $_SESSION['phpgw_info']['expresso']['expressoAdmin'];
33                }
34               
35                function validate_fields($params)
36                {
37                        return $this->ldap_functions->validate_fields_group($params);
38                }
39               
40                function create($params)
41                {
42                        // Verifica o acesso do gerente
43                        if (!$this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'add_groups'))
44                        {
45                                $return['status'] = false;
46                                $return['msg'] = 'Você não tem acesso para criar novos grupos.';
47                                return $return;
48                        }
49                       
50                        $return['status'] = true;
51
52                        //Retira os uids duplicados se existir
53                        $array_tmp = array();
54                        $array_tmp = array_unique($params['members']);
55                        $params['members'] = $array_tmp;
56                       
57                        // Pega ID do BD e incrementa de 1.
58                        $id = (($this->db_functions->get_next_id()) + 1);
59                       
60                        // Incrementa o id no BD.
61                        $this->db_functions->increment_id($id,'groups');
62                       
63                        // Cria array para incluir no LDAP
64                        $dn = 'cn=' . $params['cn'] . ',' . $params['context'];                 
65                       
66                        $group_info = array();
67                        $group_info['cn']                                       = $params['cn'];
68                        $group_info['description']                      = $params['description'];
69                        $group_info['gidNumber']                        = $id;
70                        $group_info['objectClass'][]            = 'top';
71                        $group_info['objectClass'][]            = 'posixGroup';
72                        $group_info['objectClass'][]            = 'phpgwAccount';
73                        $group_info['phpgwAccountExpires']      = '-1';
74                        $group_info['phpgwAccountType']         = 'g';
75                        $group_info['userPassword']                     = '';
76                       
77                        if (count($params['members']))
78                        {
79                                foreach ($params['members'] as $index => $uidnumber)
80                                {
81                                        $uid = $this->ldap_functions->uidnumber2uid($uidnumber);
82                                        $group_info['memberuid'][] = $uid;
83                                       
84                                        // Chama funcao para incluir os uidnumbers dos usuarios no grupo
85                                        $result = $this->db_functions->add_user2group($id, $uidnumber);
86                                       
87                                        $this->db_functions->write_log("Adicionado usuario $uid ao grupo ".$group_info['cn']." no momento da criação",$dn,$uidnumber,'','');
88                                }
89                        }
90                       
91                        // Suporte ao SAMBA
92                        if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($params['use_attrs_samba'] == 'on'))
93                        {
94                                $group_info['objectClass'][]  = 'sambaGroupMapping';
95                                $group_info['sambaSID']           = $this->current_config['expressoAdmin_sambaSID'] . '-' . (($id * 2) + 1001);
96                                $group_info['sambaGroupType'] = '2';
97                        }
98                       
99                        $result = $this->ldap_functions->ldap_add_entry($dn, $group_info);
100                        if (!$result['status'])
101                        {
102                                $return['status'] = false;
103                                $return['msg'] .= $result['msg'];
104                        }
105                       
106                        // Chama funcao para incluir os aplicativos ao grupo
107                        $result = $this->db_functions->add_id2apps($id, $params['apps']);
108                        if (!$result['status'])
109                        {
110                                $return['status'] = false;
111                                $return['msg'] .= $result['msg'];
112                        }
113                       
114                        if ($return['status'] == true)
115                        {
116                                $this->db_functions->write_log("Criado grupo de usuários $dn",'',$dn,'','');
117                        }
118                       
119                        return $return;
120                }
121               
122                function save($new_values)
123                {
124                        // Verifica o acesso do gerente
125                        if (!$this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_groups'))
126                        {
127                                $return['status'] = false;
128                                $return['msg'] = 'Você não tem acesso para editar grupos.';
129                                return $return;
130                        }
131                       
132                        $return['status'] = true;
133
134                        //Retira os uids duplicados se existir
135                        $array_tmp = array();
136                        $array_tmp = array_unique($new_values['members']);
137                        $new_values['members'] = $array_tmp;
138                                               
139                        $old_values = $this->get_info($new_values['gidnumber'], $new_values['manager_context']);
140                        $diff = array_diff($new_values, $old_values);
141                       
142                        $dn = 'cn=' . $old_values['cn'] . ',' . $old_values['context'];                 
143                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
144                        // RENAME
145                        if ($diff['context'] || $diff['cn'])
146                        {
147                                $newrdn = 'cn=' . $new_values['cn'];
148                                $newparent = $new_values['context'];
149                                $result =  $this->ldap_functions->change_user_context($dn, $newrdn, $newparent);
150                                if (!$result['status'])
151                                {
152                                        $return['status'] = false;
153                                        $return['msg'] .= $result['msg'];
154                                }
155                                else
156                                {
157                                        $dn = $newrdn . ',' . $newparent;
158                                        $this->db_functions->write_log('Renomeado grupo de usuários de '.$old_values['cn']." para $dn.",'',$dn,$old_values['cn'],'');
159                                }
160                        }
161                       
162                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
163                        // REPLACE DESCRIPTION
164                        if ($new_values['description'] != $old_values['description'])
165                        {
166                                $ldap_mod_replace['description'] = $new_values['description'];
167                                $result = $this->ldap_functions->replace_user_attributes($dn, $ldap_mod_replace);
168                                if (!$result['status'])
169                                {
170                                        $return['status'] = false;
171                                        $return['msg'] .= $result['msg'];
172                                }
173                                else
174                                        $this->db_functions->write_log("Modificado descrição do grupo $dn",'',$dn,'','');
175                        }
176                       
177                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
178                        // REMOVE ATTRS OF SAMBA
179                        if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($old_values['sambaGroup']) && ($new_values['use_attrs_samba'] != 'on'))
180                        {
181                                $ldap_remove['objectclass']     = 'sambaGroupMapping'; 
182                                $ldap_remove['sambagrouptype']  = array();
183                                $ldap_remove['sambaSID']                = array();
184                               
185                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
186                                if (!$result['status'])
187                                {
188                                        $return['status'] = false;
189                                        $return['msg'] .= $result['msg'];
190                                }
191                                else
192                                        $this->db_functions->write_log("Removido atributos samba do grupo $dn",'',$dn,'','');
193                        }
194
195                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
196                        // ADD ATTRS OF SAMBA
197                        if (($this->current_config['expressoAdmin_samba_support'] == 'true') && (!$old_values['sambaGroup']) && ($new_values['use_attrs_samba'] == 'on'))
198                        {
199                                //Verifica se o binario para criar as senhas do samba exite.
200                                if (!is_file('/home/expressolivre/mkntpwd'))
201                                {
202                                        $return['status'] = false;
203                                        $return['msg'] .= "O arquivo binário /home/expressolivre/mkntpwd não exite.\\nEle é necessário para a criação das senhas usadas pelo SAMBA.\\nInforme o administrador ExpressoLivre sobre isto.\\n";
204                                }
205                                else
206                                {
207                                        $ldap_add['objectClass'][]              = 'sambaGroupMapping';
208                                        $ldap_add['sambagrouptype']             = '2';
209                                        $ldap_add['sambasid']                   = $this->current_config['expressoAdmin_sambaSID'] . '-' . ((2 * $new_values['gidnumber'])+1001);
210                                       
211                                        $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
212                                        if (!$result['status'])
213                                        {
214                                                $return['status'] = false;
215                                                $return['msg'] .= $result['msg'];
216                                        }
217                                        else
218                                                $this->db_functions->write_log("Adicionado atributos samba do grupo $dn",'',$dn,'','');
219                                }
220                        }
221
222                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
223                        // USERS
224
225                        if (!$new_values['members'])
226                                $new_values['members'] = array();
227                        if (!$old_values['members'])
228                                $old_values['members'] = array();
229
230                        $add_users = array_diff($new_values['members'], $old_values['members']);
231                        $remove_users = array_diff($old_values['members'], $new_values['members']);
232
233                        if (count($add_users)>0)
234                        {
235                                $array_memberUids_add = array();
236                                foreach($add_users as $uidnumber)
237                                {
238                                        if (is_numeric($uidnumber))
239                                        {
240                                                $this->db_functions->add_user2group($new_values['gidnumber'], $uidnumber);
241                                                $user = $this->ldap_functions->uidnumber2uid($uidnumber);
242                                                $array_memberUids_add[] = $user;
243                                                $this->db_functions->write_log("Adicionado usuário $user ao grupo $dn.",$dn,'','','');
244                                        }
245                                        else
246                                        {
247                                                // O memberUID existe no grupo, mas o usuário não existe no ldap
248                                                $this->ldap_functions->remove_user2group($new_values['gidnumber'], $uidnumber);
249                                        }
250                                }
251                                $this->ldap_functions->add_user2group($new_values['gidnumber'], $array_memberUids_add);
252                        }
253                        if (count($remove_users)>0)
254                        {
255                                $array_memberUids_remove = array();
256                                foreach($remove_users as $uidnumber)
257                                {
258                                        $this->db_functions->remove_user2group($new_values['gidnumber'], $uidnumber);
259                                        $user = $this->ldap_functions->uidnumber2uid($uidnumber);
260                                        $array_memberUids_remove[] = $user;
261                                        $this->db_functions->write_log("Removido usuário $user do grupo $dn.",$dn,'','','');
262                                }
263                                $this->ldap_functions->remove_user2group($new_values['gidnumber'], $array_memberUids_remove);
264                        }
265                       
266                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
267                        // APPS
268                        $new_values2 = array();
269                        $old_values2 = array();
270                        if (count($new_values['apps'])>0)
271                        {
272                                foreach ($new_values['apps'] as $app=>$tmp)
273                                {
274                                        $new_values2[] = $app;
275                                }
276                        }
277                        if (count($old_values['apps'])>0)
278                        {
279                                foreach ($old_values['apps'] as $app=>$tmp)
280                                {
281                                        $old_values2[] = $app;
282                                }
283                        }
284                        $add_apps    = array_diff($new_values2, $old_values2);
285                        $remove_apps = array_diff($old_values2, $new_values2);
286
287                        if (count($add_apps)>0)
288                        {
289                                $this->db_functions->add_id2apps($new_values['gidnumber'], array_flip($add_apps));
290                        }
291                        if (count($remove_apps)>0)
292                        {
293                                $this->db_functions->remove_id2apps($new_values['gidnumber'], array_flip($remove_apps));
294                        }
295                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////                     
296                       
297                        return $return;
298                }               
299               
300               
301                function get_info($gidnumber, $context)
302                {
303                        $group_info_ldap = $this->ldap_functions->get_group_info($gidnumber, $context);
304                        $group_info_db = $this->db_functions->get_group_info($gidnumber);
305                       
306                        $group_info = array_merge($group_info_ldap, $group_info_db);
307                        return $group_info;
308                }
309
310                function delete($params)
311                {
312                        // Verifica o acesso do gerente
313                        if (!$this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'delete_groups'))
314                        {
315                                $return['status'] = false;
316                                $return['msg'] = 'Você não tem acesso para excluir grupos.';
317                                return $return;
318                        }
319                       
320                        $return['status'] = true;
321                       
322                        $gidnumber = $params['gidnumber'];
323                        $cn = $params['cn'];
324                       
325                        //LDAP
326                        $result_ldap = $this->ldap_functions->delete_group($gidnumber);
327                        if (!$result_ldap['status'])
328                        {
329                                $return['status'] = false;
330                                $return['msg'] .= $result_ldap['msg'];
331                        }
332                       
333                        //DB
334                        $result_db = $this->db_functions->delete_group($gidnumber);
335                        if (!$result_db['status'])
336                        {
337                                $return['status'] = false;
338                                $return['msg'] .= $result_ldap['msg'];
339                        }
340                       
341                        if ($return['status'] == true)
342                        {
343                                $this->db_functions->write_log("Deletado grupo de usuários $cn",'',$cn,'','');
344                        }
345                       
346                        return $return;
347                }
348               
349        }
350?>
Note: See TracBrowser for help on using the repository browser.