1313use Solarium \Core \Query \AbstractRequestBuilder ;
1414use Solarium \Core \Query \QueryInterface ;
1515use Solarium \Exception \RuntimeException ;
16- use Solarium \QueryType \ManagedResources \Query \AbstractCommand ;
1716use Solarium \QueryType \ManagedResources \Query \AbstractQuery as BaseQuery ;
1817
1918/**
@@ -36,68 +35,92 @@ public function build(QueryInterface|BaseQuery $query): Request
3635 throw new RuntimeException ('Name of the resource is not set in the query. ' );
3736 }
3837
38+ $ name = rawurlencode ($ query ->getName ());
39+ if ($ query ->getUseDoubleEncoding ()) {
40+ $ name = rawurlencode ($ name );
41+ }
42+
3943 $ request = parent ::build ($ query );
40- // reserved characters in a REST resource name need to be encoded twice to make it through the servlet (SOLR-6853)
41- $ request -> setHandler ( $ query -> getHandler (). rawurlencode ( rawurlencode ( $ query -> getName ())));
44+ $ request -> setHandler ( $ query -> getHandler (). $ name );
45+
4246 if (null !== $ query ->getCommand ()) {
4347 $ request ->setContentType (Request::CONTENT_TYPE_APPLICATION_JSON );
44- $ this ->buildCommand ($ request , $ query -> getCommand () );
48+ $ this ->buildCommand ($ query , $ request );
4549 } else {
4650 // Lists one or all items.
4751 $ request ->setMethod (Request::METHOD_GET );
4852
4953 if (null !== $ term = $ query ->getTerm ()) {
50- // reserved characters in a REST resource name need to be encoded twice to make it through the servlet (SOLR-6853)
51- $ request ->setHandler ($ request ->getHandler ().'/ ' .rawurlencode (rawurlencode ($ term )));
54+ $ term = rawurlencode ($ term );
55+ if ($ query ->getUseDoubleEncoding ()) {
56+ $ term = rawurlencode ($ term );
57+ }
58+
59+ $ request ->setHandler ($ request ->getHandler ().'/ ' .$ term );
5260 }
5361 }
5462
5563 return $ request ;
5664 }
5765
5866 /**
59- * @param Request $request
60- * @param AbstractCommand $command
67+ * @param QueryInterface|BaseQuery $query
68+ * @param Request $request
6169 *
6270 * @throws RuntimeException
6371 *
6472 * @return self Provides fluent interface
6573 */
66- protected function buildCommand (Request $ request , AbstractCommand $ command ): self
74+ protected function buildCommand (QueryInterface | BaseQuery $ query , Request $ request ): self
6775 {
76+ $ command = $ query ->getCommand ();
77+
6878 $ request ->setMethod ($ command ->getRequestMethod ());
6979
7080 switch ($ command ->getType ()) {
7181 case BaseQuery::COMMAND_ADD :
7282 if (null === $ rawData = $ command ->getRawData ()) {
7383 throw new RuntimeException ('Missing data for ADD command. ' );
7484 }
85+
7586 $ request ->setRawData ($ rawData );
7687 break ;
7788 case BaseQuery::COMMAND_CONFIG :
7889 if (null === $ rawData = $ command ->getRawData ()) {
7990 throw new RuntimeException ('Missing initArgs for CONFIG command. ' );
8091 }
92+
8193 $ request ->setRawData ($ rawData );
8294 break ;
8395 case BaseQuery::COMMAND_CREATE :
8496 if (null === $ rawData = $ command ->getRawData ()) {
8597 throw new RuntimeException ('Missing class for CREATE command. ' );
8698 }
99+
87100 $ request ->setRawData ($ rawData );
88101 break ;
89102 case BaseQuery::COMMAND_DELETE :
90103 if (null === $ term = $ command ->getTerm ()) {
91104 throw new RuntimeException ('Missing term for DELETE command. ' );
92105 }
93- // reserved characters in a REST resource name need to be encoded twice to make it through the servlet (SOLR-6853)
94- $ request ->setHandler ($ request ->getHandler ().'/ ' .rawurlencode (rawurlencode ($ command ->getTerm ())));
106+
107+ $ term = rawurlencode ($ term );
108+ if ($ query ->getUseDoubleEncoding ()) {
109+ $ term = rawurlencode ($ term );
110+ }
111+
112+ $ request ->setHandler ($ request ->getHandler ().'/ ' .$ term );
95113 break ;
96114 case BaseQuery::COMMAND_EXISTS :
97115 if (null !== $ term = $ command ->getTerm ()) {
98- // reserved characters in a REST resource name need to be encoded twice to make it through the servlet (SOLR-6853)
99- $ request ->setHandler ($ request ->getHandler ().'/ ' .rawurlencode (rawurlencode ($ command ->getTerm ())));
116+ $ term = rawurlencode ($ term );
117+ if ($ query ->getUseDoubleEncoding ()) {
118+ $ term = rawurlencode ($ term );
119+ }
120+
121+ $ request ->setHandler ($ request ->getHandler ().'/ ' .$ term );
100122 }
123+
101124 break ;
102125 case BaseQuery::COMMAND_REMOVE :
103126 break ;
0 commit comments