diff --git a/app/Http/Controllers/ConfigurationController.php b/app/Http/Controllers/ConfigurationController.php index bfcfa306d..3a774062c 100644 --- a/app/Http/Controllers/ConfigurationController.php +++ b/app/Http/Controllers/ConfigurationController.php @@ -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; } } diff --git a/app/Http/Controllers/InitializationController.php b/app/Http/Controllers/InitializationController.php index 97920c0f2..7b085b656 100644 --- a/app/Http/Controllers/InitializationController.php +++ b/app/Http/Controllers/InitializationController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\User; +use Filter; use Illuminate\Database\QueryException; use Illuminate\Http\Request; use Models\Group; @@ -101,6 +102,7 @@ class InitializationController extends Controller $idtipoanagrafica = $database->fetchOne("SELECT idtipoanagrafica AS id FROM an_tipianagrafiche WHERE descrizione='Azienda'")['id']; $readonly_tipo = true; $skip_permissions = true; + $api_request = false; include base_path('legacy').'/modules/anagrafiche/add.php'; $anagrafica = ob_get_clean(); @@ -166,8 +168,14 @@ class InitializationController extends Controller { $dbo = $database = database(); - $this->filter->set('post', 'op', 'add'); + // Inizializzazione forzata per Filter + Filter::getPOST(); + Filter::set('post', 'op', 'add'); + + // Salvataggio anagrafica tramite modulo Anagrafiche $id_module = module('Anagrafiche')['id']; + $skip_permissions = true; + $api_request = false; include base_path('legacy').'/modules/anagrafiche/actions.php'; // Logo stampe diff --git a/app/Http/Middleware/EnsureConfiguration.php b/app/Http/Middleware/EnsureConfiguration.php index a306c705f..50b5a4513 100644 --- a/app/Http/Middleware/EnsureConfiguration.php +++ b/app/Http/Middleware/EnsureConfiguration.php @@ -97,7 +97,7 @@ class EnsureConfiguration */ protected function checkConfiguration($route) { - $configuration_paths = ['configuration', 'configuration-save', 'configuration-test']; + $configuration_paths = ['configuration', 'configuration-save', 'configuration-write', 'configuration-test']; $configuration_completed = ConfigurationController::isConfigured(); if ($configuration_completed) { diff --git a/resources/views/config/configuration-writing.blade.php b/resources/views/config/configuration-writing.blade.php new file mode 100644 index 000000000..b91ef6d33 --- /dev/null +++ b/resources/views/config/configuration-writing.blade.php @@ -0,0 +1,49 @@ +@extends('layouts.guest') + +@section('title', tr('Errore di configurazione')) +@section('box_class', 'box-danger') +@section('box_header') +

{{ tr('Permessi di scrittura mancanti') }}

+@endsection + +@section('content') +

{!! tr('Sembra che non ci siano i permessi di scrittura sul file _FILE_', ['_FILE_' => '.env']) !!}. {{ tr('Per completare la configurazione del gestionale, è necessario inserire provare nuovamente attraverso il pulsante "Riprova" oppure inserire manualmente il contenuto sottostante nel file indicato') }}.

+ +
+ @foreach($params as $key => $value) + + @endforeach + + + {{ tr('Torna indietro') }} + + + +
+ +
+ +
+
+

{{ tr('Creazione manuale') }}

+
+ +
+
+ +
+

{!! tr('Inserire il seguente testo nel file _FILE_', ['_FILE_' => '.env']) !!}.

+

{{ tr('Attenzione!') }} {!! tr('A seguito del completamento manuale della configurazione, è necessario utilizzare il pulsante dedicato "Completa inserimento" oppure eseguire da riga di comando _CMD_', ['_CMD_' => "php artisan config:cache"]) !!}.

+ + + {{ tr('Completa inserimento') }} + + +
{{ $config }}
+
+
+@endsection diff --git a/resources/views/config/configuration.blade.php b/resources/views/config/configuration.blade.php index 3aadd2b66..e5203aa7d 100644 --- a/resources/views/config/configuration.blade.php +++ b/resources/views/config/configuration.blade.php @@ -96,11 +96,13 @@
*{{ tr('Campi obbligatori') }}
+
+
- {!! azienda_form !!} + {!! $azienda_form !!}
diff --git a/resources/views/config/update.blade.php b/resources/views/config/update.blade.php index 507afa1fb..c890adba9 100644 --- a/resources/views/config/update.blade.php +++ b/resources/views/config/update.blade.php @@ -25,11 +25,13 @@