Mercurial > packages > magicforger
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); + } + } + } + } +}
