Changeset 88298 in spip-zone


Ignore:
Timestamp:
Mar 30, 2015, 2:00:34 PM (4 years ago)
Author:
cedric@…
Message:

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

Location:
_plugins_/fulltext/trunk
Files:
6 added
3 edited
1 copied

Legend:

Unmodified
Added
Removed
  • _plugins_/fulltext/trunk/inc/fulltext.php

    r88293 r88298  
    44
    55include_spip('inc/rechercher');
    6 
    7 function spip_asort($array) {
    8         if (is_array($array)) {
    9                 asort($array);
    10                 foreach ($array as $k => $v) {
    11                         $array_order[$k] = $v;
    12                 }
    13                 return $array_order;
    14         }
    15         return $array;
    16 }
    176
    187function verifier_conversion() {
     
    3827}
    3928
     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
    4063/**
    4164 * Récupération de l'engine utilisé par une table sql
     
    4871 *              Le moteur utilisé
    4972 */
    50 function Fulltext_trouver_engine_table($table) {
     73function fulltext_trouver_engine_table($table) {
    5174        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))
    5275                return $engine[1];
    5376}
    5477
    55 function Fulltext_index($table, $champs, $nom = null) {
     78function fulltext_index($table, $champs, $nom = null) {
    5679        if (!$nom)
    5780                list(, $nom) = each($champs);
     
    7497}
    7598
    76 function Fulltext_creer_index($table, $nom, $vals) {
    77 
    78         $keys = fulltext_keys($table);
    79         if ($nom == 'tout')
    80                 $index = Fulltext_index($table, $vals, 'tout');
    81         else
    82                 $index = Fulltext_index($table, array($nom), $nom);
    83 
    84         if ($table == 'document' && $nom == 'tout') {
    85                 // On initialise l'indexation du contenu des documents
    86                 sql_updateq("spip_documents", array('contenu' => ''), "extrait='non'");
    87         }
    88         if (!$s = sql_alter("TABLE " . table_objet_sql($table) . " ADD FULLTEXT " . $index))
    89                 return "<strong>" . _T('spip:erreur') . " " . mysql_errno() . " " . mysql_error() . "</strong><pre>$query</pre><p />\n";
    90         sql_optimize(table_objet_sql($table));
    91 
    92         $keys = fulltext_keys($table);
    93         if (isset($keys[$nom]))
    94                 return "<p><strong>" . _T('fulltext:fulltext_cree') . " : $keys[$nom]</strong></p>";
    95         else
    96                 return "<p><strong>" . _T('spip:erreur') . ".</strong></p>\n";
    97 
     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);
    98102}
    99103
    100 function Fulltext_lien_creer_index($table, $champs, $nom = null) {
    101         $url = generer_url_ecrire(_request('exec'), 'table=' . $table . '&nom=' . $nom);
    102         return "<p><a href='$url'>" . _T('fulltext:fulltext_creer', array('index' => Fulltext_index($table, $champs, $nom))) . "</a></p>\n";
    103 }
    104 
    105 function Fulltext_supprimer_index($table, $nom = 'tout') {
    106         if (!$s = sql_alter("TABLE " . table_objet_sql($table) . " DROP INDEX " . $nom)) {
    107                 return "<p><strong>" . _T('spip:erreur') . " " . mysql_errno() . " " . mysql_error() . "</strong><pre>$query</pre></p>\n";
    108         } else {
    109                 if ($table == 'document' && $nom == 'tout') {
    110                         // Plus besoin des donnees extraites des fichiers
    111                         sql_updateq("spip_documents", array('contenu' => ''), "extrait='n/a'");
    112                 }
    113                 return " <strong>=> " . _T('fulltext:index_supprime') . "</strong>\n";
    114         }
    115 }
    116 
    117 function Fulltext_regenerer_index($table) {
    118         if (count($keys = fulltext_keys($table)) > 0) {
    119                 foreach ($keys as $key => $vals) {
    120                         if (!$s = sql_alter("TABLE " . table_objet_sql($table) . " DROP INDEX " . $key))
    121                                 return "<p><strong>" . _T('spip:erreur') . " " . mysql_errno() . " " . mysql_error() . "</strong><pre>$query</pre></p>\n";
    122                         if (!$s = sql_alter("TABLE " . table_objet_sql($table) . " ADD FULLTEXT " . $key . " (" . $vals . ")"))
    123                                 return "<strong>" . _T('spip:erreur') . " " . mysql_errno() . " " . mysql_error() . "</strong><pre>$query</pre><p />\n";
    124                         sql_optimize(table_objet_sql($table));
    125                 }
    126                 return "<p><strong>" . _T('fulltext:index_regenere') . "</strong></p>";
    127         }
    128 }
    129 
    130 function Fulltext_reinitialiser_document() {
     104function fulltext_reinitialiser_document() {
    131105        sql_updateq("spip_documents", array('contenu' => '', 'extrait' => 'non'), "extrait='err'");
    132106        return "<p><strong>" . _T('fulltext:index_reinitialise') . "</strong></p>";
    133107}
    134108
    135 function Fulltext_reinitialiser_totalement_document() {
     109function fulltext_reinitialiser_totalement_document() {
    136110        sql_updateq("spip_documents", array('contenu' => '', 'extrait' => 'non'));
    137111        return "<p><strong>" . _T('fulltext:index_reinitialise_totalement') . "</strong></p>";
    138112}
    139113
    140 function Fulltext_reinitialiser_document_ptg() {
     114function fulltext_reinitialiser_document_ptg() {
    141115        sql_updateq("spip_documents", array('contenu' => '', 'extrait' => 'non'), "extrait='ptg'");
    142116        return "<p><strong>" . _T('fulltext:index_reinitialise_ptg') . "</strong></p>";
    143117}
    144 
    145 function Fulltext_creer_tous($tables = false) {
    146         if (!$tables) {// Si les tables ne sont pas donnee, on va les chercher
    147                 include_spip('inc/rechercher');
    148                 include_spip('base/abstract_sql');
    149                 $tables = liste_des_champs();
    150         }
    151 
    152         foreach ($tables as $table => $vals) {
    153                 // Modification automatique de la table sur le moteur MyISAM
    154                 if (!$engine = Fulltext_trouver_engine_table($table) OR strtolower($engine) != 'myisam')
    155                         Fulltext_conversion_myisam($table);
    156 
    157                 $keys = fulltext_keys($table);
    158                 // Liste des index existant
    159 
    160                 $champs = array_keys($vals);
    161                 asort($vals);
    162                 // le champ de titre est celui qui a le poids le plus eleve
    163                 $champs2 = array_keys($vals);
    164                 $champ_titre = array_pop($champs2);
    165                 if (!isset($keys[$champ_titre])) {
    166                         Fulltext_creer_index($table, $champ_titre, $champs);
    167                 }
    168                 if (!isset($keys['tout'])) {
    169                         Fulltext_creer_index($table, 'tout', $champs);
    170                 }
    171         }
    172 }
    173 
    174 function Fulltext_conversion_myisam($table) {
    175         if (!sql_alter("TABLE " . table_objet_sql($table) . " ENGINE=MyISAM"))
    176                 return "<p><strong>" . _T('spip:erreur') . " " . mysql_errno() . ' ' . mysql_error() . "</strong></p>\n";
    177         else
    178                 return "<p><strong>" . _T('fulltext:table_convertie') . "</strong></p>\n";
    179 }
  • _plugins_/fulltext/trunk/paquet.xml

    r88295 r88298  
    22        prefix="fulltext"
    33        categorie="navigation"
    4         version="1.0.4"
     4        version="1.1.0"
    55        etat="test"
    66        compatibilite="[3.0.1;3.1.*]"
  • _plugins_/fulltext/trunk/prive/squelettes/contenu/fulltext.html

    r86164 r88298  
    22
    33<h1 class="grostitre"><:fulltext:titre_page_fulltext_index:></h1>
     4[<div class="success">(#ENV{ok})</div>]
     5[<div class="error">(#ENV{erreur})</div>]
    46
    5 #BOITE_OUVRIR{'',box important,#CHEMIN{images/fulltext-24.png}}
    6 
    7 #SET{tables,#REM|liste_des_champs}
     7#SET{tables,#REM|fulltext_liste_des_tables}
    88#SET{nombre,0}
    99#SET{myisam_nombre,0}
    10 [(#ENV{creer}|=={tous}|oui)
    11         [(#GET{tables}|Fulltext_creer_tous)]
    12 ]
    13 <BOUCLE_tables(DATA){source table, #GET{tables}}{par cle}>#SET{table,#CLE}
    14 <h3>[(#GET{table})][ ((#GET{table}|compter_elements))]</h3>#SET{ok,non}
    15 [(#SET{engine,[(#GET{table}|Fulltext_trouver_engine_table)]})]
    16 [(#GET{engine}|=={''}|ou{[(#GET{engine}|strtolower|!={myisam})]}|oui)
    17         [(#ENV{myisam}|=={#GET{table}}|ou{#ENV{myisam}|=={tout}}|oui)
    18                 [(#GET{table}|Fulltext_conversion_myisam)]#SET{ok,ok}
     10
     11<BOUCLE_tables(DATA){source table, #GET{tables}}{par cle}>
     12        #SET{table,#CLE}
     13        [(#BOITE_OUVRIR{[(#GET{table})][ ((#GET{table}|compter_elements))],box simple})]
     14        #SET{ok,non}
     15        [(#SET{engine,#VALEUR{engine}})]
     16        [(#GET{engine}|=={''}|ou{[(#GET{engine}|strtolower|!={myisam})]}|oui)
     17                [(#GET{ok}|!={ok}|et{#GET{engine}|!={''}}|oui)
     18                        #SET{ok,ok}
     19                        #SET{myisam_nombre,#GET{myisam_nombre}|plus{1}}
     20                        <div class="notice"><:fulltext:table_format:> #GET{engine}; <:fulltext:il_faut_myisam:>
     21                                [(#BOUTON_ACTION{<:fulltext:convertir_myisam:>,[(#URL_ACTION_AUTEUR{fulltext_convert_myisam,#CLE,#URL_ECRIRE{fulltext}})]})]
     22                        </div>
     23                ]
     24                [(#GET{ok}|!={ok}|oui)
     25                        <div class="error"><:fulltext:table_non_reconnue:></div>
     26                ]
    1927        ]
    20         [(#GET{ok}|!={ok}|et{#GET{engine}|!={''}}|oui) #SET{ok,ok}
    21                 #SET{myisam_nombre,#GET{myisam_nombre}|plus{1}}
    22                 <p><:fulltext:table_format:> #GET{engine}; <:fulltext:il_faut_myisam:></p>
    23                 <p><a href="[(#SELF|parametre_url{myisam,[(#CLE|table_objet)]})]"><:fulltext:convertir_myisam:></a></p>
    24         ]
    25         [(#GET{ok}|!={ok}|oui)
    26                 <p><:fulltext:table_non_reconnue:></p>
    27         ]
    28 ]
    29 #SET{regexp,^[a-z_0-9]+$}
    30 <BOUCLE_siok(CONDITION){si #GET{engine}|=={''}|ou{#GET{engine}|strtolower|!={myisam}}|non}>
    31         [(#ENV{table,''}|=={#GET{table}}|et{#ENV{nom,''}|!={""}}|et{#ENV{nom,''}|concat{#GET{table}}|match{#GET{regexp}}}|oui)
    32                 [(#GET{table}|Fulltext_creer_index{#ENV{nom},[(#VALEUR|array_keys)]})]
    33         ]
    34         [(#ENV{regenerer}|=={#GET{table}}|ou{#ENV{regenerer}|=={tous}}|oui)
    35                 [(#GET{table}|Fulltext_regenerer_index)]
    36         ]
    37         [(#ENV{reinitialise}|=={#GET{table}}|ou{#ENV{reinitialise}|=={tous}}|oui)
    38                 [(#REM|Fulltext_reinitialiser_document)]
    39         ]
    40         [(#ENV{reinitialise}|=={document_tout}|oui)
    41                 [(#REM|Fulltext_reinitialiser_totalement_document)]
    42         ]
    43         [(#ENV{reinitialise}|=={document_ptg}|oui)
    44                 [(#REM|Fulltext_reinitialiser_document_ptg)]
    45         ]
    46         #SET{cles,#GET{table}|fulltext_keys}
    47        
    48         <BOUCLE_sicles(CONDITION){si #GET{cles}|count|>{0}}>
    49                 <dl>
    50                         <BOUCLE_liste_cles(DATA){source table,#GET{cles}}>
    51                         <dt>
    52                                 #CLE <a href="[(#SELF|parametre_url{supprimer,#GET{table}}|parametre_url{index,#CLE})]" title="<:fulltext:supprimer:>">
    53                                 [(#CHEMIN{images/croix-rouge.gif}|balise_img{<:fulltext:supprimer:>})]</a>
    54                                 [(#ENV{supprimer}|=={#GET{table}}|et{#ENV{index}|=={#CLE}}|oui)
    55                                         [(#GET{table}|Fulltext_supprimer_index{#CLE})]
    56                                 ]
    57                         </dt>
    58                         <dd>#VALEUR</dd>
    59                         </BOUCLE_liste_cles>
    60                 </dl>
    61         </BOUCLE_sicles>
    62         </B_sicles>
    63                 [(#ENV{creer}|=={tous}|oui)
    64                         <p><:fulltext:pas_index:></p
     28
     29        #SET{regexp,^[a-z_0-9]+$}
     30        <BOUCLE_siok(CONDITION){si #GET{engine}|=={''}|ou{#GET{engine}|strtolower|!={myisam}}|non}>
     31                [(#ENV{regenerer}|=={#GET{table}}|ou{#ENV{regenerer}|=={tous}}|oui)
     32                        [(#GET{table}|fulltext_regenerer_index)]
    6533                ]
    66         <//B_sicles>
     34                [(#ENV{reinitialise}|=={#GET{table}}|ou{#ENV{reinitialise}|=={tous}}|oui)
     35                        [(#REM|fulltext_reinitialiser_document)]
     36                ]
     37                [(#ENV{reinitialise}|=={document_tout}|oui)
     38                        [(#REM|fulltext_reinitialiser_totalement_document)]
     39                ]
     40                [(#ENV{reinitialise}|=={document_ptg}|oui)
     41                        [(#REM|fulltext_reinitialiser_document_ptg)]
     42                ]
    6743
    68         #SET{cles,#GET{table}|fulltext_keys}
    69         #SET{champs,#VALEUR|array_keys}
    70         #SET{champs2,#VALEUR|spip_asort|array_keys}
    71         #SET{champ_titre,#GET{champs2}|array_pop}
    72        
    73         [(#GET{cles}|table_valeur{#GET{champ_titre}}|non)
    74                 [(#GET{table}|Fulltext_lien_creer_index{#GET{champs}, #GET{champ_titre}})]
    75                 #SET{nombre,#GET{nombre}|plus{1}}
    76         ]
    77         [(#GET{cles}|table_valeur{tout}|non)
    78                 [(#GET{table}|Fulltext_lien_creer_index{#GET{champs}, tout})]
    79                 #SET{nombre,#GET{nombre}|plus{1}}
    80         ]
    81 </BOUCLE_siok>
     44                #SET{cles,#VALEUR{keys}}
     45                <BOUCLE_sicles(CONDITION){si #GET{cles}|count|>{0}}>
     46                        <dl>
     47                                <BOUCLE_liste_cles(DATA){source table,#GET{cles}}>
     48                                <dt>
     49                                        #CLE [(#BOUTON_ACTION{[(#CHEMIN{images/croix-rouge.gif}|balise_img{<:fulltext:supprimer:>})],[(#URL_ACTION_AUTEUR{fulltext_supprimer_index,#GET{table}/#CLE,#URL_ECRIRE{fulltext}})],'',<:fulltext:supprimer:>,<:fulltext:supprimer:>})]
     50                                </dt>
     51                                <dd>#VALEUR</dd>
     52                                </BOUCLE_liste_cles>
     53                        </dl>
     54                </BOUCLE_sicles>
     55                </B_sicles>
     56                        [(#ENV{creer}|=={tous}|oui)
     57                                <p><:fulltext:pas_index:></p
     58                        ]
     59                <//B_sicles>
     60
     61                <B_indexprop>
     62                <div class="info">
     63                <BOUCLE_indexprop(POUR){tableau #VALEUR{index_prop}}>
     64                        [(#GET{table}|fulltext_lien_creer_index{#VALEUR, #CLE})]
     65                        #SET{nombre,#GET{nombre}|plus{1}}
     66                </BOUCLE_indexprop>
     67                </div>
     68                </B_indexprop>
     69
     70        </BOUCLE_siok>
     71        #BOITE_FERMER
    8272</BOUCLE_tables>
    8373
    84 [(#GET{nombre}|>{0}|et{#ENV{creer}|!={tous}}|oui)
    85         <p><strong><a href='[(#SELF|parametre_url{creer,tous})]'><:fulltext:creer_tous:></a></strong></p>
     74[(#GET{nombre}|>{1}|oui)
     75        [(#BOUTON_ACTION{<:fulltext:creer_tous:>,[(#URL_ACTION_AUTEUR{fulltext_creer_index,all,#URL_ECRIRE{fulltext}})]})]
    8676]
    8777
    88 [(#GET{myisam_nombre}|>{0}|oui)
    89         <p><strong><a href='[(#SELF|parametre_url{myisam,tous})]'><:fulltext:convertir_toutes:></a></strong></p>       
     78[(#GET{myisam_nombre}|>{1}|oui)
     79        [(#BOUTON_ACTION{<:fulltext:convertir_toutes:>,[(#URL_ACTION_AUTEUR{fulltext_convert_myisam,all,#URL_ECRIRE{fulltext}})]})]
    9080]
    9181
  • _plugins_/fulltext/trunk/prive/squelettes/navigation/fulltext.html

    r85899 r88298  
    66        </p>
    77       
    8         <p><a href='[(#SELF|parametre_url{regenerer,tous})]'><:fulltext:regenerer_tous:></a></p>
     8        [(#BOUTON_ACTION{<:fulltext:regenerer_tous:>,[(#URL_ACTION_AUTEUR{fulltext_regenerer_index,all,#URL_ECRIRE{fulltext}})]})]
    99
    10         Insérer un bouton action pour regénérer tout ici
    11 #BOITE_FERMER
     10        #BOITE_FERMER
Note: See TracChangeset for help on using the changeset viewer.