From 1b7bc49da99567a0ee3b94ddc3c4fbc226519b12 Mon Sep 17 00:00:00 2001
From: Tobias Gross-Vogt <tobias.gross-vogt@tugraz.at>
Date: Tue, 21 Feb 2023 12:12:55 +0100
Subject: [PATCH] new custom expression language function 'isNullOrEmpty'

---
 .../AbstractAuthorizationService.php          |  1 +
 .../StringExpressionFunctionProvider.php      | 25 +++++++++++++++++++
 src/ExpressionLanguage/ExpressionLanguage.php |  2 ++
 3 files changed, 28 insertions(+)
 create mode 100644 src/ExpressionLanguage/ExpressionFunctionProviders/StringExpressionFunctionProvider.php

diff --git a/src/Authorization/AbstractAuthorizationService.php b/src/Authorization/AbstractAuthorizationService.php
index a100ab6..d89171c 100644
--- a/src/Authorization/AbstractAuthorizationService.php
+++ b/src/Authorization/AbstractAuthorizationService.php
@@ -213,6 +213,7 @@ abstract class AbstractAuthorizationService implements ContextAwareNormalizerInt
     {
         $roleExpressions = [];
         foreach ($entitiesConfigNode as $entityShortName => $entityNode) {
+            dump($entityNode);
             $entityClassName = $entityNode[AuthorizationConfigDefinition::ENTITY_CLASS_NAME_CONFIG_NODE];
             $attributeNames = [];
 
diff --git a/src/ExpressionLanguage/ExpressionFunctionProviders/StringExpressionFunctionProvider.php b/src/ExpressionLanguage/ExpressionFunctionProviders/StringExpressionFunctionProvider.php
new file mode 100644
index 0000000..5865785
--- /dev/null
+++ b/src/ExpressionLanguage/ExpressionFunctionProviders/StringExpressionFunctionProvider.php
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Dbp\Relay\CoreBundle\ExpressionLanguage\ExpressionFunctionProviders;
+
+use Dbp\Relay\CoreBundle\Helpers\Tools;
+use Symfony\Component\ExpressionLanguage\ExpressionFunction;
+use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;
+
+class StringExpressionFunctionProvider implements ExpressionFunctionProviderInterface
+{
+    public function getFunctions(): array
+    {
+        return [
+            new ExpressionFunction('isNullOrEmpty',
+                function (string $varName): string {
+                    return sprintf('isNullOrEmpty(%s)', $varName);
+                },
+                function ($arguments, $varName): bool {
+                    return Tools::isNullOrEmpty($varName);
+                }),
+        ];
+    }
+}
diff --git a/src/ExpressionLanguage/ExpressionLanguage.php b/src/ExpressionLanguage/ExpressionLanguage.php
index 9c77668..fe72647 100644
--- a/src/ExpressionLanguage/ExpressionLanguage.php
+++ b/src/ExpressionLanguage/ExpressionLanguage.php
@@ -10,6 +10,7 @@ use Dbp\Relay\CoreBundle\ExpressionLanguage\ExpressionFunctionProviders\MapExpre
 use Dbp\Relay\CoreBundle\ExpressionLanguage\ExpressionFunctionProviders\PhpArrayExpressionFunctionProvider;
 use Dbp\Relay\CoreBundle\ExpressionLanguage\ExpressionFunctionProviders\PhpNumericExpressionFunctionProvider;
 use Dbp\Relay\CoreBundle\ExpressionLanguage\ExpressionFunctionProviders\PhpStringExpressionFunctionProvider;
+use Dbp\Relay\CoreBundle\ExpressionLanguage\ExpressionFunctionProviders\StringExpressionFunctionProvider;
 use Psr\Cache\CacheItemPoolInterface;
 use Symfony\Component\ExpressionLanguage\ExpressionLanguage as SymfonyExpressionLanguage;
 
@@ -24,6 +25,7 @@ class ExpressionLanguage extends SymfonyExpressionLanguage
             new PhpNumericExpressionFunctionProvider(),
             new PhpStringExpressionFunctionProvider(),
             new ArrayExpressionFunctionProvider(),
+            new StringExpressionFunctionProvider(),
         ], $providers);
 
         parent::__construct($cache, $providers);
-- 
GitLab