getExtension() === 'php' && strpos($file->getFilename(), '.blade.') !== false) { $files[] = $file->getPathname(); } } return $files; } /** * Controlla un singolo file per problemi di layout */ function checkFile($filePath) { $content = file_get_contents($filePath); $issues = []; // 1. Controlla x-app-layout (layout vecchio) if (preg_match('/]*>/', $content)) { $issues[] = [ 'type' => 'LAYOUT_OBSOLETO', 'description' => 'Utilizza invece di @extends', 'severity' => 'HIGH', 'fix' => 'Sostituire con @extends(\'admin.layouts.app\')' ]; } // 2. Controlla admin.layouts.main (layout inesistente) if (preg_match('/@extends\([\'"]admin\.layouts\.main[\'"]/', $content)) { $issues[] = [ 'type' => 'LAYOUT_INESISTENTE', 'description' => 'Utilizza admin.layouts.main che non esiste', 'severity' => 'HIGH', 'fix' => 'Sostituire con @extends(\'admin.layouts.app\')' ]; } // 3. Controlla classi Tailwind (potrebbero non funzionare) if (preg_match_all('/class=["\']([^"\']*(?:bg-\w+-\d+|text-\w+-\d+|p-\d+|m-\d+|w-\d+|h-\d+)[^"\']*)["\']/', $content, $matches)) { $tailwindClasses = array_unique($matches[1]); if (count($tailwindClasses) > 5) { // Se trova molte classi Tailwind $issues[] = [ 'type' => 'TAILWIND_MISTO', 'description' => 'Contiene molte classi Tailwind, potrebbe non essere compatibile con Bootstrap', 'severity' => 'MEDIUM', 'fix' => 'Convertire le classi Tailwind a Bootstrap' ]; } } // 4. Controlla (componenti Blade specifici di Jetstream) if (preg_match('/]*>/', $content)) { $issues[] = [ 'type' => 'COMPONENT_OBSOLETO', 'description' => 'Utilizza che potrebbe non funzionare', 'severity' => 'MEDIUM', 'fix' => 'Sostituire con sezioni Blade standard @section' ]; } // 5. Controlla mancanza di @section('title') if (!preg_match('/@section\([\'"]title[\'"]/', $content) && preg_match('/@extends/', $content)) { $issues[] = [ 'type' => 'TITLE_MANCANTE', 'description' => 'Manca @section(\'title\')', 'severity' => 'LOW', 'fix' => 'Aggiungere @section(\'title\', \'Titolo Pagina\')' ]; } return $issues; } /** * Colora l'output per la console */ function colorize($text, $color) { $colors = [ 'red' => "\033[31m", 'green' => "\033[32m", 'yellow' => "\033[33m", 'blue' => "\033[34m", 'magenta' => "\033[35m", 'cyan' => "\033[36m", 'white' => "\033[37m", 'reset' => "\033[0m" ]; return $colors[$color] . $text . $colors['reset']; } // Trova tutti i file blade $bladeFiles = findBladeFiles($basePath); $totalFiles = count($bladeFiles); echo "πŸ“ Trovati " . colorize($totalFiles, 'blue') . " file .blade.php\n\n"; // Controlla ogni file foreach ($bladeFiles as $file) { $relativePath = str_replace($basePath . '/', '', $file); $issues = checkFile($file); if (!empty($issues)) { $problemFiles++; $problems[$relativePath] = $issues; echo "❌ " . colorize($relativePath, 'red') . "\n"; foreach ($issues as $issue) { $severityColor = $issue['severity'] === 'HIGH' ? 'red' : ($issue['severity'] === 'MEDIUM' ? 'yellow' : 'cyan'); echo " └─ " . colorize("[{$issue['severity']}]", $severityColor) . " {$issue['type']}: {$issue['description']}\n"; echo " πŸ’‘ Fix: " . colorize($issue['fix'], 'green') . "\n"; } echo "\n"; } } // Riepilogo echo "\n" . str_repeat("=", 50) . "\n"; echo "πŸ“Š " . colorize("RIEPILOGO CONTROLLO", 'magenta') . "\n"; echo str_repeat("=", 50) . "\n"; echo "πŸ“ File totali controllati: " . colorize($totalFiles, 'blue') . "\n"; echo "❌ File con problemi: " . colorize($problemFiles, 'red') . "\n"; echo "βœ… File compatibili: " . colorize(($totalFiles - $problemFiles), 'green') . "\n"; if ($problemFiles > 0) { echo "\nπŸ”§ " . colorize("AZIONI RACCOMANDATE:", 'yellow') . "\n"; echo "1. Sostituire tutti i con @extends('admin.layouts.app')\n"; echo "2. Convertire le classi Tailwind a Bootstrap\n"; echo "3. Aggiungere @section('title') mancanti\n"; echo "4. Testare ogni pagina dopo le modifiche\n"; } else { echo "\nπŸŽ‰ " . colorize("Tutti i file sono compatibili!", 'green') . "\n"; } echo "\nπŸ“‹ Per applicare le correzioni automatiche, eseguire:\n"; echo colorize("php fix-layout-compatibility.php", 'cyan') . "\n\n"; // Salva il report in JSON per eventuali tool automatici $report = [ 'timestamp' => date('Y-m-d H:i:s'), 'total_files' => $totalFiles, 'problem_files' => $problemFiles, 'problems' => $problems ]; file_put_contents('/var/www/netgescon/layout-compatibility-report.json', json_encode($report, JSON_PRETTY_PRINT)); echo "πŸ’Ύ Report salvato in: " . colorize("layout-compatibility-report.json", 'blue') . "\n";