mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-04-08 17:15:08 +02:00
Data\DataArray: use SimpleQuery and new interfaces
Removed ArrayQuery implementation as SimpleQuery is enough here. Renamed the Datasource class to ArrayDatasource. refs #6418
This commit is contained in:
parent
31047e8082
commit
1fbca25d99
application/controllers
library/Icinga
@ -156,6 +156,7 @@ class ConfigController extends BaseConfigController
|
||||
|
||||
$this->view->modules = Icinga::app()->getModuleManager()->select()
|
||||
->from('modules')
|
||||
->order('enabled', 'desc')
|
||||
->order('name');
|
||||
$this->render('module/overview');
|
||||
}
|
||||
|
@ -32,8 +32,8 @@ namespace Icinga\Application\Modules;
|
||||
use Icinga\Application\ApplicationBootstrap;
|
||||
use Icinga\Application\Icinga;
|
||||
use Icinga\Logger\Logger;
|
||||
use Icinga\Data\DataArray\Datasource as ArrayDatasource;
|
||||
use Icinga\Data\DataArray\Query as ArrayQuery;
|
||||
use Icinga\Data\DataArray\ArrayDatasource;
|
||||
use Icinga\Data\SimpleQuery;
|
||||
use Icinga\Exception\ConfigurationError;
|
||||
use Icinga\Exception\SystemPermissionException;
|
||||
use Icinga\Exception\ProgrammingError;
|
||||
@ -110,7 +110,7 @@ class Manager
|
||||
/**
|
||||
* Query interface for the module manager
|
||||
*
|
||||
* @return ArrayQuery
|
||||
* @return SimpleQuery
|
||||
*/
|
||||
public function select()
|
||||
{
|
||||
|
@ -2,11 +2,14 @@
|
||||
|
||||
namespace Icinga\Data\DataArray;
|
||||
|
||||
use Icinga\Data\DatasourceInterface;
|
||||
use Icinga\Data\Selectable;
|
||||
use Icinga\Data\SimpleQuery;
|
||||
|
||||
class Datasource implements DatasourceInterface
|
||||
class ArrayDatasource implements Selectable
|
||||
{
|
||||
protected $data;
|
||||
|
||||
protected $result;
|
||||
|
||||
/**
|
||||
* Constructor, create a new Datasource for the given Array
|
||||
@ -21,14 +24,14 @@ class Datasource implements DatasourceInterface
|
||||
/**
|
||||
* Instantiate a Query object
|
||||
*
|
||||
* @return Query
|
||||
* @return SimpleQuery
|
||||
*/
|
||||
public function select()
|
||||
{
|
||||
return new Query($this);
|
||||
return new SimpleQuery($this);
|
||||
}
|
||||
|
||||
public function fetchColumn(Query $query)
|
||||
public function fetchColumn(SimpleQuery $query)
|
||||
{
|
||||
$result = array();
|
||||
foreach ($this->getResult($query) as $row) {
|
||||
@ -38,7 +41,7 @@ class Datasource implements DatasourceInterface
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function fetchPairs(Query $query)
|
||||
public function fetchPairs(SimpleQuery $query)
|
||||
{
|
||||
$result = array();
|
||||
$keys = null;
|
||||
@ -54,27 +57,31 @@ class Datasource implements DatasourceInterface
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function fetchAll(Query $query)
|
||||
public function fetchAll(SimpleQuery $query)
|
||||
{
|
||||
return $this->getResult($query);
|
||||
}
|
||||
|
||||
public function count(Query $query)
|
||||
public function count(SimpleQuery $query)
|
||||
{
|
||||
$this->createResult($query);
|
||||
return $query->getCount();
|
||||
return count($this->result);
|
||||
}
|
||||
|
||||
protected function createResult(Query $query)
|
||||
protected function createResult(SimpleQuery $query)
|
||||
{
|
||||
if ($query->hasResult()) {
|
||||
if ($this->hasResult()) {
|
||||
return $this;
|
||||
}
|
||||
$result = array();
|
||||
|
||||
$columns = $query->getColumns();
|
||||
$filter = $query->getFilter();
|
||||
foreach ($this->data as & $row) {
|
||||
|
||||
if (! $filter->matches($row)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get only desired columns if asked so
|
||||
if (empty($columns)) {
|
||||
@ -96,19 +103,44 @@ class Datasource implements DatasourceInterface
|
||||
}
|
||||
|
||||
// Sort the result
|
||||
|
||||
if ($query->hasOrder()) {
|
||||
usort($result, array($query, 'compare'));
|
||||
}
|
||||
|
||||
$query->setResult($result);
|
||||
$this->setResult($result);
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function getResult(Query $query)
|
||||
protected function getLimitedResult($query)
|
||||
{
|
||||
if (! $query->hasResult()) {
|
||||
if ($query->hasLimit()) {
|
||||
if ($query->hasOffset()) {
|
||||
$offset = $query->getOffset();
|
||||
} else {
|
||||
$offset = 0;
|
||||
}
|
||||
return array_slice($this->result, $offset, $query->getLimit());
|
||||
} else {
|
||||
return $this->result;
|
||||
}
|
||||
}
|
||||
|
||||
protected function hasResult()
|
||||
{
|
||||
return $this->result !== null;
|
||||
}
|
||||
|
||||
protected function setResult($result)
|
||||
{
|
||||
return $this->result = $result;
|
||||
}
|
||||
|
||||
protected function getResult(SimpleQuery $query)
|
||||
{
|
||||
if (! $this->hasResult()) {
|
||||
$this->createResult($query);
|
||||
}
|
||||
return $query->getLimitedResult();
|
||||
return $this->getLimitedResult($query);
|
||||
}
|
||||
}
|
@ -1,99 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Icinga\Data\DataArray;
|
||||
|
||||
use Icinga\Data\SimpleQuery;
|
||||
|
||||
class Query extends SimpleQuery
|
||||
{
|
||||
/**
|
||||
* Remember the last count
|
||||
*/
|
||||
protected $count;
|
||||
|
||||
/**
|
||||
* Remember the last result without applied limits
|
||||
*/
|
||||
protected $result;
|
||||
|
||||
public function getCount()
|
||||
{
|
||||
return $this->count;
|
||||
}
|
||||
|
||||
public function hasResult()
|
||||
{
|
||||
return $this->result !== null;
|
||||
}
|
||||
|
||||
public function getFullResult()
|
||||
{
|
||||
return $this->result;
|
||||
}
|
||||
|
||||
public function getLimitedResult()
|
||||
{
|
||||
if ($this->hasLimit()) {
|
||||
if ($this->hasOffset()) {
|
||||
$offset = $this->getOffset();
|
||||
} else {
|
||||
$offset = 0;
|
||||
}
|
||||
return array_slice($this->result, $offset, $this->getLimit());
|
||||
} else {
|
||||
return $this->result;
|
||||
}
|
||||
}
|
||||
|
||||
public function setResult($result)
|
||||
{
|
||||
$this->result = $result;
|
||||
$this->count = count($result);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* ArrayDatasource will apply this function to sort the array
|
||||
*
|
||||
* @param mixed $a Left side comparsion value
|
||||
* @param mixed $b Right side comparsion value
|
||||
* @param int $col_num Current position in order_columns array
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function compare(& $a, & $b, $col_num = 0)
|
||||
{
|
||||
$orderColumns = $this->getOrderColumns();
|
||||
if (! array_key_exists($col_num, $orderColumns)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$col = $orderColumns[$col_num][0];
|
||||
$dir = $orderColumns[$col_num][1];
|
||||
|
||||
//$res = strnatcmp(strtolower($a->$col), strtolower($b->$col));
|
||||
$res = strcmp(strtolower($a->$col), strtolower($b->$col));
|
||||
if ($res === 0) {
|
||||
if (array_key_exists(++$col_num, $orderColumns)) {
|
||||
return $this->compare($a, $b, $col_num);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if ($dir === self::SORT_ASC) {
|
||||
return $res;
|
||||
} else {
|
||||
return $res * -1;
|
||||
}
|
||||
}
|
||||
|
||||
public function parseFilterExpression($expression, $parameters = null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public function applyFilter()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
@ -13,7 +13,7 @@ interface Filterable
|
||||
|
||||
public function setFilter(Filter $filter);
|
||||
|
||||
public function getFilter(Filter $filter);
|
||||
public function getFilter();
|
||||
|
||||
public function addFilter(Filter $filter);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user