Skip to content

Commit b460ce7

Browse files
authored
Merge pull request #5 from makoso/feature/numeric-filters
Allow to filter with number inputs
2 parents 700a895 + 0cccc3b commit b460ce7

File tree

7 files changed

+251
-0
lines changed

7 files changed

+251
-0
lines changed

Grid/Filter/Between.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
/**
3+
* Created by Krzysztof Makowski <kontakt@krzysztof-makowski.pl>.
4+
* Project: EMagic
5+
* Date: 29.11.17
6+
* Time: 00:17
7+
*/
8+
9+
namespace Makoso\DatagridBundle\Grid\Filter;
10+
11+
use Makoso\DatagridBundle\Grid\Column\GridColumn;
12+
use Makoso\DatagridBundle\Grid\Grid;
13+
use Doctrine\ORM\QueryBuilder;
14+
15+
class Between implements FilterInterface
16+
{
17+
public function filter(QueryBuilder $queryBuilder, GridColumn $gridColumn, Grid $grid): void
18+
{
19+
$value = $gridColumn->getFilterableValue()['value'];
20+
$value2 = $gridColumn->getFilterableValue()['value'];
21+
if ((!empty($value) || $value === 0) && (!empty($value2) || $value2 === 0) && (is_numeric($value) && is_numeric($value2))) {
22+
$exp1 = $queryBuilder->expr()->gte($gridColumn->getSelect(), (float)$value);
23+
$exp2 = $queryBuilder->expr()->lte($gridColumn->getSelect(), (float)$value2);
24+
if ($queryBuilder->getDQLParts()['where'] == null) {
25+
$queryBuilder->where($exp1);
26+
} else {
27+
$queryBuilder->andWhere($exp1);
28+
}
29+
$queryBuilder->andWhere($exp2);
30+
}
31+
}
32+
33+
public function getDisplayName(): string
34+
{
35+
return 'Between';
36+
}
37+
38+
public function needSecondInput(): bool
39+
{
40+
return true;
41+
}
42+
}

Grid/Filter/GreaterThan.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
/**
3+
* Created by Krzysztof Makowski <kontakt@krzysztof-makowski.pl>.
4+
* Project: EMagic
5+
* Date: 29.11.17
6+
* Time: 00:17
7+
*/
8+
9+
namespace Makoso\DatagridBundle\Grid\Filter;
10+
11+
use Makoso\DatagridBundle\Grid\Column\GridColumn;
12+
use Makoso\DatagridBundle\Grid\Grid;
13+
use Doctrine\ORM\QueryBuilder;
14+
15+
class GreaterThan implements FilterInterface
16+
{
17+
public function filter(QueryBuilder $queryBuilder, GridColumn $gridColumn, Grid $grid): void
18+
{
19+
$value = $gridColumn->getFilterableValue()['value'];
20+
if ((!empty($value) || $value === 0) && is_numeric($value)) {
21+
$exp = $queryBuilder->expr()->gt($gridColumn->getSelect(), (float)$value);
22+
if ($queryBuilder->getDQLParts()['where'] == null) {
23+
$queryBuilder->where($exp);
24+
} else {
25+
$queryBuilder->andWhere($exp);
26+
}
27+
}
28+
}
29+
30+
public function getDisplayName(): string
31+
{
32+
return 'GreaterThan';
33+
}
34+
35+
public function needSecondInput(): bool
36+
{
37+
return false;
38+
}
39+
}

Grid/Filter/GreaterThanOrEqual.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
/**
3+
* Created by Krzysztof Makowski <kontakt@krzysztof-makowski.pl>.
4+
* Project: EMagic
5+
* Date: 29.11.17
6+
* Time: 00:17
7+
*/
8+
9+
namespace Makoso\DatagridBundle\Grid\Filter;
10+
11+
use Makoso\DatagridBundle\Grid\Column\GridColumn;
12+
use Makoso\DatagridBundle\Grid\Grid;
13+
use Doctrine\ORM\QueryBuilder;
14+
15+
class GreaterThanOrEqual implements FilterInterface
16+
{
17+
public function filter(QueryBuilder $queryBuilder, GridColumn $gridColumn, Grid $grid): void
18+
{
19+
$value = $gridColumn->getFilterableValue()['value'];
20+
if ((!empty($value) || $value === 0) && is_numeric($value)) {
21+
$exp = $queryBuilder->expr()->gte($gridColumn->getSelect(), (float)$value);
22+
if ($queryBuilder->getDQLParts()['where'] == null) {
23+
$queryBuilder->where($exp);
24+
} else {
25+
$queryBuilder->andWhere($exp);
26+
}
27+
}
28+
}
29+
30+
public function getDisplayName(): string
31+
{
32+
return 'GreaterThanOrEqual';
33+
}
34+
35+
public function needSecondInput(): bool
36+
{
37+
return false;
38+
}
39+
}

