Browse Source

feat: ✨ Add Extension Settings to Settingspage

IceToast 2 years ago
parent
commit
1a8f883b63
2 changed files with 52 additions and 6 deletions
  1. 30 0
      app/Helpers/ExtensionHelper.php
  2. 22 6
      app/Http/Controllers/Admin/SettingsController.php

+ 30 - 0
app/Helpers/ExtensionHelper.php

@@ -102,4 +102,34 @@ class ExtensionHelper
 
         return $migrations;
     }
+
+    /**
+     * Summary of getAllExtensionSettings
+     * @return array of all setting classes look like: App\Extensions\PaymentGateways\PayPal\PayPalSettings
+     */
+    public static function getAllExtensionSettings()
+    {
+        $extensions = ExtensionHelper::getAllExtensions();
+
+        $settings = [];
+        foreach ($extensions as $extension) {
+
+            $extensionName = basename($extension);
+            $settingFile = $extension . '/' . $extensionName . 'Settings.php';
+            if (file_exists($settingFile)) {
+                // remove the base path from the setting file path to get the namespace
+
+                $settingFile = str_replace(app_path() . '/', '', $settingFile);
+                $settingFile = str_replace('.php', '', $settingFile);
+                $settingFile = str_replace('/', '\\', $settingFile);
+                $settingFile = 'App\\' . $settingFile;
+                $settings[] = $settingFile;
+            }
+        }
+
+        error_log(print_r($settings, true));
+
+
+        return $settings;
+    }
 }

+ 22 - 6
app/Http/Controllers/Admin/SettingsController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers\Admin;
 
+use App\Helpers\ExtensionHelper;
 use App\Http\Controllers\Controller;
 use Illuminate\Contracts\Foundation\Application;
 use Illuminate\Contracts\View\Factory;
@@ -25,18 +26,33 @@ class SettingsController extends Controller
         // get all other settings in app/Settings directory
         // group items by file name like $categories
         $settings = collect();
-        foreach (scandir(app_path('Settings')) as $file) {
-            if (in_array($file, ['.', '..'])) {
-                continue;
-            }
-            $className = 'App\\Settings\\' . str_replace('.php', '', $file);
+        $settings_classes = [];
+
+        // get all app settings
+        $app_settings = scandir(app_path('Settings'));
+        $app_settings = array_diff($app_settings, ['.', '..']);
+        // append App\Settings to class name
+        foreach ($app_settings as $app_setting) {
+            $settings_classes[] = 'App\\Settings\\' . str_replace('.php', '', $app_setting);
+        }
+        // get all extension settings
+        $settings_files = array_merge($settings_classes, ExtensionHelper::getAllExtensionSettings());
+
+
+        foreach ($settings_files as $file) {
+
+            $className = $file;
+            // instantiate the class and call toArray method to get all options
             $options = (new $className())->toArray();
+            error_log(print_r($className, true));
 
+            // call getOptionInputData method to get all options
             if (method_exists($className, 'getOptionInputData')) {
                 $optionInputData = $className::getOptionInputData();
             } else {
                 $optionInputData = [];
             }
+            error_log(print_r($optionInputData, true));
 
             // collect all option input data
             $optionsData = [];
@@ -55,7 +71,7 @@ class SettingsController extends Controller
                 $optionsData['category_icon'] = $optionInputData['category_icon'];
             }
 
-            $settings[str_replace('Settings.php', '', $file)] = $optionsData;
+            $settings[str_replace('Settings', '', class_basename($className))] = $optionsData;
         }
 
         $settings->sort();