diff src/ConfigHelper.php @ 8:4216c0dc638c

Added base php cs fixer added config helper to maintain config
author luka
date Wed, 18 Oct 2023 21:04:32 -0400
parents
children d4730c14806d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ConfigHelper.php	Wed Oct 18 21:04:32 2023 -0400
@@ -0,0 +1,115 @@
+<?php
+
+namespace Wizzard\MagicForger;
+
+class ConfigHelper
+{
+    public static $config = [];
+    public const CONFIG_FILE_NAME = 'mf_config.php';
+    public static $config_path;
+
+    public static function setup_config_path(string $base_path)
+    {
+        self::$config_path = $base_path.'/'.self::CONFIG_FILE_NAME;
+    }
+
+    protected static function get_config_path()
+    {
+        return self::$config_path;
+    }
+
+    public static function write_config()
+    {
+        $path = self::get_config_path();
+        $str = '<?php
+			return '.self::varexport(self::$config, true).';';
+
+        file_put_contents($path, $str);
+        self::format_file($path);
+    }
+
+    public static function read_config()
+    {
+        $path = self::get_config_path();
+        self::$config = include $path;
+    }
+
+    public static function print_config()
+    {
+        self::varexport(self::$config);
+    }
+
+    /**
+     * PHP var_export() with short array syntax (square brackets) indented 2 spaces.
+     *
+     * NOTE: The only issue is when a string value has `=>\n[`, it will get converted to `=> [`
+     *
+     * @see https://www.php.net/manual/en/function.var-export.php
+     */
+    public static function varexport($expression, $return = false)
+    {
+        $export = var_export($expression, true);
+        $patterns = [
+            "/array \(/" => '[',
+            "/^([ ]*)\)(,?)$/m" => '$1]$2',
+            "/=>[ ]?\n[ ]+\[/" => '=> [',
+            "/([ ]*)(\'[^\']+\') => ([\[\'])/" => '$1$2 => $3',
+        ];
+        $export = preg_replace(array_keys($patterns), array_values($patterns), $export);
+        if ((bool) $return) {
+            return $export;
+        } else {
+            echo $export;
+        }
+    }
+
+    protected static function format_file(string $path)
+    {
+        exec('php-cs-fixer fix '.$path);
+    }
+
+    public static function set_up_tables()
+    {
+        $schema = \DB::connection()->getDoctrineSchemaManager();
+        // get all the tables available in the db
+        $tables = collect($schema->listTableNames())->all();
+
+        $insert_tables = [];
+        foreach ($tables as $table) {
+            $columns = [];
+            $table_columns = $schema->introspectTable($table)->getColumns();
+
+            foreach ($table_columns as $column) {
+                $columns[$column->getName()] = [
+                                'should_insert' => [
+                                        'controller' => true,
+                                        'model' => true,
+                                        'requests' => true,
+                                        'views' => true,
+                                        ],
+                                ];
+            }
+
+            $insert_tables[$table] = $columns;
+
+        }
+        self::merge_array_priority(self::$config['tables'], $insert_tables);
+
+        return $tables;
+    }
+
+    private static function merge_array_priority(&$priority, $merged)
+    {
+        foreach ($merged as $key => $value) {
+            // if the priority key is not set, automatically add the merged values
+            if (!isset($priority[$key])) {
+                $priority[$key] = $value;
+            } else {
+                // if the value is an array recursively merge
+                if (is_array($value) && is_array($priority[$key])) {
+                    self::merge_array_priority($priority[$key], $value);
+                }
+            }
+        }
+    }
+}