/**
  * Constructor
  * 
  * @param FilterContainer $filters Filters
  */
 public function __construct(FilterContainer $filters)
 {
     parent::__construct('filter');
     foreach ($filters->all() as $key => $filter) {
         $this->add(array('name' => $key, 'type' => 'Text'));
     }
 }
 public function testHas()
 {
     $container = new FilterContainer();
     $container->add('foo', 'f.bar');
     $this->assertTrue($container->has('foo'));
     $this->assertFalse($container->has('bar'));
 }
 /**
  * Build where clause
  * 
  * @param FilterContainer $filters Available filters
  * @param string          $value   Value
  * @param string          $field   Field name
  * 
  * @return void
  */
 protected function buildWhere(FilterContainer $filters, $value, $field = null)
 {
     $where = '';
     foreach ($filters->all() as $key => $filter) {
         if (null !== $field && $field != $filter['field']) {
             continue;
         }
         if (null === $field) {
             $key .= '_';
         }
         switch ($filter['type']) {
             case Paginator::FILTER_TYPE_STARTS_WITH:
                 $comparisonOperator = 'LIKE';
                 $this->qb->setParameter($key, $value . '%');
                 break;
             case Paginator::FILTER_TYPE_ENDS_WITH:
                 $comparisonOperator = 'LIKE';
                 $this->qb->setParameter($key, '%' . $value);
                 break;
             case Paginator::FILTER_TYPE_CONTAINS:
                 $comparisonOperator = 'LIKE';
                 $this->qb->setParameter($key, '%' . $value . '%');
                 break;
             case Paginator::FILTER_TYPE_EQUALS:
                 // no break
             // no break
             default:
                 $comparisonOperator = '=';
                 $this->qb->setParameter($key, $value);
                 break;
         }
         $where .= ' OR ' . $filter['field'] . ' ' . $comparisonOperator . ' :' . $key;
     }
     return substr($where, 4);
 }
 /**
  * Add a filter to the filter container
  *
  * @param string $key   Key
  * @param string $field Field
  * @param string $type  Filter type
  *
  * @return Paginator
  */
 public function addFilter($key, $field, $type = null)
 {
     $this->filters->add($key, $field, $type);
     return $this;
 }