File tree 8 files changed +216
-0
lines changed
8 files changed +216
-0
lines changed Original file line number Diff line number Diff line change
1
+ .idea
Original file line number Diff line number Diff line change
1
+ {
2
+ "name" : " temperworks/laravel-filter-scopes" ,
3
+ "description" : " Seperate model filters into reusable scopes that map into the right filters based on URL params." ,
4
+ "type" : " package" ,
5
+ "homepage" : " https://github.com/temperworks/laravel-filter-scopes" ,
6
+ "license" : " MIT" ,
7
+ "authors" : [
8
+ {
9
+ "name" : " Yordi de Kleijn" ,
10
+ "email" : " yordi@temper.works" ,
11
+ "homepage" : " https://temper.works" ,
12
+ "role" : " Developer"
13
+ }
14
+ ],
15
+ "require" : {
16
+ "php" : " >=5.5.0"
17
+ },
18
+ "require-dev" : {
19
+ "phpunit/phpunit" : " 4.*"
20
+ },
21
+ "autoload" : {
22
+ "psr-4" : {
23
+ "TemperWorks\\ FilterScopes\\ " : " src"
24
+ }
25
+ },
26
+ "extra" : {
27
+ "laravel" : {
28
+ "providers" : [
29
+
30
+ ]
31
+ }
32
+ }
33
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace TemperWorks \FilterScopes ;
4
+
5
+ use Illuminate \Http \Request ;
6
+ use Illuminate \Database \Eloquent \Builder ;
7
+
8
+ abstract class QueryFilters
9
+ {
10
+ /**
11
+ * The request object.
12
+ *
13
+ * @var Request
14
+ */
15
+ protected $ request ;
16
+
17
+ /**
18
+ * The builder instance.
19
+ *
20
+ * @var Builder
21
+ */
22
+ protected $ builder ;
23
+
24
+ /**
25
+ * Create a new QueryFilters instance.
26
+ *
27
+ * @param Request $request
28
+ */
29
+ public function __construct (Request $ request )
30
+ {
31
+ $ this ->request = $ request ;
32
+ }
33
+
34
+ /**
35
+ * Apply the filters to the builder.
36
+ *
37
+ * @param Builder $builder
38
+ * @return Builder
39
+ */
40
+ public function apply (Builder $ builder ): Builder
41
+ {
42
+ $ this ->builder = $ builder ;
43
+
44
+ foreach ($ this ->filters () as $ name => $ value ) {
45
+ if (isset ($ this ->lookup )) {
46
+ $ name = isset ($ this ->lookup [$ name ]) ? $ this ->lookup [$ name ] : $ name ;
47
+ }
48
+
49
+ if (! method_exists ($ this , $ name )) {
50
+ continue ;
51
+ }
52
+
53
+ if ($ value && strlen ($ value )) {
54
+ $ this ->$ name ($ value );
55
+ } else {
56
+ $ this ->$ name ();
57
+ }
58
+ }
59
+
60
+ return $ this ->builder ;
61
+ }
62
+
63
+ /**
64
+ * Get all request filters data.
65
+ *
66
+ * @return array
67
+ */
68
+ public function filters (): array
69
+ {
70
+ return $ this ->request ->all ();
71
+ }
72
+
73
+ public function overrideRequest (Request $ request )
74
+ {
75
+ $ this ->request = $ request ;
76
+ }
77
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace TemperWorks \FilterScopes \Traits ;
4
+
5
+ use Illuminate \Database \Eloquent \Builder ;
6
+ use TemperWorks \FilterScopes \QueryFilters ;
7
+
8
+ trait Filterable
9
+ {
10
+ /**
11
+ * Filter a result set.
12
+ *
13
+ * @param Builder $query
14
+ * @param QueryFilters $filters
15
+ * @return Builder
16
+ */
17
+ public function scopeFilter (Builder $ query , QueryFilters $ filters ): Builder
18
+ {
19
+ return $ filters ->apply ($ query );
20
+ }
21
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace TemperWorks \FilterScopes \Traits ;
4
+
5
+ trait ParseArrayInput {
6
+
7
+ public function parseInput ($ input )
8
+ {
9
+ return explode (', ' , $ input );
10
+ }
11
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace TemperWorks \FilterScopes \Traits ;
4
+
5
+ use Carbon \Carbon ;
6
+
7
+ trait ParseDateArrayInput {
8
+
9
+ /**
10
+ * Parse scope input
11
+ *
12
+ * @param $input
13
+ * @return array
14
+ */
15
+ public function parseInput ($ input )
16
+ {
17
+ $ dates = explode (', ' , $ input );
18
+
19
+ return array_map (function ($ date ) {
20
+ return Carbon::parse ($ date )->startOfDay ()->toDateString ();
21
+ }, $ dates );
22
+ }
23
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace TemperWorks \FilterScopes \Traits ;
4
+
5
+ use Validator ;
6
+
7
+ trait ValidateArrayInput {
8
+ /**
9
+ * Validate given scope input
10
+ *
11
+ * @param $input
12
+ * @param array $extend
13
+ * @param string $originalResourceKey
14
+ * @return bool
15
+ */
16
+ public function validate ($ input , $ extend = [], $ originalResourceKey = 'input ' )
17
+ {
18
+ $ input = [$ originalResourceKey => $ input ];
19
+
20
+ Validator::make ($ input , array_merge ([
21
+ $ originalResourceKey => 'array '
22
+ ], $ extend ))->validate ();
23
+
24
+ return true ;
25
+ }
26
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace TemperWorks \FilterScopes \Traits ;
4
+
5
+ use Validator ;
6
+
7
+ trait ValidateInput {
8
+ /**
9
+ * Validate given scope input
10
+ *
11
+ * @param $input
12
+ * @param array $extend
13
+ * @param string $originalResourceKey
14
+ * @return bool
15
+ */
16
+ public function validate ($ input , $ extend = [], $ originalResourceKey = 'input ' )
17
+ {
18
+ $ input = [$ originalResourceKey => $ input ];
19
+
20
+ Validator::make ($ input , $ extend )->validate ();
21
+
22
+ return true ;
23
+ }
24
+ }
You can’t perform that action at this time.
0 commit comments