Browse Source

suppression de l'indexation pour le moteur de recherche, qui utilise desormais inc/rechercher

2.0
Fil 16 years ago
parent
commit
618a60caa5
  1. 1
      .gitattributes
  2. 16
      ecrire/action/editer_auteur.php
  3. 33
      ecrire/action/editer_auteurs.php
  4. 8
      ecrire/action/editer_breve.php
  5. 28
      ecrire/action/editer_mot.php
  6. 5
      ecrire/action/editer_rubrique.php
  7. 6
      ecrire/action/editer_site.php
  8. 17
      ecrire/action/instituer_forum.php
  9. 43
      ecrire/action/legender.php
  10. 7
      ecrire/balise/formulaire_recherche.php
  11. 24
      ecrire/base/auxiliaires.php
  12. 32
      ecrire/base/optimiser.php
  13. 17
      ecrire/base/serial.php
  14. 12
      ecrire/base/upgrade.php
  15. 15
      ecrire/configuration/syndications.php
  16. 25
      ecrire/exec/admin_vider.php
  17. 2
      ecrire/exec/auteurs.php
  18. 4
      ecrire/exec/config_fonctions.php
  19. 45
      ecrire/extract/doc.php
  20. 1
      ecrire/extract/index.php
  21. 319
      ecrire/extract/pdf.php
  22. 47
      ecrire/extract/rtf.php
  23. 16
      ecrire/inc/ajouter_documents.php
  24. 8
      ecrire/inc/config.php
  25. 4
      ecrire/inc/cron.php
  26. 18
      ecrire/inc/distant.php
  27. 17
      ecrire/inc/editer_mot.php
  28. 1
      ecrire/inc/import.php
  29. 991
      ecrire/inc/indexation.php
  30. 18
      ecrire/inc/modifier.php
  31. 80
      ecrire/inc/rechercher.php
  32. 4
      ecrire/inc/rubriques.php
  33. 9
      ecrire/inc/syndic.php
  34. 8
      ecrire/inc/visites.php
  35. 2
      ecrire/inc_version.php
  36. 1
      ecrire/public/composer.php
  37. 3
      ecrire/public/criteres.php

1
.gitattributes vendored

@ -537,7 +537,6 @@ ecrire/exec/tourner.php -text
ecrire/exec/upgrade.php -text
ecrire/exec/valider_xml.php -text
ecrire/exec/virtualiser.php -text
ecrire/extract/index.php -text
ecrire/inc/actions.php -text
ecrire/inc/afficher_objets.php -text
ecrire/inc/agenda.php -text

16
ecrire/action/editer_auteur.php

@ -212,11 +212,17 @@ function action_legender_auteur_post($r) {
spip_query("INSERT spip_auteurs_articles (id_article,id_auteur) VALUES ($id_article,$id_auteur)");
}
// Si on modifie la fiche auteur, reindexer
if ($GLOBALS['meta']['activer_moteur'] == 'oui') {
include_spip("inc/indexation");
marquer_indexer('spip_auteurs', $id_auteur);
}
// Notifications, gestion des revisions, reindexation...
pipeline('post_edition',
array(
'args' => array(
'table' => 'spip_auteurs',
'id_objet' => $id_auteur
),
'data' => $auteur
)
);
// ..et mettre a jour les fichiers .htpasswd et .htpasswd-admin
ecrire_acces();

33
ecrire/action/editer_auteurs.php

@ -66,10 +66,18 @@ function supprimer_auteur_et_rediriger($type, $id, $id_auteur, $redirect)
$jointure = table_jointure('auteur', $type);
if (preg_match(',^[a-z]*$,',$type)){
spip_query("DELETE FROM spip_{$jointure} WHERE id_auteur="._q($id_auteur)." AND id_{$type}="._q($id));
if ($GLOBALS['meta']['activer_moteur'] == 'oui') {
include_spip("inc/indexation");
marquer_indexer("spip_".table_objet($type), $id);
}
// Notifications, gestion des revisions, reindexation...
pipeline('post_edition',
array(
'args' => array(
'operation' => 'supprimer_auteur',
'table' => 'spip_'.table_objet($type),
'id_objet' => $id
),
'data' => null
)
);
}
if ($redirect) redirige_par_entete($redirect);
@ -83,11 +91,18 @@ function ajouter_auteur_et_rediriger($type, $id, $id_auteur, $redirect)
$res = spip_query("SELECT id_$type FROM spip_{$jointure} WHERE id_auteur=" . _q($id_auteur) . " AND id_{$type}=" . $id);
if (!spip_num_rows($res))
spip_abstract_insert("spip_{$jointure}", "(id_auteur,id_{$type})", "($id_auteur,$id)");
if ($GLOBALS['meta']['activer_moteur'] == 'oui') {
include_spip("inc/indexation");
marquer_indexer("spip_".table_objet($type), $id);
}
// Notifications, gestion des revisions, reindexation...
pipeline('post_edition',
array(
'args' => array(
'operation' => 'ajouter_auteur',
'table' => 'spip_'.table_objet($type),
'id_objet' => $id
),
'data' => null
)
);
}
if ($redirect) redirige_par_entete($redirect);

8
ecrire/action/editer_breve.php

@ -188,17 +188,11 @@ function revisions_breves ($id_breve, $c=false) {
suivre_invalideur("id='id_breve/$id_breve'");
}
// Demander une reindexation de la breve
if ($statut == 'publie') {
include_spip('inc/indexation');
marquer_indexer('spip_breves', $id_breve);
}
// Au besoin, changer le statut des rubriques concernees
calculer_rubriques_if($id_rubrique, $champs, $statut_ancien);
// Notification ?
// Notifications, revisions, reindexation...
pipeline('post_edition',
array(
'args' => array(

28
ecrire/action/editer_mot.php

@ -45,17 +45,25 @@ function action_editer_mot_post($r)
}
}
if ($nouv_mot ? $nouv_mot : ($nouv_mot = _request('nouv_mot'))) {
// recopie de:
// inserer_mot("spip_mots_$table", $table_id, $id_objet, $nouv_mot);
$result = spip_num_rows(spip_query("SELECT id_mot FROM spip_mots_$table WHERE id_mot="._q($nouv_mot)." AND $table_id=$id_objet"));
if (!$result)
spip_query("INSERT INTO spip_mots_$table (id_mot,$table_id) VALUES ("._q($nouv_mot).", $id_objet)");
}
// recopie de:
// inserer_mot("spip_mots_$table", $table_id, $id_objet, $nouv_mot);
$result = spip_num_rows(spip_query("SELECT id_mot FROM spip_mots_$table WHERE id_mot="._q($nouv_mot)." AND $table_id=$id_objet"));
if (!$result)
spip_query("INSERT INTO spip_mots_$table (id_mot,$table_id) VALUES ("._q($nouv_mot).", $id_objet)");
}
if ($table AND $GLOBALS['meta']['activer_moteur'] == 'oui') {
include_spip("inc/indexation");
marquer_indexer("spip_$table", $id_objet);
}
// Notifications, gestion des revisions, reindexation...
if ($table)
pipeline('post_edition',
array(
'args' => array(
'operation' => 'editer_mot',
'table' => 'spip_'.$table,
'id_objet' => $id_objet
),
'data' => null
)
);
$redirect = rawurldecode($redirect);

