@@ -235,11 +235,83 @@ protected function getLanguageService(): LanguageService
235235 *
236236 * @return null|string|array
237237 */
238- protected function getParametersSafely (string $ parameterName )
238+ protected function getParametersSafely (string $ parameterName, array $ pluginNames = [] )
239239 {
240240 if ($ this ->request ->hasArgument ($ parameterName )) {
241241 return $ this ->request ->getArgument ($ parameterName );
242242 }
243+
244+ if (!empty ($ pluginNames )) {
245+ $ pluginParameter = $ this ->getPluginParameterFromArgument ($ parameterName , $ pluginNames );
246+ if ($ pluginParameter !== null ) {
247+ return $ pluginParameter ;
248+ }
249+ }
250+
251+ $ parsedBody = $ this ->request ->getParsedBody ();
252+ if ($ parsedBody ) {
253+ $ bodyParameter = $ this ->getParameterFromRequestData ($ parameterName , $ parsedBody , $ pluginNames );
254+ if ($ bodyParameter !== null ) {
255+ return $ bodyParameter ;
256+ }
257+ }
258+
259+ $ queryParams = $ this ->request ->getQueryParams ();
260+ if ($ queryParams ) {
261+ $ queryParameter = $ this ->getParameterFromRequestData ($ parameterName , $ queryParams , $ pluginNames );
262+ if ($ queryParameter !== null ) {
263+ return $ queryParameter ;
264+ }
265+ }
266+
267+ return null ;
268+ }
269+
270+
271+ /**
272+ * Safely gets parameters from request if they exist
273+ *
274+ * @param string $parameterName
275+ * @param array $pluginNames
276+ *
277+ * @return null|string|array
278+ */
279+ private function getParameterFromRequestData (string $ parameterName , array $ requestData , array $ pluginNames )
280+ {
281+ if (array_key_exists ($ parameterName , $ requestData )) {
282+ return $ requestData [$ parameterName ];
283+ }
284+
285+ foreach ($ pluginNames as $ pluginName ) {
286+ if (array_key_exists ($ pluginName , $ requestData )) {
287+ $ pluginRequest = $ requestData [$ pluginName ];
288+ if (array_key_exists ($ parameterName , $ pluginRequest )) {
289+ return $ pluginRequest [$ parameterName ];
290+ }
291+ }
292+ }
293+
294+ return null ;
295+ }
296+
297+ /**
298+ * Safely gets plugin parameters from argument if they exist
299+ *
300+ * @param string $parameterName
301+ * @param array $pluginNames
302+ *
303+ * @return null|string|array
304+ */
305+ private function getPluginParameterFromArgument (string $ parameterName , array $ pluginNames )
306+ {
307+ foreach ($ pluginNames as $ pluginName ) {
308+ if ($ this ->request ->hasArgument ($ pluginName )) {
309+ $ pluginRequest = $ this ->request ->getArgument ($ pluginName );
310+ if (array_key_exists ($ parameterName , $ pluginRequest )) {
311+ return $ pluginRequest [$ parameterName ];
312+ }
313+ }
314+ }
243315 return null ;
244316 }
245317
0 commit comments