Skip to content
Snippets Groups Projects
members.php 2.84 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    define('_BASE_DN', 'ou=People,dc=sucs,dc=org');
    define('_LDAP_SERVER', 'ldap://silver');
    
    class Members {
    
    private $conn; //LDAP connection
    
    function __construct() 
    {
    	// Connect and bind to ldap server
    	$this->conn = ldap_connect(_LDAP_SERVER);
    
    Graham Cole's avatar
    Graham Cole committed
    	ldap_set_option($this->conn, LDAP_OPT_PROTOCOL_VERSION, 3);
    
    	$bind = ldap_bind($this->conn);
    }
    
    function getMemberList() 
    {
            // Search for certain members and retrieve their username and
            $search = ldap_search($this->conn, _BASE_DN, 'uid=*');
            // Sort By Username
            ldap_sort($this->conn, $search, 'uid');
    
    	return $this->extractMember($search);
    }
    
    
    function memberView($value) 
    {
    	$search = ldap_search($this->conn, _BASE_DN, '(uid=' . $this->makeSafeUsername($value) . ')');
    	return $this->extractMember($search);
    
    }
    
    function memberSearch($value) 
    {
    	$search = ldap_search($this->conn, _BASE_DN, '(|(uid=*' . $this->makeSafeUsername($value) . '*)(cn=*' . $this->makeSafeRealName($value) . '*))');
    	return $this->extractMember($search);
    }
    
    
    private function extractMember($search)
    {
            // Produce an array of usernames
            $usernames = array();
            $entryHandler = ldap_first_entry($this->conn, $search);
            while($entryHandler) {
                    $username = ldap_get_values($this->conn, $entryHandler, 'uid');
                    $realname = ldap_get_values($this->conn, $entryHandler, 'cn');
                    $homedir = ldap_get_values($this->conn, $entryHandler, 'homedirectory');
    		$usernames[] = array( "uid" => $username[0], "cn" => $realname[0], "homedir" => $homedir[0], "website" => false);
                    $entryHandler = ldap_next_entry($this->conn, $entryHandler);
    	}
    	return $usernames;
    }
    
    
    // Compares two keyed arrays ( array("uid" => ?, "cn" =>) etc)
    // by the last word of the "cn" field, which would seem
    // to represent the surname
    private function cmpSurnames($person1, $person2)
    {
            $names1 = explode(' ', $person1['cn']);
            $names2 = explode(' ', $person2['cn']);
            return strcmp(array_pop($names1), array_pop($names2));
    }
    
    // Compares two keyed arrays ( array("uid" => ?, "cn" =>) etc)
    // by the first word (and onward) of the "cn" field, which would seem
    // to represent the name
    private function cmpForenames($person1, $person2)
    {
            return strcmp($person1['cn'], $person2['cn']);
    }
    
    // Converts a given string to something that can
    // safely be used as a username to search for (although
    // this doesn't necessarily mean it's a valid username).
    private function makeSafeUserName($username)
    {
            $username = trim(strtolower($username));
            return preg_replace('[^a-z0-9_]', '', $username);
    }
    
    // Converts a given string to something that can
    // safely be used as a real name to search for
    private function makeSafeRealName($username)
    {
            $username = trim(strtolower($username));
            return preg_replace('[^a-z0-9_ ]', '', $username);
    }
    
    
    }
    ?>