5
ecrire/action/editer_rubrique.php

@ -125,11 +125,6 @@ function revisions_rubriques($id_rubrique, $c=false) {
spip_query("UPDATE spip_rubriques SET ".join(', ', $update)." WHERE id_rubrique=$id_rubrique");
if ($GLOBALS['meta']['activer_moteur'] == 'oui') {
include_spip("inc/indexation");
marquer_indexer('spip_rubriques', $id_rubrique);
}
propager_les_secteurs();
// Deplacement d'une rubrique publiee ==> chgt general de leur statut

6
ecrire/action/editer_site.php

@ -259,12 +259,6 @@ function revisions_sites ($id_syndic, $c=false) {
suivre_invalideur("id='id_syndic/$id_syndic'");
}
// Demander une reindexation du site
if ($statut == 'publie') {
include_spip('inc/indexation');
marquer_indexer('spip_syndic', $id_syndic);
}
calculer_rubriques_if($id_rubrique, $champs, $statut_ancien);
// Notification ?

17
ecrire/action/instituer_forum.php

@ -45,18 +45,23 @@ function action_instituer_forum_dist() {
$id_messages[] = $row['id_forum'];
}
// Signaler au moteur de recherche qu'il faut reindexer le thread
if ($id_parent) {
include_spip('inc/indexation');
marquer_indexer ('spip_forum', $id_parent);
}
// Notifier de la publication du message, s'il etait 'prop'
if ($old=='prop' AND $statut=='publie') {
if ($notifications = charger_fonction('notifications', 'inc')) {
$notifications('forumvalide', $id_forum);
}
}
// Reindexation du thread (par exemple)
pipeline('post_edition',
array(
'args' => array(
'table' => 'spip_forum',
'id_objet' => $id_forum
),
'data' => null
)
);
}
?>

43
ecrire/action/legender.php

@ -36,35 +36,28 @@ function action_legender_post($r)
$id_document = $r[1];
$titre_document = (corriger_caracteres(_request('titre_document')));
$descriptif_document = (corriger_caracteres(_request('descriptif_document')));
// taille du document (cas des embed)
if ($largeur_document = intval(_request('largeur_document'))
AND $hauteur_document = intval(_request('hauteur_document')))
$wh = ", largeur='$largeur_document',
hauteur='$hauteur_document'";
else $wh = "";
// Date du document (uniquement dans les rubriques)
if (!_request('jour_doc'))
$d = '';
else {
$mois_doc = _request('mois_doc');
$jour_doc = _request('jour_doc');
if (_request('annee_doc') == "0000")
$mois_doc = "00";
if ($mois_doc == "00")
$jour_doc = "00";
$date = _request('annee_doc').'-'.$mois_doc.'-'.$jour_doc;
AND $hauteur_document = intval(_request('hauteur_document'))) {
set_request('largeur', $largeur_document);
set_request('hauteur', $hauteur_document);
}
if (preg_match('/^[0-9-]+$/', $date)) $d=" date='$date',";
// Date du document (uniquement dans les rubriques)
if (_request('jour_doc') !== null) {
$mois_doc = _request('mois_doc');
$jour_doc = _request('jour_doc');
if (_request('annee_doc') == "0000")
$mois_doc = "00";
if ($mois_doc == "00")
$jour_doc = "00";
$date = _request('annee_doc').'-'.$mois_doc.'-'.$jour_doc;
if (preg_match('/^[0-9-]+$/', $date))
set_request('date', $date);
}
spip_query("UPDATE spip_documents SET$d titre=" . _q($titre_document) . ", descriptif=" . _q($descriptif_document) . " $wh WHERE id_document=".$id_document);
// Demander l'indexation du document
include_spip('inc/indexation');
marquer_indexer('spip_documents', $id_document);
include_spip('inc/modifier');
revision_document($id_document);
}
?>

7
ecrire/balise/formulaire_recherche.php

@ -23,13 +23,8 @@ function balise_FORMULAIRE_RECHERCHE ($p)
// http://doc.spip.org/@balise_FORMULAIRE_RECHERCHE_stat
function balise_FORMULAIRE_RECHERCHE_stat($args, $filtres) {
// Si le moteur n'est pas active, pas de balise
if ($GLOBALS['meta']["activer_moteur"] != "oui")
return '';
// filtres[0] doit etre un script (a revoir)
else
return array($filtres[0], $args[0]);
return array($filtres[0], $args[0]);
}
// http://doc.spip.org/@balise_FORMULAIRE_RECHERCHE_dyn

24
ecrire/base/auxiliaires.php

