Controller: Create the filter editor in setupFilterControl() ...
...instead of demanding a concrete controller to do so. We still have to decide how to handle parameter preservation properly. refs #9029
This commit is contained in:
parent
63fb8dcafa
commit
1e6c394693
|
@ -54,19 +54,12 @@ class GroupController extends AuthBackendController
|
|||
}
|
||||
|
||||
$query = $backend->select(array('group_name'));
|
||||
$filterEditor = Widget::create('filterEditor')
|
||||
->setQuery($query)
|
||||
->setSearchColumns(array('group', 'user'))
|
||||
->preserveParams('limit', 'sort', 'dir', 'view', 'backend')
|
||||
->ignoreParams('page')
|
||||
->handleRequest($this->getRequest());
|
||||
$query->applyFilter($filterEditor->getFilter());
|
||||
$this->setupFilterControl($filterEditor);
|
||||
|
||||
$this->view->groups = $query;
|
||||
$this->view->backend = $backend;
|
||||
|
||||
$this->setupPaginationControl($query);
|
||||
$this->setupFilterControl($query);
|
||||
$this->setupLimitControl();
|
||||
$this->setupSortControl(
|
||||
array(
|
||||
|
@ -101,15 +94,7 @@ class GroupController extends AuthBackendController
|
|||
->from('group_membership', array('user_name'))
|
||||
->where('group_name', $groupName);
|
||||
|
||||
$filterEditor = Widget::create('filterEditor')
|
||||
->setQuery($members)
|
||||
->setSearchColumns(array('user'))
|
||||
->preserveParams('limit', 'sort', 'dir', 'view', 'backend', 'group')
|
||||
->ignoreParams('page')
|
||||
->handleRequest($this->getRequest());
|
||||
$members->applyFilter($filterEditor->getFilter());
|
||||
|
||||
$this->setupFilterControl($filterEditor);
|
||||
$this->setupFilterControl($members, null, array('user'));
|
||||
$this->setupPaginationControl($members);
|
||||
$this->setupLimitControl();
|
||||
$this->setupSortControl(
|
||||
|
|
|
@ -54,19 +54,12 @@ class UserController extends AuthBackendController
|
|||
}
|
||||
|
||||
$query = $backend->select(array('user_name'));
|
||||
$filterEditor = Widget::create('filterEditor')
|
||||
->setQuery($query)
|
||||
->setSearchColumns(array('user'))
|
||||
->preserveParams('limit', 'sort', 'dir', 'view', 'backend')
|
||||
->ignoreParams('page')
|
||||
->handleRequest($this->getRequest());
|
||||
$query->applyFilter($filterEditor->getFilter());
|
||||
$this->setupFilterControl($filterEditor);
|
||||
|
||||
$this->view->users = $query;
|
||||
$this->view->backend = $backend;
|
||||
|
||||
$this->setupPaginationControl($query);
|
||||
$this->setupFilterControl($query);
|
||||
$this->setupLimitControl();
|
||||
$this->setupSortControl(
|
||||
array(
|
||||
|
@ -100,15 +93,11 @@ class UserController extends AuthBackendController
|
|||
|
||||
$memberships = $this->loadMemberships(new User($userName))->select();
|
||||
|
||||
$filterEditor = Widget::create('filterEditor')
|
||||
->setQuery($memberships)
|
||||
->setSearchColumns(array('group_name'))
|
||||
->preserveParams('limit', 'sort', 'dir', 'view', 'backend', 'user')
|
||||
->ignoreParams('page')
|
||||
->handleRequest($this->getRequest());
|
||||
$memberships->applyFilter($filterEditor->getFilter());
|
||||
|
||||
$this->setupFilterControl($filterEditor);
|
||||
$this->setupFilterControl(
|
||||
$memberships,
|
||||
array('group_name' => t('User Group')),
|
||||
array('group_name')
|
||||
);
|
||||
$this->setupPaginationControl($memberships);
|
||||
$this->setupLimitControl();
|
||||
$this->setupSortControl(
|
||||
|
|
|
@ -63,6 +63,13 @@ class DbUserBackend extends DbRepository implements UserBackendInterface, Inspec
|
|||
*/
|
||||
protected $blacklistedQueryColumns = array('user');
|
||||
|
||||
/**
|
||||
* The search columns being provided
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $searchColumns = array('user');
|
||||
|
||||
/**
|
||||
* The default sort rules to be applied on a query
|
||||
*
|
||||
|
@ -98,6 +105,23 @@ class DbUserBackend extends DbRepository implements UserBackendInterface, Inspec
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize this repository's filter columns
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function initializeFilterColumns()
|
||||
{
|
||||
$userLabel = t('Username') . ' ' . t('(Case insensitive)');
|
||||
return array(
|
||||
$userLabel => 'user',
|
||||
t('Username') => 'user_name',
|
||||
t('Active') => 'is_active',
|
||||
t('Created At') => 'created_at',
|
||||
t('Last Modified') => 'last_modified'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a table row with the given data
|
||||
*
|
||||
|
|
|
@ -52,6 +52,13 @@ class LdapUserBackend extends LdapRepository implements UserBackendInterface, In
|
|||
*/
|
||||
protected $blacklistedQueryColumns = array('user');
|
||||
|
||||
/**
|
||||
* The search columns being provided
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $searchColumns = array('user');
|
||||
|
||||
/**
|
||||
* The default sort rules to be applied on a query
|
||||
*
|
||||
|
@ -243,6 +250,21 @@ class LdapUserBackend extends LdapRepository implements UserBackendInterface, In
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize this repository's filter columns
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function initializeFilterColumns()
|
||||
{
|
||||
return array(
|
||||
t('Username') => 'user_name',
|
||||
t('Active') => 'is_active',
|
||||
t('Created At') => 'created_at',
|
||||
t('Last Modified') => 'last_modified'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize this repository's conversion rules
|
||||
*
|
||||
|
|
|
@ -73,6 +73,13 @@ class DbUserGroupBackend extends DbRepository implements UserGroupBackendInterfa
|
|||
*/
|
||||
protected $blacklistedQueryColumns = array('group', 'user');
|
||||
|
||||
/**
|
||||
* The search columns being provided
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $searchColumns = array('group', 'user');
|
||||
|
||||
/**
|
||||
* The value conversion rules to apply on a query or statement
|
||||
*
|
||||
|
@ -97,6 +104,26 @@ class DbUserGroupBackend extends DbRepository implements UserGroupBackendInterfa
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize this repository's filter columns
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function initializeFilterColumns()
|
||||
{
|
||||
$userLabel = t('Username') . ' ' . t('(Case insensitive)');
|
||||
$groupLabel = t('User Group') . ' ' . t('(Case insensitive)');
|
||||
return array(
|
||||
$userLabel => 'user',
|
||||
t('Username') => 'user_name',
|
||||
$groupLabel => 'group',
|
||||
t('User Group') => 'group_name',
|
||||
t('Parent') => 'parent',
|
||||
t('Created At') => 'created_at',
|
||||
t('Last Modified') => 'last_modified'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a table row with the given data
|
||||
*
|
||||
|
|
|
@ -34,6 +34,13 @@ class IniUserGroupBackend extends IniRepository implements UserGroupBackendInter
|
|||
*/
|
||||
protected $blacklistedQueryColumns = array('group');
|
||||
|
||||
/**
|
||||
* The search columns being provided
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $searchColumns = array('group');
|
||||
|
||||
/**
|
||||
* The value conversion rules to apply on a query or statement
|
||||
*
|
||||
|
@ -55,6 +62,21 @@ class IniUserGroupBackend extends IniRepository implements UserGroupBackendInter
|
|||
$this->ds->getConfigObject()->setKeyColumn('name');
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize this repository's filter columns
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function initializeFilterColumns()
|
||||
{
|
||||
return array(
|
||||
t('User Group') => 'group',
|
||||
t('Parent') => 'parent',
|
||||
t('Created At') => 'created_at',
|
||||
t('Last Modified') => 'last_modified'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new group to this backend
|
||||
*
|
||||
|
|
|
@ -83,7 +83,14 @@ class LdapUserGroupBackend /*extends LdapRepository*/ implements UserGroupBacken
|
|||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $filterColumns = array('group', 'user');
|
||||
protected $blacklistedQueryColumns = array('group', 'user');
|
||||
|
||||
/**
|
||||
* The search columns being provided
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $searchColumns = array('group', 'user');
|
||||
|
||||
/**
|
||||
* The default sort rules to be applied on a query
|
||||
|
@ -457,6 +464,21 @@ class LdapUserGroupBackend /*extends LdapRepository*/ implements UserGroupBacken
|
|||
return array('group' => $columns, 'group_membership' => $columns);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize this repository's filter columns
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function initializeFilterColumns()
|
||||
{
|
||||
return array(
|
||||
t('Username') => 'user',
|
||||
t('User Group') => 'group_name',
|
||||
t('Created At') => 'created_at',
|
||||
t('Last Modified') => 'last_modified'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize this repository's conversion rules
|
||||
*
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
namespace Icinga\Web;
|
||||
|
||||
use Icinga\Data\Filterable;
|
||||
use Icinga\Data\Sortable;
|
||||
use Icinga\Data\QueryInterface;
|
||||
use Icinga\Exception\Http\HttpNotFoundException;
|
||||
|
@ -140,16 +141,51 @@ class Controller extends ModuleActionController
|
|||
}
|
||||
|
||||
/**
|
||||
* Set the view property `filterEditor' to the given FilterEditor
|
||||
* Create a FilterEditor widget and apply the user's chosen filter options on the given filterable
|
||||
*
|
||||
* In case the current view has been requested as compact this method does nothing.
|
||||
* The widget is set on the `filterEditor' view property only if the current view has not been requested as compact.
|
||||
* The optional $filterColumns parameter should be an array of key-value pairs where the key is the name of the
|
||||
* column and the value the label to show to the user. The optional $searchColumns parameter should be an array
|
||||
* of column names to be used to handle quick searches.
|
||||
*
|
||||
* @param Form $editor The FilterEditor
|
||||
* If the given filterable is an instance of Icinga\Data\FilterColumns, $filterable->getFilterColumns() and
|
||||
* $filterable->getSearchColumns() is called to provide the respective columns if $filterColumns or $searchColumns
|
||||
* is not given.
|
||||
*
|
||||
* @param Filterable $filterable The filterable to create a filter editor for
|
||||
* @param array $filterColumns The filter columns to offer to the user
|
||||
* @param array $searchColumns The search columns to utilize for quick searches
|
||||
*
|
||||
* @return $this
|
||||
*
|
||||
* @todo Preserving and ignoring parameters should be configurable (another two method params? property magic?)
|
||||
*/
|
||||
protected function setupFilterControl($editor)
|
||||
{
|
||||
protected function setupFilterControl(
|
||||
Filterable $filterable,
|
||||
array $filterColumns = null,
|
||||
array $searchColumns = null
|
||||
) {
|
||||
$editor = Widget::create('filterEditor')
|
||||
->setQuery($filterable)
|
||||
->preserveParams(
|
||||
'limit',
|
||||
'sort',
|
||||
'dir',
|
||||
'format',
|
||||
'view',
|
||||
'user',
|
||||
'group',
|
||||
'backend',
|
||||
'stateType',
|
||||
'addColumns',
|
||||
'problems',
|
||||
'_dev'
|
||||
)
|
||||
->ignoreParams('page')
|
||||
->setColumns($filterColumns)
|
||||
->setSearchColumns($searchColumns)
|
||||
->handleRequest($this->getRequest());
|
||||
|
||||
if (! $this->view->compact) {
|
||||
$this->view->filterEditor = $editor;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ use Icinga\Web\Widget\Tabextension\DashboardAction;
|
|||
use Icinga\Web\Widget\Tabextension\OutputFormat;
|
||||
use Icinga\Web\Widget\Tabs;
|
||||
use Icinga\Data\Filter\Filter;
|
||||
use Icinga\Web\Widget;
|
||||
use Icinga\Module\Monitoring\Forms\StatehistoryForm;
|
||||
use Icinga\Module\Monitoring\DataView\DataView;
|
||||
|
||||
|
@ -616,18 +615,7 @@ class Monitoring_ListController extends Controller
|
|||
*/
|
||||
protected function filterQuery(DataView $dataView)
|
||||
{
|
||||
$editor = Widget::create('filterEditor')
|
||||
->setQuery($dataView)
|
||||
->preserveParams(
|
||||
'limit', 'sort', 'dir', 'format', 'view', 'backend',
|
||||
'stateType', 'addColumns', '_dev', 'problems'
|
||||
)
|
||||
->ignoreParams('page')
|
||||
->setSearchColumns($dataView->getSearchColumns())
|
||||
->handleRequest($this->getRequest());
|
||||
|
||||
$this->setupFilterControl($editor);
|
||||
|
||||
$this->setupFilterControl($dataView);
|
||||
$this->handleFormatRequest($dataView);
|
||||
return $dataView;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue