diff options
Diffstat (limited to 'app/Core/Ldap/Query.php')
| -rw-r--r-- | app/Core/Ldap/Query.php | 87 | 
1 files changed, 87 insertions, 0 deletions
diff --git a/app/Core/Ldap/Query.php b/app/Core/Ldap/Query.php new file mode 100644 index 00000000..e03495ec --- /dev/null +++ b/app/Core/Ldap/Query.php @@ -0,0 +1,87 @@ +<?php + +namespace Kanboard\Core\Ldap; + +/** + * LDAP Query + * + * @package ldap + * @author  Frederic Guillot + */ +class Query +{ +    /** +     * LDAP client +     * +     * @access protected +     * @var Client +     */ +    protected $client = null; + +    /** +     * Query result +     * +     * @access protected +     * @var array +     */ +    protected $entries = array(); + +    /** +     * Constructor +     * +     * @access public +     * @param  Client $client +     */ +    public function __construct(Client $client) +    { +        $this->client = $client; +    } + +    /** +     * Execute query +     * +     * @access public +     * @param  string    $baseDn +     * @param  string    $filter +     * @param  array     $attributes +     * @return Query +     */ +    public function execute($baseDn, $filter, array $attributes) +    { +        $sr = ldap_search($this->client->getConnection(), $baseDn, $filter, $attributes); +        if ($sr === false) { +            return $this; +        } + +        $entries = ldap_get_entries($this->client->getConnection(), $sr); +        if ($entries === false || count($entries) === 0 || $entries['count'] == 0) { +            return $this; +        } + +        $this->entries = $entries; + +        return $this; +    } + +    /** +     * Return true if the query returned a result +     * +     * @access public +     * @return boolean +     */ +    public function hasResult() +    { +        return ! empty($this->entries); +    } + +    /** +     * Get LDAP Entries +     * +     * @access public +     * @return Entities +     */ +    public function getEntries() +    { +        return new Entries($this->entries); +    } +}  | 
