Skip to content

Commit df3a5d0

Browse files
committed
refactor: miglioria grafica avviso di errore
1 parent 196b035 commit df3a5d0

2 files changed

Lines changed: 196 additions & 25 deletions

File tree

include/top.php

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -740,23 +740,54 @@ function checkActiveTab() {
740740

741741
// Errori - non mostrare nella pagina di login
742742
if (!empty($messages['error']) && (Auth::check() || $pageTitle != tr('Login'))) {
743+
// Verifica se l'utente è un amministratore
744+
$is_admin = Auth::check() && Auth::admin();
745+
743746
foreach ($messages['error'] as $value) {
744-
echo '
745-
<div class="alert alert-danger push">
746-
<h4><i class="fa fa fa-ban"></i> '.tr('Errore').'</h4>
747-
'.$value.'
748-
</div>';
747+
// Rimuovi il codice errore dal messaggio
748+
$value = preg_replace('/\[uid: ([a-z0-9]+)\]/i', '', $value);
749+
750+
if ($is_admin) {
751+
// Visualizzazione migliorata per amministratori
752+
echo '
753+
<div class="alert alert-danger shadow-sm border-left border-danger border-3">
754+
<div class="d-flex align-items-center">
755+
<i class="fa fa-exclamation-circle text-danger fa-2x mr-3"></i>
756+
<div>
757+
<h4 class="mb-1"><i class="fa fa-times-circle mr-2"></i>'.tr('Errore').'</h4>
758+
'.$value.'
759+
</div>
760+
</div>
761+
</div>';
762+
} else {
763+
// Visualizzazione semplificata per utenti normali
764+
echo '
765+
<div class="alert alert-danger shadow-sm border-left border-danger border-3">
766+
<div class="d-flex align-items-center">
767+
<i class="fa fa-exclamation-triangle text-danger fa-2x mr-3"></i>
768+
<div>
769+
<h4 class="mb-1"><i class="fa fa-times-circle mr-2"></i>'.tr('Errore').'</h4>
770+
<p class="mb-0">'.tr('Si è verificato un errore').'. '.tr("Contattare l'amministratore di sistema").'.</p>
771+
</div>
772+
</div>
773+
</div>';
774+
}
749775
}
750776
}
751777

752778
// Avvisi
753779
if (!empty($messages['warning'])) {
754780
foreach ($messages['warning'] as $value) {
755781
echo '
756-
<div class="alert alert-warning push">
757-
<h4><i class="fa fa-warning"></i> '.tr('Attenzione').'</h4>
758-
'.$value.'
759-
</div>';
782+
<div class="alert alert-warning shadow-sm border-left border-warning border-3">
783+
<div class="d-flex align-items-center">
784+
<i class="fa fa-warning text-warning fa-2x mr-3"></i>
785+
<div>
786+
<h4 class="mb-1">'.tr('Attenzione').'</h4>
787+
'.$value.'
788+
</div>
789+
</div>
790+
</div>';
760791
}
761792
}
762793

src/Extensions/MessageHandler.php

Lines changed: 156 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,33 +37,173 @@ protected function write(LogRecord $record): void
3737
return;
3838
}
3939

