Ignore:
Timestamp:
06/20/12 12:31:51 (12 years ago)
Author:
eduardow
Message:

Ticket #2863 - Backport da funcionalidade de Controle de Cotas de usuário e disco(Cotas OU).

File:
1 edited

Legend:

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

    r5934 r6553  
    464464                        $sectors_info = $s->get_organizations($context, $selected, $referral, $show_invisible_ou, $master); 
    465465                        return $sectors_info; 
    466                 } 
    467                  
     466                }  
     467                                  
     468                /*   
     469                        Funciona de maneira similar ao get_sectors_list, porém retorna a propria OU do contexto  
     470                        e monta o array de retorno de forma diferente, necessário para algumas mudanças implementadas  
     471                        no método admin.uisectors.list_sectors.  
     472                */  
     473                function get_organizations2($contexts, $selected='', $referral=false, $show_invisible_ou=true) {                  
     474  
     475                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];  
     476                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];  
     477                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);  
     478                                                  
     479                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);  
     480                          
     481                        if ($referral)  
     482                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 1);  
     483                        else  
     484                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);  
     485                          
     486                        ldap_bind($ldap_conn,$dn,$passwd);  
     487                          
     488                        $justthese = array("dn","diskQuota","usersQuota","actualDiskQuota");  
     489                        $filter = "(ou=*)";  
     490                        foreach ($contexts as $context) {  
     491                                $search=ldap_search($ldap_conn, $context, $filter, $justthese);  
     492                                  
     493                                ldap_sort($ldap_conn, $search, "ou");  
     494                                $info = ldap_get_entries($ldap_conn, $search);  
     495                                ldap_close($ldap_conn);  
     496          
     497                                // Retiro o count do array info e inverto o array para ordenaçãoo.  
     498                                for ($i=0; $i<$info["count"]; $i++)  
     499                                {  
     500                                        $dn = $info[$i]["dn"];  
     501                                          
     502                                        // Necessário, pq em uma busca com ldapsearch ou=*, traz tb o próprio ou.   
     503                                        //if (strtolower($dn) == $context)  
     504                                                //continue;  
     505          
     506                                        $array_dn = ldap_explode_dn ( $dn, 1 );  
     507          
     508                                        $array_dn_reverse  = array_reverse ( $array_dn, true );  
     509          
     510                                        // Retirar o indice count do array.  
     511                                        array_pop ( $array_dn_reverse );  
     512          
     513                                        $inverted_dn[implode ( "#", $array_dn_reverse )] = $info[$i];  
     514                                }  
     515                        }  
     516                        // Ordenação por chave  
     517                        ksort($inverted_dn);                      
     518                          
     519                        // Construção do select  
     520                        $level = 0;  
     521                        $options = array();  
     522                        foreach ($inverted_dn as $dn=>$info_ou)  
     523                        {  
     524                $display = '';  
     525                                $info_retorno = array();  
     526                $array_dn_reverse = explode ( "#", $dn );  
     527                $array_dn  = array_reverse ( $array_dn_reverse, true );  
     528  
     529                $level = count( $array_dn ) - (int)(count(explode(",", $GLOBALS['phpgw_info']['server']['ldap_context'])) + 1);  
     530  
     531                if ($level == 0)  
     532                        $display .= '+';  
     533                else   
     534                {  
     535                                        for ($i=0; $i<$level; $i++)  
     536                                                $display .= '---';  
     537                }  
     538  
     539                reset ( $array_dn );  
     540                $display .= ' ' . (current ( $array_dn ) );  
     541                                  
     542                                $info_retorno['display'] = $display;  
     543                                $info_retorno['dn'] = $info_ou['dn'];  
     544                                $info_retorno['diskquota'] = $info_ou['diskquota'][0];  
     545                                $info_retorno['usersquota'] = $info_ou['usersquota'][0];  
     546//                              $info_retorno['actualdiskquota'] = round($this->get_actual_disk_usage($info_ou['dn']),2);//$info_ou['actualdiskquota'][0];  
     547//                              $info_retorno['actualnumusers'] = $this->get_num_users($info_ou['dn']);  
     548                                  
     549                                array_push($options,$info_retorno);  
     550                                  
     551                }  
     552                        return $options;  
     553                }         
     554                  
     555                function get_info($context, $referral = false) {  
     556                        $dn                     = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];  
     557                        $passwd         = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];  
     558                        $ldap_conn      = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);  
     559                          
     560                        ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);  
     561                          
     562                        if ($referral)  
     563                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 1);  
     564                        else  
     565                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);  
     566                          
     567                        ldap_bind($ldap_conn,$dn,$passwd);  
     568                          
     569                        $filter="(objectClass=organizationalUnit)";  
     570                        $search=ldap_search($ldap_conn, $context, $filter);  
     571                        $result = ldap_get_entries($ldap_conn, $search);  
     572                        return $result;  
     573                                  
     574                }  
     575  
     576                function get_num_users($context,$selected='', $referral=false, $show_invisible_ou=true) {  
     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                          
     583                        if ($referral)  
     584                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 1);  
     585                        else  
     586                                ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);  
     587                          
     588                        ldap_bind($ldap_conn,$dn,$passwd);  
     589                          
     590                        $justthese = array("dn");  
     591                        $filter = "(objectClass=inetOrgPerson)";  
     592                        $search=ldap_search($ldap_conn, $context, $filter, $justthese);  
     593                  
     594                $retorno = ldap_count_entries($ldap_conn, $search);  
     595                        ldap_close($ldap_conn);  
     596                          
     597                        return $retorno;  
     598                }  
     599                  
     600                //Checa se existe quota para mais um usuï¿œrio no setor... se existir retorna true, senï¿œo false.                
     601                function existe_quota_usuario($setor) {  
     602                        $num_users = $this->get_num_users($setor['dn']);  
     603                        //return $num_users . " --- " . $setor['usersquota'][0]  
     604                        if(($num_users>=$setor['usersquota'][0]) && ($setor['usersquota'][0]!=-1)) {  
     605                                return false;  
     606                        }  
     607                        return true;  
     608                }  
     609                  
     610                //Checa se existe quota em disco para mais um usuï¿œrio no setor... se existir retorna true, senï¿œo false.  
     611                function existe_quota_disco($setor,$quota_novo_usuario) {  
     612                        settype($quota_novo_usuario,"float");             
     613                        $quota_novo_usuario /= 1024; //A quota vï¿œm da interface em megabytes, deve se tornar gigabyte.  
     614  
     615                        $nova_quota = $this->get_actual_disk_usage($setor['dn']) + $quota_novo_usuario;  
     616                        if(( $nova_quota >= $setor['diskquota'][0] ) && ($setor['diskquota'][0] != -1)) {  
     617                                return false;  
     618                        }  
     619                        return true;  
     620                }  
     621                  
     622                // Soma as quotas de todos os usuï¿œrios daquele contexto.  
     623                function get_actual_disk_usage($context) {  
     624                        $quota_usada=0;  
     625                        $contexts = array($context);  
     626                        $usuarios = $this->get_list('accounts', '', $contexts);  
     627  
     628                        $imap_functions = new imap_functions();  
     629                        foreach($usuarios as $usuario) {  
     630                                $temp = $imap_functions->get_user_info($usuario['account_lid']);  
     631                                if($temp['mailquota'] != -1) //Usuï¿œrio sem cota nï¿œo conta...  
     632                                        $quota_usada += ($temp['mailquota'] / 1024);  
     633                        }  
     634                        return $quota_usada;  
     635                }  
     636 
     637 
    468638                function get_sectors($selected='', $referral=false, $show_invisible_ou=true) 
    469639                { 
Note: See TracChangeset for help on using the changeset viewer.