From a54d7b910c3344d03e5095f4e13e96f234525e61 Mon Sep 17 00:00:00 2001 From: Vincent BRIDIER Date: Sun, 23 Jan 2022 18:57:14 +0100 Subject: [PATCH] - Add Models Export Command --- app/Console/Commands/ExportDatas.php | 207 +++++++++++++++++++++++++++ config/filesystems.php | 7 +- storage/export/.gitignore | 1 + 3 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 app/Console/Commands/ExportDatas.php create mode 100644 storage/export/.gitignore diff --git a/app/Console/Commands/ExportDatas.php b/app/Console/Commands/ExportDatas.php new file mode 100644 index 0000000..c656508 --- /dev/null +++ b/app/Console/Commands/ExportDatas.php @@ -0,0 +1,207 @@ +ExportProjects("EDL_WEB.csv"); + $this->ExportServers("EDL_Servers.csv"); + $this->ExportDatastorePcc("EDL_Datastore_pcc.csv"); + $this->ExportDomainNames("EDL_Domain_Names.csv"); + $this->ExportLdcNetworks("EDL_LDC_Networks.csv"); + $this->ExportGitRepos("EDL_GIT_Repos.csv"); + + return 0; + } + + private function ExportGitRepos($filename) + { + $repos = GitRepos::orderBy('name', 'ASC')->get(); + Storage::disk('export')->append($filename, "Nom"); + foreach ($repos as $repo) { + $infos = [ + trim($repo->name), + ]; + + Storage::disk('export')->append($filename, implode(";", $infos)); + } + } + + private function ExportLdcNetworks($filename) + { + $networks = LDCNetworks::all(); + Storage::disk('export')->append($filename, "CIDR;First IP;Last IP"); + foreach ($networks as $network) { + $infos = [ + trim($network->cidr), + trim($network->first_ip), + trim($network->last_ip), + ]; + + Storage::disk('export')->append($filename, implode(";", $infos)); + } + } + + private function ExportDomainNames($filename) + { + $domains = DomainNames::all(); + Storage::disk('export')->append($filename, "ASCII;UTF-8;DATE D'EXPIRATION;RENOUVELLEMENT;MARQUE REF.;COMMENTAIRE"); + foreach ($domains as $domain) { + $infos = [ + trim($domain->ascii_name), + trim($domain->utf8_name), + trim($domain->expiration_date), + $domain->renew === 1 ? 'OUI' : 'NON', + trim($domain->related_brand), + trim($domain->comment), + ]; + + Storage::disk('export')->append($filename, implode(";", $infos)); + } + } + + private function ExportDatastorePcc($filename) + { + $datastores = DatastorePcc::all(); + Storage::disk('export')->append($filename, "NOM;COMMENTAIRE"); + foreach ($datastores as $datastore) { + $infos = [ + trim($datastore->title), + trim($datastore->comment) + ]; + + Storage::disk('export')->append($filename, implode(";", $infos)); + } + } + + private function ExportServers($filename) + { + $servers = Servers::orderBy('env', 'DESC')->get(); + Storage::disk('export')->append($filename, "ENV;NOM;TITRE;FUNCTION;SSH;IP INFRAWEB;VIRTUAL IP;DATASTORE PCC;COMMENTAIRE"); + foreach ($servers as $server) { + $infos = [ + trim($server->env), + trim($server->name), + trim($server->title), + trim($server->function), + trim($server->ssh), + trim($server->infraweb_ip), + trim($server->virtual_ip), + !is_null($server->datastore_pcc_id) ? trim(DatastorePcc::find($server->datastore_pcc_id)->title) : '', + trim($server->comment) + ]; + + Storage::disk('export')->append($filename, implode(";", $infos)); + } + } + + private function ExportProjects($filename) + { + $projects = Projects::orderBy('name', 'ASC')->get(); + $fields = [ + 'DEV', + 'name', + 'dev_url', + 'https', + 'php', + 'dev_web_server_id', + 'dev_unix_user', + 'dev_unix_pwd', + 'dev_document_root', + 'dev_db_server_id', + 'dev_db_schema', + 'dev_db_user', + 'dev_db_pwd', + 'dev_htaccess_user', + 'dev_htaccess_pwd', + 'dev_comment', + 'dev_eai', + 'dev_whitelist_fw', + ]; + + Storage::disk('export')->append($filename, "ENV;NOM;URL;HTTPS;PHP;SERVEUR WEB;SSH;USER UNIX;PWD UNIX;DOCUMENT ROOT;SERVEUR BDD;SSH;USER DB;PWD DB;HTACCESS USER;HTACCESS PWD;COMMENTAIRE;FLUX EAI;WHITELIST FW"); + $this->writeProjectExport($projects, $fields, $filename); + + $prod = implode(";", $fields); + $prod = str_replace("dev", "prod", $prod); + $prod = str_replace("DEV", "PROD", $prod); + $prod = str_replace("prod_htaccess_user", "BLANK", $prod); + $prod = str_replace("prod_htaccess_pwd", "BLANK", $prod); + $fields = explode(";", $prod); + + $this->writeProjectExport($projects, $fields, $filename); + } + + private function writeProjectExport($projects, $fields, $filename) + { + foreach ($projects as $project) { + $infos = []; + foreach ($fields as $field) { + switch ($field) { + case 'DEV': + case 'PROD': + $infos[] = $field; + break; + case 'https': + $infos[] = $project->{$field} === 1 ? 'OUI' : 'NON'; + break; + case 'dev_web_server_id': + case 'dev_db_server_id': + case 'prod_web_server_id': + case 'prod_db_server_id': + $server = Servers::find($project->{$field}); + $infos[] = trim($server->name); + $infos[] = trim($server->ssh); + break; + case 'BLANK': + $infos[] = ""; + break; + default: + $infos[] = trim($project->{$field}); + } + } + Storage::disk('export')->append($filename, implode(";", $infos)); + } + } +} diff --git a/config/filesystems.php b/config/filesystems.php index a0ec129..2ca51f8 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -48,10 +48,15 @@ return [ 'root' => storage_path('app'), ], + 'export' => [ + 'driver' => 'local', + 'root' => storage_path('export'), + ], + 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), - 'url' => env('APP_URL').'/storage', + 'url' => env('APP_URL') . '/storage', 'visibility' => 'public', ], diff --git a/storage/export/.gitignore b/storage/export/.gitignore new file mode 100644 index 0000000..16f2dc5 --- /dev/null +++ b/storage/export/.gitignore @@ -0,0 +1 @@ +*.csv \ No newline at end of file