source: spip-zone/_plugins_/fulltext/trunk/inc/fulltext.php @ 88298

Last change on this file since 88298 was 88298, checked in by cedric@…, 4 years ago

Refactoring : toutes les modifs de base (hors document) sont dans des actions, et pas dans le squelette

File size: 3.9 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) return;
4
5include_spip('inc/rechercher');
6
7function verifier_conversion() {
8        $charset = strtolower(str_replace('-', '', $GLOBALS['meta']['charset']));
9        $necessite_conversion = false;
10
11        // signaler les incoherences de charset site/tables qui plantent les requetes avec accents...
12        // ?exec=convert_sql_utf8 => conversion base | ?exec=convert_utf8 => conversion site
13        $data = sql_fetch(sql_query("SHOW CREATE TABLE " . table_objet_sql($table)));
14        preg_match(',DEFAULT CHARSET=([^\s]+),', $data["Create Table"], $match);
15        $charset_table = strtolower(str_replace('-', '', $match[1]));
16        $charset_table = preg_replace(',^latin1$,', 'iso88591', $charset_table);
17        if ($charset_table != '' AND $charset != $charset_table) {
18                $modif = (substr($charset, 0, 3) == 'iso' ? 'convert_utf8' : 'convert_sql_utf8');
19                $url = generer_url_ecrire($modif);
20                echo "<p>" . _T('fulltext:incoherence_charset') . "<strong><a href='$url'>" . _T('fulltext:convertir_utf8') . "</a></strong></p>\n";
21        }
22}
23
24function compter_elements($table) {
25        $nb = sql_countsel(table_objet_sql($table));
26        return $nb;
27}
28
29
30function fulltext_liste_des_tables(){
31        $champs = liste_des_champs();
32        $tables = array();
33        foreach($champs as $table=>$fields){
34                $tables[$table] = array(
35                        'fields' => $fields,
36                        'engine' => fulltext_trouver_engine_table($table),
37                        'keys' => array(),
38                        'index_prop' => array(),
39                );
40
41                if (strtolower($tables[$table]['engine'])=='myisam'){
42                        if($keys = fulltext_keys($table)){
43                                $tables[$table]['keys'] = $keys;
44                        }
45
46                        // le champ de titre est celui qui a le poids le plus eleve
47                        $c = $fields;
48                        asort($c);
49                        $c = array_keys($c);
50                        $champ_titre = array_pop($c);
51
52                        if (!isset($tables[$table]['keys'][$champ_titre])){
53                                $tables[$table]['index_prop'][$champ_titre] = array($champ_titre);
54                        }
55                        if (!isset($tables[$table]['keys']['tout'])){
56                                $tables[$table]['index_prop']['tout'] = array_keys($fields);
57                        }
58                }
59        }
60        return $tables;
61}
62
63/**
64 * Récupération de l'engine utilisé par une table sql
65 *
66 * Retourne MyISAM ou InnoDB
67 *
68 * @param string $table
69 *              La table à analyser
70 * @return string
71 *              Le moteur utilisé
72 */
73function fulltext_trouver_engine_table($table) {
74        if ($s = sql_query("SHOW CREATE TABLE " . table_objet_sql($table), $serveur) AND $t = sql_fetch($s) AND $create = array_pop($t) AND preg_match('/\bENGINE=([^\s]+)/', $create, $engine))
75                return $engine[1];
76}
77
78function fulltext_index($table, $champs, $nom = null) {
79        if (!$nom)
80                list(, $nom) = each($champs);
81
82        if ($nom !== 'tout')
83                $champs = array($nom);
84
85        $trouver_table = charger_fonction('trouver_table', 'base');
86        $desc = $trouver_table(table_objet($table));
87
88        foreach ($champs as $i => $f) {
89                if (preg_match(',^(tiny|long|medium)?text\s,i', $desc['field'][$f]))
90                        $champs[$i] = "`$f`";
91                else if (preg_match(',^varchar.*\s,i', $desc['field'][$f]) && !preg_match(',COLLATE utf8_bin.*\s,i', $desc['field'][$f]))
92                        $champs[$i] = "`$f`";
93                else
94                        unset($champs[$i]);
95        }
96        return "`$nom` (" . join(',', $champs) . ")";
97}
98
99function fulltext_lien_creer_index($table, $champs, $nom = null) {
100        $url = generer_action_auteur("fulltext_creer_index","$table/$nom",generer_url_ecrire('fulltext'));
101        return bouton_action(_T('fulltext:fulltext_creer', array('index' => fulltext_index($table, $champs, $nom))),$url);
102}
103
104function fulltext_reinitialiser_document() {
105        sql_updateq("spip_documents", array('contenu' => '', 'extrait' => 'non'), "extrait='err'");
106        return "<p><strong>" . _T('fulltext:index_reinitialise') . "</strong></p>";
107}
108
109function fulltext_reinitialiser_totalement_document() {
110        sql_updateq("spip_documents", array('contenu' => '', 'extrait' => 'non'));
111        return "<p><strong>" . _T('fulltext:index_reinitialise_totalement') . "</strong></p>";
112}
113
114function fulltext_reinitialiser_document_ptg() {
115        sql_updateq("spip_documents", array('contenu' => '', 'extrait' => 'non'), "extrait='ptg'");
116        return "<p><strong>" . _T('fulltext:index_reinitialise_ptg') . "</strong></p>";
117}
Note: See TracBrowser for help on using the repository browser.