Horde_Ldap_Filter::parse PHP Method

parse() public static method

Parses a string into a Horde_Ldap_Filter object.
public static parse ( string $filter ) : Horde_Ldap_Filter
$filter string An LDAP filter string.
return Horde_Ldap_Filter
    public static function parse($filter)
    {
        if (!preg_match('/^\\((.+?)\\)$/', $filter, $matches)) {
            throw new Horde_Ldap_Exception('Invalid filter syntax, filter components must be enclosed in round brackets');
        }
        if (in_array(substr($matches[1], 0, 1), array('!', '|', '&'))) {
            return self::_parseCombination($matches[1]);
        } else {
            return self::_parseLeaf($matches[1]);
        }
    }

Usage Example

Example #1
0
 /**
  * This tests the basic combination of filters.
  */
 public function testCombine()
 {
     // Setup.
     $filter0 = Horde_Ldap_Filter::create('foo', 'equals', 'bar');
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter0);
     $filter1 = Horde_Ldap_Filter::create('bar', 'equals', 'foo');
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter1);
     $filter2 = Horde_Ldap_Filter::create('you', 'equals', 'me');
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter2);
     $filter3 = Horde_Ldap_Filter::parse('(perlinterface=used)');
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter3);
     // Negation test.
     $filter_not1 = Horde_Ldap_Filter::combine('not', $filter0);
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter_not1, 'Negation failed for literal NOT');
     $this->assertEquals('(!(foo=bar))', (string) $filter_not1);
     $filter_not2 = Horde_Ldap_Filter::combine('!', $filter0);
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter_not2, 'Negation failed for logical NOT');
     $this->assertEquals('(!(foo=bar))', (string) $filter_not2);
     $filter_not3 = Horde_Ldap_Filter::combine('!', (string) $filter0);
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter_not3, 'Negation failed for logical NOT');
     $this->assertEquals('(!' . $filter0 . ')', (string) $filter_not3);
     // Combination test: OR
     $filter_comb_or1 = Horde_Ldap_Filter::combine('or', array($filter1, $filter2));
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_or1, 'Combination failed for literal OR');
     $this->assertEquals('(|(bar=foo)(you=me))', (string) $filter_comb_or1);
     $filter_comb_or2 = Horde_Ldap_Filter::combine('|', array($filter1, $filter2));
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_or2, 'combination failed for logical OR');
     $this->assertEquals('(|(bar=foo)(you=me))', (string) $filter_comb_or2);
     // Combination test: AND
     $filter_comb_and1 = Horde_Ldap_Filter::combine('and', array($filter1, $filter2));
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_and1, 'Combination failed for literal AND');
     $this->assertEquals('(&(bar=foo)(you=me))', (string) $filter_comb_and1);
     $filter_comb_and2 = Horde_Ldap_Filter::combine('&', array($filter1, $filter2));
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_and2, 'combination failed for logical AND');
     $this->assertEquals('(&(bar=foo)(you=me))', (string) $filter_comb_and2);
     // Combination test: using filter created with perl interface.
     $filter_comb_perl1 = Horde_Ldap_Filter::combine('and', array($filter1, $filter3));
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_perl1, 'Combination failed for literal AND');
     $this->assertEquals('(&(bar=foo)(perlinterface=used))', (string) $filter_comb_perl1);
     $filter_comb_perl2 = Horde_Ldap_Filter::combine('&', array($filter1, $filter3));
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_perl2, 'combination failed for logical AND');
     $this->assertEquals('(&(bar=foo)(perlinterface=used))', (string) $filter_comb_perl2);
     // Combination test: using filter_str instead of object
     $filter_comb_fstr1 = Horde_Ldap_Filter::combine('and', array($filter1, '(filter_str=foo)'));
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_fstr1, 'Combination failed for literal AND using filter_str');
     $this->assertEquals('(&(bar=foo)(filter_str=foo))', (string) $filter_comb_fstr1);
     // Combination test: deep combination
     $filter_comp_deep = Horde_Ldap_Filter::combine('and', array($filter2, $filter_not1, $filter_comb_or1, $filter_comb_perl1));
     $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comp_deep, 'Deep combination failed!');
     $this->assertEquals('(&(you=me)(!(foo=bar))(|(bar=foo)(you=me))(&(bar=foo)(perlinterface=used)))', (string) $filter_comp_deep);
     // Test failure in combination
     try {
         Horde_Ldap_Filter::create('foo', 'test_undefined_matchingrule', 'bar');
         $this->fail('Horde_Ldap_Exception expected.');
     } catch (Horde_Ldap_Exception $e) {
     }
     try {
         Horde_Ldap_Filter::combine('not', 'damaged_filter_str');
         $this->fail('Horde_Ldap_Exception expected.');
     } catch (Horde_Ldap_Exception $e) {
     }
     try {
         Horde_Ldap_Filter::combine('not', array($filter0, $filter1));
         $this->fail('Horde_Ldap_Exception expected.');
     } catch (Horde_Ldap_Exception $e) {
     }
     try {
         Horde_Ldap_Filter::combine('not', null);
         $this->fail('Horde_Ldap_Exception expected.');
     } catch (Horde_Ldap_Exception $e) {
     }
     try {
         Horde_Ldap_Filter::combine('and', $filter_not1);
         $this->fail('Horde_Ldap_Exception expected.');
     } catch (Horde_Ldap_Exception $e) {
     }
     try {
         Horde_Ldap_Filter::combine('and', array($filter_not1));
         $this->fail('Horde_Ldap_Exception expected.');
     } catch (Horde_Ldap_Exception $e) {
     }
     try {
         Horde_Ldap_Filter::combine('and', $filter_not1);
         $this->fail('Horde_Ldap_Exception expected.');
     } catch (Horde_Ldap_Exception $e) {
     }
     try {
         Horde_Ldap_Filter::combine('or', array($filter_not1));
         $this->fail('Horde_Ldap_Exception expected.');
     } catch (Horde_Ldap_Exception $e) {
     }
     try {
         Horde_Ldap_Filter::combine('some_unknown_method', array($filter_not1));
         $this->fail('Horde_Ldap_Exception expected.');
     } catch (Horde_Ldap_Exception $e) {
     }
     try {
         Horde_Ldap_Filter::combine('and', array($filter_not1, 'some_invalid_filterstring'));
         $this->fail('Horde_Ldap_Exception expected.');
     } catch (Horde_Ldap_Exception $e) {
     }
     try {
         Horde_Ldap_Filter::combine('and', array($filter_not1, null));
         $this->fail('Horde_Ldap_Exception expected.');
     } catch (Horde_Ldap_Exception $e) {
     }
 }