Skip to content
11 changes: 7 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@
"GPL-2.0",
"GPL-3.0"
],
"require": {
"php": ">=7.1"
},
"require-dev": {
"kdyby/doctrine": "^3.1",
"ublaboo/datagrid": "^5.0",
"nette/utils": "^2.4",
"nette/di": "^2.4"
"kdyby/doctrine": "^3.1 || ~4.0",
"ublaboo/datagrid": "^5.0 || ~6.0",
"nette/utils": "^2.4 || ~3.0",
"nette/di": "^2.4 || ~3.0"
},
"autoload": {
"psr-4": {
Expand Down
10 changes: 7 additions & 3 deletions src/DI/QueryObjectDataSourceExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@ class QueryObjectDataSourceExtension extends \Nette\DI\CompilerExtension {

public function loadConfiguration() {

$this->getContainerBuilder()
->addDefinition($this->prefix('factory'))
->setImplement(\ADT\QueryObjectDataSource\IQueryObjectDataSourceFactory::class);
$builder = $this->getContainerBuilder();
if (method_exists($builder, 'addFactoryDefinition')) {
$definition = $builder->addFactoryDefinition($this->prefix('factory'));
} else {
$definition = $builder->addDefinition($this->prefix('factory'));
}
$definition->setImplement(\ADT\QueryObjectDataSource\IQueryObjectDataSourceFactory::class);
}

}
42 changes: 29 additions & 13 deletions src/QueryObjectDataSource.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
use Ublaboo\DataGrid\Filter\FilterDateRange;
use Ublaboo\DataGrid\Filter\FilterText;
use Ublaboo\DataGrid\Utils\DateTimeHelper;
use Ublaboo\DataGrid\DataSource\IDataSource;

class QueryObjectDataSource implements \Ublaboo\DataGrid\DataSource\IDataSource {
class QueryObjectDataSource implements IDataSource {

use \Nette\SmartObject;

Expand All @@ -32,6 +33,9 @@ class QueryObjectDataSource implements \Ublaboo\DataGrid\DataSource\IDataSource
/** @var callable */
public $limitCallback;

/** @var array */
private $data;

/**
* @param \Kdyby\Doctrine\QueryObject $queryObject
* @param \Kdyby\Doctrine\EntityRepository $repo
Expand Down Expand Up @@ -93,7 +97,7 @@ protected function getResultSet() {
* Get count of data
* @return int
*/
public function getCount() {
public function getCount(): int {
return $this->repo
->fetch($this->queryObject)
->getTotalCount();
Expand All @@ -103,22 +107,32 @@ public function getCount() {
* Get the data
* @return array
*/
public function getData() {
public function getData(): array {
if ($this->data) {
return $this->data;
}
return $this->getResultSet()->toArray();
}

/**
* Set the data
* @return $this
*/
public function setData($data) {
$this->data = $data;
return $this;
}

/**
* Filter data
* @param array $filters
* @return static
*/
public function filter(array $filters) {
public function filter(array $filters): void {
foreach ($filters as $filter) {
if ($filter->isValueSet()) {
if ($filter->hasConditionCallback()) {
\Nette\Utils\Callback::invokeArgs(
$filter->getConditionCallback(), [ $this->queryObject, $filter->getValue() ]
);
if ($filter->getConditionCallback()) {
call_user_func($filter->getConditionCallback(), $this->queryObject, $filter->getValue());
} else {
if ($this->queryObject instanceof IQueryObject) {
if ($filter instanceof FilterText) {
Expand All @@ -134,16 +148,14 @@ public function filter(array $filters) {
if (is_callable($this->filterCallback)) {
call_user_func_array($this->filterCallback, [$this->queryObject, $filters]);
}

return $this;
}

/**
* Filter data - get one row
* @param array $filter
* @return static
*/
public function filterOne(array $filter) {
public function filterOne(array $filter): IDataSource {

if (is_callable($this->filterOneCallback)) {
call_user_func_array($this->filterOneCallback, [$this->queryObject, $filter]);
Expand All @@ -158,7 +170,7 @@ public function filterOne(array $filter) {
* @param int $limit
* @return static
*/
public function limit($offset, $limit) {
public function limit($offset, $limit): IDataSource {
$defaultCallback = function () use ($offset, $limit) {
$this->getResultSet()->applyPaging($offset, $limit);
};
Expand All @@ -178,7 +190,7 @@ public function limit($offset, $limit) {
* @param \Ublaboo\DataGrid\Utils\Sorting $sorting
* @return static
*/
public function sort(\Ublaboo\DataGrid\Utils\Sorting $sorting) {
public function sort(\Ublaboo\DataGrid\Utils\Sorting $sorting): IDataSource {

if (is_callable($sorting->getSortCallback())) {
call_user_func(
Expand Down Expand Up @@ -248,4 +260,8 @@ public static function parseFilterDate(FilterDate $filter) {
}
}

public function getQueryObject() {
return $this->queryObject;
}

}