Grid/Filter/LessThan.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
/**
3+
* Created by Krzysztof Makowski <kontakt@krzysztof-makowski.pl>.
4+
* Project: EMagic
5+
* Date: 29.11.17
6+
* Time: 00:17
7+
*/
8+
9+
namespace Makoso\DatagridBundle\Grid\Filter;
10+
11+
use Makoso\DatagridBundle\Grid\Column\GridColumn;
12+
use Makoso\DatagridBundle\Grid\Grid;
13+
use Doctrine\ORM\QueryBuilder;
14+
15+
class LessThan implements FilterInterface
16+
{
17+
public function filter(QueryBuilder $queryBuilder, GridColumn $gridColumn, Grid $grid): void
18+
{
19+
$value = $gridColumn->getFilterableValue()['value'];
20+
if ((!empty($value) || $value === 0) && is_numeric($value)) {
21+
$exp = $queryBuilder->expr()->lt($gridColumn->getSelect(), (float)$value);
22+
if ($queryBuilder->getDQLParts()['where'] == null) {
23+
$queryBuilder->where($exp);
24+
} else {
25+
$queryBuilder->andWhere($exp);
26+
}
27+
}
28+
}
29+
30+
public function getDisplayName(): string
31+
{
32+
return 'LessThan';
33+
}
34+
35+
public function needSecondInput(): bool
36+
{
37+
return false;
38+
}
39+
}

Grid/Filter/LessThanOrEqual.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
/**
3+
* Created by Krzysztof Makowski <kontakt@krzysztof-makowski.pl>.
4+
* Project: EMagic
5+
* Date: 29.11.17
6+
* Time: 00:17
7+
*/
8+
9+
namespace Makoso\DatagridBundle\Grid\Filter;
10+
11+
use Makoso\DatagridBundle\Grid\Column\GridColumn;
12+
use Makoso\DatagridBundle\Grid\Grid;
13+
use Doctrine\ORM\QueryBuilder;
14+
15+
class LessThanOrEqual implements FilterInterface
16+
{
17+
public function filter(QueryBuilder $queryBuilder, GridColumn $gridColumn, Grid $grid): void
18+
{
19+
$value = $gridColumn->getFilterableValue()['value'];
20+
if ((!empty($value) || $value === 0) && is_numeric($value)) {
21+
$exp = $queryBuilder->expr()->lte($gridColumn->getSelect(), (float)$value);
22+
if ($queryBuilder->getDQLParts()['where'] == null) {
23+
$queryBuilder->where($exp);
24+
} else {
25+
$queryBuilder->andWhere($exp);
26+
}
27+
}
28+
}
29+
30+
public function getDisplayName(): string
31+
{
32+
return 'LessThanOrEqual';
33+
}
34+
35+
public function needSecondInput(): bool
36+
{
37+
return false;
38+
}
39+
}

Grid/Filter/NumericGroupFilter.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
/**
3+
* Created by Krzysztof Makowski <kontakt@krzysztof-makowski.pl>.
4+
* Project: EMagic
5+
* Date: 29.11.17
6+
* Time: 13:10
7+
*/
8+
9+
namespace Makoso\DatagridBundle\Grid\Filter;
10+
11+
use Symfony\Component\Form\Extension\Core\Type\NumberType;
12+
13+
class NumericGroupFilter extends FilterGroup
14+
{
15+
protected $firstInputType = NumberType::class;
16+
protected $secondInputType = NumberType::class;
17+
18+
protected $firstInputOptions = [
19+
'label' => false,
20+
'attr' => [
21+
'class' => 'input-1',
22+
],
23+
'required' => false,
24+
'html5' => true,
25+
];
26+
27+
protected $secondInputOptions = [
28+
'label' => false,
29+
'attr' => [
30+
'class' => 'input-2',
31+
],
32+
'required' => false,
33+
'html5' => true,
34+
];
35+
36+
public function __construct()
37+
{
38+
parent::__construct();
39+
$this->filters->add(new EqualFilter());
40+
$this->filters->add(new NotEqualFilter());
41+
$this->filters->add(new Between());
42+
$this->filters->add(new GreaterThan());
43+
$this->filters->add(new GreaterThanOrEqual());
44+
$this->filters->add(new LessThan());
45+
$this->filters->add(new LessThanOrEqual());
46+
}
47+
48+
}

Resources/translations/messages.pl.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ Enable filtering: 'Wybierz filtrowanie'
22
Contains: 'Zawiera'
33
Equal: 'Równe'
44
NotEqual: 'Nie równe'
5+
Between: 'Pomiędzy'
6+
GreaterThan: 'Większe niż'
7+
GreaterThanOrEqual: 'Większe niż lub równe'
8+
LessThan: 'Mniejsze niż'
9+
LessThanOrEqual: 'Mniejsze niż lub równe'
510
Starts with: 'Zaczyna się od:'
611
Ends with: 'Kończy się na:'
712
Page: 'Strona'

0 commit comments

Comments
 (0)