251 lines
7.9 KiB
PHP
251 lines
7.9 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Schema;
|
|
|
|
class NetgesconSystemCheck extends Command
|
|
{
|
|
/**
|
|
* The name and signature of the console command.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'netgescon:system-check {--fix : Applica correzioni automatiche}';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Controllo completo dell\'integrità del sistema NetGescon';
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*/
|
|
public function handle()
|
|
{
|
|
$fix = $this->option('fix');
|
|
$issues = 0;
|
|
|
|
$this->info("🔍 NetGescon System Check - " . now()->format('d/m/Y H:i:s'));
|
|
$this->newLine();
|
|
|
|
// 1. Layout Check
|
|
$this->info("📋 1. Controllo Layout...");
|
|
$layoutIssues = $this->checkLayouts($fix);
|
|
$issues += $layoutIssues;
|
|
|
|
// 2. Relationship Check
|
|
$this->info("🔗 2. Controllo Relationships...");
|
|
$relationshipIssues = $this->checkRelationships($fix);
|
|
$issues += $relationshipIssues;
|
|
|
|
// 3. Database Check
|
|
$this->info("🗄️ 3. Controllo Database...");
|
|
$dbIssues = $this->checkDatabase();
|
|
$issues += $dbIssues;
|
|
|
|
// 4. Files Check
|
|
$this->info("📁 4. Controllo File System...");
|
|
$fileIssues = $this->checkFiles();
|
|
$issues += $fileIssues;
|
|
|
|
// 5. Route Check
|
|
$this->info("🛣️ 5. Controllo Route...");
|
|
$routeIssues = $this->checkRoutes();
|
|
$issues += $routeIssues;
|
|
|
|
$this->newLine();
|
|
|
|
if ($issues === 0) {
|
|
$this->info("✅ Sistema NetGescon: TUTTO OK! Nessun problema rilevato.");
|
|
} else {
|
|
$this->warn("⚠️ Sistema NetGescon: {$issues} problema(i) rilevato(i).");
|
|
if (!$fix) {
|
|
$this->info("💡 Usa --fix per applicare correzioni automatiche.");
|
|
}
|
|
}
|
|
}
|
|
|
|
private function checkLayouts($fix)
|
|
{
|
|
$issues = 0;
|
|
$deprecatedLayouts = config('netgescon.deprecated_layouts', []);
|
|
$activeLayout = config('netgescon.active_layout', 'admin.layouts.netgescon');
|
|
|
|
$files = File::allFiles(resource_path('views'));
|
|
|
|
foreach ($files as $file) {
|
|
if ($file->getExtension() === 'php' && str_ends_with($file->getFilename(), '.blade.php')) {
|
|
$content = File::get($file->getPathname());
|
|
|
|
foreach ($deprecatedLayouts as $deprecated) {
|
|
if (preg_match("/@extends\s*\(\s*['\"]" . preg_quote($deprecated, '/') . "['\"]\s*\)/", $content)) {
|
|
$relativePath = str_replace(base_path() . '/', '', $file->getPathname());
|
|
$this->line(" ❌ Layout deprecato in: {$relativePath}");
|
|
$issues++;
|
|
|
|
if ($fix) {
|
|
$content = preg_replace(
|
|
"/@extends\s*\(\s*['\"]" . preg_quote($deprecated, '/') . "['\"]\s*\)/",
|
|
"@extends('{$activeLayout}')",
|
|
$content
|
|
);
|
|
File::put($file->getPathname(), $content);
|
|
$this->line(" ✅ Corretto automaticamente");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($issues === 0) {
|
|
$this->line(" ✅ Tutti i layout sono corretti");
|
|
}
|
|
|
|
return $issues;
|
|
}
|
|
|
|
private function checkRelationships($fix)
|
|
{
|
|
$issues = 0;
|
|
|
|
// Controllo relationship palazzina vs palazzinaObj
|
|
$files = File::allFiles(resource_path('views'));
|
|
|
|
foreach ($files as $file) {
|
|
if ($file->getExtension() === 'php' && str_ends_with($file->getFilename(), '.blade.php')) {
|
|
$content = File::get($file->getPathname());
|
|
|
|
// Cerca with('palazzina') invece di with('palazzinaObj')
|
|
if (preg_match("/with\s*\(\s*['\"]palazzina['\"]\s*\)/", $content)) {
|
|
$relativePath = str_replace(base_path() . '/', '', $file->getPathname());
|
|
$this->line(" ❌ Relationship obsoleto in: {$relativePath}");
|
|
$issues++;
|
|
|
|
if ($fix) {
|
|
$content = preg_replace(
|
|
"/with\s*\(\s*['\"]palazzina['\"]\s*\)/",
|
|
"with('palazzinaObj')",
|
|
$content
|
|
);
|
|
File::put($file->getPathname(), $content);
|
|
$this->line(" ✅ Corretto automaticamente");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($issues === 0) {
|
|
$this->line(" ✅ Tutti i relationship sono corretti");
|
|
}
|
|
|
|
return $issues;
|
|
}
|
|
|
|
private function checkDatabase()
|
|
{
|
|
$issues = 0;
|
|
|
|
try {
|
|
// Controllo connessione database
|
|
DB::connection()->getPdo();
|
|
$this->line(" ✅ Connessione database OK");
|
|
|
|
// Controllo tabelle principali
|
|
$tables = ['stabili', 'palazzine', 'unita_immobiliari', 'users'];
|
|
foreach ($tables as $table) {
|
|
if (Schema::hasTable($table)) {
|
|
$count = DB::table($table)->count();
|
|
$this->line(" ✅ Tabella {$table}: {$count} record(i)");
|
|
} else {
|
|
$this->line(" ❌ Tabella mancante: {$table}");
|
|
$issues++;
|
|
}
|
|
}
|
|
} catch (\Exception $e) {
|
|
$this->line(" ❌ Errore database: " . $e->getMessage());
|
|
$issues++;
|
|
}
|
|
|
|
return $issues;
|
|
}
|
|
|
|
private function checkFiles()
|
|
{
|
|
$issues = 0;
|
|
|
|
// Controllo file essenziali
|
|
$essentialFiles = [
|
|
'resources/views/admin/layouts/netgescon.blade.php',
|
|
'app/Http/Middleware/NetgesconLayoutMiddleware.php',
|
|
'config/netgescon.php',
|
|
'app/Models/UnitaImmobiliare.php',
|
|
'app/Models/Stabile.php',
|
|
'app/Models/Palazzina.php'
|
|
];
|
|
|
|
foreach ($essentialFiles as $file) {
|
|
$fullPath = base_path($file);
|
|
if (File::exists($fullPath)) {
|
|
$this->line(" ✅ {$file}");
|
|
} else {
|
|
$this->line(" ❌ File mancante: {$file}");
|
|
$issues++;
|
|
}
|
|
}
|
|
|
|
// Controllo directory inattive
|
|
$inactiveDirs = [
|
|
'_BACKUP_OLD_netgescon-laravel_INACTIVE',
|
|
'_BACKUP_OLD_netgescon_INACTIVE'
|
|
];
|
|
|
|
foreach ($inactiveDirs as $dir) {
|
|
$fullPath = base_path($dir);
|
|
if (File::isDirectory($fullPath)) {
|
|
$this->line(" ✅ Directory backup inattiva: {$dir}");
|
|
} else {
|
|
$this->line(" ⚠️ Directory backup non trovata: {$dir}");
|
|
}
|
|
}
|
|
|
|
return $issues;
|
|
}
|
|
|
|
private function checkRoutes()
|
|
{
|
|
$issues = 0;
|
|
|
|
try {
|
|
// Controllo route principali
|
|
$routes = [
|
|
'admin.dashboard',
|
|
'admin.stabili.index',
|
|
'admin.stabili.create',
|
|
'admin.palazzine.show',
|
|
'admin.unita-immobiliari.show',
|
|
'logout'
|
|
];
|
|
|
|
foreach ($routes as $routeName) {
|
|
if (route($routeName)) {
|
|
$this->line(" ✅ Route: {$routeName}");
|
|
} else {
|
|
$this->line(" ❌ Route mancante: {$routeName}");
|
|
$issues++;
|
|
}
|
|
}
|
|
} catch (\Exception $e) {
|
|
$this->line(" ❌ Errore route: " . $e->getMessage());
|
|
$issues++;
|
|
}
|
|
|
|
return $issues;
|
|
}
|
|
}
|