@ -176,24 +176,6 @@ $spip_meta = array(
$spip_meta_key = array(
"PRIMARY KEY" => "nom");
$spip_index = array(
"`hash`" => "bigint UNSIGNED NOT NULL",
"points" => "int UNSIGNED DEFAULT '0' NOT NULL",
"id_objet" => "int UNSIGNED NOT NULL",
"id_table" => "tinyint UNSIGNED NOT NULL" );
$spip_index_key = array(
"KEY `hash`" => "`hash`",
"KEY id_objet" => "id_objet",
"KEY id_table" => "id_table");
$spip_index_dico = array(
"`hash`" => "bigint UNSIGNED NOT NULL",
"dico" => "VARCHAR (30)");
$spip_index_dico_key = array(
"PRIMARY KEY" => "dico");
$spip_versions = array (
"id_article" => "bigint(21) NOT NULL",
"id_version" => "int unsigned DEFAULT '0' NOT NULL",
@ -280,12 +262,6 @@ $tables_auxiliaires['spip_mots_documents'] = array(
$tables_auxiliaires['spip_meta'] = array(
'field' => &$spip_meta,
'key' => &$spip_meta_key);
$tables_auxiliaires['spip_index'] = array(
'field' => &$spip_index,
'key' => &$spip_index_key);
$tables_auxiliaires['spip_index_dico'] = array(
'field' => &$spip_index_dico,
'key' => &$spip_index_dico_key);
$tables_auxiliaires['spip_versions'] = array(
'field' => &$spip_versions,
'key' => &$spip_versions_key);

32
ecrire/base/optimiser.php

@ -19,7 +19,12 @@ function optimiser_base($attente = 86400) {
optimiser_base_une_table();
optimiser_base_disparus($attente);
optimiser_base_indexation();
// optimisation a passer dans le plugin indexation
include_spip('inc/indexation');
if (function_exists('optimiser_base_indexation')) {
optimiser_base_indexation();
}
}
@ -397,29 +402,4 @@ function optimiser_base_disparus($attente = 86400) {
}
// http://doc.spip.org/@optimiser_base_indexation
function optimiser_base_indexation($attente) {
// les objets inutiles
include_spip('inc/indexation');
$liste_tables = liste_index_tables();
foreach ($liste_tables as $id_table => $table_objet) {
$col_id = primary_index_table($table_objet);
$critere = critere_optimisation($table_objet);
if (strlen($critere)>0)
$critere = "AND $critere";
spip_query("UPDATE $table_objet SET idx='' WHERE idx<>'non' $critere");
$suppr = '';
$s = spip_query("SELECT $col_id AS n FROM $table_objet WHERE idx='' $critere");
while ($t = spip_abstract_fetch($s))
$suppr .= ','.$t['n'];
$s = spip_query("SELECT $col_id AS n FROM $table_objet WHERE idx='non'");
while ($t = spip_abstract_fetch($s))
$suppr .= ','.$t['n'];
if ($suppr)
spip_query("DELETE FROM spip_index WHERE id_objet IN (0$suppr) AND id_table=$id_table");
}
}
?>

17
ecrire/base/serial.php

@ -39,7 +39,6 @@ $spip_articles = array(
"langue_choisie" => "VARCHAR(3) DEFAULT 'non'",
"id_trad" => "bigint(21) DEFAULT '0' NOT NULL",
"extra" => "longtext NULL",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"id_version" => "int unsigned DEFAULT '0' NOT NULL",
"nom_site" => "tinytext",
"url_site" => "VARCHAR(255)",
@ -54,7 +53,6 @@ $spip_articles_key = array(
"KEY statut" => "statut, date",
"KEY url_site" => "url_site",
"KEY date_modif" => "date_modif",
"KEY idx" => "idx",
"KEY url_propre" => "url_propre");
$spip_articles_join = array(
"id_article"=>"id_article",
@ -83,7 +81,6 @@ $spip_auteurs = array(
"cookie_oubli" => "tinytext",
"source" => "VARCHAR(10) DEFAULT 'spip' NOT NULL",
"lang" => "VARCHAR(10) DEFAULT '' NOT NULL",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"url_propre" => "VARCHAR(255)",
"extra" => "longtext NULL");
@ -92,7 +89,6 @@ $spip_auteurs_key = array(
"KEY login" => "login",
"KEY statut" => "statut",
"KEY lang" => "lang",
"KEY idx" => "idx",
"KEY en_ligne" => "en_ligne",
"KEY url_propre" => "url_propre");
$spip_auteurs_join = array(
@ -112,13 +108,11 @@ $spip_breves = array(
"lang" => "VARCHAR(10) DEFAULT '' NOT NULL",
"langue_choisie" => "VARCHAR(3) DEFAULT 'non'",
"maj" => "TIMESTAMP",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"extra" => "longtext NULL",
"url_propre" => "VARCHAR(255)");
$spip_breves_key = array(
"PRIMARY KEY" => "id_breve",
"KEY idx" => "idx",
"KEY id_rubrique" => "id_rubrique",
"KEY url_propre" => "url_propre");
$spip_breves_join = array(
@ -149,13 +143,11 @@ $spip_mots = array(
"id_groupe" => "bigint(21) NOT NULL",
"type" => "text",
"extra" => "longtext NULL",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"url_propre" => "VARCHAR(255)",
"maj" => "TIMESTAMP");
$spip_mots_key = array(
"PRIMARY KEY" => "id_mot",
"KEY idx" => "idx",
"KEY url_propre" => "url_propre");
$spip_groupes_mots = array(
@ -191,7 +183,6 @@ $spip_rubriques = array(
"date" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
"lang" => "VARCHAR(10) DEFAULT '' NOT NULL",
"langue_choisie" => "VARCHAR(3) DEFAULT 'non'",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"extra" => "longtext NULL",
"url_propre" => "VARCHAR(255)",
"statut_tmp" => "varchar(10) DEFAULT '0' NOT NULL",
@ -201,7 +192,6 @@ $spip_rubriques = array(
$spip_rubriques_key = array(
"PRIMARY KEY" => "id_rubrique",
"KEY lang" => "lang",
"KEY idx" => "idx",
"KEY id_parent" => "id_parent",
"KEY url_propre" => "url_propre");
@ -219,7 +209,6 @@ $spip_documents = array(
"hauteur" => "integer NOT NULL",
"mode" => "ENUM('vignette', 'document') NOT NULL",
"distant" => "VARCHAR(3) DEFAULT 'non'",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"maj" => "TIMESTAMP");
$spip_documents_key = array(
@ -257,7 +246,6 @@ $spip_syndic = array(
"url_syndic" => "text",
"descriptif" => "text",
"url_propre" => "VARCHAR(255)",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"maj" => "TIMESTAMP",
"syndication" => "VARCHAR(3)",
"statut" => "varchar(10) DEFAULT '0' NOT NULL",
@ -275,7 +263,6 @@ $spip_syndic_key = array(
"PRIMARY KEY" => "id_syndic",
"KEY id_rubrique" => "id_rubrique",
"KEY id_secteur" => "id_secteur",
"KEY idx" => "idx",
"KEY statut" => "statut, date_syndic",
"KEY url_propre" => "url_propre");
$spip_syndic_join = array(
@ -322,7 +309,6 @@ $spip_forum = array(
"nom_site" => "text",
"url_site" => "text",
"statut" => "varchar(8) DEFAULT '0' NOT NULL",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"ip" => "varchar(16)",
"maj" => "TIMESTAMP",
"id_auteur" => "bigint DEFAULT '0' NOT NULL",
@ -337,7 +323,6 @@ $spip_forum_key = array(
"KEY id_message" => "id_message",
"KEY id_syndic" => "id_syndic",
"KEY id_rubrique" => "id_rubrique",
"KEY idx" => "idx",
"KEY statut" => "statut, date_heure",
"KEY date_thread" => "date_thread");
$spip_forum_join = array(
@ -359,13 +344,11 @@ $spip_signatures = array(
"url_site" => "text",
"message" => "mediumtext",
"statut" => "varchar(10) DEFAULT '0' NOT NULL",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"maj" => "TIMESTAMP");
$spip_signatures_key = array(
"PRIMARY KEY" => "id_signature",
"KEY id_article" => "id_article",
"KEY idx" => "idx",
"KEY statut" => "statut");
$spip_signatures_join = array(
"id_signature"=>"id_signature",

12
ecrire/base/upgrade.php

@ -1464,6 +1464,18 @@ function maj_base($version_cible = 0) {
maj_version('1.942');
}
// suppression de l'indexation dans la version standard
if (upgrade_vers(1.943, $version_installee, $version_cible)) {
foreach(array(
'articles', 'auteurs', 'breves', 'mots', 'rubriques', 'documents', 'syndic', 'forum', 'signatures'
) as $type) {
spip_query("ALTER TABLE spip_$type DROP KEY `idx`");
spip_query("ALTER TABLE spip_$type DROP `idx`");
}
spip_query("DROP TABLE spip_index");
spip_query("DROP TABLE spip_index_dico");
maj_version('1.943');
}
}
?>

15
ecrire/configuration/syndications.php

@ -26,7 +26,6 @@ function configuration_syndications_dist()
$activer_sites = $GLOBALS['meta']['activer_sites'];
$activer_syndic = $GLOBALS['meta']["activer_syndic"];
$proposer_sites = $GLOBALS['meta']["proposer_sites"];
$visiter_sites = $GLOBALS['meta']["visiter_sites"];
$moderation_sites = $GLOBALS['meta']["moderation_sites"];
$res = "\n<table border='0' cellspacing='1' cellpadding='3' width=\"100%\">";
@ -89,19 +88,7 @@ function configuration_syndications_dist()
$res .= afficher_choix('moderation_sites', $moderation_sites,
array('oui' => _T('item_bloquer_liens_syndiques'),
'non' => _T('item_non_bloquer_liens_syndiques')));
// Si indexation, activer/desactiver pages recuperees
$activer_moteur = $GLOBALS['meta']["activer_moteur"];
if ($activer_moteur == "oui") {
$res .= "<hr /><p style='text-align: $spip_lang_left'>";
$res .= _T('texte_utilisation_moteur_syndiques')." ";
$res .= "</p><blockquote><p><i>"._T('texte_utilisation_moteur_syndiques_2')."</i></p></blockquote>";
$res .= afficher_choix('visiter_sites', $visiter_sites,
array('non' => _T('item_limiter_recherche'),
'oui' => _T('item_non_limiter_recherche')));
}
$res .= "</div>";
$res .= "</td></tr>\n";

25
ecrire/exec/admin_vider.php

@ -130,31 +130,6 @@ fin_cadre_relief();
fin_cadre_trait_couleur();
//
// Purger la base d'indexation
//
debut_cadre_trait_couleur("racine-site-24.gif", false, "", _T('texte_effacer_donnees_indexation'));
echo "\n<p style='text-align: justify;'>";
if ($GLOBALS['meta']['activer_moteur'] == 'oui')
echo _T('texte_moteur_recherche_active');
else {
echo "<b>"._T('texte_moteur_recherche_non_active')."</b> ";
$cpt = spip_abstract_fetch(spip_query("SELECT COUNT(*) AS n FROM spip_index"));
if ($cpt['n'])
echo _T('texte_commande_vider_tables_indexation');
else
echo _T('texte_tables_indexation_vides');
}
echo '</p>';
echo redirige_action_auteur('purger', 'index', "admin_vider",'',
"\n<div style='text-align: right'><input class='fondo' type='submit' value=\"" .
str_replace('"', '&quot;', _T('bouton_effacer_index')) .
"\" /></div>",
" method='post'");
fin_cadre_trait_couleur();
echo "<br />";

2
ecrire/exec/auteurs.php

@ -268,7 +268,7 @@ function requete_auteurs($tri, $statut, $recherche=NULL)
$tables = liste_des_champs();
$tables = array('auteur'=>$tables['auteur']);
$results = recherche_en_base($recherche, $tables);
$in_auteurs = calcul_mysql_in('aut.id_auteur',implode(',',array_keys($results['auteur'])));
$in_auteurs = calcul_mysql_in('aut.id_auteur',array_keys($results['auteur']));
}
//

4
ecrire/exec/config_fonctions.php

@ -43,7 +43,7 @@ function exec_config_fonctions_dist()
lire_metas();
$reducteur = charger_fonction('reducteur', 'configuration');
$indexeur = charger_fonction('indexeur', 'configuration');
# $indexeur = charger_fonction('indexeur', 'configuration');
$compteur = charger_fonction('compteur', 'configuration');
$avertisseur = charger_fonction('avertisseur', 'configuration');
$versionneur = charger_fonction('versionneur', 'configuration');
@ -54,7 +54,7 @@ function exec_config_fonctions_dist()
$reducteur(), // Creation automatique de vignettes
$indexeur(), // Indexation pour moteur de recherche
# $indexeur(), // Indexation pour moteur de recherche
$compteur(), // Gerant de statistique

45
ecrire/extract/doc.php

@ -1,45 +0,0 @@
<?php
//
// Lit un document 'doc' et extrait son contenu en texte brut
//
// NOTE : l'extracteur n'est pas oblige de convertir le contenu dans
// le charset du site, mais il *doit* signaler le charset dans lequel
// il envoie le contenu, de facon a ce qu'il soit converti au moment
// voulu ; dans le cas contraire le document sera lu comme s'il etait
// dans le charset iso-8859-1
// http://doc.spip.org/@extracteur_doc
function extracteur_doc($fichier, &$charset) {
$charset = 'iso-8859-1';
@exec('metamail -d -q -b -c application/msword '.escapeshellarg($fichier), $r, $e);
if (!$e) return @join(' ', $r);
# wvText
# http://wvware.sourceforge.net/
$temp = tempnam(_DIR_CACHE, 'doc');
@exec('wvText '.escapeshellarg($fichier).'> '.$temp, $r, $e);
lire_fichier($temp, $contenu);
@unlink($temp);
if (!$e) return $contenu;
# antiword
# http://www.winfield.demon.nl/
@exec('antiword '.escapeshellarg($fichier), $r, $e);
if (!$e) return @join(' ', $r);
# catdoc
# http://www.45.free.net/~vitus/ice/catdoc/
@exec('catdoc '.escapeshellarg($fichier), $r, $e);
if (!$e) return @join(' ', $r);
}
// Sait-on extraire ce format ?
// TODO: ici tester si les binaires fonctionnent
$GLOBALS['extracteur']['doc'] = 'extracteur_doc';
?>

1
ecrire/extract/index.php

@ -1 +0,0 @@
X

319
ecrire/extract/pdf.php

@ -1,319 +0,0 @@
<?php
//
// Lit un document 'pdf' et extrait son contenu en texte brut
//
// NOTE : l'extracteur n'est pas oblige de convertir le contenu dans
// le charset du site, mais il *doit* signaler le charset dans lequel
// il envoie le contenu, de facon a ce qu'il soit converti au moment
// voulu ; dans le cas contraire le document sera lu comme s'il etait
// dans le charset iso-8859-1
// http://doc.spip.org/@extracteur_pdf
function extracteur_pdf($fichier, &$charset) {
/* methode tout PHP
$pdf = new Format_PDF;
$texte = $pdf->extraire_texte($fichier);
echo $texte;
exit;
*/
$charset = 'iso-8859-1';
# metamail
@exec('metamail -d -q -b -c application/pdf '.escapeshellarg($fichier), $r, $e);
if (!$e) return @join(' ', $r);
# pdftotext
# http://www.glyphandcog.com/Xpdf.html
# l'option "-enc utf-8" peut echouer ... dommage !
@exec('pdftotext '.escapeshellarg($fichier).' -', $r, $e);
if (!$e) return @join(' ', $r);
}
// Sait-on extraire ce format ?
// TODO: ici tester si les binaires fonctionnent
$GLOBALS['extracteur']['pdf'] = 'extracteur_pdf';
//
// Methode tout PHP (a tester)
//
// http://doc.spip.org/@Format_PDF
class Format_PDF {
var $trans_chars;
var $flag_mono, $flag_brut;
// http://doc.spip.org/@convertir_caracteres
function convertir_caracteres($texte) {
if (!$this->trans_chars) {
// Caracteres speciaux
$this->trans_chars = array(
// ligatures typographiques (!)
chr(2) => 'fi',
chr(3) => 'fl',
chr(174) => 'fi',
chr(175) => 'fl',
// "e" accent aigu
chr(0) => chr(233)
);
}
$texte = strtr($texte, $this->trans_chars);
// Caracteres non-ascii codes en octal
while (preg_match(',\\\\([0-7][0-7][0-7]),', $texte, $regs)) {
$c = chr(octdec($regs[1]));
$texte = str_replace($regs[0], $c, $texte);
$this->trans_chars[$regs[0]] = $c;
}
return $texte;
}
// http://doc.spip.org/@recoller_texte
function recoller_texte($stream) {
static $chars_voyelles, $chars_fusion, $chars_caps, $chars_nums, $bichars_fusion;
if (!$chars_voyelles) {
$chars_voyelles = array('a'=>1, 'e'=>1, 'i'=>1, 'o'=>1, 'u'=>1, 'y'=>1);
$chars_fusion = array('v'=>1, 'w'=>1, 'x'=>1, 'V'=>1, 'W'=>1, 'T'=>1);
$chars_caps = array('A'=>1, 'B'=>1, 'C'=>1, 'D'=>1, 'E'=>1, 'F'=>1, 'G'=>1,
'H'=>1, 'I'=>1, 'J'=>1, 'K'=>1, 'L'=>1, 'M'=>1, 'N'=>1,
'O'=>1, 'P'=>1, 'Q'=>1, 'R'=>1, 'S'=>1, 'T'=>1, 'U'=>1,
'V'=>1, 'W'=>1, 'X'=>1, 'Y'=>1, 'Z'=>1);
$chars_nums = array('0'=>1, '1'=>1, '2'=>1, '3'=>1, '4'=>1, '5'=>1, '6'=>1, '7'=>1, '8'=>1, '9'=>1);
$bichars_fusion = array('ve'=>1, 'vo'=>1, 'ev'=>1, 'ov'=>1,
'xe'=>1, 'xo'=>1, 'ox'=>1, 'ex'=>1,
'we'=>1, 'wo'=>1, 'ow'=>1, 'ew'=>1, 'ff'=>1);
}
// Longueur max pour limiter les erreurs d'extraction
$chaine_len = 140;
$stream = preg_split(",\)[^(]*\(,", $stream);
$extrait = '';
$fini = false;
$this->flag_brut = false;
// Cette boucle est capable de basculer entre deux trois d'execution :
// - normal (plusieurs caracteres par chaine avec fusion)
// - brut (plusieurs caracteres par chaine sans fusion)
// - mono (un caractere par chaine)
while (1) {
if ($this->flag_mono) {
// Un caractere par chaine : fusion rapide
while (list(, $s) = each($stream)) {
if (strlen($s) != 1) {
if (strlen($s) < $chaine_len) $extrait .= $s;
$this->flag_mono = false;
break;
}
$extrait .= $s;
}
if ($this->flag_mono) break;
}
else if ($this->flag_brut) {
// Concatenation sans fusion
while (list(, $s) = each($stream)) $extrait .= $s;
break;
}
$prev_s = '';
$prev_c = '';
$prev_l = 0;
$nb_mono = 0;
$nb_brut = 0;
// Cas general : appliquer les regles de fusion
while (list(, $s) = each($stream)) {
$l = strlen($s);
if ($l >= $chaine_len) continue;
$c = $s{0};
// Annulation de la cesure
if ($prev_c == '-') {
$extrait .= substr($prev_s, 0, -1);
}
else {
$extrait .= $prev_s;
$len_w = strpos($s.' ', ' ');
$prev_len_w = $prev_l - strrpos($prev_s, ' ');
$court = ($prev_len_w < 3 OR $len_w < 3);
// Heuristique pour separation des mots
if (/*$len_w == 1 OR $prev_len_w == 1
OR */($court AND ($chars_fusion[$prev_c] OR $chars_fusion[$c]
OR ($chars_caps[$prev_c] AND ($chars_caps[$c] OR $chars_nums[$c]))))
OR ($prev_c == 'f' AND $chars_voyelles[$c])
OR $bichars_fusion[$prev_c.$c]) {
}
else $extrait .= ' ';
}
$prev_c = $s{$l - 1};
$prev_s = $s;
$prev_l = $l;
// Detection du format mono-caractere
if ($l == 1) {
if (++$nb_mono >= 3) {
$this->flag_mono = true;
break;
}
}
else {
$nb_mono = 0;
if ($c == ' ' OR $prev_c == ' ') {
$this->flag_brut = true;
break;
}
}
}
$extrait .= $prev_s;
if (!$this->flag_mono && !$this->flag_brut) break;
}
return $extrait;
}
// http://doc.spip.org/@extraire_texte
function extraire_texte($fichier) {
$source_len = 1024*1024;
$stream_len = 20*1024;
$texte_len = 40*1024;
$f = fopen($fichier, "rb");
if (!$f) die ("Fichier $fichier impossible a ouvrir");
$in_stream = false;
// Decouper le fichier en objets
unset($objs);
$objs = fread($f, $source_len);
$objs = preg_split('/[\s>]endobj\s+/', $objs);
# echo "<h3>".count($objs)." objets présents dans le buffer</h3>";
// Parcourir le fichier pour trouver les streams
reset($objs);
$n = count($objs);
for ($i = 0; $i < $n; $i++) {
$obj = $objs[$i];
if (!$in_stream) {
// Stream (eviter les commentaires)
$ok = preg_match("/stream(\r\n?|\n)/", $obj); // version rapide d'abord
if ($ok) $ok = preg_match("/[\r\n](([^\r\n%]*[ \t>])*stream(\r\n?|\n))/", $obj, $regs);
if (!$ok) continue;
$p = strpos($obj, $regs[1]);
$t = substr($obj, $p + strlen($regs[1]));
$stream = "";
$in_stream = true;
$obj_text = substr($obj, 0, $p + strlen($regs[1]));
// Parasites avant et apres
//$obj_text = preg_replace("/^\s+obj\s+/", "", $obj_text);
//$obj_text = preg_replace("/(\s+endobj)\s+.*$/", "\\1", $obj_text);
// Commentaires
$obj_text = preg_replace("/\\\\%/", ' ', $obj_text);
$obj_text = preg_replace("/%[^\r\n]*[\r\n]+/", '', $obj_text);
// Dictionnaire
$obj_dict = "";
//if (ereg("<<(.*)>>", $obj_text, $regs))
if (preg_match("/<<(.*)>>/s", $obj_text, $regs)) // bug ?!
$obj_dict = $regs[1];
# echo "<hr>";
# echo "Objet numéro $i<p>";
# echo "<pre>".htmlspecialchars($obj_text)."</pre>";
}
else {
$t = " endobj ".$obj; // approximation
}
unset($obj);
// Recoller les morceaux du stream (au cas ou un "obj" se trouvait en clair dans un stream)
if ($in_stream) {
if (!($p = strpos($t, "endstream")) && !($q = strpos($t, "endobj"))) {
$stream .= $t;
# echo "<span style='color: red'>Stream continué</span><p>";
continue;
}
$in_stream = false;
if ($p) $stream .= substr($t, 0, $p);
else $stream .= substr($t, 0, $q);
unset($t);
// Decoder le contenu du stream
$encoding = '';
if (preg_match(",/Filter\s*/([A-Za-z]+),", $obj_dict, $regs))
$encoding = $regs[1];
switch($encoding) {
case 'FlateDecode':
$stream = gzuncompress($stream); // pb avec certains PDFs !?
break;
case '':
break;
default:
$stream = '';
}
/*if (preg_match("/\(d.marrage:\)/", $stream, $regs)) {
$fs = fopen("demarrage.txt", "w");
fwrite($fs, $regs[0]);
fclose($fs);
exit;
}*/
}
if (!$stream) continue;
# echo "Stream : ".strlen($stream)." octets<p>";
// Eviter les fontes embarquees, etc.
if (preg_match(',^%!,', $stream)) {
unset($stream);
continue;
}
// Detection texte / binaire
$stream = substr($stream, 0, $stream_len);
$stream = str_replace('\\(', ",", $stream);
$stream = str_replace('\\)', ",", $stream);
$n1 = substr_count($stream, '(');
$n2 = substr_count($stream, ')');
$freq = (substr_count($stream, ' ') + $n1 + $n2) / strlen($stream);
if ($freq < 0.04 || (!$n1 && !$n2)) {
# echo "no text (1)<p>";
//echo htmlspecialchars($stream);
unset($stream);
continue;
}
$dev = abs($n1 - $n2) / ($n1 + $n2);
if ($dev > 0.05) {
# echo "no text (2)<p>";
unset($stream);
continue;
}
// Extraction des chaines
if (strpos($stream, '<<') && strpos($stream, '>>'))
$stream = preg_replace(',<<.*?'.'>>,s', '', $stream); // bug avec preg
$stream = substr($stream, strpos($stream, '(') + 1);
$stream = substr($stream, 0, strrpos($stream, ')')); // ici un bug occasionnel...
$stream = $this->convertir_caracteres($stream);
$extrait = $this->recoller_texte($stream);
unset($stream);
$texte .= $extrait;
// Se limiter a une certaine taille de texte en sortie
if (strlen($texte) > $texte_len) {
$texte = substr($texte, 0, strrpos(substr($texte, 0, $texte_len), ' '));
break;
}
}
fclose($f);
return $texte;
}
} // class
?>

47
ecrire/extract/rtf.php

@ -1,47 +0,0 @@
<?php
//
// Lit un document 'rtf' et extrait son contenu en texte brut
//
// NOTE : l'extracteur n'est pas oblige de convertir le contenu dans
// le charset du site, mais il *doit* signaler le charset dans lequel
// il envoie le contenu, de facon a ce qu'il soit converti au moment
// voulu ; dans le cas contraire le document sera lu comme s'il etait
// dans le charset iso-8859-1
// http://doc.spip.org/@extracteur_rtf
function extracteur_rtf($fichier, &$charset) {
$charset = 'iso-8859-1';
@exec('metamail -d -q -b -c application/rtf '.escapeshellarg($fichier), $r, $e);
if (!$e) return @join(' ', $r);
# wvText
# http://wvware.sourceforge.net/
$temp = tempnam(_DIR_CACHE, 'rtf');
@exec('wvText '.escapeshellarg($fichier).'> '.$temp, $r, $e);
lire_fichier($temp, $contenu);
@unlink($temp);
if (!$e) return $contenu;
# unrtf
# http://www.gnu.org/software/unrtf/unrtf.html
# --html car avec --text les accents sont perdus :(
@exec('unrtf --html '.escapeshellarg($fichier), $r, $e);
if (!$e) return join(' ', $r);
# catdoc
# http://www.45.free.net/~vitus/ice/catdoc/
@exec('catdoc '.escapeshellarg($fichier), $r, $e);
if (!$e) return join(' ', $r);
}
// Sait-on extraire ce format ?
// TODO: ici tester si les binaires fonctionnent
$GLOBALS['extracteur']['rtf'] = 'extracteur_rtf';
?>

16
ecrire/inc/ajouter_documents.php

@ -254,9 +254,17 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
else
$documents_actifs[$fichier] = $id_document;
// Demander l'indexation du document
include_spip('inc/indexation');
marquer_indexer('spip_documents', $id_document);
// Notifications, gestion des revisions, reindexation...
pipeline('post_edition',
array(
'args' => array(
'operation' => 'ajouter_document',
'table' => 'spip_documents',
'id_objet' => $id_document
),
'data' => null
)
);
return $type_image;
}
@ -425,6 +433,6 @@ function liste_archive_taille($files)
. affdate_heure(date("Y-m-d H:i:s", $file['mtime']))
.")</tt></li>";
}
return$res;
return $res;
}
?>

8
ecrire/inc/config.php

@ -61,7 +61,6 @@ function liste_metas()
'activer_sites' => 'non',
'proposer_sites' => 0,
'activer_syndic' => 'oui',
'visiter_sites' => 'non',
'moderation_sites' => 'non',
'forums_publics' => 'posteriori',
@ -76,7 +75,6 @@ function liste_metas()
'quoi_de_neuf' => 'non',
'forum_prive_admin' => 'non',
'activer_moteur' => 'non',
'articles_versions' => 'non',
'activer_statistiques' => 'non',
@ -190,12 +188,6 @@ function appliquer_modifs_config() {
if ($accepter_forum == 'abo')
ecrire_meta('accepter_visiteurs', 'oui');
// Activer le moteur : dresser la liste des choses a indexer
if (($i = _request('activer_moteur')) == 'oui' AND ($i != $GLOBALS['meta']["activer_moteur"])) {
include_spip('inc/indexation');
creer_liste_indexation();
}
if ($i = _request('langues_auth') AND is_array($i)) {
set_request('langues_multilingue', join($i, ","));
}

4
ecrire/inc/cron.php

@ -159,10 +159,6 @@ function taches_generales() {
if ($GLOBALS['meta']["activer_syndic"] == "oui")
$taches_generales['syndic'] = 90;
// indexation
if ($GLOBALS['meta']["activer_moteur"] == "oui")
$taches_generales['indexation'] = 90;
// maintenance (ajax, verifications diverses)
$taches_generales['maintenance'] = 3600 * 2;

18
ecrire/inc/distant.php

@ -43,13 +43,17 @@ function copie_locale($source, $mode='auto') {
if (!$contenu) return false;
ecrire_fichier(_DIR_RACINE.$local, $contenu);
// signaler au moteur de recherche qu'il peut reindexer ce doc
$id_document = spip_abstract_fetch(spip_query("SELECT id_document FROM spip_documents WHERE fichier=" . _q($source)));
$id_document = $id_document['id_document'];
if ($id_document) {
include_spip('inc/indexation');
marquer_indexer('spip_documents', $id_document);
}
// pour une eventuelle indexation
pipeline('post_edition',
array(
'args' => array(
'operation' => 'copie_locale',
'source' => $source,
'fichier' => $local
),
'data' => null
)
);
}
}

17
ecrire/inc/editer_mot.php

@ -62,17 +62,24 @@ function inc_editer_mot_dist($objet, $id_objet, $cherche_mot, $select_groupe, $f
// La reponse
$reponse = '';
$modifier = false;
if ($flag AND $cherche_mot) {
$reindexer = false;
list($reponse, $nouveaux_mots) = recherche_mot_cle($cherche_mot, $select_groupe, $objet, $id_objet, $table, $table_id, $url_base);
foreach($nouveaux_mots as $nouv_mot) {
if ($nouv_mot!='x') {
$reindexer |= inserer_mot("spip_mots_$table", $table_id, $id_objet, $nouv_mot);
$modifier |= inserer_mot("spip_mots_$table", $table_id, $id_objet, $nouv_mot);
}
}
if ($reindexer AND ($GLOBALS['meta']['activer_moteur'] == 'oui')) {
include_spip("inc/indexation");
marquer_indexer("spip_$table", $id_objet);
if ($modifier) {
pipeline('post_edition',
array(
'args' => array(
'table' => 'spip_'.$table,
'id_objet' => $id_objet
),
'data' => null
)
);
}
}

1
ecrire/inc/import.php

@ -15,7 +15,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/presentation');
include_spip('inc/acces');
include_spip('inc/meta');
include_spip('inc/indexation'); // pour la fonction primary_index_table
include_spip('base/abstract_sql');
// NB: Ce fichier peut ajouter des tables (old-style)

991
ecrire/inc/indexation.php

@ -1,991 +0,0 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2007 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/meta');
include_spip('base/create');
include_spip('base/abstract_sql');
include_spip('public/interfaces');
// Quels formats sait-on extraire ?
$GLOBALS['extracteur'] = array (
'txt' => 'extracteur_txt',
'pas' => 'extracteur_txt',
'c' => 'extracteur_txt',
'css' => 'extracteur_txt',
'html' => 'extracteur_html'
);
// tables que l'on ne doit pas indexer
global $INDEX_tables_interdites;
$INDEX_tables_interdites=array();
// Indexation des elements de l'objet principal
// 'champ'=>poids, ou 'champ'=>array(poids,min_long)
$reindex = false;
global $INDEX_elements_objet;
$INDEX_elements_objet = FALSE;
if (isset($GLOBALS['meta']['INDEX_elements_objet']))
$INDEX_elements_objet = unserialize($GLOBALS['meta']['INDEX_elements_objet']);
if (!$INDEX_elements_objet) {
$INDEX_elements_objet['spip_articles'] = array('titre'=>8,'soustitre'=>5,'surtitre'=>5,'descriptif'=>4,'chapo'=>3,'texte'=>1,'ps'=>1,'nom_site'=>1,'extra|unserialize_join'=>1);
$INDEX_elements_objet['spip_breves'] = array('titre'=>8,'texte'=>2,'extra|unserialize_join'=>1);
$INDEX_elements_objet['spip_rubriques'] = array('titre'=>8,'descriptif'=>5,'texte'=>1,'extra|unserialize_join'=>1);
$INDEX_elements_objet['spip_auteurs'] = array('nom'=>array(5,2),'bio'=>1,'extra|unserialize_join'=>1);
$INDEX_elements_objet['spip_mots'] = array('titre'=>8,'descriptif'=>5,'texte'=>1,'extra|unserialize_join'=>1);
$INDEX_elements_objet['spip_signatures'] = array('nom_email'=>array(2,2),'ad_email'=>2,'nom_site'=>2,'url_site'=>1,'message'=>1);
$INDEX_elements_objet['spip_syndic'] = array('nom_site'=>50,'descriptif'=>30,'url_site|contenu_page_accueil'=>1);
$INDEX_elements_objet['spip_syndic_articles'] = array('titre'=>5);
$INDEX_elements_objet['spip_forum'] = array('titre'=>3,'texte'=>2,'auteur'=>array(2,2),'email_auteur'=>2,'nom_site'=>2,'url_site'=>1);
$INDEX_elements_objet['spip_documents'] = array('titre'=>20,'descriptif'=>10,'fichier|nettoie_nom_fichier'=>1);
ecrire_meta('INDEX_elements_objet',serialize($INDEX_elements_objet));
ecrire_metas();
$reindex = true;
}
// Indexation des objets associes
// 'objet'=>poids
global $INDEX_objet_associes;
$INDEX_objet_associes = FALSE;
if (isset($GLOBALS['meta']['INDEX_objet_associes']))
$INDEX_objet_associes = unserialize($GLOBALS['meta']['INDEX_objet_associes']);
if (!$INDEX_objet_associes) {
$INDEX_objet_associes['spip_articles'] = array('spip_documents'=>1,'spip_auteurs'=>10,'spip_mots'=>3);
$INDEX_objet_associes['spip_breves'] = array('spip_documents'=>1,'spip_mots'=>3);
$INDEX_objet_associes['spip_rubriques'] = array('spip_documents'=>1,'spip_mots'=>3);
$INDEX_objet_associes['spip_documents'] = array('spip_mots'=>3);
ecrire_meta('INDEX_objet_associes',serialize($INDEX_objet_associes));
ecrire_metas();
$reindex = true;
}
// Indexation des elements des objets associes
// 'champ'=>poids, ou 'champ'=>array(poids,min_long)
global $INDEX_elements_associes;
$INDEX_elements_associes = FALSE;
if (isset($GLOBALS['meta']['INDEX_elements_associes']))
$INDEX_elements_associes = unserialize($GLOBALS['meta']['INDEX_elements_associes']);
if (!$INDEX_elements_associes){
$INDEX_elements_associes['spip_documents'] = array('titre'=>2,'descriptif'=>1);
$INDEX_elements_associes['spip_auteurs'] = array('nom'=>1);
$INDEX_elements_associes['spip_mots'] = array('titre'=>4,'descriptif'=>1);
ecrire_meta('INDEX_elements_associes',serialize($INDEX_elements_associes));
ecrire_metas();
$reindex = true;
}
// Criteres d'indexation
global $INDEX_critere_indexation;
$INDEX_critere_indexation = FALSE;
if (isset($GLOBALS['meta']['INDEX_critere_indexation']))
$INDEX_critere_indexation = unserialize($GLOBALS['meta']['INDEX_critere_indexation']);
if (!$INDEX_critere_indexation){
$INDEX_critere_indexation['spip_articles']="statut='publie'";
$INDEX_critere_indexation['spip_breves']="statut='publie'";
$INDEX_critere_indexation['spip_rubriques']="statut='publie'";
$INDEX_critere_indexation['spip_syndic']="statut='publie'";
$INDEX_critere_indexation['spip_forum']="statut='publie'";
$INDEX_critere_indexation['spip_signatures']="statut='publie'";
ecrire_meta('INDEX_critere_indexation',serialize($INDEX_critere_indexation));
ecrire_metas();
$reindex = true;
}
// Criteres de des-indexation (optimisation dans base/optimiser)
global $INDEX_critere_optimisation;
$INDEX_critere_optimisation = FALSE;
if (isset($GLOBALS['meta']['INDEX_critere_optimisation']))
$INDEX_critere_optimisation = unserialize($GLOBALS['meta']['INDEX_critere_optimisation']);
if (!$INDEX_critere_optimisation) {
$INDEX_critere_optimisation['spip_articles']="statut<>'publie'";
$INDEX_critere_optimisation['spip_breves']="statut<>'publie'";
$INDEX_critere_optimisation['spip_rubriques']="statut<>'publie'";
$INDEX_critere_optimisation['spip_syndic']="statut<>'publie'";
$INDEX_critere_optimisation['spip_forum']="statut<>'publie'";
$INDEX_critere_optimisation['spip_signatures']="statut<>'publie'";
ecrire_meta('INDEX_critere_optimisation',serialize($INDEX_critere_optimisation));
ecrire_metas();
$reindex = true;
}
// Nombre d'elements maxi a indexer a chaque iteration
global $INDEX_iteration_nb_maxi;
$INDEX_iteration_nb_maxi = FALSE;
if (isset($GLOBALS['meta']['INDEX_iteration_nb_maxi']))
$INDEX_iteration_nb_maxi = unserialize($GLOBALS['meta']['INDEX_iteration_nb_maxi']);
if (!$INDEX_iteration_nb_maxi) {
$INDEX_iteration_nb_maxi['spip_documents']=10;
$INDEX_iteration_nb_maxi['spip_syndic']=1;
ecrire_meta('INDEX_iteration_nb_maxi',serialize($INDEX_iteration_nb_maxi));
ecrire_metas();
$reindex = true;
}
if ($reindex) creer_liste_indexation();
// Filtres d'indexation
// http://doc.spip.org/@unserialize_join
function unserialize_join($extra){
return @join(' ', unserialize($extra));
}
// http://doc.spip.org/@contenu_page_accueil
function contenu_page_accueil($url){
$texte = '';
if ($GLOBALS['meta']["visiter_sites"] == "oui") {
include_spip('inc/distant');
spip_log ("indexation contenu syndic $url");
$texte = supprimer_tags(recuperer_page($url, true, false, 50000));
}
return $texte;
}
// http://doc.spip.org/@nettoie_nom_fichier
function nettoie_nom_fichier($fichier){
return preg_replace(',^(IMG/|.*://),', '', $fichier);
}
// Renvoie la liste des "mots" d'un texte (ou d'une requete adressee au moteur)
// http://doc.spip.org/@mots_indexation
function mots_indexation($texte, $min_long = 3) {
include_spip('inc/charsets');
include_spip('inc/texte');
// Recuperer les parametres des modeles
$texte = traiter_modeles($texte, true);
// Supprimer les tags HTML
$texte = preg_replace(',<.*>,Ums',' ',$texte);
// Translitterer (supprimer les accents, recuperer les &eacute; etc)
// la translitteration complexe (vietnamien, allemand) duplique
// le texte, en mettant bout a bout une translitteration simple +
// une translitteration riche
if ($GLOBALS['translitteration_complexe'])
$texte_c = ' '.translitteration_complexe ($texte, 'AUTO', true);
else
$texte_c = '';
$texte = translitteration($texte);
if($texte!=trim($texte_c)) $texte .= $texte_c;
# NB. tous les caracteres non translitteres sont retournes en utf-8
// OPTIONNEL // Gestion du tiret '-' :
// "vice-president" => "vice"+"president"+"vicepresident"
# $texte = preg_replace(',(\w+)-(\w+),', '\1 \2 \1\2', $texte);
// Supprimer les caracteres de ponctuation, les guillemets...
$e = "],:;*\"!\r\n\t\\/)}{[|@<>$%'`?\~.^(";
$texte = strtr($texte, $e, preg_replace('/./', ' ', $e));
//delete +\- not at the beginning of a word
$texte = preg_replace(",(?:\S)[\-+],"," ",$texte);
// Cas particulier : sigles d'au moins deux lettres
$texte = preg_replace("/ ([A-Z][0-9A-Z]{1,".($min_long - 1)."}) /",
' \\1___ ', $texte.' ');
// Tout passer en bas de casse
$texte = strtolower($texte);
// Retourner sous forme de table
return pipeline('mots_indexation',array('args'=>array('min_long'=>$min_long),'data'=>preg_split("/ +/", trim($texte))));
}
// http://doc.spip.org/@indexer_chaine
function indexer_chaine($texte, $val = 1, $min_long = 3) {
global $index, $mots;
global $translitteration_complexe;
// Point d'entree pour traiter le texte avant indexation
$texte = pipeline('pre_indexation', $texte);
$table = mots_indexation($texte, $min_long);
foreach ($table as $mot) {
if (strlen($mot) > $min_long) {
$h = substr(md5($mot), 0, 16);
if (!isset($index[$h]))
$index[$h] = 0;
$index[$h] += $val/(1+$translitteration_complexe);
$mots .= ",(0x$h,'$mot')";
}
}
}
// id_table = 1...9 pour les tables spip, et ensuite 100, 101, 102...
// pour les tables additionnelles, selon l'ordre dans lequel
// elles sont reperees. On stocke le tableau de conversion table->id_table
// dans spip_meta
// http://doc.spip.org/@update_index_tables
function update_index_tables(){
global $tables_principales;
global $INDEX_tables_interdites;
$old_liste_tables = liste_index_tables();
$rev_old_liste_tables = array_flip($old_liste_tables);
$liste_tables = array();
// les tables SPIP conventionnelles en priorite
$liste_tables[1]='spip_articles';
$liste_tables[2]='spip_auteurs';
$liste_tables[3]='spip_breves';
$liste_tables[4]='spip_documents';
$liste_tables[5]='spip_forum';
$liste_tables[6]='spip_mots';
$liste_tables[7]='spip_rubriques';
$liste_tables[8]='spip_signatures';
$liste_tables[9]='spip_syndic';
// detection des nouvelles tables
$id_autres = 100;
foreach(array_keys($tables_principales) as $new_table){
if ( (!in_array($new_table,$INDEX_tables_interdites))
&&(!in_array($new_table,$liste_tables))
&&($id_autres<254) ){
// on utilise abstract_showtable car cela permet d'activer l'indexation
// en ajoutant simplement le champ idx, sans toucher au core
$desc = spip_abstract_showtable($new_table, '', true);
if (isset($desc['field']['idx'])){
// la table a un champ idx pour gerer l'indexation
if ( (isset($rev_old_liste_tables[$new_table]))
&&(!isset($liste_tables[$rev_old_liste_tables[$new_table]])) )
$liste_tables[$rev_old_liste_tables[$new_table]] = $new_table; // id conserve
else{
while (isset($liste_tables[$id_autres])&&($id_autres<254)) $id_autres++;
$liste_tables[$id_autres] = $new_table;
}
}
}
}
// Cas de l'ajout d'une nouvelle table a indexer :
// mise en coherence de la table d'indexation avec les nouveaux id
$rev_old_liste_tables = array_flip($old_liste_tables);
foreach($liste_tables as $new_id=>$new_table){
if (isset($rev_old_liste_tables[$new_table])){
if ( ($old_id = ($rev_old_liste_tables[$new_table]))
&&($old_id!=$new_id)){
$temp_id = 254;
// liberer le nouvel id
spip_query("UPDATE spip_index SET id_table=$temp_id WHERE id_table=$new_id");
// deplacer les indexation de l'ancien id sous le nouvel id
spip_query("UPDATE spip_index SET id_table=$new_id WHERE id_table=$old_id");
// remettre les indexation deplacees sous l'id qui vient d'etre libere
spip_query("UPDATE spip_index SET id_table=$old_id WHERE id_table=$temp_id");
$old_liste_tables[$old_id] = $old_liste_tables[$new_id];
unset($old_liste_tables[$new_id]);
$rev_old_liste_tables = array_flip($old_liste_tables);
}