75 lines
2.5 KiB
PHP
75 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Settings;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Livewire\Settings\XmlExchange;
|
|
use Illuminate\Http\Request;
|
|
|
|
class XmlExchangeUploadController extends Controller
|
|
{
|
|
public function convertSqlToXml(Request $request)
|
|
{
|
|
$request->validate([
|
|
'sqlDump' => ['required', 'file', 'max:256000'],
|
|
]);
|
|
|
|
$file = $request->file('sqlDump');
|
|
$ext = strtolower($file->getClientOriginalExtension());
|
|
if (! in_array($ext, ['sql', 'txt'])) {
|
|
return back()->withErrors(['sqlDump' => 'Il file deve essere .sql o .txt']);
|
|
}
|
|
|
|
$content = file_get_contents($file->getRealPath());
|
|
if (! $content) {
|
|
return back()->withErrors(['sqlDump' => 'File vuoto o non leggibile.']);
|
|
}
|
|
|
|
$exchange = app(XmlExchange::class);
|
|
$dataset = $exchange->legacySqlToDatasetPublic($content);
|
|
$xml = $exchange->datasetToXmlPublic($dataset, 'legacy-sql-conversion');
|
|
|
|
return response()->streamDownload(function () use ($xml) {
|
|
echo $xml;
|
|
}, 'termanager-conversion.xml', ['Content-Type' => 'application/xml; charset=UTF-8']);
|
|
}
|
|
|
|
public function importXml(Request $request)
|
|
{
|
|
$request->validate([
|
|
'xmlImport' => ['required', 'file', 'max:256000'],
|
|
]);
|
|
|
|
$file = $request->file('xmlImport');
|
|
$ext = strtolower($file->getClientOriginalExtension());
|
|
if (! in_array($ext, ['xml', 'txt'])) {
|
|
return back()->withErrors(['xmlImport' => 'Il file deve essere .xml o .txt']);
|
|
}
|
|
|
|
$content = file_get_contents($file->getRealPath());
|
|
if (! $content) {
|
|
return back()->withErrors(['xmlImport' => 'File vuoto o non leggibile.']);
|
|
}
|
|
|
|
$exchange = new XmlExchange();
|
|
$result = $exchange->importXmlFromContent($content);
|
|
|
|
if (isset($result['error'])) {
|
|
return back()->withErrors(['xmlImport' => $result['error']]);
|
|
}
|
|
|
|
$stats = $result['stats'];
|
|
$issues = $result['issues'];
|
|
|
|
$message = 'Import XML completato con successo.';
|
|
if (($stats['duplicate_territori'] ?? 0) > 0 || ($stats['assegnazioni_saltate'] ?? 0) > 0) {
|
|
$message .= ' Territori duplicati saltati: ' . $stats['duplicate_territori'] . '. Assegnazioni saltate: ' . $stats['assegnazioni_saltate'] . '.';
|
|
}
|
|
|
|
return redirect()->route('xml.exchange')
|
|
->with('success', $message)
|
|
->with('importStats', $stats)
|
|
->with('importIssues', $issues);
|
|
}
|
|
}
|