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

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