Explorar el Código

feat: ✨ Added several functions to the ExtensionHelper

IceToast hace 2 años
padre
commit
3909202958
Se han modificado 2 ficheros con 67 adiciones y 34 borrados
  1. 62 25
      app/Helpers/ExtensionHelper.php
  2. 5 9
      app/Http/Controllers/Admin/PaymentController.php

+ 62 - 25
app/Helpers/ExtensionHelper.php

@@ -4,44 +4,81 @@ namespace App\Helpers;
 
 class ExtensionHelper
 {
-    public static function getExtensionConfig($extensionName, $nameSpace)
+    /**
+     * Get a config of an extension by its name
+     * @param string $extensionName
+     * @param string $configname
+     */
+    public static function getExtensionConfig(string $extensionName, string $configname)
     {
-        $extension = app_path() . '/Extensions/' . $nameSpace . "/" . $extensionName . "/index.php";
-        // Check if extension exists
-        if (!file_exists($extension)) {
-            return null;
-        }
+        $extensions = ExtensionHelper::getAllExtensions();
 
-        // call the getConfig function from the index.php file of the extension
-        $config = include_once $extension;
+        // call the getConfig function of the config file of the extension like that
+        // call_user_func("App\\Extensions\\PaymentGateways\\Stripe" . "\\getConfig");
+        foreach ($extensions as $extension) {
+            if (!(basename($extension) ==  $extensionName)) {
+                continue;
+            }
 
-        // Check if the getConfig function exists
-        if (!function_exists('get' . $extensionName . 'Config')) {
-            return null;
-        }
+            $configFile = $extension . '/config.php';
+            if (file_exists($configFile)) {
+                include_once $configFile;
+                $config = call_user_func('App\\Extensions\\' . basename(dirname($extension)) . '\\' . basename($extension) . "\\getConfig");
+            }
 
-        $config = call_user_func('get' . $extensionName . 'Config');
 
-        // Check if the getConfig function returned an array
-        if (!is_array($config)) {
-            return null;
+            if (isset($config[$configname])) {
+                return $config[$configname];
+            }
         }
 
-        return $config;
+        return null;
     }
 
-    public static function getPayMethod($extensionName, $nameSpace)
+    public static function getAllCsrfIgnoredRoutes()
     {
-        // return the payment method of the extension to be used elsewhere
-        // for example in the payment controller
-        // the function starts with the name of the extension and ends with Pay
+        $extensions = ExtensionHelper::getAllExtensions();
+
+        $routes = [];
+        foreach ($extensions as $extension) {
+            $configFile = $extension . '/config.php';
+            if (file_exists($configFile)) {
+                include_once $configFile;
+                $config = call_user_func('App\\Extensions\\' . basename(dirname($extension)) . '\\' . basename($extension) . "\\getConfig");
+            }
+
+            if (isset($config['RoutesIgnoreCsrf'])) {
+                $routes = array_merge($routes, $config['RoutesIgnoreCsrf']);
+            }
+
+            // add extension/ infront of every route
+            foreach ($routes as $key => $route) {
+                $routes[$key] = 'extensions/' . $route;
+            }
+        }
 
-        $config = self::getExtensionConfig($extensionName, $nameSpace);
+        return $routes;
+    }
 
-        if ($config == null) {
-            return null;
+    /**
+     * Get all extensions
+     * @return array
+     */
+    public static function getAllExtensions()
+    {
+        $extensionNamespaces = glob(app_path() . '/Extensions/*', GLOB_ONLYDIR);
+        $extensions = [];
+        foreach ($extensionNamespaces as $extensionNamespace) {
+            $extensions = array_merge($extensions, glob($extensionNamespace . '/*', GLOB_ONLYDIR));
         }
 
-        return $config['payMethod'];
+        return $extensions;
+    }
+
+    public static function getAllExtensionsByNamespace(string $namespace)
+    {
+        $extensions = glob(app_path() . '/Extensions/' . $namespace . '/*', GLOB_ONLYDIR);
+
+        return $extensions;
     }
 }

+ 5 - 9
app/Http/Controllers/Admin/PaymentController.php

@@ -38,20 +38,16 @@ class PaymentController extends Controller
      */
     public function checkOut(ShopProduct $shopProduct)
     {
-        // get all payment gateway extensions
-        $extensions = glob(app_path() . '/Extensions/PaymentGateways/*', GLOB_ONLYDIR);
+        $extensions = ExtensionHelper::getAllExtensionsByNamespace('PaymentGateways');
 
         // build a paymentgateways array that contains the routes for the payment gateways and the image path for the payment gateway which lays in public/images/Extensions/PaymentGateways with the extensionname in lowercase
         $paymentGateways = [];
         foreach ($extensions as $extension) {
             $extensionName = basename($extension);
-            $config = ExtensionHelper::getExtensionConfig($extensionName, 'PaymentGateways');
-            if ($config) {
-                $payment = new \stdClass();
-                $payment->name = $config['name'];
-                $payment->image = asset('images/Extensions/PaymentGateways/' . strtolower($extensionName) . '_logo.png');
-                $paymentGateways[] = $payment;
-            }
+            $payment = new \stdClass();
+            $payment->name = ExtensionHelper::getExtensionConfig($extensionName, 'name');
+            $payment->image = asset('images/Extensions/PaymentGateways/' . strtolower($extensionName) . '_logo.png');
+            $paymentGateways[] = $payment;
         }
 
         $discount = PartnerDiscount::getDiscount();