From 39092029588201abdd571a54dac3000d1e09bda4 Mon Sep 17 00:00:00 2001 From: IceToast <> Date: Sat, 21 Jan 2023 01:03:33 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20several=20functions?= =?UTF-8?q?=20to=20the=20ExtensionHelper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Helpers/ExtensionHelper.php | 95 +++++++++++++------ .../Controllers/Admin/PaymentController.php | 14 +-- 2 files changed, 71 insertions(+), 38 deletions(-) diff --git a/app/Helpers/ExtensionHelper.php b/app/Helpers/ExtensionHelper.php index 884b9f2f..fdf880ab 100644 --- a/app/Helpers/ExtensionHelper.php +++ b/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 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; + } + + $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[$configname])) { + return $config[$configname]; + } } - // call the getConfig function from the index.php file of the extension - $config = include_once $extension; - - // Check if the getConfig function exists - if (!function_exists('get' . $extensionName . 'Config')) { - return null; - } - - $config = call_user_func('get' . $extensionName . 'Config'); - - // Check if the getConfig function returned an array - if (!is_array($config)) { - return null; - } - - 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(); - $config = self::getExtensionConfig($extensionName, $nameSpace); + $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 ($config == null) { - return null; + 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; + } } - return $config['payMethod']; + return $routes; + } + + /** + * 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 $extensions; + } + + public static function getAllExtensionsByNamespace(string $namespace) + { + $extensions = glob(app_path() . '/Extensions/' . $namespace . '/*', GLOB_ONLYDIR); + + return $extensions; } } diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index 0b24a326..bccc64e8 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/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();