public function onAfterBuildQuery(&$model, &$query)
{
$relationFilters = $model->getRelationFilters();
foreach ($relationFilters as $filterState) {
$relationName = $filterState['relation'];
$tableAlias = $model->getBehaviorParam('tableAlias', null);
$subQuery = $model->getRelations()->getCountSubquery($relationName, $tableAlias);
// Callback method needs different handling
if (isset($filterState['method']) && $filterState['method'] == 'callback') {
call_user_func_array($filterState['value'], array(&$subQuery));
$filterState['method'] = 'search';
$filterState['operator'] = '>=';
$filterState['value'] = '1';
}
$options = new JRegistry($filterState);
$filter = new DataModel\Filter\Relation($model->getDbo(), $relationName, $subQuery);
$methods = $filter->getSearchMethods();
$method = $options->get('method', $filter->getDefaultSearchMethod());
if (!in_array($method, $methods)) {
$method = 'exact';
}
switch ($method) {
case 'between':
case 'outside':
$sql = $filter->{$method}($options->get('from', null), $options->get('to'));
break;
case 'interval':
$sql = $filter->{$method}($options->get('value', null), $options->get('interval'));
break;
case 'search':
$sql = $filter->{$method}($options->get('value', null), $options->get('operator', '='));
break;
default:
$sql = $filter->{$method}($options->get('value', null));
break;
}
if ($sql) {
$query->where($sql);
}
}
}