Ignore:
Timestamp:
10/20/09 10:46:34 (15 years ago)
Author:
eduardoalex
Message:

Ticket #419 - Parte principal da funcionalidade. Falta add atributos no ldap

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoAdmin1_2/inc/class.functions.inc.php

    r597 r1516  
    522522                        $sectors_info = $s->get_organizations($context, $selected, $referral, $show_invisible_ou, $master); 
    523523                        return $sectors_info; 
    524                 }                
    525                                  
     524                } 
     525                 
     526                /*  
     527                        Funciona de maneira similar ao get_sectors_list, porém retorna a propria OU do contexto 
     528                        e monta o array de retorno de forma diferente, necessário para algumas mudanças implementadas 
     529                        no método admin.uisectors.list_sectors. 
     530                */ 
     531                function get_organizations2($contexts, $selected='', $referral=false, $show_invisible_ou=true) {                 
     532 
     533                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn']; 
     534                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw']; 
     535                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']); 
     536                                                 
     537                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3); 
     538                         
     539                        if ($referral) 
     540                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 1); 
     541                        else 
     542                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0); 
     543                         
     544                        ldap_bind($ldap_conn,$dn,$passwd); 
     545                         
     546                        $justthese = array("dn","diskQuota","usersQuota","actualDiskQuota"); 
     547                        $filter = "(ou=*)"; 
     548                        foreach ($contexts as $context) { 
     549                                $search=ldap_search($ldap_conn, $context, $filter, $justthese); 
     550                                 
     551                                ldap_sort($ldap_conn, $search, "ou"); 
     552                                $info = ldap_get_entries($ldap_conn, $search); 
     553                                ldap_close($ldap_conn); 
     554         
     555                                // Retiro o count do array info e inverto o array para ordenaçãoo. 
     556                                for ($i=0; $i<$info["count"]; $i++) 
     557                                { 
     558                                        $dn = $info[$i]["dn"]; 
     559                                         
     560                                        // Necessário, pq em uma busca com ldapsearch ou=*, traz tb o próprio ou.  
     561                                        //if (strtolower($dn) == $context) 
     562                                                //continue; 
     563         
     564                                        $array_dn = ldap_explode_dn ( $dn, 1 ); 
     565         
     566                                        $array_dn_reverse  = array_reverse ( $array_dn, true ); 
     567         
     568                                        // Retirar o indice count do array. 
     569                                        array_pop ( $array_dn_reverse ); 
     570         
     571                                        $inverted_dn[implode ( "#", $array_dn_reverse )] = $info[$i]; 
     572                                } 
     573                        } 
     574                        // Ordenação por chave 
     575                        ksort($inverted_dn);                     
     576                         
     577                        // Construção do select 
     578                        $level = 0; 
     579                        $options = array(); 
     580                        foreach ($inverted_dn as $dn=>$info_ou) 
     581                        { 
     582                $display = ''; 
     583                                $info_retorno = array(); 
     584                $array_dn_reverse = explode ( "#", $dn ); 
     585                $array_dn  = array_reverse ( $array_dn_reverse, true ); 
     586 
     587                $level = count( $array_dn ) - (int)(count(explode(",", $GLOBALS['phpgw_info']['server']['ldap_context'])) + 1); 
     588 
     589                if ($level == 0) 
     590                        $display .= '+'; 
     591                else  
     592                { 
     593                                        for ($i=0; $i<$level; $i++) 
     594                                                $display .= '---'; 
     595                } 
     596 
     597                reset ( $array_dn ); 
     598                $display .= ' ' . (current ( $array_dn ) ); 
     599                                 
     600                                $info_retorno['display'] = $display; 
     601                                $info_retorno['dn'] = $info_ou['dn']; 
     602                                $info_retorno['diskquota'] = $info_ou['diskquota'][0]; 
     603                                $info_retorno['usersquota'] = $info_ou['usersquota'][0]; 
     604//                              $info_retorno['actualdiskquota'] = round($this->get_actual_disk_usage($info_ou['dn']),2);//$info_ou['actualdiskquota'][0]; 
     605//                              $info_retorno['actualnumusers'] = $this->get_num_users($info_ou['dn']); 
     606                                 
     607                                array_push($options,$info_retorno); 
     608                                 
     609                } 
     610                        return $options; 
     611                }        
     612                 
     613                function get_info($context, $referral = false) { 
     614                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn']; 
     615                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw']; 
     616                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']); 
     617                         
     618                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3); 
     619                         
     620                        if ($referral) 
     621                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 1); 
     622                        else 
     623                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0); 
     624                         
     625                        ldap_bind($ldap_conn,$dn,$passwd); 
     626                         
     627                        $filter="(objectClass=organizationalUnit)"; 
     628                        $search=ldap_search($ldap_conn, $context, $filter); 
     629                        $result = ldap_get_entries($ldap_conn, $search); 
     630                        return $result; 
     631                                 
     632                } 
     633 
     634                function get_num_users($context,$selected='', $referral=false, $show_invisible_ou=true) { 
     635                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn']; 
     636                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw']; 
     637                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']); 
     638                         
     639                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3); 
     640                         
     641                        if ($referral) 
     642                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 1); 
     643                        else 
     644                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0); 
     645                         
     646                        ldap_bind($ldap_conn,$dn,$passwd); 
     647                         
     648                        $justthese = array("dn"); 
     649                        $filter = "(objectClass=inetOrgPerson)"; 
     650                        $search=ldap_search($ldap_conn, $context, $filter, $justthese); 
     651                 
     652                $retorno = ldap_count_entries($ldap_conn, $search); 
     653                        ldap_close($ldap_conn); 
     654                         
     655                        return $retorno; 
     656                } 
     657                 
     658                //Checa se existe quota para mais um usuï¿œrio no setor... se existir retorna true, senï¿œo false.               
     659                function existe_quota_usuario($setor) { 
     660                        $num_users = $this->get_num_users($setor['dn']); 
     661                        //return $num_users . " --- " . $setor['usersquota'][0] 
     662                        if(($num_users>=$setor['usersquota'][0]) && ($setor['usersquota'][0]!=-1)) { 
     663                                return false; 
     664                        } 
     665                        return true; 
     666                } 
     667                 
     668                //Checa se existe quota em disco para mais um usuï¿œrio no setor... se existir retorna true, senï¿œo false. 
     669                function existe_quota_disco($setor,$quota_novo_usuario) { 
     670                        settype($quota_novo_usuario,"float");            
     671                        $quota_novo_usuario /= 1024; //A quota vï¿œm da interface em megabytes, deve se tornar gigabyte. 
     672 
     673                        $nova_quota = $this->get_actual_disk_usage($setor['dn']) + $quota_novo_usuario; 
     674                        if(( $nova_quota >= $setor['diskquota'][0] ) && ($setor['diskquota'][0] != -1)) { 
     675                                return false; 
     676                        } 
     677                        return true; 
     678                } 
     679                 
     680                // Soma as quotas de todos os usuï¿œrios daquele contexto. 
     681                function get_actual_disk_usage($context) { 
     682                        $quota_usada=0; 
     683                        $contexts = array($context); 
     684                        $usuarios = $this->get_list('accounts', '', $contexts); 
     685 
     686                        $imap_functions = new imap_functions(); 
     687                        foreach($usuarios as $usuario) { 
     688                                $temp = $imap_functions->get_user_info($usuario['account_lid']); 
     689                                if($temp['mailquota'] != -1) //Usuï¿œrio sem cota nï¿œo conta... 
     690                                        $quota_usada += ($temp['mailquota'] / 1024); 
     691                        } 
     692                        return $quota_usada; 
     693                } 
     694 
    526695                function get_sectors($selected='', $referral=false, $show_invisible_ou=true) 
    527696                { 
Note: See TracChangeset for help on using the changeset viewer.