diff --git a/ecrire/inc/message_select.php b/ecrire/inc/message_select.php index b24465f5eafc95793ad6823eaacec57227b53e35..a7e14bedda8ed575b4c23c17c93b090471a4f228 100644 --- a/ecrire/inc/message_select.php +++ b/ecrire/inc/message_select.php @@ -17,9 +17,14 @@ if (!defined("_ECRIRE_INC_VERSION")) return; function afficher_messages($titre_table, $from, $where, &$messages_vus, $afficher_auteurs = true, $important = false, $boite_importante = true, $obligatoire = false) { global $connect_id_auteur, $couleur_foncee, $spip_lang_rtl, $spip_lang_left; - $query_message = "SELECT messages.* FROM spip_messages AS messages$from $where" . (!$messages_vus ? '' : ' AND messages.id_message NOT IN ('.join(',', $messages_vus).')') . ' ORDER BY date_heure DESC'; + $from = "spip_messages AS messages$from"; + $where .= (!$messages_vus ? '' : ' AND messages.id_message NOT IN ('.join(',', $messages_vus).')'); - $tranches = afficher_tranches_requete($query_message, ($afficher_auteurs ? 4 : 2)); + $requete = "SELECT messages.* FROM $from $where" . ' ORDER BY date_heure DESC'; + + $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM $from $where")); + $cpt = $cpt['n']; + $tranches = afficher_tranches_requete($requete, $cpt, ($afficher_auteurs ? 4 : 2)); if ($tranches OR $obligatoire) { if ($important) debut_cadre_couleur(); @@ -32,7 +37,7 @@ function afficher_messages($titre_table, $from, $where, &$messages_vus, $affiche echo $tranches; - $result_message = spip_query($query_message); + $result_message = spip_query($requete); while($row = spip_fetch_array($result_message)) { $vals = array(); diff --git a/ecrire/inc/mots.php b/ecrire/inc/mots.php index 40905e7b825182a5423f3839c0300cafa72c9128..49ded1cadbb052f07e3572b7b3d6f4fe3dd2b1c2 100644 --- a/ecrire/inc/mots.php +++ b/ecrire/inc/mots.php @@ -583,10 +583,16 @@ function afficher_groupe_mots($id_groupe) { $javascript = "charger_id_url('" . generer_url_ecrire("ajax_page", "fonction=sql&id_ajax_fonc=::id_ajax_fonc::::deb::", true) . "','$tmp_var')"; - $multi = creer_objet_multi ("titre", "$spip_lang"); - $query = "SELECT id_mot, titre, $multi FROM spip_mots WHERE id_groupe = '$id_groupe' ORDER BY multi"; + $select = 'id_mot, titre, ' . creer_objet_multi ("titre", "$spip_lang"); + $requete = "FROM spip_mots WHERE id_groupe = '$id_groupe'" ; + $order = " ORDER BY multi"; - $tranches = afficher_tranches_requete($query, 3, $tmp_var, $javascript); + $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n $requete")); + $cpt = $cpt['n']; + + $requete = "SELECT $select $requete $order"; + + $tranches = afficher_tranches_requete($requete, $cpt, 3, $tmp_var, $javascript); if (strlen($tranches)) { @@ -610,7 +616,7 @@ function afficher_groupe_mots($id_groupe) { echo ereg_replace("\:\:id\_ajax\_fonc\:\:", $id_ajax_fonc, $tranches); - $result = spip_query($query); + $result = spip_query($requete); while ($row = spip_fetch_array($result)) { $vals = ''; diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php index f15f1655a20b47e90340303952dbddba244b25d2..b5950153edcbd0fa0c0b1255b8cce14bbd4e4ba3 100644 --- a/ecrire/inc/presentation.php +++ b/ecrire/inc/presentation.php @@ -447,22 +447,10 @@ function afficher_liste($largeurs, $table, $styles = '') { return $res; } -function afficher_tranches_requete(&$query, $colspan, $tmp_var=false, $javascript=false, $nb_aff = 10) { +function afficher_tranches_requete(&$query, $num_rows, $colspan, $tmp_var=false, $javascript=false, $nb_aff = 10) { static $ancre = 0; global $spip_lang_right, $spip_display; - $query = trim($query); - $query_count = $query; - if (preg_match('{GROUP[[:space:]]BY}',$query_count)==FALSE){ - $query_count = eregi_replace('^(SELECT)[[:space:]].*[[:space:]](FROM)[[:space:]]', '\\1 COUNT(*) \\2 ', $query); - } - $query_count = eregi_replace('ORDER[[:space:]]+BY.*$', '', $query_count); - - $res = spip_query($query_count); - $num_rows = spip_num_rows($res); - if ($num_rows == 1) // ca n'est pas une requete avec jointure - list($num_rows) = spip_fetch_array($res); - if (!$num_rows) return; // Ne pas couper pour trop peu @@ -683,7 +671,6 @@ function afficher_articles($titre_table, $requete, $afficher_visites = false, $a global $options, $spip_display; global $spip_lang_left, $spip_lang_right; - // Preparation pour basculer vers liens de traductions $afficher_trad = ($GLOBALS['meta']['gerer_trad'] == "oui"); if ($afficher_trad) { @@ -739,12 +726,18 @@ function afficher_articles($titre_table, $requete, $afficher_visites = false, $a $jjscript = addslashes(serialize($jjscript)); $hash = "0x".substr(md5($connect_id_auteur.$jjscript), 0, 16); - - $tmp_var = substr(md5($jjscript), 0, 4); $javascript = "charger_id_url('" . generer_url_ecrire("ajax_page","fonction=sql&id_ajax_fonc=::id_ajax_fonc::::deb::", true) . "','$tmp_var')"; - $tranches = afficher_tranches_requete($requete, $afficher_auteurs ? 4 + $ajout_col : 3 + $ajout_col, $tmp_var, $javascript); + if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/D', + $requete, + $r)) { + $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]")); + $cpt = $cpt['n']; + + $tranches = afficher_tranches_requete($requete, $cpt, $afficher_auteurs ? 4 + $ajout_col : 3 + $ajout_col, $tmp_var, $javascript); + + } $requete = str_replace("FROM spip_articles AS articles ", "FROM spip_articles AS articles LEFT JOIN spip_petitions AS petitions USING (id_article)", $requete); if (strlen($tranches) OR $toujours_afficher) { @@ -956,7 +949,15 @@ function afficher_articles_trad($titre_table, $requete, $afficher_visites = fals $tmp_var = substr(md5($jjscript), 0, 4); $javascript = "charger_id_url('" . generer_url_ecrire("ajax_page", 'fonction=sql&id_ajax_fonc=::id_ajax_fonc::::deb::') . "','$tmp_var')"; - $tranches = afficher_tranches_requete($requete, 4, $tmp_var, $javascript); + + if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/', + $requete, + $r)) { + $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]")); + $cpt = $cpt['n']; + + $tranches = afficher_tranches_requete($requete, $cpt, 4, $tmp_var, $javascript); + } $requete = str_replace("FROM spip_articles AS articles ", "FROM spip_articles AS articles LEFT JOIN spip_petitions AS petitions USING (id_article)", $requete); @@ -1115,10 +1116,15 @@ function afficher_breves($titre_table, $requete, $affrub=false) { if ($GLOBALS['langue_rubrique']) $langue_defaut = $GLOBALS['langue_rubrique']; else $langue_defaut = $GLOBALS['meta']['langue_site']; } - - if ($options == "avancees") $tranches = afficher_tranches_requete($requete, 4); - else $tranches = afficher_tranches_requete($requete, 3); + if (preg_match('/(\bFROM\s+.*?)(\s+ORDER\s+BY\s+.*)?$/', + $requete, + $r)) { + $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n $r[1]")); + $cpt = $cpt['n']; + + $tranches = afficher_tranches_requete($requete, $cpt, ($options == "avancees") ? 4 : 3); + } if (strlen($tranches)) { //debut_cadre_relief("breve-24.gif"); @@ -1213,7 +1219,14 @@ function afficher_rubriques($titre_table, $requete) { global $connect_id_auteur; global $spip_lang_rtl; - $tranches = afficher_tranches_requete($requete, 3); + if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/', + $requete, + $r)) { + $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]")); + $cpt = $cpt['n']; + + $tranches = afficher_tranches_requete($requete, $cpt, 3); + } if (strlen($tranches)) { @@ -1325,7 +1338,14 @@ function puce_statut($statut, $type='article') { function afficher_auteurs ($titre_table, $requete) { - $tranches = afficher_tranches_requete($requete, 2); + if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/', + $requete, + $r)) { + + $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]")); + $cpt = $cpt['n']; + $tranches = afficher_tranches_requete($requete, $cpt, 2); + } if (strlen($tranches)) { diff --git a/ecrire/inc/sites_voir.php b/ecrire/inc/sites_voir.php index 453d03d430e7d35cd3fdd011b38efd6cec55674b..e0dc948ba7b4a9e014dc730f6a820a9916a44d40 100644 --- a/ecrire/inc/sites_voir.php +++ b/ecrire/inc/sites_voir.php @@ -16,8 +16,15 @@ function afficher_sites($titre_table, $requete) { global $couleur_claire, $spip_lang_left, $spip_lang_right; global $connect_id_auteur; - $tranches = afficher_tranches_requete($requete, 3); + if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/', + $requete, + $r)) { + $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]")); + $cpt = $cpt['n']; + + $tranches = afficher_tranches_requete($requete, $cpt, 3); + } if ($tranches) { // debut_cadre_relief("site-24.gif"); if ($titre_table) echo "<div style='height: 12px;'></div>"; @@ -155,7 +162,14 @@ function afficher_syndic_articles($titre_table, $requete, $afficher_site = false if ($connect_statut == '0minirezo') $cols ++; if ($afficher_site) $cols ++; - $tranches = afficher_tranches_requete($requete, $cols); + if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/', + $requete, + $r)) { + $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]")); + $cpt = $cpt['n']; + + $tranches = afficher_tranches_requete($requete, $cpt, $cols); + } if (strlen($tranches)) {