$delai_fraicheur) OR (defined('_VAR_MODE') AND _VAR_MODE=='recalcul')){ $rechercher = true; } } // si on n'a pas encore traite les donnees dans une boucle precedente if ($rechercher) { //$tables = liste_des_champs(); $x = objet_type($table); $points = recherche_en_base($recherche, $x, array( 'score' => true, 'toutvoir' => true, 'jointures' => true ), $serveur); // pas de résultat, pas de point $points = isset($points[$x]) ? $points[$x] : array(); // permettre aux plugins de modifier le resultat $points = pipeline('prepare_recherche',array( 'args'=>array('type'=>$x,'recherche'=>$recherche,'serveur'=>$serveur,'modificateurs'=>$modificateurs), 'data'=>$points )); // supprimer les anciens resultats de cette recherche // et les resultats trop vieux avec une marge // pas de AS resultats dans un delete (mysql) $whered = str_replace(array("resultats.recherche","resultats.table_objet","resultats.serveur"),array("recherche","table_objet","serveur"),$where); sql_delete('spip_resultats', 'NOT(' .sql_date_proche('maj', (0-($delai_fraicheur+100)), " SECOND") . ") OR ($whered)"); // inserer les resultats dans la table de cache des resultats if (count($points)){ $tab_couples = array(); foreach ($points as $id => $p){ $tab_couples[] = array( 'recherche' => $hash, 'id' => $id, 'points' => $p['score'], 'table_objet' => $table, 'serveur' => $hash_serv, ); } sql_insertq_multi('spip_resultats',$tab_couples,array()); } } if (!isset($cache[$serveur][$table][$recherche])){ if (!$serveur) $cache[$serveur][$table][$recherche] = array("resultats.points AS points",$where); else { if (sql_countsel('spip_resultats as resultats',$where)) $rows = sql_allfetsel('resultats.id,resultats.points','spip_resultats as resultats',$where); $cache[$serveur][$table][$recherche] = generer_select_where_explicites($table, $primary, $rows, $serveur); } } return $cache[$serveur][$table][$recherche]; } /** * Generer le select et where qui contiennent explicitement * les id et points (ie comme dans SPIP 1.9.x) * quand on fait une recherche sur une table externe * * @param string $table * @param string $primary * @param array $rows * @param string $serveur * @return array */ function generer_select_where_explicites($table, $primary, $rows, $serveur){ # calculer le {id_article IN()} et le {... as points} if (!count($rows)){ return array("''", "0=1"); } else { $listes_ids = array(); $select = '0'; foreach ($rows as $r) $listes_ids[$r['points']][] = $r['id']; foreach ($listes_ids as $p => $ids) $select .= "+$p*(". sql_in("$table.$primary", $ids,'',$serveur) .") "; return array("$select AS points ",calcul_mysql_in("$table.$primary",array_map('reset',$rows),'',$serveur)); } } ?>