[SPIP Zone] r3843 - in /_plugins_/_agora_/mnogosearch: base/ base/mnogo_base.php exec/admin_mnogo.php inc/mnogo_distant.php mnogo_mes_fonctions.php mnogo_mes_options.php mnogosearch/etc/search.htm testmnogo.html

Author: cedric@yterium.com
Date: Sat Jul 8 19:50:15 2006
New Revision: 3843

Log:
reconception pour stockage en table mysql des resultats
les resultats sont demandes par groupe de 100 en fonction des besoins et stocké numérotés dans la table.
la boucle doit reecrire a la volee tous les compteurs, grand_total, ... pour prendre en compte le grand total connu mais pas forcement stocke en base, le compteur_boucle qui correspond aux numero de resultat recuperer, la base locale pouvant avoir des trous ....
Le hash est calculé sur recherche, ce qui est incomplet car il faut prendre en compte la query string de mnogo pour etre exact (sauf numero de page et nombre de resultats par page).
Il ne faut pas utiliser de critere de tri sur la boucle directement, mais passer par les criteres de tri mnogosearch
Il y a un bug potentiel sur la gestion des pages stockées si la boucle demande des resultats a cheval sur deux pages (debut_xxx=95 par exemple).

Added:
    _plugins_/_agora_/mnogosearch/base/
    _plugins_/_agora_/mnogosearch/base/mnogo_base.php
Modified:
    _plugins_/_agora_/mnogosearch/exec/admin_mnogo.php
    _plugins_/_agora_/mnogosearch/inc/mnogo_distant.php
    _plugins_/_agora_/mnogosearch/mnogo_mes_fonctions.php
    _plugins_/_agora_/mnogosearch/mnogo_mes_options.php
    _plugins_/_agora_/mnogosearch/mnogosearch/etc/search.htm
    _plugins_/_agora_/mnogosearch/testmnogo.html

Added: _plugins_/_agora_/mnogosearch/base/mnogo_base.php

--- _plugins_/_agora_/mnogosearch/base/mnogo_base.php (added)
+++ _plugins_/_agora_/mnogosearch/base/mnogo_base.php Sat Jul 8 19:50:15 2006
@@ -0,0 +1,52 @@
+<?php
+// -----------------------------------------------------------------------------
+// Declaration des tables mnogosearch
+// creation 2/07/2006 pour SPIP 1.9
+
+global $tables_principales;
+global $tables_auxiliaires;
+
+//-- Table MNOGOSEARCH ------------------------------------------
+$mnogosearch_summary = array(
+ "`hash`" => "BIGINT UNSIGNED NOT NULL",
+ "resume_resultats" => "text DEFAULT '' NOT NULL",
+ "total" => "bigint(21) DEFAULT '0' NOT NULL",
+ "maj" => "TIMESTAMP"
+ );
+
+$mnogosearch_summary_key = array(
+ "PRIMARY KEY" => "`hash`");
+
+$mnogosearch = array(
+ "`hash`" => "BIGINT UNSIGNED NOT NULL",
+ "numero" => "bigint(21) NOT NULL",
+ "titre" => "text DEFAULT ''",
+ "url" => "text DEFAULT ''",
+ "points" => "bigint(21) DEFAULT '0' NOT NULL",
+ "popularite" => "bigint(21) DEFAULT '0' NOT NULL",
+ "descriptif" => "text DEFAULT ''",
+ "taille" => "bigint(21) DEFAULT '0' NOT NULL",
+ "mime_type" => "varchar(100) NOT NULL",
+ "date" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
+ "cache_url" => "text DEFAULT ''",
+ "valide" => "ENUM('non', 'oui') DEFAULT 'oui' NOT NULL",
+ "maj" => "TIMESTAMP"
+ );
+
+$mnogosearch_key = array(
+ "PRIMARY KEY" => "`hash`, numero",
+ "KEY numero" => "numero");
+
+
+$tables_principales['spip_mnogosearch_summary'] =
+ array('field' => &$mnogosearch_summary, 'key' => &$mnogosearch_summary_key);
+
+$tables_principales['spip_mnogosearch'] =
+ array('field' => &$mnogosearch, 'key' => &$mnogosearch_key);
+
+// 'spip_' dans l'index de $tables_principales
+global $table_des_tables;
+$table_des_tables['mnogosearch']='mnogosearch';
+$table_des_tables['mnogosearch_summary']='mnogosearch_summary';
+
+?>
\ No newline at end of file

