1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-06-05 22:09:38 +02:00

Miglioramento procedura configurazione iniziale

This commit is contained in:
Dasc3er
2021-07-07 14:50:55 +02:00
parent a12b21ad51
commit 3f46f85751
8 changed files with 278 additions and 94 deletions

View File

@ -6,8 +6,16 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;
/**
* Controller dedicato alla gestione della configurazione di base del gestionale per la piattaforma in utilizzo.
*/
class ConfigurationController extends Controller
{
/**
* Verifica se la configurazione del gestionale per la piattaforma corrente è stata completata correttamente.
*
* @return bool
*/
public static function isConfigured()
{
try {
@ -52,6 +60,11 @@ class ConfigurationController extends Controller
return view('config.configuration', $args);
}
/**
* Metodo per la gestione della validazione della configurazione indicata.
*
* @return \Illuminate\Http\JsonResponse
*/
public function test(Request $request)
{
$requirements = $this->checkConnection($request);
@ -70,9 +83,37 @@ class ConfigurationController extends Controller
$state = 2;
}
return $state;
return response()->json(['test' => $state]);
}
/**
* Metodo per l'esecuzione della pulizia automatica per la cache della configurazione.
*/
public function cache(Request $request)
{
// Refresh della cache sulla configurazione
Artisan::call('config:cache');
return redirect(route('configuration'));
}
/**
* Metodo per la gestione del messaggio di errore alla scrittura fisica della configurazione.
*/
public function write(Request $request)
{
$params = $request->old();
$env = $this->buildEnvFrom($params);
return view('config.configuration-writing', [
'config' => $env,
'params' => $params,
]);
}
/**
* Metodo indirizzato al salvataggio della configurazione.
*/
public function save(Request $request)
{
// Controllo sullo stato della connessione
@ -81,39 +122,19 @@ class ConfigurationController extends Controller
return redirect(route('configuration'));
}
// Individuazione parametri aggiuntivi
$decimals = $request->input('decimal_separator');
$thousands = $request->input('thousand_separator');
$decimals = $decimals == 'dot' ? '.' : ',';
$thousands = $thousands == 'dot' ? '.' : $thousands;
$thousands = $thousands == 'comma' ? ',' : $thousands;
$env = $this->buildEnvFrom($request->all());
// Completamento configurazione
$pairs = [
'APP_LOCALE' => $request->input('language'),
// Scrittura fisica della configurazione
$path = base_path('.env');
$result = file_put_contents($path, $env);
'DB_HOST' => $request->input('host'),
'DB_USERNAME' => $request->input('username'),
'DB_PASSWORD' => $request->input('password'),
'DB_DATABASE' => $request->input('database_name'),
/*
'|timestamp|' => post('timestamp_format'),
'|date|' => post('date_format'),
'|time|' => post('time_format'),
'|decimals|' => $decimals,
'|thousands|' => $thousands,
*/
];
foreach ($pairs as $key => $value) {
$this->updateEnv($key, $value);
// Redirect in caso di fallimento
if ($result === false) {
return redirect(route('configuration-write'))
->withInput();
}
// Refresh della cache sulla configurazione
Artisan::call('config:clear');
return redirect(route('configuration'));
return redirect(route('configuration-cache'));
}
/**
@ -184,10 +205,75 @@ class ConfigurationController extends Controller
return $requirements;
}
protected function updateEnv($key, $value)
/**
* Definisce i nuovi contenuti per il file .env sulla base dell'input utente.
*
* @param array $params
*/
protected function buildEnvFrom($params): string
{
$path = base_path('.env');
/*
// Individuazione parametri aggiuntivi
$decimals = $params['decimal_separator'];
$thousands = $params['thousand_separator'];
$decimals = $decimals == 'dot' ? '.' : ',';
$thousands = $thousands == 'dot' ? '.' : $thousands;
$thousands = $thousands == 'comma' ? ',' : $thousands;
*/
// Completamento configurazione
$pairs = [
'APP_LOCALE' => $params['language'],
'DB_HOST' => $params['host'],
'DB_USERNAME' => $params['username'],
'DB_PASSWORD' => $params['password'],
'DB_DATABASE' => $params['database_name'],
/*
'|timestamp|' => post('timestamp_format'),
'|date|' => post('date_format'),
'|time|' => post('time_format'),
'|decimals|' => $decimals,
'|thousands|' => $thousands,
*/
];
$env = $this->buildEnv($pairs);
return $env;
}
/**
* Definisce i nuovi contenuti per il file .env sulla base della configurazione indicata.
*
* @param $config
*/
protected function buildEnv($config): string
{
$file = base_path('.env');
$content = file_get_contents($file);
foreach ($config as $key => $value) {
$content = str_replace(
"$key=".$this->getCurrentEnvValue($key),
"$key=".$value,
$content
);
}
return $content;
}
/**
* Restituisce il valore (fisico) corrente per una chiave del file .env.
*
* @param $key
*
* @return mixed|string
*/
protected function getCurrentEnvValue($key)
{
if (is_bool(env($key))) {
$old = env($key) ? 'true' : 'false';
} elseif (env($key) === null) {
@ -196,12 +282,6 @@ class ConfigurationController extends Controller
$old = env($key);
}
if (file_exists($path)) {
file_put_contents($path, str_replace(
"$key=".$old,
"$key=".$value,
file_get_contents($path)
));
}
return $old;
}
}