public function testFilterCreation() { $f1 = Zend_Ldap_Filter::equals('name', 'value'); $this->assertEquals('(name=value)', $f1->toString()); $f2 = Zend_Ldap_Filter::begins('name', 'value'); $this->assertEquals('(name=value*)', $f2->toString()); $f3 = Zend_Ldap_Filter::ends('name', 'value'); $this->assertEquals('(name=*value)', $f3->toString()); $f4 = Zend_Ldap_Filter::contains('name', 'value'); $this->assertEquals('(name=*value*)', $f4->toString()); $f5 = Zend_Ldap_Filter::greater('name', 'value'); $this->assertEquals('(name>value)', $f5->toString()); $f6 = Zend_Ldap_Filter::greaterOrEqual('name', 'value'); $this->assertEquals('(name>=value)', $f6->toString()); $f7 = Zend_Ldap_Filter::less('name', 'value'); $this->assertEquals('(name<value)', $f7->toString()); $f8 = Zend_Ldap_Filter::lessOrEqual('name', 'value'); $this->assertEquals('(name<=value)', $f8->toString()); $f9 = Zend_Ldap_Filter::approx('name', 'value'); $this->assertEquals('(name~=value)', $f9->toString()); $f10 = Zend_Ldap_Filter::any('name'); $this->assertEquals('(name=*)', $f10->toString()); $f11 = Zend_Ldap_Filter::string('name=*value*value*'); $this->assertEquals('(name=*value*value*)', $f11->toString()); $f12 = Zend_Ldap_Filter::mask('(&(objectClass=account)(uid=%s))', 'a*b(b)d\\e/f'); $this->assertEquals('(&(objectClass=account)(uid=a\\2ab\\28b\\29d\\5ce/f))', $f12->toString()); }
/** * get list of users * * @param string $_filter * @param string $_sort * @param string $_dir * @param int $_start * @param int $_limit * @param string $_accountClass the type of subclass for the Tinebase_Record_RecordSet to return * @return Tinebase_Record_RecordSet with record class Tinebase_Model_User */ public function getUsersFromSyncBackend($_filter = NULL, $_sort = NULL, $_dir = 'ASC', $_start = NULL, $_limit = NULL, $_accountClass = 'Tinebase_Model_User') { $filter = $this->_getBaseFilter(); if (!empty($_filter)) { $filter = $filter->addFilter(Zend_Ldap_Filter::orFilter(Zend_Ldap_Filter::contains($this->_rowNameMapping['accountFirstName'], Zend_Ldap::filterEscape($_filter)), Zend_Ldap_Filter::contains($this->_rowNameMapping['accountLastName'], Zend_Ldap::filterEscape($_filter)), Zend_Ldap_Filter::contains($this->_rowNameMapping['accountLoginName'], Zend_Ldap::filterEscape($_filter)))); } $accounts = $this->_ldap->search($filter, $this->_baseDn, $this->_userSearchScope, array_values($this->_rowNameMapping), $_sort !== null ? $this->_rowNameMapping[$_sort] : null); $result = new Tinebase_Record_RecordSet($_accountClass); // nothing to be done anymore if (count($accounts) == 0) { return $result; } foreach ($accounts as $account) { $accountObject = $this->_ldap2User($account, $_accountClass); if ($accountObject) { $result->addRecord($accountObject); } } return $result; // @todo implement limit, start, dir and status // $select = $this->_getUserSelectObject() // ->limit($_limit, $_start); // if ($_sort !== NULL) { // $select->order($this->rowNameMapping[$_sort] . ' ' . $_dir); // } // // return only active users, when searching for simple users // if ($_accountClass == 'Tinebase_Model_User') { // $select->where($this->_db->quoteInto($this->_db->quoteIdentifier('status') . ' = ?', 'enabled')); // } }
/** * Returns a condition statement string based on given field identifier and clause(s) * * @param string $field * @param array $clauses * @param string $mode * @return string */ protected function _buildConditionStatement($field, array $clauses, $mode = 'AND') { $statements = array(); foreach ($clauses as $key => $clause) { $prefix = $suffix = null; $ops = $this->_matchOperator($clause['operator']); $value = $clause['value']; if (in_array(Backend\Condition::OPERATOR_BEGINSWITH, $ops)) { $value .= '*'; $filter = \Zend_Ldap_Filter::begins($field, $value); } if (in_array(Backend\Condition::OPERATOR_ENDSWITH, $ops)) { $value = '*' . $value; if ($filter instanceof \Zend_Ldap_Filter) { $filter = \Zend_Ldap_Filter::contains($field, $value); } else { $filter = \Zend_Ldap_Filter::ends($field, $value); } } if (in_array(Backend\Condition::OPERATOR_DIFF, $ops)) { $prefix = '(!'; $suffix = ')'; } /* if value is an t41_Object_Model-derivated object, use its uri to get id value * * @todo set a better way to check that a t41_Object_Uri contains a given t41_Backend_Uri/alias * * @var $value t41_Object_Model */ if ($value instanceof ObjectModel\BaseObject) { throw new Exception("LDAP Adapter doesn't support conditions which value is an object: " . $field); } $operator = '='; $statements[] = sprintf('%s(%s%s%s)%s', $prefix, $field, $operator, $value, $suffix); } return implode($statements); }