@@ -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