commit
9f6450999d
|
@ -25,8 +25,6 @@ use ipl\Web\Widget\Link;
|
|||
|
||||
/**
|
||||
* Manage user permissions and restrictions based on roles
|
||||
*
|
||||
* @TODO(el): Rename to RolesController: https://dev.icinga.com/issues/10015
|
||||
*/
|
||||
class RoleController extends AuthBackendController
|
||||
{
|
||||
|
@ -53,8 +51,6 @@ class RoleController extends AuthBackendController
|
|||
|
||||
/**
|
||||
* List roles
|
||||
*
|
||||
* @TODO(el): Rename to indexAction()
|
||||
*/
|
||||
public function listAction()
|
||||
{
|
||||
|
@ -63,22 +59,25 @@ class RoleController extends AuthBackendController
|
|||
->select();
|
||||
|
||||
$sortAndFilterColumns = [
|
||||
'name' => $this->translate('Name'),
|
||||
'users' => $this->translate('Users'),
|
||||
'groups' => $this->translate('Groups'),
|
||||
'permissions' => $this->translate('Permissions')
|
||||
'name' => $this->translate('Name'),
|
||||
'users' => $this->translate('Users'),
|
||||
'groups' => $this->translate('Groups'),
|
||||
'parent' => $this->translate('Inherits From')
|
||||
];
|
||||
|
||||
$this->setupFilterControl($this->view->roles, $sortAndFilterColumns, ['name']);
|
||||
$this->setupFilterControl(
|
||||
$this->view->roles,
|
||||
$sortAndFilterColumns + [
|
||||
'permissions' => $this->translate('Permissions')
|
||||
]
|
||||
);
|
||||
$this->setupLimitControl();
|
||||
$this->setupPaginationControl($this->view->roles);
|
||||
$this->setupSortControl($sortAndFilterColumns, $this->view->roles, ['name']);
|
||||
$this->setupSortControl($sortAndFilterColumns, $this->view->roles);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new role
|
||||
*
|
||||
* @TODO(el): Rename to newAction()
|
||||
*/
|
||||
public function addAction()
|
||||
{
|
||||
|
@ -93,8 +92,6 @@ class RoleController extends AuthBackendController
|
|||
|
||||
/**
|
||||
* Update a role
|
||||
*
|
||||
* @TODO(el): Rename to updateAction()
|
||||
*/
|
||||
public function editAction()
|
||||
{
|
||||
|
|
|
@ -8,6 +8,8 @@ use Icinga\Repository\IniRepository;
|
|||
|
||||
class RolesConfig extends IniRepository
|
||||
{
|
||||
protected $sortRules = ['name' => ['order' => 'asc']];
|
||||
|
||||
protected $configs = [
|
||||
'roles' => [
|
||||
'name' => 'roles',
|
||||
|
|
|
@ -196,7 +196,16 @@ class ArrayDatasource implements Selectable
|
|||
$filter = $query->getFilter();
|
||||
$offset = $query->hasOffset() ? $query->getOffset() : 0;
|
||||
$limit = $query->hasLimit() ? $query->getLimit() : 0;
|
||||
$data = $this->data;
|
||||
|
||||
$data = [];
|
||||
foreach ($this->data as $key => $row) {
|
||||
if ($this->keyColumn !== null && ! isset($row->{$this->keyColumn})) {
|
||||
$row = clone $row; // Make sure that this won't affect the actual data
|
||||
$row->{$this->keyColumn} = $key;
|
||||
}
|
||||
|
||||
$data[$key] = $row;
|
||||
}
|
||||
|
||||
if ($query->hasOrder()) {
|
||||
uasort($data, [$query, 'compare']);
|
||||
|
@ -206,11 +215,6 @@ class ArrayDatasource implements Selectable
|
|||
$result = [];
|
||||
$skipped = 0;
|
||||
foreach ($data as $key => $row) {
|
||||
if ($this->keyColumn !== null && !isset($row->{$this->keyColumn})) {
|
||||
$row = clone $row; // Make sure that this won't affect the actual data
|
||||
$row->{$this->keyColumn} = $key;
|
||||
}
|
||||
|
||||
if (! $filter->matches($row)) {
|
||||
continue;
|
||||
} elseif ($skipped < $offset) {
|
||||
|
|
|
@ -132,4 +132,31 @@ class ArrayDatasourceTest extends BaseTestCase
|
|||
'ArrayDatasource does not sort limited queries correctly'
|
||||
);
|
||||
}
|
||||
|
||||
public function testOrderByKeyColumnIsCorrect()
|
||||
{
|
||||
$result = (new ArrayDatasource([
|
||||
'a' => (object) [
|
||||
'foo' => 'bar',
|
||||
'baz' => 'qux'
|
||||
],
|
||||
'b' => (object) [
|
||||
'foo' => 'bar',
|
||||
'baz' => 'qux'
|
||||
],
|
||||
'c' => (object) [
|
||||
'foo' => 'bar',
|
||||
'baz' => 'qux'
|
||||
]
|
||||
]))->setKeyColumn('name')
|
||||
->select()
|
||||
->order('name', 'desc')
|
||||
->fetchAll();
|
||||
|
||||
$this->assertSame(
|
||||
['c', 'b', 'a'],
|
||||
array_keys($result),
|
||||
'ArrayDatasource does not sort queries correctly by key column'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue