. */ include_once __DIR__.'/../../core.php'; function integrity_diff($expected, $current) { foreach ($expected as $key => $value) { if (array_key_exists($key, $current) && is_array($value)) { if (!is_array($current[$key])) { $difference[$key] = $value; } else { $new_diff = integrity_diff($value, $current[$key]); if (!empty($new_diff)) { $difference[$key] = $new_diff; } } } elseif (!array_key_exists($key, $current) || $current[$key] != $value) { $difference[$key] = [ 'current' => $current[$key], 'expected' => $value, ]; } } return !isset($difference) ? [] : $difference; } $file = basename(__FILE__); $effettua_controllo = filter('effettua_controllo'); // Schermata di caricamento delle informazioni if (empty($effettua_controllo)) { echo '
'.tr('Caricamento in corso').'...
'; return; } $contents = file_get_contents(base_dir().'/database.json'); $data = json_decode($contents, true); if (empty($data)) { echo '
'.tr('Impossibile effettuare controlli di integrità in assenza del file _FILE_', [ '_FILE_' => 'database.json', ]).'.
'; return; } // Controllo degli errori $info = Update::getDatabaseStructure(); $results = integrity_diff($data, $info); // Schermata di visualizzazione degli errori if (!empty($results)) { echo '

'.tr("Segue l'elenco delle tabelle del database che presentano una struttura diversa rispetto a quella prevista nella versione ufficiale del gestionale").'.

'.tr('Attenzione: questa funzionalità può presentare dei risultati falsamente positivi, sulla base del contenuto del file _FILE_', [ '_FILE_' => 'database.json', ]).'.
'; foreach ($results as $table => $errors) { echo '

'.$table.'

'; if (array_key_exists('current', $errors) && $errors['current'] == null) { echo '
'.tr('Tabella assente').'
'; continue; } $foreign_keys = $errors['foreign_keys'] ?: []; unset($errors['foreign_keys']); if (!empty($errors)) { echo ' '; foreach ($errors as $name => $diff) { if (count($diff) == 1 && array_key_exists('type', $diff) && Str::contains($diff['type']['expected'], $diff['type']['current'])) { $class = 'info'; } else { $class = 'warning'; } echo ' '; } echo '
'.tr('Colonna').' '.tr('Conflitto').'
'.$name.' '.json_encode($diff).'
'; } if (!empty($foreign_keys)) { echo ' '; foreach ($foreign_keys as $name => $diff) { if (count($diff) == 2 && array_key_exists('current', $diff) && $diff['current'] == null) { $class = 'info'; } else { $class = 'warning'; } echo ' '; } echo '
'.tr('Foreign keys').' '.tr('Conflitto').'
'.$name.' '.json_encode($diff).'
'; } } } else { echo '
'.tr('Il database non presenta problemi di integrità').'.
'; }