source: branches/2.2/reports/inc/class.functions.inc.php @ 4984

Revision 4984, 76.4 KB checked in by diogenesduarte, 13 years ago (diff)

Ticket #2240 - Eliminando a busca redundante por todos os usuários da OU.

Line 
1<?php
2        /**********************************************************************************\
3        *Expresso Relatório                                                                                           *
4        *by Elvio Rufino da Silva (elviosilva@yahoo.com.br, elviosilva@cepromat.mt.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.db_functions.inc.php');
13        include_once(PHPGW_API_INC.'/class.config.inc.php');
14
15        class functions
16        {
17                var $public_functions = array
18                (
19                        'make_array_acl'                        => True,
20                        'check_acl'                                     => True,
21                        'read_acl'                                      => True,
22                        'exist_account_lid'                     => True,
23                        'exist_email'                           => True,
24                        'array_invert'                          => True,
25                        'Paginate_user'                         => True,
26                        'Paginate_cota'                         => True,
27                        'Paginate_shareAccount'                 => True,
28                        'Paginate_institutionalAccount'         => True,
29                        'Paginate_user_logon'           => True,
30                        'get_list_all'                          => True,
31                        'get_groups_list'                       => True,
32                        'get_list_ou_user_logon'        => True,
33                        'show_access_log'                       => True,
34                        'get_sectors_list'                      => True
35                );
36               
37                var $nextmatchs;
38                var $sectors_list = array();
39                var $current_config;
40               
41                function functions()
42                {
43                        $this->db_functions = new db_functions;
44                        $GLOBALS['phpgw']->db = $this->db_functions->db;
45
46                        $c = new config;
47                        $c->read_repository();
48                        $this->current_config = $c->config_data;
49                }
50
51                // Account and type of access. Return: Have access ? (true/false)
52                function check_acl($account_lid, $access)
53                {
54                        $acl = $this->read_acl($account_lid);
55                        $array_acl = $this->make_array_acl($acl['acl']);
56                       
57                        switch($access)
58                        {
59                                case list_users:
60                                        if ($array_acl[acl_add_users] || $array_acl[acl_edit_users] || $array_acl[acl_delete_users] || $array_acl[acl_change_users_password] || $array_acl[acl_change_users_quote] || $array_acl[acl_edit_sambausers_attributes] || $array_acl[acl_view_users] || $array_acl[acl_manipulate_corporative_information] || $array_acl[acl_edit_users_phonenumber] )
61                                                return true;
62                                        break;
63                                case report_users:
64                                        if ($array_acl[acl_change_users_quote] || $array_acl[acl_view_users])
65                                                return true;
66                                        break;
67                                case list_groups:
68                                        if ($array_acl[acl_add_groups] || $array_acl[acl_edit_groups] || $array_acl[acl_delete_groups])
69                                                return true;
70                                        break;
71                                case list_maillists:
72                                        if ($array_acl[acl_add_maillists] || $array_acl[acl_edit_maillists] || $array_acl[acl_delete_maillists])
73                                                return true;
74                                        break;
75                                case list_sectors:
76//                                      if ($array_acl[acl_create_sectors] || $array_acl[acl_edit_sectors] || $array_acl[acl_delete_sectors])
77                                        if ($array_acl[acl_view_users])
78                                                return true;
79                                        break;
80                                case list_computers:
81                                        if ($array_acl[acl_create_computers] || $array_acl[acl_edit_computers] || $array_acl[acl_delete_computers])
82                                                return true;
83                                        break;
84
85                                case display_groups:
86                                        if ( $array_acl[acl_edit_users] || $array_acl[acl_view_users] || ($array_acl[acl_edit_sambausers_attributes] && ($this->current_config['expressoAdmin_samba_support'] == 'true')) )
87                                                return true;
88                                        break;
89                                case display_emailconfig:
90                                        if ($array_acl[acl_edit_users] || $array_acl[acl_view_users])
91                                                return true;
92                                        break;
93                                case display_applications:
94                                        if ($array_acl[acl_edit_users] || $array_acl[acl_view_users])
95                                                return true;
96                                        break;
97                                case display_emaillists:
98                                        if ($array_acl[acl_edit_users] || $array_acl[acl_view_users])
99                                                return true;
100                                        break;
101
102                                case list_institutional_accounts:
103                                        if ($array_acl[acl_add_institutional_accounts] || $array_acl[acl_edit_institutional_accounts] || $array_acl[acl_delete_institutional_accounts])
104                                                return true;
105                                        break;
106
107
108                                default:
109                                        return $array_acl["acl_$access"];
110                        }
111                        return false;
112                }
113
114               
115                // Read acl from db
116                function read_acl($account_lid)
117                {
118                        $acl = $this->db_functions->read_acl($account_lid);
119                       
120                        $result['acl'] = $acl[0]['acl'];
121                        $result['manager_lid'] = $acl[0]['manager_lid'];
122                        $result['raw_context'] = $acl[0]['context'];
123                       
124                        $all_contexts = split("%", $acl[0]['context']);
125                        foreach ($all_contexts as $index=>$context)
126                        {
127                                $result['contexts'][] = $context;
128                                $result['contexts_display'][] = str_replace(", ", ".", ldap_dn2ufn( $context ));
129                        }
130                       
131                        return $result;
132                }
133               
134                function make_array_acl($acl)
135                {
136                        $array_acl_tmp = array();
137                        $tmp = array(           "acl_add_users",
138                                                                "acl_edit_users",
139                                                                "acl_delete_users",
140                                                                "acl_EMPTY1",
141                                                                "acl_add_groups",
142                                                                "acl_edit_groups",
143                                                                "acl_delete_groups",
144                                                                "acl_change_users_password",
145                                                                "acl_add_maillists",
146                                                                "acl_edit_maillists",
147                                                                "acl_delete_maillists",
148                                                                "acl_EMPTY2",
149                                                                "acl_create_sectors",
150                                                                "acl_edit_sectors",
151                                                                "acl_delete_sectors",
152                                                                "acl_edit_sambausers_attributes",
153                                                                "acl_view_global_sessions",
154                                                                "acl_view_logs",
155                                                                "acl_change_users_quote",
156                                                                "acl_set_user_default_password",
157                                                                "acl_create_computers",
158                                                                "acl_edit_computers",
159                                                                "acl_delete_computers",
160                                                                "acl_rename_users",
161                                                                "acl_edit_sambadomains",
162                                                                "acl_view_users",
163                                                                "acl_edit_email_groups",
164                                                                "acl_empty_user_inbox",
165                                                                "acl_manipulate_corporative_information",
166                                                                "acl_edit_users_picture",
167                                                                "acl_edit_scl_email_lists",
168                                                                "acl_edit_users_phonenumber",
169                                                                "acl_add_institutional_accounts",
170                                                                "acl_edit_institutional_accounts",
171                                                                "acl_remove_institutional_accounts"
172                                                                );
173                       
174                        foreach ($tmp as $index => $right)
175                        {
176                                $bin = '';
177                                for ($i=0; $i<$index; $i++)
178                                {
179                                        $bin .= '0';
180                                }
181                                $bin = '1' . $bin;
182                               
183                                $array_acl[$right] = $this->safeBitCheck(bindec($bin), $acl);
184                        }
185                        return $array_acl;
186                }
187               
188                function get_inactive_users($contexts)
189                {
190                        $retorno = array();
191                        $tempUsers = array();
192                        //Pego no LDAP todos os usuários dos contextos em questão.
193                        $usuariosLdap = $this->get_list('accounts','',$contexts);
194                        foreach($usuariosLdap as $usuarioLdap)
195                        {
196                                $tempUsers[$usuarioLdap["account_id"]] = $usuarioLdap["account_lid"];
197                        }
198                        $ids = implode(",",array_keys($tempUsers)); //Consigo a lista de uids daquele contexto para mandar na query para o banco.
199                       
200                        //Pego nas configurações do expresso o número de dias necessários para inatividade.
201                        $timeToExpire = $GLOBALS['phpgw_info']['server']['time_to_account_expires'];
202                       
203                       
204                        $ultimoTsValido = time() - ($timeToExpire * 86400); //O último timestamp válido é dado pelo de agora menos o número de dias para expirar vezes a quantidade de segundos existente em 1 dia.
205                        $query = "select account_id,max(li) as last_login from phpgw_access_log where account_id in (".$ids.") group by account_id having max(li) < ".$ultimoTsValido." order by max(li)";
206
207                        $GLOBALS['phpgw']->db->query($query);
208                        while($GLOBALS['phpgw']->db->next_record())
209                        {
210                                $result = $GLOBALS['phpgw']->db->row();
211                                array_push($retorno,array("uidNumber"=>$result["account_id"],"login"=> $tempUsers[$result["account_id"]],"li"=>$result["last_login"]));
212                        }
213                       
214                        return $retorno;
215                }
216
217                function safeBitCheck($number,$comparison)
218                {
219                $binNumber = base_convert($number,10,2);
220                $binComparison = strrev(base_convert($comparison,10,2));
221                        $str = strlen($binNumber);
222               
223                if ( ($str <= strlen($binComparison)) && ($binComparison{$str-1}==="1") )
224                {
225                                return '1';
226                }
227                        else
228                {
229                                return '0';
230                        }
231                }
232               
233                function get_list_all($type, $query, $contexts,$sizelimit)
234                {
235                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
236                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
237                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
238                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
239                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
240                        ldap_bind($ldap_conn,$dn,$passwd);
241                       
242                        if ($type == 'accounts')
243                        {
244                                $justthese = array("uidnumber", "uid", "cn", "mail");
245                                $filter="(&(phpgwAccountType=u)(|(ou=*".$query."*)(uid=*".$query."*)(sn=*".$query."*)(cn=*".$query."*)(givenName=*".$query."*)(mail=$query*)(mailAlternateAddress=$query*)))";
246                                                               
247                                $tmp = array();
248                                foreach ($contexts as $index=>$context)
249                                {
250                                        $search=ldap_search($ldap_conn, $context, $filter, $justthese, 0, $sizelimit);
251                                        $info = ldap_get_entries($ldap_conn, $search);
252                                       
253                                        for ($i=0; $i < $info['count']; $i++)
254                                        {
255                                                $tmp[$info[$i]['uid'][0]]['account_id']  = $info[$i]['uidnumber'][0];
256                                                $tmp[$info[$i]['uid'][0]]['account_lid'] = $info[$i]['uid'][0];
257                                                $tmp[$info[$i]['uid'][0]]['account_cn']  = $info[$i]['cn'][0];
258                                                $tmp[$info[$i]['uid'][0]]['account_mail']= $info[$i]['mail'][0];
259                                                $sort[] = $info[$i]['uid'][0];
260                                        }
261                                }
262                                ldap_close($ldap_conn);
263                               
264                                if (count($sort))
265                                {
266                                        natcasesort($sort);
267                                        foreach ($sort as $user_uid)
268                                                $return[$user_uid] = $tmp[$user_uid];
269                                }
270                               
271                                return $return;
272                        }
273                        elseif($type == 'groups')
274                        {
275                                $filter="(&(phpgwAccountType=g)(cn=*$query*))";
276                                $justthese = array("gidnumber", "cn", "description");
277                               
278                                $tmp = array();
279                                foreach ($contexts as $index=>$context)
280                                {
281                                        $search=ldap_search($ldap_conn, $context, $filter, $justthese);
282                                        $info = ldap_get_entries($ldap_conn, $search);
283                                        for ($i=0; $i < $info['count']; $i++)
284                                        {
285                                                $tmp[$info[$i]['cn'][0]]['cn']= $info[$i]['cn'][0];
286                                                $tmp[$info[$i]['cn'][0]]['description']= $info[$i]['description'][0];
287                                                $tmp[$info[$i]['cn'][0]]['gidnumber']= $info[$i]['gidnumber'][0];
288                                                $sort[] = $info[$i]['cn'][0];
289                                        }
290                                }
291                                ldap_close($ldap_conn);
292                               
293                                natcasesort($sort);
294                                foreach ($sort as $group_cn)
295                                        $return[$group_cn] = $tmp[$group_cn];
296                               
297                                return $return;
298                        }
299                        elseif($type == 'maillists')
300                        {
301                                $filter="(&(phpgwAccountType=l)(|(cn=*".$query."*)(uid=*".$query."*)(mail=*".$query."*)))";
302                                $justthese = array("uidnumber", "cn", "uid", "mail");
303
304                                $tmp = array();
305                                foreach ($contexts as $index=>$context)
306                                {
307                                        $search=ldap_search($ldap_conn, $context, $filter, $justthese);
308                                        $info = ldap_get_entries($ldap_conn, $search);
309                                       
310                                        for ($i=0; $i < $info['count']; $i++)
311                                        {
312                                                $tmp[$info[$i]['uid'][0]]['uid']                = $info[$i]['uid'][0];
313                                                $tmp[$info[$i]['uid'][0]]['name']               = $info[$i]['cn'][0];
314                                                $tmp[$info[$i]['uid'][0]]['uidnumber']  = $info[$i]['uidnumber'][0];
315                                                $tmp[$info[$i]['uid'][0]]['email']              = $info[$i]['mail'][0];
316                                                $sort[] = $info[$i]['uid'][0];
317                                        }
318                                }
319                                ldap_close($ldap_conn);
320                               
321                                natcasesort($sort);
322                                foreach ($sort as $maillist_uid)
323                                        $return[$maillist_uid] = $tmp[$maillist_uid];
324                               
325                                return $return;
326                        }
327                        elseif($type == 'computers')
328                        {
329                                $filter="(&(objectClass=sambaSAMAccount)(|(sambaAcctFlags=[W          ])(sambaAcctFlags=[DW         ])(sambaAcctFlags=[I          ])(sambaAcctFlags=[S          ]))(cn=*".$query."*))";
330                                $justthese = array("cn","uidNumber","description");
331
332                                $tmp = array();
333                                foreach ($contexts as $index=>$context)
334                                {
335                                        $search=ldap_search($ldap_conn, $context, $filter, $justthese);
336                                        $info = ldap_get_entries($ldap_conn, $search);
337                                        for ($i=0; $i < $info['count']; $i++)
338                                        {
339                                                $tmp[$info[$i]['cn'][0]]['cn']                  = $info[$i]['cn'][0];
340                                                $tmp[$info[$i]['cn'][0]]['uidNumber']   = $info[$i]['uidnumber'][0];
341                                                $tmp[$info[$i]['cn'][0]]['description'] = utf8_decode($info[$i]['description'][0]);
342                                                $sort[] = $info[$i]['cn'][0];
343                                        }
344
345                                }
346                                ldap_close($ldap_conn);
347                               
348                                if (!empty($sort))
349                                {
350                                        natcasesort($sort);
351                                        foreach ($sort as $computer_cn)
352                                                $return[$computer_cn] = $tmp[$computer_cn];
353                                }
354                               
355                                return $return;
356                        }
357                }
358
359                function get_list($type, $query, $contexts)
360                {
361                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
362                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
363                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
364                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
365                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
366                        ldap_bind($ldap_conn,$dn,$passwd);
367                       
368                        if ($type == 'accounts')
369                        {
370                                $justthese = array("uidnumber", "uid", "cn", "mail");
371                                $filter="(&(phpgwAccountType=u)(|(uid=*".$query."*)(sn=*".$query."*)(cn=*".$query."*)(givenName=*".$query."*)(mail=$query*)(mailAlternateAddress=$query*)))";
372
373                                $tmp = array();
374                                foreach ($contexts as $index=>$context)
375                                {
376                                        $search=ldap_search($ldap_conn, $context, $filter, $justthese);
377                                        $info = ldap_get_entries($ldap_conn, $search);
378                                       
379                                        for ($i=0; $i < $info['count']; $i++)
380                                        {
381                                                $tmp[$info[$i]['uid'][0]]['account_id']  = $info[$i]['uidnumber'][0];
382                                                $tmp[$info[$i]['uid'][0]]['account_lid'] = $info[$i]['uid'][0];
383                                                $tmp[$info[$i]['uid'][0]]['account_cn']  = $info[$i]['cn'][0];
384                                                $tmp[$info[$i]['uid'][0]]['account_mail']= $info[$i]['mail'][0];
385                                                $sort[] = $info[$i]['uid'][0];
386                                        }
387                                }
388                                ldap_close($ldap_conn);
389                               
390                                if (count($sort))
391                                {
392                                        natcasesort($sort);
393                                        foreach ($sort as $user_uid)
394                                                $return[$user_uid] = $tmp[$user_uid];
395                                }
396                               
397                                return $return;
398                        }
399                        elseif($type == 'groups')
400                        {
401                                $filter="(&(phpgwAccountType=g)(cn=*$query*))";
402                                $justthese = array("gidnumber", "cn", "description");
403                               
404                                $tmp = array();
405                                foreach ($contexts as $index=>$context)
406                                {
407                                        $search=ldap_search($ldap_conn, $context, $filter, $justthese);
408                                        $info = ldap_get_entries($ldap_conn, $search);
409                                        for ($i=0; $i < $info['count']; $i++)
410                                        {
411                                                $tmp[$info[$i]['cn'][0]]['cn']= $info[$i]['cn'][0];
412                                                $tmp[$info[$i]['cn'][0]]['description']= $info[$i]['description'][0];
413                                                $tmp[$info[$i]['cn'][0]]['gidnumber']= $info[$i]['gidnumber'][0];
414                                                $sort[] = $info[$i]['cn'][0];
415                                        }
416                                }
417                                ldap_close($ldap_conn);
418                               
419                                natcasesort($sort);
420                                foreach ($sort as $group_cn)
421                                        $return[$group_cn] = $tmp[$group_cn];
422                               
423                                return $return;
424                        }
425                        elseif($type == 'maillists')
426                        {
427                                $filter="(&(phpgwAccountType=l)(|(cn=*".$query."*)(uid=*".$query."*)(mail=*".$query."*)))";
428                                $justthese = array("uidnumber", "cn", "uid", "mail");
429
430                                $tmp = array();
431                                foreach ($contexts as $index=>$context)
432                                {
433                                        $search=ldap_search($ldap_conn, $context, $filter, $justthese);
434                                        $info = ldap_get_entries($ldap_conn, $search);
435                                       
436                                        for ($i=0; $i < $info['count']; $i++)
437                                        {
438                                                $tmp[$info[$i]['uid'][0]]['uid']                = $info[$i]['uid'][0];
439                                                $tmp[$info[$i]['uid'][0]]['name']               = $info[$i]['cn'][0];
440                                                $tmp[$info[$i]['uid'][0]]['uidnumber']  = $info[$i]['uidnumber'][0];
441                                                $tmp[$info[$i]['uid'][0]]['email']              = $info[$i]['mail'][0];
442                                                $sort[] = $info[$i]['uid'][0];
443                                        }
444                                }
445                                ldap_close($ldap_conn);
446                               
447                                natcasesort($sort);
448                                foreach ($sort as $maillist_uid)
449                                        $return[$maillist_uid] = $tmp[$maillist_uid];
450                               
451                                return $return;
452                        }
453                        elseif($type == 'computers')
454                        {
455                                $filter="(&(objectClass=sambaSAMAccount)(|(sambaAcctFlags=[W          ])(sambaAcctFlags=[DW         ])(sambaAcctFlags=[I          ])(sambaAcctFlags=[S          ]))(cn=*".$query."*))";
456                                $justthese = array("cn","uidNumber","description");
457
458                                $tmp = array();
459                                foreach ($contexts as $index=>$context)
460                                {
461                                        $search=ldap_search($ldap_conn, $context, $filter, $justthese);
462                                        $info = ldap_get_entries($ldap_conn, $search);
463                                        for ($i=0; $i < $info['count']; $i++)
464                                        {
465                                                $tmp[$info[$i]['cn'][0]]['cn']                  = $info[$i]['cn'][0];
466                                                $tmp[$info[$i]['cn'][0]]['uidNumber']   = $info[$i]['uidnumber'][0];
467                                                $tmp[$info[$i]['cn'][0]]['description'] = utf8_decode($info[$i]['description'][0]);
468                                                $sort[] = $info[$i]['cn'][0];
469                                        }
470
471                                }
472
473                                ldap_close($ldap_conn);
474                               
475                                if (!empty($sort))
476                                {
477                                        natcasesort($sort);
478                                        foreach ($sort as $computer_cn)
479                                                $return[$computer_cn] = $tmp[$computer_cn];
480                                }
481                               
482                                return $return;
483                        }
484                }
485
486                function get_organizations($context, $selected='', $referral=false, $show_invisible_ou=true, $master=false)
487                {
488                        $s = CreateObject('phpgwapi.sector_search_ldap');
489                        $sectors_info = $s->get_organizations($context, $selected, $referral, $show_invisible_ou, $master);
490                        return $sectors_info;
491                }               
492                               
493                function get_sectors($selected='', $referral=false, $show_invisible_ou=true)
494                {
495                        $s = CreateObject('phpgwapi.sector_search_ldap');
496                        $sectors_info = $s->get_sectors($selected, $referral, $show_invisible_ou);
497                        return $sectors_info;
498                }               
499 
500                // Get list of levels (0).
501                function get_groups_list($contexts,$filtro)
502                {
503                        $a_sectors = array();
504                       
505                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
506                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
507                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
508                       
509                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
510                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
511                        ldap_bind($ldap_conn,$dn,$passwd);
512                       
513                        $justthese = array("dn");
514                        $filter = "(ou=".$filtro.")";
515                       
516                        $systemName = strtolower($GLOBALS['phpgw_info']['server']['system_name']);
517                        if ($systemName != '')
518                                $filter = "(&$filter(phpgwSystem=$systemName))";
519                       
520                        foreach ($contexts as $context)
521                        {
522                                $search=ldap_search($ldap_conn, $context, $filter, $justthese);
523                        $info = ldap_get_entries($ldap_conn, $search);
524
525                        for ($i=0; $i<$info["count"]; $i++)
526                    {
527                        $a_sectors[] = $info[$i]['dn'];
528                    }
529                        }
530               
531                        ldap_close($ldap_conn);
532
533                        // Retiro o count do array info e inverto o array para ordenação.
534                foreach ($a_sectors as $context)
535            {
536                                $array_dn = ldap_explode_dn ( $context, 1 );
537
538                $array_dn_reverse  = array_reverse ( $array_dn, true );
539
540                                // Retirar o indice count do array.
541                                array_pop ( $array_dn_reverse );
542
543                                $inverted_dn[$context] = implode ( "#", $array_dn_reverse );
544                        }
545
546                        // Ordenação
547                        natcasesort($inverted_dn);
548                       
549                        // Construção do select
550                        $level = 0;
551                        $options = array();
552                        foreach ($inverted_dn as $dn=>$invert_ufn)
553                        {
554                $display = '';
555
556                $array_dn_reverse = explode ( "#", $invert_ufn );
557                $array_dn  = array_reverse ( $array_dn_reverse, true );
558                $level = count( $array_dn ) - (int)(count(explode(",", $GLOBALS['phpgw_info']['server']['ldap_context'])) + 1);
559
560                if ($level == 0)
561                                {
562                    $display.= ' ';
563                        reset ( $array_dn );
564                    $display .= ' ' . (current ( $array_dn ) );
565                                        $dn = trim(strtolower($dn));
566                                        $options[$dn] = $display;
567                }
568                }
569            return $options;
570                }
571               
572                // Get list of levels (0), value DN
573                function get_groups_list_dn($contexts,$filtro)
574                {
575                        $a_sectors = array();
576                       
577                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
578                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
579                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
580                       
581                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
582                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
583                        ldap_bind($ldap_conn,$dn,$passwd);
584                       
585                        $justthese = array("dn");
586                        $filter = "(ou=".$filtro.")";
587                       
588                        $systemName = strtolower($GLOBALS['phpgw_info']['server']['system_name']);
589                        if ($systemName != '')
590                                $filter = "(&$filter(phpgwSystem=$systemName))";
591                       
592                        foreach ($contexts as $context)
593                        {
594                                $search=ldap_search($ldap_conn, $context, $filter, $justthese);
595                        $info = ldap_get_entries($ldap_conn, $search);
596                        for ($i=0; $i<$info["count"]; $i++)
597                    {
598                        $a_sectors[] = $info[$i]['dn'];
599                    }
600                        }
601               
602                        ldap_close($ldap_conn);
603
604                        // Retiro o count do array info e inverto o array para ordenação.
605                foreach ($a_sectors as $context)
606            {
607                                $array_dn = ldap_explode_dn ( $context, 1 );
608
609                $array_dn_reverse  = array_reverse ( $array_dn, true );
610
611                                // Retirar o indice count do array.
612                                array_pop ( $array_dn_reverse );
613
614                                $inverted_dn[$context] = implode ( "#", $array_dn_reverse );
615                        }
616
617                        // Ordenação
618                        natcasesort($inverted_dn);
619                       
620                        // Construção do select
621                        $level = 0;
622                        $options = array();
623                        foreach ($inverted_dn as $dn=>$invert_ufn)
624                        {
625                $display = '';
626
627                $array_dn_reverse = explode ( "#", $invert_ufn );
628                $array_dn  = array_reverse ( $array_dn_reverse, true );
629                $level = count( $array_dn ) - (int)(count(explode(",", $GLOBALS['phpgw_info']['server']['ldap_context'])) + 1);
630
631                if ($level == 0)
632                                {
633                    $display.= ' ';
634                        reset ( $array_dn );
635                    $display .= ' ' . trim(strtolower($dn));
636                                        $dn = trim(strtolower($dn));
637                                        $options[] = $display;
638                }
639                }
640            return $options;
641                }
642
643                // Get list of all levels.
644                function get_sectors_list($contexts,$contextdn)
645                {
646                        $a_sectors = array();
647                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
648                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
649                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
650                       
651                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
652                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
653                        ldap_bind($ldap_conn,$dn,$passwd);
654                       
655                        $justthese = array("ou", "dn");
656                        $filter = "(&(objectClass=organizationalUnit)(|(objectClass=organizationalUnit)))";
657                       
658                        foreach ($contexts as $context)
659                        {
660                                $search=ldap_search($ldap_conn, $contextdn, $filter, $justthese);
661                        $info = ldap_get_entries($ldap_conn, $search);
662                        for ($i=0; $i<$info["count"]; $i++)
663                    {
664                        $a_sectors[] = trim(strtoupper($info[$i]['dn']));
665                    }
666                        }
667
668                        ldap_close($ldap_conn);
669
670                        // Retiro o count do array info e inverto o array para ordenação.
671                foreach ($a_sectors as $context)
672            {
673
674                                $array_dn = ldap_explode_dn ( $context, 1 );
675
676                $array_dn_reverse  = array_reverse ( $array_dn, true );
677
678                                // Retirar o indice count do array.
679                                array_pop ( $array_dn_reverse );
680                                $inverted_dn[$context] = implode ( "#", $array_dn_reverse );
681
682                        }
683
684                        // Ordenação
685                        natcasesort($inverted_dn);
686
687                        // seleciona os setores do grupo escolhido
688                        $level = 0;
689                        $options = array();
690
691                        foreach ($inverted_dn as $dn=>$invert_ufn)
692                        {
693                                $display = '';
694                                $array_dn_completo = '';
695                                $ii = 0;                       
696                               
697                                $array_dn_reverse = explode ( "#", $invert_ufn );
698                                $array_dn  = array_reverse ( $array_dn_reverse, true );
699
700                                $valorgrupo = (int)(count(explode(",", $GLOBALS['phpgw_info']['server']['ldap_context'])));
701                                $valorsubgrupo = (count($array_dn)-1);
702                                $level = count( $array_dn ) - (int)(count(explode(",", $GLOBALS['phpgw_info']['server']['ldap_context'])) + 1);
703
704                                reset ( $array_dn );
705                               
706                                if ($level > 0)
707                                {
708                                        for ($i=0; $i<$level; $i++)
709                                        {
710                                                $ii = $ii +1;
711                                                $display .= ' --';
712
713                                                if ($ii==1)
714                                                {
715                                                        $array_dn_completo .= $array_dn[$valorgrupo + $ii];                                             
716                                                }
717                                                else
718                                                {
719                                                        $array_dn_completo .= " | ".$array_dn[$valorgrupo + $ii];
720                                                }
721
722                                        }
723                                }
724                                else
725                                {
726//                                      $array_dn_completo .= (current($array_dn));                                                                                     
727                                        $array_dn_completo .= ' ';                                                                                     
728                                }
729
730                                $display .= ' '. (current($array_dn)).'#'.trim(strtolower($dn)).'#'.$array_dn_completo;
731                                $options[] = $display;
732
733                }
734            return $options;
735                }
736
737                function get_list_usersgroups_sector($query, $contexts,$sizelimit)
738                {
739                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
740                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
741                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
742                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
743                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
744                        ldap_bind($ldap_conn,$dn,$passwd);
745
746                        $filter = "(&(phpgwAccountType=g)(cn=*))";
747                        $justthese = array("gidnumber", "cn", "description");
748
749                        $tmp = array();
750                        foreach ($contexts as $index=>$context)
751                        {                               
752                                $search = ldap_search($ldap_conn, $query, $filter, $justthese, 0, $sizelimit);
753                                $info = ldap_get_entries($ldap_conn, $search);                         
754                               
755                                for ($i=0; $i < $info['count']; $i++)
756                                {
757                                        $tmp[$info[$i]['cn'][0]]['id']                          = $info[$i]['gidnumber'][0];
758                                        $tmp[$info[$i]['cn'][0]]['name']                        = $info[$i]['cn'][0];
759                                        $tmp[$info[$i]['cn'][0]]['description']         = $info[$i]['description'][0];
760                                        $sort[] = $info[$i]['cn'][0];
761                                }
762                        }
763                        ldap_close($ldap_conn);
764                       
765                        if (count($sort))
766                        {                       
767                                natcasesort($sort);
768                                foreach ($sort as $usersgroups_gid)
769                                        $return[$usersgroups_gid] = $tmp[$usersgroups_gid];
770                        }
771                       
772                        return $return;
773                }               
774               
775                function get_list_maillists_sector($query, $contexts,$sizelimit)
776                {
777                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
778                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
779                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
780                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
781                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
782                        ldap_bind($ldap_conn,$dn,$passwd);
783
784                        $filter="(&(phpgwAccountType=l)(|(uid=*)))";
785                        $justthese = array("uidnumber", "cn", "uid", "mail");
786
787                        $tmp = array();
788                        foreach ($contexts as $index=>$context)
789                        {
790                                $search = ldap_search($ldap_conn, $query, $filter, $justthese, 0, $sizelimit);
791                                $info = ldap_get_entries($ldap_conn, $search);                         
792                               
793                                for ($i=0; $i < $info['count']; $i++)
794                                {
795                                        $tmp[$info[$i]['uid'][0]]['uid']                = $info[$i]['uid'][0];
796                                        $tmp[$info[$i]['uid'][0]]['name']               = $info[$i]['cn'][0];
797                                        $tmp[$info[$i]['uid'][0]]['uidnumber']  = $info[$i]['uidnumber'][0];
798                                        $tmp[$info[$i]['uid'][0]]['email']              = $info[$i]['mail'][0];
799                                        $sort[] = $info[$i]['uid'][0];
800                                }
801                        }
802                        ldap_close($ldap_conn);
803                       
804                        if (count($sort))
805                        {                       
806                                natcasesort($sort);
807                                foreach ($sort as $maillist_uid)
808                                        $return[$maillist_uid] = $tmp[$maillist_uid];
809                        }
810                       
811                        return $return;
812                }               
813               
814                function get_list_user_sector($query, $contexts,$sizelimit)
815                {
816                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
817                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
818                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
819                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
820                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
821                        ldap_bind($ldap_conn,$dn,$passwd);
822
823                        $filter="(&(phpgwAccountType=u)(|(uid=*)))";
824                        $justthese = array("uidnumber", "uid", "cn", "mail","accountstatus","dn","createtimestamp","telephoneNumber");
825                       
826                        $tmp = array();
827               
828                        foreach ($contexts as $index=>$context)
829                        {
830
831                                $search = ldap_search($ldap_conn, $query, $filter, $justthese, 0, $sizelimit);
832                                $info = ldap_get_entries($ldap_conn, $search);
833
834                                for ($i=0; $i < $info['count']; $i++)
835                                {
836                                        $tmp[$info[$i]['uid'][0]]['account_id']  = $info[$i]['uidnumber'][0];
837                                        $tmp[$info[$i]['uid'][0]]['account_lid'] = $info[$i]['uid'][0];
838                                        $tmp[$info[$i]['uid'][0]]['account_cn']  = $info[$i]['cn'][0];
839                                        $tmp[$info[$i]['uid'][0]]['account_mail']= $info[$i]['mail'][0];
840                                        $tmp[$info[$i]['uid'][0]]['account_phone']= $info[$i]['telephonenumber'][0];
841                                        $tmp[$info[$i]['uid'][0]]['account_accountstatus']= $info[$i]['accountstatus'][0];
842                                        $tmp[$info[$i]['uid'][0]]['createtimestamp']= $info[$i]['createtimestamp'][0];                                 
843                                        $sort[] = $info[$i]['uid'][0];
844                                }
845                        }
846                       
847                        ldap_close($ldap_conn);
848                               
849                        if (count($sort))
850                        {
851                                natcasesort($sort);
852                                foreach ($sort as $user_uid)
853                                        $return[$user_uid] = $tmp[$user_uid];
854                        }
855                               
856                        return $return;
857                }
858
859                function get_list_cota_sector($query, $contexts,$sizelimit)
860                {
861                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
862                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
863                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
864                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
865                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
866                        ldap_bind($ldap_conn,$dn,$passwd);
867
868                        $filter="(|(phpgwAccountType=u)(|(phpgwAccountType=s)))";
869                        $justthese = array("uidnumber", "uid", "cn", "mail","accountstatus","dn","createtimestamp","telephoneNumber");
870
871                        $tmp = array();
872
873                        foreach ($contexts as $index=>$context)
874                        {
875
876                                $search = ldap_search($ldap_conn, $query, $filter, $justthese, 0, $sizelimit);
877                                $info = ldap_get_entries($ldap_conn, $search);
878
879                                for ($i=0; $i < $info['count']; $i++)
880                                {
881                                        $tmp[$info[$i]['uid'][0]]['account_id']  = $info[$i]['uidnumber'][0];
882                                        $tmp[$info[$i]['uid'][0]]['account_lid'] = $info[$i]['uid'][0];
883                                        $tmp[$info[$i]['uid'][0]]['account_cn']  = $info[$i]['cn'][0];
884                                        $tmp[$info[$i]['uid'][0]]['account_mail']= $info[$i]['mail'][0];
885                                        $tmp[$info[$i]['uid'][0]]['account_phone']= $info[$i]['telephonenumber'][0];
886                                        $tmp[$info[$i]['uid'][0]]['account_accountstatus']= $info[$i]['accountstatus'][0];
887                                        $tmp[$info[$i]['uid'][0]]['createtimestamp']= $info[$i]['createtimestamp'][0];
888                                        $sort[] = $info[$i]['uid'][0];
889                                }
890                        }
891
892                        ldap_close($ldap_conn);
893
894                        if (count($sort))
895                        {
896                                natcasesort($sort);
897                                foreach ($sort as $user_uid)
898                                        $return[$user_uid] = $tmp[$user_uid];
899                        }
900
901                        return $return;
902
903                }
904
905
906                function get_list_shareAccounts_sector($query, $contexts,$sizelimit)
907                {
908                        $dn             = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
909                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
910                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
911                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
912                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
913                        ldap_bind($ldap_conn,$dn,$passwd);
914
915                        $filter="(phpgwAccountType=s)";
916                        $justthese = array("uid", "cn", "mail","accountstatus");
917
918                        $tmp = array();
919
920                        foreach ($contexts as $index=>$context)
921                        {
922
923                                $search = ldap_search($ldap_conn, $query, $filter, $justthese, 0, $sizelimit);
924                                $info = ldap_get_entries($ldap_conn, $search);
925
926                                for ($i=0; $i < $info['count']; $i++)
927                                {
928                                        $tmp[$info[$i]['uid'][0]]['account_lid'] = $info[$i]['uid'][0];
929                                        $tmp[$info[$i]['uid'][0]]['account_cn']  = $info[$i]['cn'][0];
930                                        $tmp[$info[$i]['uid'][0]]['account_mail']= $info[$i]['mail'][0];
931                                        $tmp[$info[$i]['uid'][0]]['account_accountstatus']= $info[$i]['accountstatus'][0];
932                                        $sort[] = $info[$i]['uid'][0];
933                                }
934                        }
935
936                        ldap_close($ldap_conn);
937
938                        if (count($sort))
939                        {
940                                natcasesort($sort);
941                                foreach ($sort as $user_uid)
942                                        $return[$user_uid] = $tmp[$user_uid];
943                        }
944
945                        return $return;
946                }
947
948                function get_list_institutionalAccounts_sector($query, $contexts,$sizelimit)
949                {
950                        $dn             = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
951                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
952                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
953                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
954                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
955                        ldap_bind($ldap_conn,$dn,$passwd);
956
957                        $filter="(phpgwAccountType=i)";
958                        $justthese = array("uid", "cn", "mail","accountstatus","mailForwardingAddress");
959
960                        $tmp = array();
961
962                        foreach ($contexts as $index=>$context)
963                        {
964
965                                $search = ldap_search($ldap_conn, $query, $filter, $justthese, 0, $sizelimit);
966                                $info = ldap_get_entries($ldap_conn, $search);
967
968                                for ($i=0; $i < $info['count']; $i++)
969                                {
970                                        $tmp[$info[$i]['uid'][0]]['account_cn']  = $info[$i]['cn'][0];
971                                        $tmp[$info[$i]['uid'][0]]['account_mail']= $info[$i]['mail'][0];
972                                        $tmp[$info[$i]['uid'][0]]['account_accountstatus']= $info[$i]['accountstatus'][0];
973                                        $tmp[$info[$i]['uid'][0]]['account_mailforwardingaddress']= $info[$i]['mailforwardingaddress'];
974                                        $sort[] = $info[$i]['uid'][0];
975                                }
976                        }
977
978                        ldap_close($ldap_conn);
979
980                        if (count($sort))
981                        {
982                                natcasesort($sort);
983                                foreach ($sort as $user_uid)
984                                        $return[$user_uid] = $tmp[$user_uid];
985                        }
986
987                        return $return;
988                }
989
990                function get_count_user_sector($query, $contexts,$sizelimit)
991                {
992                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
993                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
994                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
995                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
996                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
997                        ldap_bind($ldap_conn,$dn,$passwd);                     
998                        // counting users by sector.
999                        foreach ($contexts as $index=>$context) {
1000                                if($context == $GLOBALS['phpgw_info']['server'] ["ldap_context"]) {
1001                                        $contexts[$index] = null;
1002                                        $justthese = array("dn");
1003                                        $filter="(objectClass=OrganizationalUnit)";
1004                                        $search = ldap_list($ldap_conn, $context, $filter, $justthese);
1005                                        $entries = ldap_get_entries($ldap_conn, $search);
1006                                        $contexts = array();
1007                                        }
1008                                }
1009
1010                        $filter="(phpgwAccountType=u)";
1011                        $justthese = array("dn");
1012                        $search = ldap_search($ldap_conn, $context, $filter, $justthese, 0, $sizelimit);
1013                        $entries = ldap_get_entries($ldap_conn, $search);
1014                        $total_count = $entries["count"];
1015
1016                        ldap_close($ldap_conn);
1017
1018                        return $total_count;
1019                        }       
1020                       
1021                function get_count_cota_sector($query, $contexts,$sizelimit)
1022                {
1023                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1024                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1025                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1026                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1027                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1028                        ldap_bind($ldap_conn,$dn,$passwd);
1029                        // counting users by sector.
1030                        foreach ($contexts as $index=>$context) {                               
1031                                if($context == $GLOBALS['phpgw_info']['server'] ["ldap_context"]) {
1032                                        $contexts[$index] = null;
1033                                        $justthese = array("dn");
1034                                        $filter="(objectClass=OrganizationalUnit)";
1035                                        $search = ldap_list($ldap_conn, $context, $filter, $justthese);
1036                                        $entries = ldap_get_entries($ldap_conn, $search);
1037                                        $contexts = array();
1038                                }
1039                        }
1040
1041                        $filter="(|(phpgwAccountType=u)(|(phpgwAccountType=s)))";
1042                        $justthese = array("dn");
1043                                $search = ldap_search($ldap_conn, $context, $filter, $justthese, 0, $sizelimit);
1044                        $entries = ldap_get_entries($ldap_conn, $search);
1045                        $total_count = $entries["count"];
1046
1047                        ldap_close($ldap_conn);
1048
1049                        return $total_count;
1050                        }
1051
1052                function get_count_shareAccount_sector($query, $contexts,$sizelimit)
1053                {
1054                        $dn             = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1055                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1056                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1057                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1058                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1059                        ldap_bind($ldap_conn,$dn,$passwd);
1060                        // counting users by sector.
1061                        foreach ($contexts as $index=>$context) {
1062                                if($context == $GLOBALS['phpgw_info']['server'] ["ldap_context"]) {
1063                                        $contexts[$index] = null;
1064                                        $justthese = array("dn");
1065                                        $filter="(objectClass=OrganizationalUnit)";
1066                                        $search = ldap_list($ldap_conn, $context, $filter, $justthese);
1067                                        $entries = ldap_get_entries($ldap_conn, $search);
1068                                        $contexts = array();
1069                                }
1070                        }
1071
1072                        $filter="(phpgwAccountType=s)";
1073                        $justthese = array("dn");
1074                        $search = ldap_search($ldap_conn, $context, $filter, $justthese, 0, $sizelimit);
1075                        $entries = ldap_get_entries($ldap_conn, $search);
1076                        $total_count = $entries["count"];
1077
1078                        ldap_close($ldap_conn);
1079                       
1080                        return $total_count;
1081                }
1082
1083                function get_count_institutionalAccount_sector($query, $contexts,$sizelimit)
1084                {
1085                        $dn             = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1086                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1087                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1088                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1089                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1090                        ldap_bind($ldap_conn,$dn,$passwd);
1091                        // counting users by sector.
1092                        foreach ($contexts as $index=>$context) {
1093                                if($context == $GLOBALS['phpgw_info']['server'] ["ldap_context"]) {
1094                                        $contexts[$index] = null;
1095                                        $justthese = array("dn");
1096                                        $filter="(objectClass=OrganizationalUnit)";
1097                                        $search = ldap_list($ldap_conn, $context, $filter, $justthese);
1098                                        $entries = ldap_get_entries($ldap_conn, $search);
1099                                        $contexts = array();
1100                                }
1101                        }
1102                       
1103                        $filter="(phpgwAccountType=i)";
1104                        $justthese = array("dn");
1105                        $search = ldap_search($ldap_conn, $context, $filter, $justthese, 0, $sizelimit);
1106                        $entries = ldap_get_entries($ldap_conn, $search);
1107                        $total_count = $entries["count"];
1108
1109                        ldap_close($ldap_conn);
1110
1111                        return $total_count;
1112                }
1113               
1114                function get_num_users_sector($query, $contexts) {
1115                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1116                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1117                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1118                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1119                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1120                        ldap_bind($ldap_conn,$dn,$passwd);
1121                       
1122                        $filter="(phpgwAccountType=u)";
1123                        $justthese = array("uidnumber");
1124                        $count = 0;
1125                        foreach ($contexts as $index=>$context) {
1126                                $search = ldap_search($ldap_conn, $query, $filter, $justthese);
1127                                $count+=ldap_count_entries($ldap_conn, $search);
1128                        }
1129                        return $count;
1130                }
1131               
1132                function get_list_user_sector_logon($query, $contexts,$sizelimit,$numacesso)
1133                {
1134                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1135                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1136                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1137                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1138                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1139                        ldap_bind($ldap_conn,$dn,$passwd);
1140
1141                        $filter="(phpgwAccountType=u)";
1142                        $justthese = array("uidnumber", "uid", "cn", "mail","accountstatus","dn","createtimestamp");
1143                       
1144                        $tmp = array();
1145               
1146                        foreach ($contexts as $index=>$context)
1147                        {
1148
1149                                $field = 'cn';
1150                                $search = ldap_search($ldap_conn, $query, $filter, $justthese, 0, $sizelimit);
1151                                $info = ldap_get_entries($ldap_conn, $search);
1152
1153                                for ($i=0; $i < $info['count']; $i++)
1154                                {
1155                                        $access_log =  $this->show_access_log($info[$i]['uidnumber'][0]);
1156
1157                                        $access_log_array = explode("#",$access_log);
1158
1159                                        if ($access_log_array[1] >= $numacesso or $numacesso == $access_log_array[0]) {
1160
1161                                                $tmp[$info[$i]['uid'][0]]['account_id']  = $info[$i]['uidnumber'][0];
1162                                                $tmp[$info[$i]['uid'][0]]['account_lid'] = $info[$i]['uid'][0];
1163                                                $tmp[$info[$i]['uid'][0]]['account_cn']  = $info[$i]['cn'][0];
1164                                                $tmp[$info[$i]['uid'][0]]['account_mail']= $info[$i]['mail'][0];
1165                                                $tmp[$info[$i]['uid'][0]]['account_accountstatus']= $info[$i]['accountstatus'][0];
1166                                                $tmp[$info[$i]['uid'][0]]['createtimestamp']= $info[$i]['createtimestamp'][0];                                 
1167                                                $sort[] = $info[$i]['uid'][0];
1168                                        }
1169                                }
1170                        }
1171
1172                        ldap_close($ldap_conn);
1173                               
1174                        if (count($sort))
1175                        {
1176                                natcasesort($sort);
1177                                foreach ($sort as $user_uid)
1178                                        $return[$user_uid] = $tmp[$user_uid];
1179                        }
1180                               
1181                        return $return;
1182                }
1183               
1184                function exist_account_lid($account_lid)
1185                {
1186                        $conection = $GLOBALS['phpgw']->common->ldapConnect();
1187                        $sri = ldap_search($conection, $GLOBALS['phpgw_info']['server']['ldap_context'], "uid=" . $account_lid);
1188                        $result = ldap_get_entries($conection, $sri);
1189                        return $result['count'];
1190                }
1191               
1192                function exist_email($mail)
1193                {
1194                        $conection = $GLOBALS['phpgw']->common->ldapConnect();
1195                        $sri = ldap_search($conection, $GLOBALS['phpgw_info']['server']['ldap_context'], "mail=" . $mail);
1196                        $result = ldap_get_entries($conection, $sri);
1197                        ldap_close($conection);
1198                       
1199                        if ($result['count'] == 0)
1200                                return false;
1201                        else
1202                                return true;
1203                }
1204               
1205                function array_invert($array)
1206                {
1207                        $result[] = end($array);
1208                        while ($item = prev($array))
1209                                $result[] = $item;
1210                        return $result;
1211                }
1212
1213                function make_list_app($account_lid, $user_applications='', $disabled='')
1214                {
1215                        // create list of ALL available apps
1216                        $availableAppsGLOBALS = $GLOBALS['phpgw_info']['apps'];
1217                       
1218                        // create list of available apps for the user
1219                        $query = "SELECT * FROM phpgw_expressoadmin_apps WHERE manager_lid = '".$account_lid."'";
1220                        $GLOBALS['phpgw']->db->query($query);
1221                        while($GLOBALS['phpgw']->db->next_record())
1222                        {
1223                                $availableApps[] = $GLOBALS['phpgw']->db->row();
1224                        }
1225                       
1226                        // Retira alguns modulos
1227                        if (count($availableApps))
1228                        {
1229                                foreach ($availableApps as $key => $value)
1230                                {
1231                                        if ($value['app'] != 'phpgwapi')
1232                                                $tmp[] = $availableApps[$key];
1233                                }
1234                        }
1235                        $availableApps = $tmp;
1236                       
1237                        // Cria um array com as aplicacoes disponiveis para o manager, com as atributos das aplicacoes.
1238                        $availableAppsUser = array();
1239                        if (count($availableApps))
1240                        {
1241                                foreach($availableApps as $app => $title)
1242                                {
1243                                        if ($availableAppsGLOBALS[$title['app']])
1244                                                $availableAppsUser[$title['app']] = $availableAppsGLOBALS[$title['app']];
1245                                }
1246                        }
1247                       
1248                        // Loop para criar dinamicamente uma tabela com 3 colunas, cada coluna com um aplicativo e um check box.
1249                        $applications_list = '';
1250                        $app_col1 = '';
1251                        $app_col2 = '';
1252                        $app_col3 = '';
1253                        $total_apps = count($availableAppsUser);
1254                        $i = 0;
1255                        foreach($availableAppsUser as $app => $data)
1256                        {
1257                                // 1 coluna
1258                                if (($i +1) % 3 == 1)
1259                                {
1260                                        $checked = $user_applications[$app] ? 'CHECKED' : '';
1261                                        $app_col1 = sprintf("<td>%s</td><td width='10'><input type='checkbox' name='apps[%s]' value='1' %s %s></td>\n",
1262                                        $data['title'],$app,$checked, $disabled);
1263                                        if ($i == ($total_apps-1))
1264                                                $applications_list .= sprintf('<tr bgcolor="%s">%s</tr>','#DDDDDD', $app_col1);
1265                                }
1266                               
1267                                // 2 coluna
1268                                if (($i +1) % 3 == 2)
1269                                {
1270                                        $checked = $user_applications[$app] ? 'CHECKED' : '';
1271                                        $app_col2 = sprintf("<td>%s</td><td width='10'><input type='checkbox' name='apps[%s]' value='1' %s %s></td>\n",
1272                                        $data['title'],$app,$checked, $disabled);
1273                                       
1274                                        if ($i == ($total_apps-1))
1275                                                $applications_list .= sprintf('<tr bgcolor="%s">%s%s</tr>','#DDDDDD', $app_col1,$app_col2);
1276                                }
1277                                // 3 coluna
1278                                if (($i +1) % 3 == 0)
1279                                {
1280                                        $checked = $user_applications[$app] ? 'CHECKED' : '';
1281                                        $app_col3 = sprintf("<td>%s</td><td width='10'><input type='checkbox' name='apps[%s]' value='1' %s %s></td>\n",
1282                                        $data['title'],$app,$checked, $disabled);
1283                                       
1284                                        // Cria nova linha
1285                                        $applications_list .= sprintf('<tr bgcolor="%s">%s%s%s</tr>','#DDDDDD', $app_col1, $app_col2, $app_col3);                                       
1286                                }
1287                                $i++;
1288                        }
1289                        return $applications_list;
1290                }
1291               
1292                function exist_attribute_in_ldap($dn, $attribute, $value)
1293                {
1294                        $connection = $GLOBALS['phpgw']->common->ldapConnect();
1295                        $search = ldap_search($connection, $dn, $attribute. "=" . $value);
1296                        $result = ldap_get_entries($connection, $search);
1297                        ldap_close($connection);
1298                        //_debug_array($result);
1299                        if ($result['count'] == 0)
1300                                return false;
1301                        else
1302                                return true;   
1303                }
1304               
1305                function lang($key)
1306                {
1307                        if ($_SESSION['phpgw_info']['expressoAdmin']['lang'][$key])
1308                                return $_SESSION['phpgw_info']['expressoAdmin']['lang'][$key];
1309                        else
1310                                return $key . '*';
1311                }
1312               
1313                function make_lang($ram_lang)
1314                {
1315                        $a_lang = split("_", $ram_lang);
1316                        $a_lang_reverse  = array_reverse ( $a_lang, true );
1317                        array_pop ( $a_lang_reverse );
1318                        $a_lang  = array_reverse ( $a_lang_reverse, true );
1319                        $a_new_lang = implode ( " ", $a_lang );
1320                        return lang($a_new_lang);
1321                }
1322
1323                function make_dinamic_lang($template_obj, $block)
1324                {
1325                        $tpl_vars = $template_obj->get_undefined($block);
1326                        $array_langs = array();
1327                       
1328                        foreach ($tpl_vars as $atribute)
1329                        {
1330                                $lang = strstr($atribute, 'lang_');
1331                                if($lang !== false)
1332                                {
1333                                        //$template_obj->set_var($atribute, $this->make_lang($atribute));
1334                                        $array_langs[$atribute] = $this->make_lang($atribute);
1335                                }
1336                        }
1337                        return $array_langs;
1338                }
1339
1340                function paginate_usersgroups($query, $contexts, $field, $order = 'asc', $page = null, $perPage = null )
1341                {
1342                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1343                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1344                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1345                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1346                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1347                        ldap_bind($ldap_conn,$dn,$passwd);
1348                       
1349                        $filter="(&(phpgwAccountType=g)(cn=*))";
1350                        $justthese = array("gidnumber", "cn", "description");                                                                           
1351                                                       
1352                        foreach ($contexts as $index=>$context)
1353                        {                               
1354                                $search=ldap_search($ldap_conn, $query, $filter, $justthese);
1355       
1356                                $rConnection = $ldap_conn;
1357                                $rSearch = $search;
1358                                $sOrder = $order;
1359                                $iPage = $page;
1360                                $iPerPage = $perPage;
1361                                $sField = $field;
1362                                               
1363                                $iTotalEntries = ldap_count_entries( $rConnection, $rSearch );
1364                               
1365                                if ( $iPage === null || $iPerPage === null )
1366                                {
1367                                        # fetch all in one page
1368                                        $iStart = 0;
1369                                        $iEnd = $iTotalEntries - 1;
1370                                }
1371                                else
1372                                {
1373                                        # calculate range of page
1374                                        $iFimPage = ( ceil( $iTotalEntries / $iPerPage ) - 1 ) * $iPage;
1375                                       
1376                                        $iStart = ( ceil( ($iPage -1) * $iPerPage ));
1377                                        $iEnd = $iPage * $iPerPage;
1378
1379                                        if ( $sOrder === "desc" )
1380                                        {
1381                                                # revert range
1382                                                $iStart = $iTotalEntries - 1 - $iEnd;
1383                                                $iEnd = $iStart + $iPerPage - 1;
1384                                        }
1385                                }
1386                               
1387                                /********* Importante Mostra o resultado da paginação **********
1388                                var_dump( $iStart . " " . $iEnd );
1389                                ****************** Só descomentar ******************************/
1390                               
1391                                 # fetch entries
1392                            ldap_sort( $rConnection, $rSearch, $sField );
1393
1394                                $aList = array();
1395                                for (
1396                                        $iCurrent = 0, $rEntry = ldap_first_entry( $rConnection, $rSearch );
1397                                        $iCurrent <= $iEnd && is_resource( $rEntry );
1398                                        $iCurrent++, $rEntry = ldap_next_entry( $rConnection, $rEntry )
1399                                        )
1400                                {
1401                                        if ( $iCurrent >= $iStart )
1402                                        {
1403                                                array_push( $aList, ldap_get_attributes( $rConnection, $rEntry ));
1404                                        }
1405                                }
1406                        }
1407
1408                        ldap_close($ldap_conn);
1409
1410                        # if order is desc revert page's entries
1411                        return $sOrder === "desc" ? array_reverse( $aList ) : $aList;
1412                }               
1413               
1414                function paginate_maillists($query, $contexts, $field, $order = 'asc', $page = null, $perPage = null )
1415                {
1416                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1417                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1418                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1419                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1420                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1421                        ldap_bind($ldap_conn,$dn,$passwd);
1422                       
1423                        $filter="(&(phpgwAccountType=l)(|(uid=*)))";
1424                        $justthese = array("uidnumber", "cn", "uid", "mail");                                                                                   
1425                                                       
1426                        foreach ($contexts as $index=>$context)
1427                        {
1428                                $search=ldap_search($ldap_conn, $query, $filter, $justthese);
1429       
1430                                $rConnection = $ldap_conn;
1431                                $rSearch = $search;
1432                                $sOrder = $order;
1433                                $iPage = $page;
1434                                $iPerPage = $perPage;
1435                                $sField = $field;
1436                                               
1437                                $iTotalEntries = ldap_count_entries( $rConnection, $rSearch );
1438                               
1439                                if ( $iPage === null || $iPerPage === null )
1440                                {
1441                                        # fetch all in one page
1442                                        $iStart = 0;
1443                                        $iEnd = $iTotalEntries - 1;
1444                                }
1445                                else
1446                                {
1447                                        # calculate range of page
1448                                        $iFimPage = ( ceil( $iTotalEntries / $iPerPage ) - 1 ) * $iPage;
1449                                       
1450                                        $iStart = ( ceil( ($iPage -1) * $iPerPage ));
1451                                        $iEnd = $iPage * $iPerPage;
1452
1453                                        if ( $sOrder === "desc" )
1454                                        {
1455                                                # revert range
1456                                                $iStart = $iTotalEntries - 1 - $iEnd;
1457                                                $iEnd = $iStart + $iPerPage - 1;
1458                                        }
1459                                }
1460                               
1461                                /********* Importante Mostra o resultado da paginação **********
1462                                var_dump( $iStart . " " . $iEnd );
1463                                ****************** Só descomentar ******************************/
1464                               
1465                                 # fetch entries
1466                            ldap_sort( $rConnection, $rSearch, $sField );
1467
1468                                $aList = array();
1469                                for (
1470                                        $iCurrent = 0, $rEntry = ldap_first_entry( $rConnection, $rSearch );
1471                                        $iCurrent <= $iEnd && is_resource( $rEntry );
1472                                        $iCurrent++, $rEntry = ldap_next_entry( $rConnection, $rEntry )
1473                                        )
1474                                {
1475                                        if ( $iCurrent >= $iStart )
1476                                        {
1477                                                array_push( $aList, ldap_get_attributes( $rConnection, $rEntry ));
1478                                        }
1479                                }
1480                        }
1481
1482                        ldap_close($ldap_conn);
1483
1484                        # if order is desc revert page's entries
1485                        return $sOrder === "desc" ? array_reverse( $aList ) : $aList;
1486                }               
1487               
1488                function Paginate_user($type, $query, $contexts, $Field, $Order = 'asc', $Page = null, $PerPage = null )
1489
1490                {
1491                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1492                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1493                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1494                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1495                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1496                        ldap_bind($ldap_conn,$dn,$passwd);
1497                       
1498                        $filter="(&(phpgwAccountType=u))";
1499                        $justthese = array("uidnumber", "uid", "cn", "mail","accountstatus","dn","createtimestamp","telephoneNumber");                                                                                 
1500                                                       
1501                        foreach ($contexts as $index=>$context)
1502                        {
1503                                $search=ldap_search($ldap_conn, $query, $filter, $justthese);
1504       
1505                                $rConnection = $ldap_conn;
1506                                $rSearch = $search;
1507                                $sOrder = $Order;
1508                                $iPage = $Page;
1509                                $iPerPage = $PerPage;
1510                                $sField = $Field;
1511                                               
1512                                $iTotalEntries = ldap_count_entries( $rConnection, $rSearch );
1513
1514                                if ( $iPage === null || $iPerPage === null )
1515                                {
1516                                        # fetch all in one page
1517                                        $iStart = 0;
1518                                        $iEnd = $iTotalEntries - 1;
1519                                }
1520                                else
1521                                {
1522                                        # calculate range of page
1523                                        $iFimPage = ( ceil( $iTotalEntries / $iPerPage ) - 1 ) * $iPage;
1524                                       
1525                                        $iStart = ( ceil( ($iPage -1) * $iPerPage ));
1526                                        $iEnd = $iPage * $iPerPage;
1527
1528                                        if ( $sOrder === "desc" )
1529                                        {
1530                                                # revert range
1531                                                $iStart = $iTotalEntries - 1 - $iEnd;
1532                                                $iEnd = $iStart + $iPerPage - 1;
1533                                        }
1534                                }
1535                               
1536                                /********* Importante Mostra o resultado da paginação **********
1537                                var_dump( $iStart . " " . $iEnd );
1538                                ****************** Só descomentar ******************************/
1539                               
1540                                 # fetch entries
1541                            ldap_sort( $rConnection, $rSearch, $sField );
1542
1543                                $aList = array();
1544                                for (
1545                                        $iCurrent = 0, $rEntry = ldap_first_entry( $rConnection, $rSearch );
1546                                        $iCurrent <= $iEnd && is_resource( $rEntry );
1547                                        $iCurrent++, $rEntry = ldap_next_entry( $rConnection, $rEntry )
1548                                        )
1549                                {
1550                                        if ( $iCurrent >= $iStart )
1551                                        {
1552                                                array_push( $aList, ldap_get_attributes( $rConnection, $rEntry ));
1553                                        }
1554                                }
1555                        }
1556
1557                        ldap_close($ldap_conn);
1558
1559                        # if order is desc revert page's entries
1560                        return $sOrder === "desc" ? array_reverse( $aList ) : $aList;
1561                }
1562
1563                function Paginate_cota($type, $query, $contexts, $Field, $Order = 'asc', $Page = null, $PerPage = null )
1564                {
1565                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1566                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1567                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1568                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1569                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1570                        ldap_bind($ldap_conn,$dn,$passwd);
1571
1572                        $filter="(|(phpgwAccountType=u)(|(phpgwAccountType=s)))";
1573                        $justthese = array("uidnumber", "uid", "cn", "mail","accountstatus","dn","createtimestamp","telephoneNumber");                                 
1574
1575                        foreach ($contexts as $index=>$context)
1576                        {
1577                                $search=ldap_search($ldap_conn, $query, $filter, $justthese);
1578
1579                                $rConnection = $ldap_conn;
1580                                $rSearch = $search;
1581                                $sOrder = $Order;
1582                                $iPage = $Page;
1583                                $iPerPage = $PerPage;
1584                                $sField = $Field;
1585
1586                                $iTotalEntries = ldap_count_entries( $rConnection, $rSearch );
1587
1588                                if ( $iPage === null || $iPerPage === null )
1589                                {
1590                                        # fetch all in one page
1591                                        $iStart = 0;
1592                                        $iEnd = $iTotalEntries - 1;
1593                                }
1594                                else
1595                                {
1596                                        # calculate range of page
1597                                        $iFimPage = ( ceil( $iTotalEntries / $iPerPage ) - 1 ) * $iPage;
1598
1599                                        $iStart = ( ceil( ($iPage -1) * $iPerPage ));
1600                                        $iEnd = $iPage * $iPerPage;
1601
1602
1603                                        if ( $sOrder === "desc" )
1604                                        {
1605                                                # revert range
1606                                                $iStart = $iTotalEntries - 1 - $iEnd;
1607                                                $iEnd = $iStart + $iPerPage - 1;
1608                                        }
1609                                }
1610
1611                                /********* Importante Mostra o resultado da paginação **********
1612                                var_dump( $iStart . " " . $iEnd );
1613                                ****************** Só descomentar ******************************/
1614
1615                                 # fetch entries
1616                                ldap_sort( $rConnection, $rSearch, $sField );
1617
1618                                $aList = array();
1619                                for (
1620                                        $iCurrent = 0, $rEntry = ldap_first_entry( $rConnection, $rSearch );
1621                                        $iCurrent <= $iEnd && is_resource( $rEntry );
1622                                        $iCurrent++, $rEntry = ldap_next_entry( $rConnection, $rEntry )
1623                                        )
1624                                {
1625                                        if ( $iCurrent >= $iStart )
1626                                        {
1627                                                array_push( $aList, ldap_get_attributes( $rConnection, $rEntry ));
1628                                        }
1629                                }
1630                        }
1631
1632                        ldap_close($ldap_conn);
1633
1634                        # if order is desc revert page's entries
1635                        return $sOrder === "desc" ? array_reverse( $aList ) : $aList;
1636                }
1637
1638                function Paginate_shareAccount($type, $query, $contexts, $Field, $Order = 'asc', $Page = null, $PerPage = null )
1639
1640                {
1641                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1642                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1643                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1644                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1645                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1646                        ldap_bind($ldap_conn,$dn,$passwd);
1647
1648                        $filter="(phpgwAccountType=s)";
1649                        $justthese = array("uid", "cn", "mail","accountstatus");                                 
1650
1651                        foreach ($contexts as $index=>$context)
1652                        {
1653                                $search=ldap_search($ldap_conn, $query, $filter, $justthese);
1654
1655                                $rConnection = $ldap_conn;
1656                                $rSearch = $search;
1657                                $sOrder = $Order;
1658                                $iPage = $Page;
1659                                $iPerPage = $PerPage;
1660                                $sField = $Field;
1661
1662                                $iTotalEntries = ldap_count_entries( $rConnection, $rSearch );
1663
1664                                if ( $iPage === null || $iPerPage === null )
1665                                {
1666                                        # fetch all in one page
1667                                        $iStart = 0;
1668                                        $iEnd = $iTotalEntries - 1;
1669                                }
1670                                else
1671                                {
1672                                        # calculate range of page
1673                                        $iFimPage = ( ceil( $iTotalEntries / $iPerPage ) - 1 ) * $iPage;
1674
1675                                        $iStart = ( ceil( ($iPage -1) * $iPerPage ));
1676                                        $iEnd = $iPage * $iPerPage;
1677
1678                                        if ( $sOrder === "desc" )
1679                                        {
1680                                                # revert range
1681                                                $iStart = $iTotalEntries - 1 - $iEnd;
1682                                                $iEnd = $iStart + $iPerPage - 1;
1683                                        }
1684                                }
1685
1686                                 # fetch entries
1687                                ldap_sort( $rConnection, $rSearch, $sField );
1688
1689                                $aList = array();
1690                                for (
1691                                        $iCurrent = 0, $rEntry = ldap_first_entry( $rConnection, $rSearch );
1692                                        $iCurrent <= $iEnd && is_resource( $rEntry );
1693                                        $iCurrent++, $rEntry = ldap_next_entry( $rConnection, $rEntry )
1694                                        )
1695                                {
1696                                        if ( $iCurrent >= $iStart )
1697                                        {
1698                                                array_push( $aList, ldap_get_attributes( $rConnection, $rEntry ));
1699                                        }
1700                                }
1701                        }
1702
1703                        ldap_close($ldap_conn);
1704
1705                        # if order is desc revert page's entries
1706                        return $sOrder === "desc" ? array_reverse( $aList ) : $aList;
1707                }
1708
1709                function Paginate_institutionalAccount($type, $query, $contexts, $Field, $Order = 'asc', $Page = null, $PerPage = null )
1710                {
1711                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1712                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1713                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1714                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1715                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1716                        ldap_bind($ldap_conn,$dn,$passwd);
1717
1718                        $filter="(phpgwAccountType=i)";
1719                        $justthese = array("uid", "cn", "mail","accountstatus","mailforwardingaddress");
1720
1721                        foreach ($contexts as $index=>$context)
1722                        {
1723                                $search=ldap_search($ldap_conn, $query, $filter, $justthese);
1724
1725                                $rConnection = $ldap_conn;
1726                                $rSearch = $search;
1727                                $sOrder = $Order;
1728                                $iPage = $Page;
1729                                $iPerPage = $PerPage;
1730                                $sField = $Field;
1731
1732                                $iTotalEntries = ldap_count_entries( $rConnection, $rSearch );
1733
1734                                if ( $iPage === null || $iPerPage === null )
1735                                {
1736                                        # fetch all in one page
1737                                        $iStart = 0;
1738                                        $iEnd = $iTotalEntries - 1;
1739                                }
1740                                else
1741                                {
1742                                        # calculate range of page
1743                                        $iFimPage = ( ceil( $iTotalEntries / $iPerPage ) - 1 ) * $iPage;
1744
1745                                        $iStart = ( ceil( ($iPage -1) * $iPerPage ));
1746                                        $iEnd = $iPage * $iPerPage;
1747
1748                                        if ( $sOrder === "desc" )
1749                                        {
1750                                                # revert range
1751                                                $iStart = $iTotalEntries - 1 - $iEnd;
1752                                                $iEnd = $iStart + $iPerPage - 1;
1753                                        }
1754                                }
1755
1756                                 # fetch entries
1757                                ldap_sort( $rConnection, $rSearch, $sField );
1758
1759                                $aList = array();
1760                                for (
1761                                        $iCurrent = 0, $rEntry = ldap_first_entry( $rConnection, $rSearch );
1762                                        $iCurrent <= $iEnd && is_resource( $rEntry );
1763                                        $iCurrent++, $rEntry = ldap_next_entry( $rConnection, $rEntry )
1764                                        )
1765                                {
1766                                        if ( $iCurrent >= $iStart )
1767                                        {
1768                                                array_push( $aList, ldap_get_attributes( $rConnection, $rEntry ));
1769                                        }
1770                                }
1771                        }
1772
1773                        ldap_close($ldap_conn);
1774
1775                        # if order is desc revert page's entries
1776                        return $sOrder === "desc" ? array_reverse( $aList ) : $aList;
1777                }
1778
1779
1780                function get_list_ou_user_logon($query,$contexts,$sizelimit)
1781                {
1782                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1783                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1784                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1785                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1786                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1787                        ldap_bind($ldap_conn,$dn,$passwd);
1788
1789                        $filter="(&(phpgwAccountType=u)(|(uid=*".$query."*)))";
1790                        $justthese = array("ou");                                                                                       
1791                        $tmp = array();
1792               
1793                        foreach ($contexts as $index=>$context)
1794                        {
1795
1796                                $field = 'cn';
1797                                $search=ldap_search($ldap_conn, $context, $filter, $justthese, 0, $sizelimit);
1798                                $info = ldap_get_entries($ldap_conn, $search);
1799
1800                                for ($i=0; $i < $info['count']; $i++)
1801                                {
1802                                        $a_sectors[] = $info[$i]['dn'];
1803                                }
1804                        }
1805                       
1806                        ldap_close($ldap_conn);
1807                               
1808                        // Retiro o count do array info e inverto o array para ordenação.
1809                foreach ($a_sectors as $context)
1810            {
1811                                $array_dn = ldap_explode_dn ( $context, 1 );
1812
1813                $array_dn_reverse  = array_reverse ( $array_dn, true );
1814
1815                                // Retirar o indice count do array.
1816                                array_pop ( $array_dn_reverse );
1817
1818                                $inverted_dn[$context] = implode ( "#", $array_dn_reverse );
1819                        }
1820
1821                        // Ordenação
1822                        natcasesort($inverted_dn);
1823
1824                        // Construção do select
1825                        $level = 0;
1826                        $options = array();
1827                        foreach ($inverted_dn as $dn=>$invert_ufn)
1828                        {
1829                $display = '';
1830
1831                $array_dn_reverse = explode ( "#", $invert_ufn );
1832                $array_dn  = array_reverse ( $array_dn_reverse, true );
1833
1834                $level = count( $array_dn ) - (int)(count(explode(",", $GLOBALS['phpgw_info']['server']['ldap_context'])) + 1);
1835
1836                                $display.= ' ';
1837                                reset ( $array_dn );
1838                                $display .= ' ' . ($array_dn[$level]);
1839                                $dn = trim(strtolower($dn));
1840                                $options[$dn] = $display;
1841                }
1842
1843            return $options;
1844                }
1845
1846                function get_list_context_logon($query_user,$contexts,$sizelimit)
1847                {
1848                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1849                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1850                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1851                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1852                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1853                        ldap_bind($ldap_conn,$dn,$passwd);
1854
1855                        // Le BD para pegar os administradors.
1856                        $query = "SELECT manager_lid,context FROM phpgw_expressoadmin WHERE manager_lid='".$query_user."' ORDER by manager_lid";
1857                        $GLOBALS['phpgw']->db->query($query);
1858                        while($GLOBALS['phpgw']->db->next_record())
1859                        {
1860                                $managers[] = $GLOBALS['phpgw']->db->row();
1861                        }
1862
1863                        // Loop para listar as dn
1864                        if (count($managers))
1865                        {
1866                                foreach($managers as $array_managers)
1867                                {
1868                                        $display = '';
1869                                        $managers_context = "";
1870                                        $a_managers_context = explode("%", $array_managers['context']);
1871
1872                                        // Ordenação
1873                                        natcasesort($a_managers_context);
1874
1875                                        $options = array();
1876                                        $level = 0;
1877                                                                                               
1878                                        foreach ($a_managers_context as $dn=>$invert_ufn)
1879                                        {
1880                                                $dn_explode = explode (",",$invert_ufn);
1881
1882                                                // Construção do select
1883                                                $array_dn  = array_reverse ( $dn_explode, true );
1884
1885                                                $level = count( $dn_explode ) - (int)(count(explode(",", $GLOBALS['phpgw_info']['server']['ldap_context'])) + 1);
1886                                                $display = ' ';
1887                                                reset ( $array_dn );
1888//                                              $display = str_replace("ou=", "",($array_dn[$level]));
1889                                                $display = str_replace("ou=", "",($array_dn[0]));
1890                                                $display = str_replace("dc=", "",($display));
1891                                                $dn = trim(strtolower($dn));
1892                                                $options[$dn] = trim(strtoupper($display));
1893                                        }
1894                                }
1895                        }
1896
1897                return $options;
1898                }
1899
1900                function get_list_groups_dn($query_user,$contexts,$sizelimit)
1901                {
1902                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
1903                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
1904                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
1905                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
1906                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
1907                        ldap_bind($ldap_conn,$dn,$passwd);
1908
1909                        // Le BD para pegar os administradors.
1910                        $query = "SELECT manager_lid,context FROM phpgw_expressoadmin WHERE manager_lid='".$query_user."' ORDER by manager_lid";
1911                        $GLOBALS['phpgw']->db->query($query);
1912                        while($GLOBALS['phpgw']->db->next_record())
1913                        {
1914                                $managers[] = $GLOBALS['phpgw']->db->row();
1915                        }
1916
1917                        // Loop para listar as dn
1918                        if (count($managers))
1919                        {
1920                                foreach($managers as $array_managers)
1921                                {
1922                                        $display = '';
1923                                        $managers_context = "";
1924                                        $options = explode("%", $array_managers['context']);
1925
1926                                        // Ordenação
1927                                        natcasesort($options);
1928                                }
1929                        }
1930
1931                return $options;
1932                }
1933
1934                function sort_by($field, &$arr, $sorting=SORT_ASC, $case_insensitive=true){
1935                        if(is_array($arr) && (count($arr)>0) && ( ( is_array($arr[0]) && isset($arr[0][$field]) ) || ( is_object($arr[0]) && isset($arr[0]->$field) ) ) ){
1936                                if($case_insensitive==true) $strcmp_fn = "strnatcasecmp";
1937                                else $strcmp_fn = "strnatcmp";
1938               
1939                                if($sorting==SORT_ASC){
1940                                        $fn = create_function('$a,$b', '
1941                                                if(is_object($a) && is_object($b)){
1942                                                        return '.$strcmp_fn.'($a->'.$field.', $b->'.$field.');
1943                                                }else if(is_array($a) && is_array($b)){
1944                                                        return '.$strcmp_fn.'($a["'.$field.'"], $b["'.$field.'"]);
1945                                                }else return 0;
1946                                        ');
1947                                }else{
1948                                        $fn = create_function('$a,$b', '
1949                                                if(is_object($a) && is_object($b)){
1950                                                        return '.$strcmp_fn.'($b->'.$field.', $a->'.$field.');
1951                                                }else if(is_array($a) && is_array($b)){
1952                                                        return '.$strcmp_fn.'($b["'.$field.'"], $a["'.$field.'"]);
1953                                                }else return 0;
1954                                        ');
1955                                }
1956                                usort($arr, $fn);
1957                                return true;
1958                        }else{
1959                                return false;
1960                        }
1961                }       
1962
1963                function show_access_log($account_id)
1964                {       
1965                        $manager_account_lid = $GLOBALS['phpgw']->accounts->data['account_lid'];
1966                        $tmp = $this->read_acl($manager_account_lid);
1967                        $manager_context = $tmp[0]['context'];
1968                       
1969                        // Verifica se tem acesso a este modulo
1970                        if ((!$this->check_acl($manager_account_lid,'edit_users')) && (!$this->check_acl($manager_account_lid,'change_users_password')))
1971                        {
1972                                $GLOBALS['phpgw']->redirect($GLOBALS['phpgw']->link('/reports/inc/access_denied.php'));
1973                        }
1974
1975                        // Le BD para pegar os [li].
1976                        $query = "select li from phpgw_access_log WHERE account_id=".$account_id." order by li desc LIMIT 1 OFFSET 0";
1977                        $GLOBALS['phpgw']->db->query($query);
1978                        while($GLOBALS['phpgw']->db->next_record())
1979                        {
1980                                $managers[] = $GLOBALS['phpgw']->db->row();
1981                        }
1982
1983                        if (count($managers))
1984                        {
1985                                // contar intervalo
1986                                 $data_atual = date("Y/m/d", time());
1987
1988                                 $data_antes = date("Y/m/d",$managers['0']['li']);
1989                               
1990                                 $datainicio=strtotime("$data_antes"); // Data de Hoje
1991                                 $datafim =strtotime("$data_atual"); // Data no próximo ano
1992                               
1993                                 $rdata =($datafim-$datainicio)/86400; //transformação do timestamp em dias
1994
1995                                $access_li = date("d/m/Y",$managers['0']['li'])."#".$rdata;
1996
1997                                return $access_li;
1998
1999                        }else{
2000
2001                                $access_li = "Nunca logou#0";
2002
2003                                return $access_li;
2004                        }
2005                }
2006
2007                function Paginate_user_logon($type, $query, $contexts, $Field, $Order = 'asc', $Page = null, $PerPage = null, $numacesso)
2008                {
2009                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
2010                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
2011                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
2012                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
2013                        ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
2014                        ldap_bind($ldap_conn,$dn,$passwd);
2015                       
2016                        $filter="(&(phpgwAccountType=u)(|(uid=*)))";
2017                        $justthese = array("uidnumber", "uid", "cn", "mail","accountstatus","dn","createtimestamp");                                                                                   
2018                                                       
2019                        foreach ($contexts as $index=>$context)
2020                        {
2021                                $search=ldap_search($ldap_conn, $query, $filter, $justthese);
2022       
2023                                $rConnection = $ldap_conn;
2024                                $rSearch = $search;
2025                                $sOrder = $Order;
2026                                $iPage = $Page;
2027                                $iPerPage = $PerPage;
2028                                $sField = $Field;
2029                                               
2030                                $iTotalEntries = ldap_count_entries( $rConnection, $rSearch );
2031
2032                                if ( $iPage === null || $iPerPage === null )
2033                                {
2034                                        # fetch all in one page
2035                                        $iStart = 0;
2036                                        $iEnd = $iTotalEntries - 1;
2037                                }
2038                                else
2039                                {
2040                                        # calculate range of page
2041                                        $iFimPage = ( ceil( $iTotalEntries / $iPerPage ) - 1 ) * $iPage;
2042                                       
2043                                        $iStart = ( ceil( ($iPage -1) * $iPerPage ));
2044                                        $iEnd = $iPage * $iPerPage;
2045
2046                                        if ( $sOrder === "desc" )
2047                                        {
2048                                                # revert range
2049                                                $iStart = $iTotalEntries - 1 - $iEnd;
2050                                                $iEnd = $iStart + $iPerPage - 1;
2051                                        }
2052                                }
2053                               
2054                                /********* Importante Mostra o resultado da paginação **********
2055                                var_dump( $iStart . " " . $iEnd );
2056                                ****************** Só descomentar ******************************/
2057                               
2058                                 # fetch entries
2059                            ldap_sort( $rConnection, $rSearch, $sField );
2060
2061                                $aList = array();
2062                                for (
2063                                        $iCurrent = 0, $rEntry = ldap_first_entry( $rConnection, $rSearch );
2064                                        $iCurrent <= $iEnd && is_resource( $rEntry );
2065                                        $iCurrent++, $rEntry = ldap_next_entry( $rConnection, $rEntry )
2066                                        )
2067                                {
2068                                        if ( $iCurrent >= $iStart )
2069                                        {
2070                                                array_push( $aList, ldap_get_attributes( $rConnection, $rEntry ));
2071                                        }
2072                                }
2073                        }
2074
2075                        ldap_close($ldap_conn);
2076
2077                        # if order is desc revert page's entries
2078                        return $sOrder === "desc" ? array_reverse( $aList ) : $aList;
2079                }
2080        }
2081// ****************** fim classe Functions ***********************
2082?>
Note: See TracBrowser for help on using the repository browser.