Modified: _plugins_/_agora_/mnogosearch/exec/admin_mnogo.php

--- _plugins_/_agora_/mnogosearch/exec/admin_mnogo.php (original)
+++ _plugins_/_agora_/mnogosearch/exec/admin_mnogo.php Sat Jul 8 19:50:15 2006
@@ -5,6 +5,9 @@
function exec_admin_mnogo(){
   global $connect_statut,$connect_toutes_rubriques;
   
+ include_spip('inc/mnogo_distant');
+ mnogo_verifier_base();
+
   include_spip("inc/presentation");
     
   debut_page(_L("Interface mnoGoSearch"), "mnoGoSearch", "mnoGoSearch");
@@ -12,7 +15,7 @@
   debut_gauche();
   
   debut_boite_info();
- echo propre(_L('Cette page permet de configurer l\'interrogation du moteur de recherche mnoGoSearch<br/> Configurez votre mnoGoSearch avec '));
+ echo propre(_L('Cette page permet de configurer l\'interrogation du moteur de recherche mnoGoSearch<br/> Configurez votre mnoGoSearch avec les exemples fournis dans le repertoire mnogosearch du plugin.'));
   fin_boite_info();

Modified: _plugins_/_agora_/mnogosearch/inc/mnogo_distant.php

--- _plugins_/_agora_/mnogosearch/inc/mnogo_distant.php (original)
+++ _plugins_/_agora_/mnogosearch/inc/mnogo_distant.php Sat Jul 8 19:50:15 2006
@@ -1,13 +1,34 @@
<?php

-function mnogo_querystring(){
+function mnogo_install(){
+ mnogo_verifier_base();
+}
+
+function mnogo_uninstall(){
+}
+
+function mnogo_verifier_base(){
+ $version_base = 0.10;
+ $current_version = 0.0;
+ if ( (isset($GLOBALS['meta']['mnogo_base_version']) )
+ && (($current_version = $GLOBALS['meta']['mnogo_base_version'])==$version_base))
+ return;
+
+ include_spip('base/mnogo_base');
+ if ($current_version==0.0){
+ include_spip('base/create');
+ include_spip('base/abstract_sql');
+ creer_base();
+ ecrire_meta('mnogo_base_version',$current_version=$version_base);
+ }
+ ecrire_metas();
+}
+
+function mnogo_querystring($recherche,$debut,$nombre){
   $default_qs=array('q'=>'','m'=>'bool','wm'=>'wrd','sp'=>1,'sy'=>1,'wf'=>'2221','type'=>'','ul'=>'','fmt'=>'xml','np'=>0,'ps'=>10,'GroupBySite'=>'no');
   $key_translate = array('recherche'=>'q','site'=>'ul');

   foreach($_REQUEST as $key=>$value){
- if ($key=='debut_t'){
- $default_qs['np'] = (int)round($value/$default_qs['ps']);
- }
     if (isset($key_translate[$key]))
       $key = $key_translate[$key];
     if (isset($default_qs[$key]))
@@ -15,23 +36,26 @@
   }
   $default_qs['fmt'] = 'xml'; // obligatoire
   // remplacer les operateurs ET,AND,OR,OU par leur forme & |
- $default_qs['q'] = preg_replace(',\s(ET|AND)\s,',urlencode(' & '),$default_qs['q']);
- $default_qs['q'] = preg_replace(',\s(OU|OR)\s,',urlencode(' | '),$default_qs['q']);
+ $default_qs['q'] = urlencode(mnogo_formate_recherche(urldecode($recherche)));
+
+ // gerer les pages
+ $default_qs['ps'] = max(100,$nombre);
+ $default_qs['np'] = (int)floor($debut/$default_qs['ps']);
+
   $req = "";
   foreach($default_qs as $key=>$value)
     $default_qs[$key]=$key."=".$value;
   return implode("&",$default_qs);
}

-function mnogo_getresults(){
+function mnogo_getresults($recherche, $debut, $nombre){
+ global $tables_principales;
   global $mnogo_resultats_synthese;
   global $mnogo_resultats;
   $url = isset($GLOBALS['meta']['mnogo_url_search'])?$GLOBALS['meta']['mnogo_url_search']:"";
- $qs = mnogo_querystring();
+ $qs = mnogo_querystring($recherche,$debut,$nombre);
   $url .= (strpos($url,"?")!==FALSE)?"&$qs":"?$qs";

- $offset = 0;
-
   $arbre = array();
   include_spip('inc/distant');
   $contenu = recuperer_page($url);
@@ -39,20 +63,45 @@
     include_spip('inc/plugin');
     $arbre = parse_plugin_xml($contenu);
   }
+ include_spip('inc/date');
   if (isset($arbre['recherche'][0])){
- foreach ($arbre['recherche'][0] as $balise=>$value){
- if ($balise!='resultats')
- $mnogo_resultats_synthese[preg_replace(',^balise_,i','',$balise)] = applatit_arbre($value);
- if ($balise=='balise_MNOGO_TOTAL')
- $mnogo_resultats = array_fill (0, $mnogo_resultats_synthese['MNOGO_TOTAL'], NULL );
- if ($balise=='balise_MNOGO_PREMIER')
- $offset = (int)trim(applatit_arbre($value))-1;
- }
- if (isset($arbre['recherche'][0]['resultats'][0]['resultat'])){
+ $total = applatit_arbre($arbre['recherche'][0]['balise_MNOGO_TOTAL']);
+ $premier = intval(applatit_arbre($arbre['recherche'][0]['balise_MNOGO_PREMIER']));
+ $dernier = intval(applatit_arbre($arbre['recherche'][0]['balise_MNOGO_DERNIER']));
+ $resume = applatit_arbre($arbre['recherche'][0]['balise_MNOGO_RESUME_RESULTATS']);
+ // regarder si le resume etait la et a change
+ $res = spip_query("SELECT * FROM spip_mnogosearch_summary WHERE ".hash_where($recherche));
+ if ($row = spip_fetch_array($res)){
+ $changed = false;
+ $changed = $changed OR ($row['total']!=$total);
+ $changed = $changed OR ($row['resume_resultats']!=$resume);
+ if ($changed){
+ spip_query("UPDATE FROM spip_mnogosearch SET valide='non' WHERE ".hash_where($recherche));
+ spip_query("UPDATE FROM spip_mnogosearch_summary SET resume_resultats=".spip_abstract_quote($resume).", total=".spip_abstract_quote($total).", maj=NOW(), WHERE ".hash_where($recherche));
+ }
+ }
+ else
+ spip_query("INSERT INTO spip_mnogosearch_summary SET resume_resultats=".spip_abstract_quote($resume).", total=".spip_abstract_quote($total).", maj=NOW(), hash=0x".mnogo_hash($recherche));
+
+ if (isset($arbre['recherche'][0]['resultats'][0]['resultat'][$dernier-$premier])){
+ $hashwere = hash_where();
+ $value['hash'] = "0x".mnogo_hash($recherche);
       foreach ($arbre['recherche'][0]['resultats'][0]['resultat'] as $key=>$liste){
- foreach ($liste as $balise=>$value) {
- $mnogo_resultats[$key+$offset][preg_replace(',^balise_,i','',$balise)] = applatit_arbre($value);
- }
+ $value['numero'] = $key+$premier;
+ $value['titre'] = spip_abstract_quote(applatit_arbre($liste['balise_MNOGO_ITEM_TITRE']));
+ $value['points'] = intval(applatit_arbre($liste['balise_MNOGO_ITEM_POINTS']));
+ $value['url'] = spip_abstract_quote(applatit_arbre($liste['balise_MNOGO_ITEM_URL']));
+ $value['popularite'] = intval(10000*applatit_arbre($liste['balise_MNOGO_ITEM_POPULARITE']));
+ $value['descriptif'] = spip_abstract_quote(applatit_arbre($liste['balise_MNOGO_ITEM_DESCRIPTIF']));
+ $value['taille'] = intval(applatit_arbre($liste['balise_MNOGO_ITEM_TAILLE']));
+ $value['mime_type'] = spip_abstract_quote(applatit_arbre($liste['balise_MNOGO_ITEM_TYPE']));

[... 345 lines stripped ...]