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

Revision 46, 15.7 KB checked in by niltonneto, 17 years ago (diff)

* empty log message *

  • 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                        // E-mail for groups
78                        if ($params['email'] != '')
79                                $group_info['mail'] = $params['email'];
80                       
81                        if (count($params['members']))
82                        {
83                                foreach ($params['members'] as $index => $uidnumber)
84                                {
85                                        $uid = $this->ldap_functions->uidnumber2uid($uidnumber);
86                                        $group_info['memberuid'][] = $uid;
87                                       
88                                        // Chama funcao para incluir os uidnumbers dos usuarios no grupo
89                                        $result = $this->db_functions->add_user2group($id, $uidnumber);
90                                       
91                                        $this->db_functions->write_log("Adicionado usuario $uid ao grupo ".$group_info['cn']." no momento da criação",$dn,$uidnumber,'','');
92                                }
93                        }
94                       
95                        // Suporte ao SAMBA
96                        if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($params['use_attrs_samba'] == 'on'))
97                        {
98                                $group_info['objectClass'][]  = 'sambaGroupMapping';
99                                $group_info['sambaSID']           = $params['sambasid'] . '-' . (($id * 2) + 1001);
100                                $group_info['sambaGroupType'] = '2';
101                        }
102                       
103                        // ADD ATTRIBUTES
104                        if ($params['phpgwaccountvisible'] == 'on')
105                        {
106                                $group_info['phpgwaccountvisible'] = '-1';
107                        }
108                       
109                        $result = $this->ldap_functions->ldap_add_entry($dn, $group_info);
110                        if (!$result['status'])
111                        {
112                                $return['status'] = false;
113                                $return['msg'] .= $result['msg'];
114                        }
115                       
116                        // Chama funcao para incluir os aplicativos ao grupo
117                        $result = $this->db_functions->add_id2apps($id, $params['apps']);
118                        if (!$result['status'])
119                        {
120                                $return['status'] = false;
121                                $return['msg'] .= $result['msg'];
122                        }
123                       
124                        if ($return['status'] == true)
125                        {
126                                $this->db_functions->write_log("Criado grupo de usuários $dn",'',$dn,'','');
127                        }
128                       
129                        return $return;
130                }
131               
132                function save($new_values)
133                {
134                        // Verifica o acesso do gerente
135                        if (!$this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_groups'))
136                        {
137                                $return['status'] = false;
138                                $return['msg'] = 'Você não tem acesso para editar grupos.';
139                                return $return;
140                        }
141                       
142                        $return['status'] = true;
143
144                        //Retira os uids duplicados se existir
145                        $array_tmp = array();
146                        $array_tmp = array_unique($new_values['members']);
147                        $new_values['members'] = $array_tmp;
148                                               
149                        $old_values = $this->get_info($new_values['gidnumber'], $new_values['manager_context']);
150                        $diff = array_diff($new_values, $old_values);
151                       
152                        $dn = 'cn=' . $old_values['cn'] . ',' . $old_values['context'];                 
153                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
154                        // RENAME
155                        if ($diff['context'] || $diff['cn'])
156                        {
157                                $newrdn = 'cn=' . $new_values['cn'];
158                                $newparent = $new_values['context'];
159                                $result =  $this->ldap_functions->change_user_context($dn, $newrdn, $newparent);
160                                if (!$result['status'])
161                                {
162                                        $return['status'] = false;
163                                        $return['msg'] .= $result['msg'];
164                                }
165                                else
166                                {
167                                        $dn = $newrdn . ',' . $newparent;
168                                        $this->db_functions->write_log('Renomeado grupo de usuários de '.$old_values['cn']." para $dn.",'',$dn,$old_values['cn'],'');
169                                }
170                        }
171                       
172                        $ldap_mod_replace = array();
173                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
174                        // REPLACE SAMBASID OF SAMBA
175                        if ( ($this->current_config['expressoAdmin_samba_support'] == 'true') && ($diff['sambasid']) && ($old_values['sambasid']))
176                        {
177                                $ldap_mod_replace['sambasid'] = $new_values['sambasid'] . '-' . ((2 * $new_values['gidnumber'])+1001);
178                                $this->db_functions->write_log("Alterado dominio samba do grupo $dn para " . $new_values['sambasid'],'',$dn,'','');
179                        }
180                       
181                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
182                        // REPLACE DESCRIPTION
183                        if ($new_values['description'] != $old_values['description'])
184                        {
185                                $ldap_mod_replace['description'] = $new_values['description'];
186                                $this->db_functions->write_log("Modificado descrição do grupo $dn",'',$dn,'','');
187                        }
188
189                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
190                        // REPLACE E-Mail
191                        if ((($old_values['email']) && ($diff['email'])) &&
192                                $this->functions->check_acl($_SESSION['phpgw_session']['session_lid'],'edit_email_groups'))
193                        {
194                                $ldap_mod_replace['mail'] = $new_values['email'];
195                                $this->db_functions->write_log("Modificado E-Mail do grupo $dn",'',$dn,'','');
196                        }
197
198                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
199                        // CALL LDAP_REPLACE FUNCTION
200                        if (count($ldap_mod_replace))
201                        {
202                                $result = $this->ldap_functions->replace_user_attributes($dn, $ldap_mod_replace);
203                                if (!$result['status'])
204                                {
205                                        $return['status'] = false;
206                                        $return['msg'] .= $result['msg'];
207                                }
208                        }                       
209                       
210                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
211                        // REMOVE ATTRS OF SAMBA
212                        if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($old_values['sambaGroup']) && ($new_values['use_attrs_samba'] != 'on'))
213                        {
214                                $ldap_remove['objectclass']     = 'sambaGroupMapping'; 
215                                $ldap_remove['sambagrouptype']  = array();
216                                $ldap_remove['sambaSID']                = array();
217                               
218                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
219                                if (!$result['status'])
220                                {
221                                        $return['status'] = false;
222                                        $return['msg'] .= $result['msg'];
223                                }
224                                else
225                                        $this->db_functions->write_log("Removido atributos samba do grupo $dn",'',$dn,'','');
226                        }
227
228                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
229                        // ADD ATTRS OF SAMBA
230                        if (($this->current_config['expressoAdmin_samba_support'] == 'true') && (!$old_values['sambaGroup']) && ($new_values['use_attrs_samba'] == 'on'))
231                        {
232                                //Verifica se o binario para criar as senhas do samba exite.
233                                if (!is_file('/home/expressolivre/mkntpwd'))
234                                {
235                                        $return['status'] = false;
236                                        $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";
237                                }
238                                else
239                                {
240                                        $ldap_add['objectClass'][]              = 'sambaGroupMapping';
241                                        $ldap_add['sambagrouptype']             = '2';
242                                        $ldap_add['sambasid']                   = $new_values['sambasid'] . '-' . ((2 * $new_values['gidnumber'])+1001);
243                                       
244                                        $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
245                                        if (!$result['status'])
246                                        {
247                                                $return['status'] = false;
248                                                $return['msg'] .= $result['msg'];
249                                        }
250                                        else
251                                                $this->db_functions->write_log("Adicionado atributos samba ao grupo $dn",'','','','');
252                                }
253                        }
254                       
255                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
256                        // ADD ATTRIBUTES
257                        $ldap_add = array();
258                        if (($new_values['phpgwaccountvisible'] == 'on') && ($old_values['phpgwaccountvisible'] != '-1'))
259                        {
260                                $ldap_add['phpgwaccountvisible'] = '-1';
261                                $this->db_functions->write_log("Adicionado atributo phpgwaccountvisible ao grupo $dn",'','','','');
262                        }
263                        if ((($new_values['email']) && (!$old_values['email'])) &&
264                                $this->functions->check_acl($_SESSION['phpgw_session']['session_lid'],'edit_email_groups'))
265                        {
266                                $ldap_add['mail'] = $new_values['email'];
267                                $this->db_functions->write_log("Adicionado atributo mail ao grupo $dn",'','','','');
268                        }
269                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
270                        // CALL LDAP_ADD FUNCTION                       
271                        if (count($ldap_add))
272                        {
273                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
274                                if (!$result['status'])
275                                {
276                                        $return['status'] = false;
277                                        $return['msg'] .= $result['msg'];
278                                }
279                        }
280                                               
281                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
282                        // REMOVE ATTRIBUTES
283                        $ldap_remove = array();
284                        if (($new_values['phpgwaccountvisible'] != 'on') && ($old_values['phpgwaccountvisible'] == '-1'))
285                        {
286                                $ldap_remove['phpgwaccountvisible'] = array();
287                                $this->db_functions->write_log("Removido atributo phpgwaccountvisible do grupo $dn",'','','','');
288                        }
289                        if (((!$new_values['email']) && ($old_values['email'])) &&
290                                $this->functions->check_acl($_SESSION['phpgw_session']['session_lid'],'edit_email_groups'))
291                        {
292                                $ldap_remove['mail'] = array();
293                                $this->db_functions->write_log("Removido atributo mail do grupo $dn",'','','','');
294                        }
295                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
296                        // CALL LDAP_REMOVED FUNCTION                   
297                        if (count($ldap_remove))
298                        {
299                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
300                                if (!$result['status'])
301                                {
302                                        $return['status'] = false;
303                                        $return['msg'] .= $result['msg'];
304                                }
305                        }
306
307                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
308                        // USERS
309
310                        if (!$new_values['members'])
311                                $new_values['members'] = array();
312                        if (!$old_values['members'])
313                                $old_values['members'] = array();
314
315                        $add_users = array_diff($new_values['members'], $old_values['members']);
316                        $remove_users = array_diff($old_values['members'], $new_values['members']);
317
318                        if (count($add_users)>0)
319                        {
320                                $array_memberUids_add = array();
321                                foreach($add_users as $uidnumber)
322                                {
323                                        if (is_numeric($uidnumber))
324                                        {
325                                                $this->db_functions->add_user2group($new_values['gidnumber'], $uidnumber);
326                                                $user = $this->ldap_functions->uidnumber2uid($uidnumber);
327                                                $array_memberUids_add[] = $user;
328                                                $this->db_functions->write_log("Adicionado usuário $user ao grupo $dn.",$dn,'','','');
329                                        }
330                                        else
331                                        {
332                                                // O memberUID existe no grupo, mas o usuário não existe no ldap
333                                                $this->ldap_functions->remove_user2group($new_values['gidnumber'], $uidnumber);
334                                        }
335                                }
336                                $this->ldap_functions->add_user2group($new_values['gidnumber'], $array_memberUids_add);
337                        }
338                        if (count($remove_users)>0)
339                        {
340                                $array_memberUids_remove = array();
341                                foreach($remove_users as $uidnumber)
342                                {
343                                        $this->db_functions->remove_user2group($new_values['gidnumber'], $uidnumber);
344                                        $user = $this->ldap_functions->uidnumber2uid($uidnumber);
345                                        $array_memberUids_remove[] = $user;
346                                        $this->db_functions->write_log("Removido usuário $user do grupo $dn.",$dn,'','','');
347                                }
348                                $this->ldap_functions->remove_user2group($new_values['gidnumber'], $array_memberUids_remove);
349                        }
350                       
351                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
352                        // APPS
353                        $new_values2 = array();
354                        $old_values2 = array();
355                        if (count($new_values['apps'])>0)
356                        {
357                                foreach ($new_values['apps'] as $app=>$tmp)
358                                {
359                                        $new_values2[] = $app;
360                                }
361                        }
362                        if (count($old_values['apps'])>0)
363                        {
364                                foreach ($old_values['apps'] as $app=>$tmp)
365                                {
366                                        $old_values2[] = $app;
367                                }
368                        }
369                       
370                        $add_apps    = array_flip(array_diff($new_values2, $old_values2));
371                        $remove_apps = array_flip(array_diff($old_values2, $new_values2));
372
373                        if (count($add_apps)>0)
374                        {
375                                $this->db_functions->add_id2apps($new_values['gidnumber'], $add_apps);
376                               
377                                foreach ($add_apps as $app => $index)
378                                        $this->db_functions->write_log("Adicionado aplicativo $app ao grupo $dn",'',$dn,'','');
379                        }
380                       
381                        if (count($remove_apps)>0)
382                        {
383                                //Verifica se o gerente tem acesso a aplicação antes de remove-la do usuario.
384                                $manager_apps = $this->db_functions->get_apps($_SESSION['phpgw_session']['session_lid']);
385                                       
386                                foreach ($remove_apps as $app => $app_index)
387                                {
388                                        if ($manager_apps[$app] == 'run')
389                                                $remove_apps2[$app] = $app_index;
390                                }
391                                $this->db_functions->remove_id2apps($new_values['gidnumber'], $remove_apps2);
392                                       
393                                foreach ($remove_apps2 as $app => $access)
394                                        $this->db_functions->write_log("Removido aplicativo $app do grupo $dn",'',$dn,'','');
395                        }
396                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////                     
397                       
398                        return $return;
399                }               
400               
401               
402                function get_info($gidnumber, $context)
403                {
404                        $group_info_ldap = $this->ldap_functions->get_group_info($gidnumber, $context);
405                        $group_info_db = $this->db_functions->get_group_info($gidnumber);
406                       
407                        $group_info = array_merge($group_info_ldap, $group_info_db);
408                        return $group_info;
409                }
410
411                function delete($params)
412                {
413                        // Verifica o acesso do gerente
414                        if (!$this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'delete_groups'))
415                        {
416                                $return['status'] = false;
417                                $return['msg'] = 'Você não tem acesso para excluir grupos.';
418                                return $return;
419                        }
420                       
421                        $return['status'] = true;
422                       
423                        $gidnumber = $params['gidnumber'];
424                        $cn = $params['cn'];
425                       
426                        //LDAP
427                        $result_ldap = $this->ldap_functions->delete_group($gidnumber);
428                        if (!$result_ldap['status'])
429                        {
430                                $return['status'] = false;
431                                $return['msg'] .= $result_ldap['msg'];
432                        }
433                       
434                        //DB
435                        $result_db = $this->db_functions->delete_group($gidnumber);
436                        if (!$result_db['status'])
437                        {
438                                $return['status'] = false;
439                                $return['msg'] .= $result_ldap['msg'];
440                        }
441                       
442                        if ($return['status'] == true)
443                        {
444                                $this->db_functions->write_log("Deletado grupo de usuários $cn",'',$cn,'','');
445                        }
446                       
447                        return $return;
448                }
449               
450        }
451?>
Note: See TracBrowser for help on using the repository browser.