14
14
namespace ApiPlatform \Core \Upgrade ;
15
15
16
16
use ApiPlatform \Core \Annotation \ApiFilter as LegacyApiFilter ;
17
- use ApiPlatform \Core \Bridge \Doctrine \Odm \Filter \BooleanFilter as LegacyOdmBooleanFilter ;
18
- use ApiPlatform \Core \Bridge \Doctrine \Odm \Filter \DateFilter as LegacyOdmDateFilter ;
19
- use ApiPlatform \Core \Bridge \Doctrine \Odm \Filter \ExistsFilter as LegacyOdmExistsFilter ;
20
- use ApiPlatform \Core \Bridge \Doctrine \Odm \Filter \NumericFilter as LegacyOdmNumericFilter ;
21
- use ApiPlatform \Core \Bridge \Doctrine \Odm \Filter \OrderFilter as LegacyOdmOrderFilter ;
22
- use ApiPlatform \Core \Bridge \Doctrine \Odm \Filter \RangeFilter as LegacyOdmRangeFilter ;
23
- use ApiPlatform \Core \Bridge \Doctrine \Odm \Filter \SearchFilter as LegacyOdmSearchFilter ;
17
+ use ApiPlatform \Core \Bridge \Doctrine \MongoDbOdm \Filter \BooleanFilter as LegacyOdmBooleanFilter ;
18
+ use ApiPlatform \Core \Bridge \Doctrine \MongoDbOdm \Filter \DateFilter as LegacyOdmDateFilter ;
19
+ use ApiPlatform \Core \Bridge \Doctrine \MongoDbOdm \Filter \ExistsFilter as LegacyOdmExistsFilter ;
20
+ use ApiPlatform \Core \Bridge \Doctrine \MongoDbOdm \Filter \NumericFilter as LegacyOdmNumericFilter ;
21
+ use ApiPlatform \Core \Bridge \Doctrine \MongoDbOdm \Filter \OrderFilter as LegacyOdmOrderFilter ;
22
+ use ApiPlatform \Core \Bridge \Doctrine \MongoDbOdm \Filter \RangeFilter as LegacyOdmRangeFilter ;
23
+ use ApiPlatform \Core \Bridge \Doctrine \MongoDbOdm \Filter \SearchFilter as LegacyOdmSearchFilter ;
24
24
use ApiPlatform \Core \Bridge \Doctrine \Orm \Filter \BooleanFilter as LegacyOrmBooleanFilter ;
25
25
use ApiPlatform \Core \Bridge \Doctrine \Orm \Filter \DateFilter as LegacyOrmDateFilter ;
26
26
use ApiPlatform \Core \Bridge \Doctrine \Orm \Filter \ExistsFilter as LegacyOrmExistsFilter ;
27
27
use ApiPlatform \Core \Bridge \Doctrine \Orm \Filter \NumericFilter as LegacyOrmNumericFilter ;
28
28
use ApiPlatform \Core \Bridge \Doctrine \Orm \Filter \OrderFilter as LegacyOrmOrderFilter ;
29
29
use ApiPlatform \Core \Bridge \Doctrine \Orm \Filter \RangeFilter as LegacyOrmRangeFilter ;
30
30
use ApiPlatform \Core \Bridge \Doctrine \Orm \Filter \SearchFilter as LegacyOrmSearchFilter ;
31
- use ApiPlatform \Doctrine \Odm \Filter \BooleanFilter as OdmBooleanFilter ;;
32
- use ApiPlatform \Doctrine \Odm \Filter \DateFilter as OdmDateFilter ;;
33
- use ApiPlatform \Doctrine \Odm \Filter \ExistsFilter as OdmExistsFilter ;;
34
- use ApiPlatform \Doctrine \Odm \Filter \NumericFilter as OdmNumericFilter ;;
35
- use ApiPlatform \Doctrine \Odm \Filter \OrderFilter as OdmOrderFilter ;;
36
- use ApiPlatform \Doctrine \Odm \Filter \RangeFilter as OdmRangeFilter ;;
37
- use ApiPlatform \Doctrine \Odm \Filter \SearchFilter as OdmSearchFilter ;;
38
- use ApiPlatform \Doctrine \Orm \Filter \BooleanFilter as OrmBooleanFilter ;;
39
- use ApiPlatform \Doctrine \Orm \Filter \DateFilter as OrmDateFilter ;;
40
- use ApiPlatform \Doctrine \Orm \Filter \ExistsFilter as OrmExistsFilter ;;
41
- use ApiPlatform \Doctrine \Orm \Filter \NumericFilter as OrmNumericFilter ;;
42
- use ApiPlatform \Doctrine \Orm \Filter \OrderFilter as OrmOrderFilter ;;
43
- use ApiPlatform \Doctrine \Orm \Filter \RangeFilter as OrmRangeFilter ;;
44
- use ApiPlatform \Doctrine \Orm \Filter \SearchFilter as OrmSearchFilter ;;
31
+ use ApiPlatform \Core \Serializer \Filter \GroupFilter as LegacyGroupFilter ;
32
+ use ApiPlatform \Core \Serializer \Filter \PropertyFilter as LegacyPropertyFilter ;
33
+ use ApiPlatform \Doctrine \Odm \Filter \BooleanFilter as OdmBooleanFilter ;
34
+ use ApiPlatform \Doctrine \Odm \Filter \DateFilter as OdmDateFilter ;
35
+ use ApiPlatform \Doctrine \Odm \Filter \ExistsFilter as OdmExistsFilter ;
36
+ use ApiPlatform \Doctrine \Odm \Filter \NumericFilter as OdmNumericFilter ;
37
+ use ApiPlatform \Doctrine \Odm \Filter \OrderFilter as OdmOrderFilter ;
38
+ use ApiPlatform \Doctrine \Odm \Filter \RangeFilter as OdmRangeFilter ;
39
+ use ApiPlatform \Doctrine \Odm \Filter \SearchFilter as OdmSearchFilter ;
40
+ use ApiPlatform \Doctrine \Orm \Filter \BooleanFilter as OrmBooleanFilter ;
41
+ use ApiPlatform \Doctrine \Orm \Filter \DateFilter as OrmDateFilter ;
42
+ use ApiPlatform \Doctrine \Orm \Filter \ExistsFilter as OrmExistsFilter ;
43
+ use ApiPlatform \Doctrine \Orm \Filter \NumericFilter as OrmNumericFilter ;
44
+ use ApiPlatform \Doctrine \Orm \Filter \OrderFilter as OrmOrderFilter ;
45
+ use ApiPlatform \Doctrine \Orm \Filter \RangeFilter as OrmRangeFilter ;
46
+ use ApiPlatform \Doctrine \Orm \Filter \SearchFilter as OrmSearchFilter ;
45
47
use ApiPlatform \Metadata \ApiFilter ;
46
48
use ApiPlatform \Metadata \Resource \DeprecationMetadataTrait ;
49
+ use ApiPlatform \Serializer \Filter \GroupFilter ;
50
+ use ApiPlatform \Serializer \Filter \PropertyFilter ;
47
51
use Doctrine \Common \Annotations \AnnotationReader ;
48
52
use PhpParser \Node ;
49
53
use PhpParser \NodeVisitorAbstract ;
@@ -68,55 +72,59 @@ public function __construct(?AnnotationReader $reader, string $resourceClass)
68
72
public function enterNode (Node $ node )
69
73
{
70
74
if ($ node instanceof Node \Stmt \Namespace_) {
71
- $ namespaces = [
72
- ApiFilter::class,
73
- OdmSearchFilter::class,
74
- OdmExistsFilter::class,
75
- OdmDateFilter::class,
76
- OdmBooleanFilter::class,
77
- OdmNumericFilter::class,
78
- OdmOrderFilter::class,
79
- OdmRangeFilter::class,
80
- OrmSearchFilter::class,
81
- OrmExistsFilter::class,
82
- OrmDateFilter::class,
83
- OrmBooleanFilter::class,
84
- OrmNumericFilter::class,
85
- OrmOrderFilter::class,
86
- OrmRangeFilter::class,
87
- ];
75
+ $ namespaces = [ApiFilter::class];
88
76
89
77
$ legacyNamespaces = [
90
- LegacyApiFilter::class,
91
- LegacyOdmSearchFilter::class,
92
- LegacyOdmExistsFilter::class,
93
- LegacyOdmDateFilter::class,
94
- LegacyOdmBooleanFilter::class,
95
- LegacyOdmNumericFilter::class,
96
- LegacyOdmOrderFilter::class,
97
- LegacyOdmRangeFilter::class,
98
- LegacyOrmSearchFilter::class,
99
- LegacyOrmExistsFilter::class,
100
- LegacyOrmDateFilter::class,
101
- LegacyOrmBooleanFilter::class,
102
- LegacyOrmNumericFilter::class,
103
- LegacyOrmOrderFilter::class,
104
- LegacyOrmRangeFilter::class,
78
+ LegacyApiFilter::class => ApiFilter::class,
79
+ LegacyOdmSearchFilter::class => OdmSearchFilter::class,
80
+ LegacyOdmExistsFilter::class => OdmExistsFilter::class,
81
+ LegacyOdmDateFilter::class => OdmDateFilter::class,
82
+ LegacyOdmBooleanFilter::class => OdmBooleanFilter::class,
83
+ LegacyOdmNumericFilter::class => OdmNumericFilter::class,
84
+ LegacyOdmOrderFilter::class => OdmOrderFilter::class,
85
+ LegacyOdmRangeFilter::class => OdmRangeFilter::class,
86
+ LegacyOrmSearchFilter::class => OrmSearchFilter::class,
87
+ LegacyOrmExistsFilter::class => OrmExistsFilter::class,
88
+ LegacyOrmDateFilter::class => OrmDateFilter::class,
89
+ LegacyOrmBooleanFilter::class => OrmBooleanFilter::class,
90
+ LegacyOrmNumericFilter::class => OrmNumericFilter::class,
91
+ LegacyOrmOrderFilter::class => OrmOrderFilter::class,
92
+ LegacyOrmRangeFilter::class => OrmRangeFilter::class,
93
+ LegacyPropertyFilter::class => PropertyFilter::class,
94
+ LegacyGroupFilter::class => GroupFilter::class,
105
95
];
106
96
97
+ foreach ($ this ->readApiFilters ($ this ->reflectionClass ) as $ annotation ) {
98
+ [$ filterAnnotation ,] = $ annotation ;
99
+ if (isset ($ legacyNamespaces [$ filterAnnotation ->filterClass ])) {
100
+ $ namespaces [] = $ legacyNamespaces [$ filterAnnotation ->filterClass ];
101
+ }
102
+ }
103
+
104
+ foreach ($ this ->reflectionClass ->getProperties () as $ reflectionProperty ) {
105
+ foreach ($ this ->readApiFilters ($ reflectionProperty ) as $ annotation ) {
106
+ [$ filterAnnotation ,] = $ annotation ;
107
+ if (isset ($ legacyNamespaces [$ filterAnnotation ->filterClass ])) {
108
+ $ namespaces [] = $ legacyNamespaces [$ filterAnnotation ->filterClass ];
109
+ }
110
+ }
111
+ }
112
+
113
+ $ namespaces = array_unique ($ namespaces );
114
+
107
115
foreach ($ node ->stmts as $ k => $ stmt ) {
108
116
if (!$ stmt instanceof Node \Stmt \Use_) {
109
117
break ;
110
118
}
111
119
112
120
$ useStatement = implode ('\\' , $ stmt ->uses [0 ]->name ->parts );
113
121
114
- foreach ( $ legacyNamespaces as $ legacyNamespace ) {
122
+ foreach ( array_keys ( $ legacyNamespaces) as $ legacyNamespace ) {
115
123
if ($ legacyNamespace === $ useStatement ) {
116
124
unset($ node ->stmts [$ k ]);
117
- continue ;
118
125
}
119
126
}
127
+
120
128
if (false !== ($ key = array_search ($ useStatement , $ namespaces , true ))) {
121
129
unset($ namespaces [$ key ]);
122
130
}
@@ -134,10 +142,9 @@ public function enterNode(Node $node)
134
142
}
135
143
136
144
if ($ node instanceof Node \Stmt \Property || $ node instanceof Node \Stmt \Class_ || $ node instanceof Node \Stmt \Interface_) {
145
+ $ reflection = $ this ->reflectionClass ;
137
146
if ($ node instanceof Node \Stmt \Property) {
138
147
$ reflection = $ this ->reflectionClass ->getProperty ($ node ->props [0 ]->name ->__toString ());
139
- } else {
140
- $ reflection = $ this ->reflectionClass ;
141
148
}
142
149
143
150
foreach ($ this ->readApiFilters ($ reflection ) as $ annotation ) {
@@ -151,6 +158,7 @@ public function enterNode(Node $node)
151
158
$ arguments = [];
152
159
153
160
foreach ([
161
+ 'id ' ,
154
162
'strategy ' ,
155
163
'filterClass ' ,
156
164
'properties ' ,
@@ -164,12 +172,12 @@ public function enterNode(Node $node)
164
172
$ arguments [$ key ] = $ this ->valueToNode ($ value );
165
173
}
166
174
167
- array_unshift ( $ node ->attrGroups , new Node \AttributeGroup ([
175
+ $ node ->attrGroups [] = new Node \AttributeGroup ([
168
176
new Node \Attribute (
169
177
new Node \Name ('ApiFilter ' ),
170
178
$ this ->arrayToArguments ($ arguments ),
171
179
),
172
- ])) ;
180
+ ]);
173
181
}
174
182
}
175
183
}
0 commit comments