40-
// Costruisci il messaggio di errore
41-
$message = tr('Si è verificato un errore').' <i>[uid: '.$record['extra']['uid'].']</i>.';
42-
43-
// Aggiungi informazioni utente se autenticato
44-
if (auth()->check()) {
45-
$message .= '
46-
'.tr('Se il problema persiste siete pregati di chiedere assistenza tramite il forum apposito (_LINK_FORUM_)', [
47-
'_LINK_FORUM_' => '<a href="https://forum.openstamanager.com/">https://forum.openstamanager.com/</a>',
48-
]).'.</a>';
49-
50-
if (auth()->isAdmin()) {
51-
$message .= '
52-
<br><small>'.$record['message'].'</small>';
40+
// Verifica se l'utente è un amministratore
41+
$is_admin = auth()->check() && auth()->isAdmin();
42+
43+
// Estrai i dati dal record
44+
$uid = $record->extra['uid'] ?? '';
45+
$message_text = $record->message ?? '';
46+
$context = $record->context ?? [];
47+
$file = $context['file'] ?? '';
48+
$line = $context['line'] ?? '';
49+
50+
// Genera un ID univoco per il collapsible
51+
$collapse_id = 'error_details_' . uniqid();
52+
53+
if ($is_admin) {
54+
// Messaggio dettagliato per amministratori
55+
$message = '<div class="card card-danger shadow-sm">
56+
<div class="card-header bg-danger text-white">
57+
<h5 class="mb-0 d-flex align-items-center justify-content-between">
58+
<div>
59+
<i class="fa fa-exclamation-triangle mr-2"></i>
60+
'.tr('Si è verificato un errore').'
61+
</div>
62+
<button class="btn btn-sm btn-outline-light btn-xs" type="button" data-toggle="collapse" data-target="#'.$collapse_id.'" aria-expanded="false" aria-controls="'.$collapse_id.'">
63+
<i class="fa fa-info-circle mr-1"></i> '.tr('Dettagli tecnici').'
64+
</button>
65+
</h5>
66+
</div>
67+
<div class="card-body">
68+
<div class="collapse" id="'.$collapse_id.'">
69+
<div class="card card-body bg-light mb-2">
70+
<div class="row">';
71+
72+
// Messaggio di errore (colonna sinistra)
73+
if (!empty($message_text)) {
74+
$message .= '<div class="col-md-6 mb-2">
75+
<h6 class="font-weight-bold text-danger mb-1"><i class="fa fa-bug mr-1"></i>'.tr('Messaggio errore').'</h6>
76+
<pre class="p-2 rounded bg-white border" style="white-space: pre-wrap; word-wrap: break-word;"><code>'.htmlspecialchars($message_text).'</code></pre>
77+
</div>';
78+
}
79+
80+
// Informazioni sul file e sulla riga (colonna destra)
81+
if (!empty($file) && !empty($line)) {
82+
$message .= '<div class="col-md-6 mb-2">
83+
<h6 class="font-weight-bold text-info mb-1"><i class="fa fa-file-code mr-1"></i>'.tr('Informazioni file').'</h6>
84+
<div class="p-2 rounded bg-white border">
85+
<div class="d-flex align-items-center">
86+
<i class="fa fa-file-text text-secondary mr-1"></i>
87+
<strong class="mr-1">'.tr('File').':</strong> <code class="text-truncate" title="'.$file.'">'.$file.'</code>
88+
</div>
89+
<div class="d-flex align-items-center">
90+
<i class="fa fa-code text-secondary mr-1"></i>
91+
<strong class="mr-1">'.tr('Linea').':</strong> <code>'.$line.'</code>
92+
</div>
93+
</div>
94+
</div>';
95+
}
96+
97+
$message .= '</div>
98+
</div>
99+
</div>';
100+
101+
// Prepara i dettagli dell'errore per il clipboard
102+
$error_details = "Descrizione del problema:\n[Inserire qui una descrizione dettagliata del problema riscontrato]\n\n";
103+
$error_details .= "Passi per riprodurre l'errore:\n1. \n2. \n3. \n\n";
104+
$error_details .= "Dettagli tecnici dell'errore:\n";
105+
106+
if (!empty($message_text)) {
107+
$error_details .= "Messaggio: " . strip_tags($message_text) . "\n";
53108
}
109+
if (!empty($file) && !empty($line)) {
110+
$error_details .= "File: " . $file . "\n";
111+
$error_details .= "Linea: " . $line . "\n";
112+
}
113+
114+
// Aggiungi informazioni sul sistema
115+
$error_details .= "\nInformazioni di sistema:\n";
116+
$error_details .= "Versione PHP: " . phpversion() . "\n";
117+
$error_details .= "Sistema operativo: " . php_uname() . "\n";
118+
$error_details .= "Browser: [Inserire il browser utilizzato]\n";
119+
$error_details .= "Versione OpenSTAManager: [Inserire la versione in uso]\n\n";
120+
121+
// Genera un ID univoco per il contenitore dei dettagli
122+
$details_id = 'error_details_clipboard_' . uniqid();
123+
124+
// URL del forum semplice
125+
$forum_url = "https://forum.openstamanager.com/";
126+
127+
// Informazioni di assistenza
128+
$message .= '<div class="alert alert-warning mt-2 mb-0 py-2 px-3">
129+
<div class="d-flex align-items-center">
130+
<i class="fa fa-question-circle text-warning mr-2"></i>
131+
<div>
132+
'.tr('Se il problema dovesse persistere, invitiamo gli utenti con contratto di assistenza attivo ad aprire un ticket nell\'area clienti. <br>In alternativa, è possibile richiedere supporto tramite il forum ufficiale (_LINK_FORUM_)', [
133+
'_LINK_FORUM_' => '<a href="'.$forum_url.'" target="_blank" class="font-weight-bold mr-2">'.tr('Forum di supporto').'</a>
134+
<button type="button" class="btn btn-sm btn-outline-secondary btn-xs copy-error-details" data-clipboard-text="'.htmlspecialchars($error_details).'" id="'.$details_id.'">
135+
<i class="fa fa-clipboard mr-1"></i> '.tr('Copia dettagli errore').'
136+
</button>
137+
<script>
138+
$(document).ready(function() {
139+
var copiedText = "'.tr('Copiato').'";
140+
141+
$("#'.$details_id.'").on("click", function() {
142+
var textArea = document.createElement("textarea");
143+
textArea.value = $(this).attr("data-clipboard-text");
144+
document.body.appendChild(textArea);
145+
textArea.select();
146+
document.execCommand("copy");
147+
document.body.removeChild(textArea);
148+
149+
// Cambia il testo del pulsante temporaneamente
150+
var originalText = $(this).html();
151+
$(this).html("<i class=\"fa fa-check mr-1\"></i> " + copiedText);
152+
153+
// Ripristina il testo originale dopo 2 secondi
154+
var button = this;
155+
setTimeout(function() {
156+
$(button).html(originalText);
157+
}, 2000);
158+
});
159+
});
160+
</script>',
161+
]).'
162+
</div>
163+
</div>
164+
</div>';
165+
166+
$message .= '</div></div>';
167+
} else {
168+
// Messaggio semplificato per utenti normali
169+
$message = '<div class="card card-danger shadow-sm mb-0">
170+
<div class="card-header bg-danger text-white py-2">
171+
<h5 class="mb-0 d-flex align-items-center">
172+
<i class="fa fa-exclamation-triangle mr-2"></i>
173+
'.tr('Si è verificato un errore').'
174+
</h5>
175+
</div>
176+
<div class="card-body py-2">
177+
<div class="d-flex align-items-center">
178+
<div>
179+
<p class="mb-1">'.tr('Si è verificato un errore durante l\'elaborazione della richiesta').'.</p>
180+
<p class="mb-0">'.tr("Contattare l'amministratore di sistema").'.</p>
181+
</div>
182+
</div>
183+
184+
<div class="alert alert-warning mt-2 mb-0 py-2 px-3">
185+
<div class="d-flex align-items-center">
186+
<i class="fa fa-question-circle text-warning mr-2"></i>
187+
<div class="small">
188+
'.tr('Se il problema persiste, contattare l\'assistenza tecnica').'
189+
</div>
190+
</div>
191+
</div>
192+
</div>
193+
</div>';
54194
}
55195

56196
// Messaggio nella sessione
57197
try {
58-
flash()->error($message);
198+
flash()->error(tr('Si è verificato un errore'));
59199
} catch (\Exception) {
60200
// Gestisci l'eccezione se necessario
61201
}
62202

63203
// Messaggio visivo immediato
64204
echo '
65-
<div class="alert alert-danger push">
66-
<i class="fa fa-times"></i> '.$message.'
205+
<div class="container-fluid py-3">
206+
'.$message.'
67207
</div>';
68208
}
69209
}

0 commit comments

Comments
 (0)