Changeset 6057 in subversion


Ignore:
Timestamp:
Apr 10, 2012 4:39:36 AM (14 months ago)
Author:
alec
Message:
  • Improved member attribute detection with fallback in create_group()
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/roundcubemail/program/include/rcube_ldap.php

    r6055 r6057  
    16741674            $groups[$group_id]['dn'] = $ldap_data[$i]['dn']; 
    16751675            $groups[$group_id]['name'] = $group_name; 
    1676             $groups[$group_id]['member_attr'] = $this->prop['member_attr']; 
    1677  
    1678             // check objectClass attributes of group and act accordingly 
    1679             for ($j=0; $j < $ldap_data[$i]['objectclass']['count']; $j++) { 
    1680                 switch (strtolower($ldap_data[$i]['objectclass'][$j])) { 
    1681                     case 'group': 
    1682                     case 'groupofnames': 
    1683                     case 'kolabgroupofnames': 
    1684                         $groups[$group_id]['member_attr'] = 'member'; 
    1685                         break; 
    1686  
    1687                     case 'groupofuniquenames': 
    1688                     case 'kolabgroupofuniquenames': 
    1689                         $groups[$group_id]['member_attr'] = 'uniqueMember'; 
    1690                         break; 
    1691                 } 
    1692             } 
     1676            $groups[$group_id]['member_attr'] = $this->get_group_member_attr($ldap_data[$i]['objectclass']); 
    16931677 
    16941678            // list email attributes of a group 
     
    17511735        $new_dn = "cn=$group_name,$base_dn"; 
    17521736        $new_gid = self::dn_encode($group_name); 
    1753         $member_attr = $this->prop['groups']['member_attr']; 
    1754         $name_attr = $this->prop['groups']['name_attr']; 
     1737        $member_attr = $this->get_group_member_attr(); 
     1738        $name_attr = $this->prop['groups']['name_attr'] ? $this->prop['groups']['name_attr'] : 'cn'; 
    17551739 
    17561740        $new_entry = array( 
     
    19041888        $base_dn     = $this->groups_base_dn; 
    19051889        $contact_dn  = self::dn_decode($contact_id); 
    1906         $name_attr   = $this->prop['groups']['name_attr']; 
    1907         $member_attr = $this->prop['member_attr']; 
     1890        $name_attr   = $this->prop['groups']['name_attr'] ? $this->prop['groups']['name_attr'] : 'cn'; 
     1891        $member_attr = $this->get_group_member_attr(); 
    19081892        $add_filter  = ''; 
    19091893        if ($member_attr != 'member' && $member_attr != 'uniqueMember') 
     
    19301914        } 
    19311915        return $groups; 
     1916    } 
     1917 
     1918    /** 
     1919     * Detects group member attribute name 
     1920     */ 
     1921    private function get_group_member_attr($object_classes = array()) 
     1922    { 
     1923        if (empty($object_classes)) { 
     1924            $object_classes = $this->prop['groups']['object_classes']; 
     1925        } 
     1926        if (!empty($object_classes)) { 
     1927            foreach ((array)$object_classes as $oc) { 
     1928                switch (strtolower($oc)) { 
     1929                    case 'group': 
     1930                    case 'groupofnames': 
     1931                    case 'kolabgroupofnames': 
     1932                        $member_attr = 'member'; 
     1933                        break; 
     1934 
     1935                    case 'groupofuniquenames': 
     1936                    case 'kolabgroupofuniquenames': 
     1937                        $member_attr = 'uniqueMember'; 
     1938                        break; 
     1939                } 
     1940            } 
     1941        } 
     1942 
     1943        if (!empty($member_attr)) { 
     1944            return $member_attr; 
     1945        } 
     1946 
     1947        if (!empty($this->prop['groups']['member_attr'])) { 
     1948            return $this->prop['groups']['member_attr']; 
     1949        } 
     1950 
     1951        return 'member'; 
    19321952    } 
    19331953 
Note: See TracChangeset for help on using the changeset viewer.