Skip to content
This repository was archived by the owner on Sep 6, 2023. It is now read-only.

Commit 242641f

Browse files
committed
Add filters in filters.php and refactoring code
1 parent 7bd3f47 commit 242641f

File tree

5 files changed

+81
-104
lines changed

5 files changed

+81
-104
lines changed

ggrachdev.debugbar/classes/general/BitrixDebugger/Debugger/FilterDebugger.php

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class FilterDebugger extends ConfigurationDebugger {
3131
*/
3232
public function __call($name, $arguments) {
3333

34-
if($this->getFiltrator()->hasCustomFilter($name))
34+
if($this->getFiltrator()->hasFilter($name))
3535
{
3636
$this->getFiltrator()->addFilter($name, $arguments);
3737
}
@@ -48,7 +48,7 @@ public function getFiltrator(): FiltratorContract {
4848
}
4949

5050
public function addFilter(string $nameMethod, callable $callback): self {
51-
$this->getFiltrator()->addCustomFilter($nameMethod, $callback);
51+
$this->getFiltrator()->addFilterRule($nameMethod, $callback);
5252
return $this;
5353
}
5454

@@ -82,28 +82,4 @@ public function filtrateItem($itemData) {
8282
return $this->getFiltrator()->filtrate($itemData);
8383
}
8484

85-
public function first(): self {
86-
$this->getFiltrator()->addFilter('first');
87-
return $this;
88-
}
89-
90-
public function last(): self {
91-
$this->getFiltrator()->addFilter('last');
92-
return $this;
93-
}
94-
95-
public function keys(array $availableKeys = []): self {
96-
$this->getFiltrator()->addFilter('keys', [
97-
'keys' => $availableKeys
98-
]);
99-
return $this;
100-
}
101-
102-
public function limit(int $limit = 10): self {
103-
$this->getFiltrator()->addFilter('limit', [
104-
'count' => $limit
105-
]);
106-
return $this;
107-
}
108-
10985
}

ggrachdev.debugbar/classes/general/Filtrator/Filtrator.php

Lines changed: 14 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@
99
*/
1010
class Filtrator implements FiltratorContract {
1111

12-
public const FILTERS_NAME = [
13-
'limit', 'first', 'last', 'keys'
14-
];
15-
1612
private $customFilters = [];
1713

1814
/**
@@ -22,91 +18,43 @@ class Filtrator implements FiltratorContract {
2218
*/
2319
protected $sequenceFilters;
2420

25-
public function addFilter(string $filterType, array $filterParams = []): void {
26-
if ($this->hasFilter($filterType) || $this->hasCustomFilter($filterType)) {
27-
$this->sequenceFilters[] = [
28-
'type' => $filterType,
29-
'params' => $filterParams
30-
];
31-
}
32-
}
33-
34-
public function filtrateItem(string $filterType, array $filterParams, $data) {
35-
switch ($filterType) {
36-
case 'limit':
37-
if (\is_array($data) && !empty($data)) {
38-
if (empty($filterParams['count']) || $filterParams['count'] < 1) {
39-
$filterParams['count'] = 10;
40-
}
41-
$data = array_slice($data, 0, $filterParams['count'], true);
42-
}
43-
break;
44-
case 'first':
45-
if (\is_array($data) && !empty($data)) {
46-
$data = array_shift($data);
47-
}
48-
break;
49-
case 'keys':
50-
if (\is_array($data) && !empty($data) && !empty($filterParams['keys'])) {
51-
$newData = [];
52-
53-
foreach ($data as $k => $v) {
54-
if (\in_array($k, $filterParams['keys'])) {
55-
$newData[$k] = $v;
56-
}
57-
}
58-
59-
$data = $newData;
60-
}
61-
break;
62-
case 'last':
63-
if (\is_array($data) && !empty($data)) {
64-
$data = array_pop($data);
65-
}
66-
break;
67-
}
68-
69-
return $data;
70-
}
71-
7221
public function clearFilters(): void {
7322
$this->sequenceFilters = [];
7423
}
7524

7625
public function filtrate($data) {
7726
if (!empty($this->sequenceFilters) && !empty($data)) {
7827
foreach ($this->sequenceFilters as $arFilter) {
79-
if($this->hasCustomFilter($arFilter['type']))
80-
{
81-
$data = $this->customFiltrateItem($arFilter['type'], $arFilter['params'], $data);
82-
}
83-
else {
84-
$data = $this->filtrateItem($arFilter['type'], $arFilter['params'], $data);
85-
}
28+
$data = $this->filtrateItem($arFilter['type'], $arFilter['params'], $data);
8629
}
8730
}
8831

8932
return $data;
9033
}
9134

35+
public function addFilter(string $filterType, array $filterParams = []): void {
36+
if ($this->hasFilter($filterType)) {
37+
$this->sequenceFilters[] = [
38+
'type' => $filterType,
39+
'params' => $filterParams
40+
];
41+
}
42+
}
43+
9244
public function hasFilter(string $filterType): bool {
93-
return \in_array($filterType, self::FILTERS_NAME);
45+
return \array_key_exists($filterType, $this->customFilters);
9446
}
9547

96-
public function addCustomFilter(string $filterName, callable $callback) {
97-
if (!$this->hasCustomFilter($filterName)) {
48+
public function addFilterRule(string $filterName, callable $callback): FiltratorContract {
49+
if (!$this->hasFilter($filterName)) {
9850
$this->customFilters[$filterName] = $callback;
9951
}
10052

10153
return $this;
10254
}
10355

104-
public function customFiltrateItem(string $filterType, array $filterParams, $data) {
56+
public function filtrateItem(string $filterType, array $filterParams, $data) {
10557
return $this->customFilters[$filterType]($data, $filterParams);
10658
}
10759

108-
public function hasCustomFilter(string $filterName) {
109-
return \array_key_exists($filterName, $this->customFilters);
110-
}
111-
11260
}

ggrachdev.debugbar/classes/general/Filtrator/FiltratorContract.php

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,16 @@
22

33
namespace GGrach\Filtrator;
44

5-
/**
6-
*
7-
* @author ggrachdev
8-
*/
95
interface FiltratorContract {
106
public function filtrate($data);
117

12-
public function addCustomFilter(string $filterName, callable $callback);
8+
public function hasFilter(string $filterType): bool;
139

14-
public function hasCustomFilter(string $filterName);
10+
public function addFilterRule(string $filterName, callable $callback): self;
1511

16-
public function customFiltrateItem(string $filterType, array $filterParams, $data);
12+
public function addFilter(string $filterType, array $filterParams = []): void;
1713

1814
public function filtrateItem(string $filterType, array $filterParams, $data);
1915

20-
public function addFilter(string $filterType, array $filterParams): void;
21-
22-
public function hasFilter(string $filterType): bool;
23-
2416
public function clearFilters(): void;
2517
}

ggrachdev.debugbar/filters.php

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?php
2+
3+
DD()->addFilter('values', function ($data, $filterParams) {
4+
if (\is_array($data)) {
5+
return \array_values($data);
6+
} else {
7+
return $data;
8+
}
9+
});
10+
11+
DD()->addFilter('limit', function ($data, $filterParams) {
12+
if (\is_array($data) && !empty($data)) {
13+
if (empty($filterParams[0]) || !\is_numeric($filterParams[0]) || $filterParams[0] < 1) {
14+
$count = 10;
15+
} else {
16+
$count = $filterParams[0];
17+
}
18+
$data = array_slice($data, 0, $count, true);
19+
}
20+
21+
return $data;
22+
});
23+
24+
DD()->addFilter('first', function ($data, $filterParams) {
25+
if (\is_array($data) && !empty($data)) {
26+
$data = array_shift($data);
27+
}
28+
29+
return $data;
30+
});
31+
32+
DD()->addFilter('keys', function ($data, $filterParams) {
33+
34+
if (
35+
!empty($data) &&
36+
is_array($data) &&
37+
!empty($filterParams[0]) &&
38+
\is_array($filterParams[0])
39+
) {
40+
$newData = [];
41+
42+
foreach ($data as $k => $v) {
43+
if (\in_array($k, $filterParams[0])) {
44+
$newData[$k] = $v;
45+
}
46+
}
47+
48+
$data = $newData;
49+
}
50+
51+
return $data;
52+
});
53+
54+
DD()->addFilter('last', function ($data, $filterParams) {
55+
if (\is_array($data) && !empty($data)) {
56+
$data = array_pop($data);
57+
}
58+
59+
return $data;
60+
});

ggrachdev.debugbar/include.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
// Папка где хранятся js
1212
$ggrachDirJs = "/bitrix/js/ggrachdev.debugbar";
1313

14-
// Папка где хранятся css
14+
// Папка где хранятся css
1515
$ggrachDirCss = "/bitrix/css/ggrachdev.debugbar";
1616

1717
Bitrix\Main\Loader::registerAutoLoadClasses('ggrachdev.debugbar', [
@@ -82,6 +82,7 @@ function DD(...$data) {
8282
Asset::getInstance()->addCss($ggrachDirCss . '/general.css');
8383
Asset::getInstance()->addCss($ggrachDirCss . '/' . $ggrachDebugBarConfigurator->getColorTheme() . '/theme.css');
8484

85+
include 'filters.php';
8586
include 'functions.php';
8687
include 'events.php';
8788
}

0 commit comments

Comments
 (0)