lib/Ajde/Filter/MatchGroup.php

Summary

Maintainability
A
2 hrs
Test Coverage
<?php

class Ajde_Filter_MatchGroup extends Ajde_Filter
{
    protected $_filters;
    protected $_operator;

    public function __construct($operator = Ajde_Query::OP_AND)
    {
        $this->_operator = $operator;
    }

    public function addFilter(Ajde_Filter_Match $filter)
    {
        $this->_filters[] = $filter;
    }

    public function prepare(Ajde_Db_Table $table = null)
    {
        $sqlWhere = '';
        $select = [];
        $first = true;
        $values = [];
        foreach ($this->_filters as $filter) {
            $prepared = $filter->prepare($table);
            foreach ($prepared as $queryPart => $v) {
                switch ($queryPart) {
                    case 'where':
                        if ($first === false) {
                            $sqlWhere .= ' '.$v['arguments'][1];
                        }
                        $sqlWhere .= ' '.$v['arguments'][0];
                        $first = false;
                        if (isset($v['values'])) {
                            $values = array_merge($values, $v['values']);
                        }
                        break;
                    case 'select':
                        $select[] = $v['arguments'][0];
                        break;
                }
            }
        }

        return [
            'where'  => [
                'arguments' => ['('.$sqlWhere.')', $this->_operator],
                'values'    => $values,
            ],
            'select' => [
                'arguments' => [implode(', ', $select)],
            ],
        ];
    }
}