public function testGroupingFilter() { $f1 = Zend_Ldap_Filter::equals('name', 'value'); $f2 = Zend_Ldap_Filter::begins('name', 'value'); $f3 = Zend_Ldap_Filter::ends('name', 'value'); $f4 = Zend_Ldap_Filter::andFilter($f1, $f2, $f3); $f5 = Zend_Ldap_Filter::orFilter($f1, $f2, $f3); $this->assertEquals('(&(name=value)(name=value*)(name=*value))', $f4->toString()); $this->assertEquals('(|(name=value)(name=value*)(name=*value))', $f5->toString()); $f4 = $f4->addFilter($f1); $this->assertEquals('(&(name=value)(name=value*)(name=*value)(name=value))', $f4->toString()); }
/** * 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); }