ldc-web/app/Console/Commands/ExportDatas.php

184 lines
5.5 KiB
PHP
Raw Permalink Normal View History

2022-01-23 18:57:14 +01:00
<?php
namespace App\Console\Commands;
2022-09-21 11:17:58 +00:00
use App\Models\LDCNetwork;
use App\Models\Project;
use App\Models\Server;
2022-01-23 18:57:14 +01:00
use Illuminate\Console\Command;
2022-09-21 11:17:58 +00:00
use Illuminate\Database\Eloquent\Collection;
2022-01-23 18:57:14 +01:00
use Illuminate\Support\Facades\Storage;
class ExportDatas extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'datas:export';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Export data in Excel format';
/**
* Execute the console command.
*
2022-09-21 11:17:58 +00:00
* @return integer
2022-01-23 18:57:14 +01:00
*/
public function handle()
{
2022-09-21 11:17:58 +00:00
$this->exportProjects("EDL_WEB.csv");
$this->exportServers("EDL_Servers.csv");
$this->exportLdcNetworks("EDL_LDC_Networks.csv");
2022-01-23 18:57:14 +01:00
return 0;
}
2022-09-21 11:17:58 +00:00
/**
* Export ldc networks as filename.csv
*
* @param string $filename
* @return void
*/
private function exportLdcNetworks(string $filename)
2022-01-23 18:57:14 +01:00
{
2022-09-21 11:17:58 +00:00
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\LDCNetwork> */
$networks = LDCNetwork::all();
2022-01-23 18:57:14 +01:00
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));
}
}
2022-09-21 11:17:58 +00:00
/**
* Export servers as filename.csv
*
* @param string $filename
* @return void
*/
private function exportServers(string $filename)
2022-01-23 18:57:14 +01:00
{
2022-09-21 11:17:58 +00:00
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Server> */
$servers = Server::orderBy('env', 'DESC')->get();
Storage::disk('export')->append(
$filename,
"ENV;NOM;TITRE;FUNCTION;SSH;IP INFRAWEB;VIRTUAL IP;COMMENTAIRE"
);
2022-01-23 18:57:14 +01:00
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),
trim($server->comment)
];
Storage::disk('export')->append($filename, implode(";", $infos));
}
}
2022-09-21 11:17:58 +00:00
/**
* Export projects as filename.csv
*
* @param string $filename
* @return void
*/
private function exportProjects(string $filename)
2022-01-23 18:57:14 +01:00
{
2022-09-21 11:17:58 +00:00
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Project> */
$projects = Project::orderBy('name', 'ASC')->get();
$fields = [
2022-01-23 18:57:14 +01:00
'DEV',
'name',
'dev_haproxy_id',
2022-01-23 18:57:14 +01:00
'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',
];
2022-09-21 11:17:58 +00:00
Storage::disk('export')->append(
$filename,
// phpcs:ignore
"ENV;NOM;ID HAPROXY;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"
);
2022-01-23 18:57:14 +01:00
$this->writeProjectExport($projects, $fields, $filename);
2022-09-21 11:17:58 +00:00
$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);
2022-01-23 18:57:14 +01:00
$fields = explode(";", $prod);
$this->writeProjectExport($projects, $fields, $filename);
}
2022-09-21 11:17:58 +00:00
/**
* Append Project to filename.csv
*
* @param Collection $projects
* @param string[] $fields
* @param string $filename
* @return void
*/
private function writeProjectExport(Collection $projects, array $fields, string $filename)
2022-01-23 18:57:14 +01:00
{
2022-09-21 11:17:58 +00:00
/** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Project> $projects */
2022-01-23 18:57:14 +01:00
foreach ($projects as $project) {
$infos = [];
foreach ($fields as $field) {
switch ($field) {
case 'DEV':
case 'PROD':
$infos[] = $field;
break;
case 'https':
2022-09-21 11:17:58 +00:00
$infos[] = $project->{$field} === 1 ? 'OUI' : 'NON';
2022-01-23 18:57:14 +01:00
break;
case 'dev_web_server_id':
case 'dev_db_server_id':
case 'prod_web_server_id':
case 'prod_db_server_id':
2022-09-21 11:17:58 +00:00
$server = Server::find($project->{$field});
2022-01-23 18:57:14 +01:00
$infos[] = trim($server->name);
$infos[] = trim($server->ssh);
break;
case 'BLANK':
$infos[] = "";
break;
default:
$infos[] = trim($project->{$field});
2022-09-21 11:17:58 +00:00
}//end switch
}//end foreach
2022-01-23 18:57:14 +01:00
Storage::disk('export')->append($filename, implode(";", $infos));
2022-09-21 11:17:58 +00:00
}//end foreach
2022-01-23 18:57:14 +01:00
}
}