@@ -246,29 +246,13 @@ public static function getQuery($structure, $search = [], $order = [], $limit =
246246 }
247247
248248 if (isset ($ total ['order_by ' ][$ column_index ])) {
249+ // Rimozione ORDER BY esistente in modo più efficiente
250+ $ query = preg_replace ('/\s+ORDER\s+BY\s+.+$/i ' , '' , $ query );
249251 $ order_clause = $ total ['order_by ' ][$ column_index ];
250252
251- // Determina la clausola di ordinamento da usare
252- $ final_order_clause = '' ;
253+ // Sanitizzazione della clausola ORDER BY
253254 if (!empty ($ order_clause )) {
254- $ final_order_clause = $ order_clause ;
255- } else {
256- // Se order_by è vuoto, usa il nome del campo come fallback
257- if (isset ($ total ['fields ' ][$ column_index ])) {
258- $ field_name = $ total ['fields ' ][$ column_index ];
259- $ field_name = preg_replace ('/[^a-zA-Z0-9_.]/ ' , '' , $ field_name );
260- if (!empty ($ field_name )) {
261- $ final_order_clause = '` ' .$ field_name .'` ' ;
262- }
263- }
264- }
265-
266- // Applica l'ordinamento solo se abbiamo una clausola valida
267- if (!empty ($ final_order_clause )) {
268- // Rimozione completa dell'ORDER BY esistente dalla query
269- // Se è impostato un ordinamento manuale, rimuove completamente l'ORDER BY definito dalla query
270- $ query = self ::removeExistingOrderBy ($ query );
271- $ query .= ' ORDER BY ' .$ final_order_clause .' ' .$ direction ;
255+ $ query .= ' ORDER BY ' .$ order_clause .' ' .$ direction ;
272256 }
273257 }
274258 }
@@ -595,35 +579,6 @@ protected static function buildIdFilter($field, $original_value)
595579 return null ;
596580 }
597581
598- /**
599- * Rimuove completamente la clausola ORDER BY esistente dalla query.
600- * Quando viene impostato un ordinamento manuale, questo metodo rimuove
601- * l'ORDER BY definito dalla query originale per applicare quello manuale.
602- *
603- * @param string $query
604- *
605- * @return string
606- */
607- protected static function removeExistingOrderBy ($ query )
608- {
609- // Rimozione più robusta dell'ORDER BY esistente
610- // Gestisce diversi casi: ORDER BY alla fine, ORDER BY seguito da LIMIT, etc.
611-
612- // Pattern per trovare ORDER BY e tutto quello che segue fino alla fine o fino a LIMIT
613- $ patterns = [
614- // ORDER BY seguito da LIMIT
615- '/\s+ORDER\s+BY\s+[^L]*?(?=\s+LIMIT\s+)/is ' ,
616- // ORDER BY alla fine della query
617- '/\s+ORDER\s+BY\s+.*$/is ' ,
618- ];
619-
620- foreach ($ patterns as $ pattern ) {
621- $ query = preg_replace ($ pattern , '' , $ query );
622- }
623-
624- return trim ($ query );
625- }
626-
627582 /**
628583 * Sostituisce la prima occorenza di una determinata stringa.
629584 *
0 commit comments