Changeset 41559 in spip-zone


Ignore:
Timestamp:
Oct 6, 2010, 10:09:35 AM (9 years ago)
Author:
marcimat@…
Message:

Les mots en spip_mots_liens.
Il reste certainement des bugs.

Location:
_core_/plugins/mots
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/mots/action/editer_mot.php

    r41050 r41559  
    5050function supprimer_mot($id_mot) {
    5151        sql_delete("spip_mots", "id_mot=".intval($id_mot));
    52         sql_delete("spip_mots_articles", "id_mot=".intval($id_mot));
    53         sql_delete("spip_mots_rubriques", "id_mot=".intval($id_mot));
    54         sql_delete("spip_mots_syndic", "id_mot=".intval($id_mot));
     52        sql_delete("spip_mots_liens", "id_mot=".intval($id_mot));
    5553        pipeline('trig_supprimer_objets_lies',
    5654                array(
  • _core_/plugins/mots/action/editer_mots.php

    r41050 r41559  
    3333        list($x, $id_objet, $id_mot, $table, $table_id, $objet, $nouv_mot) = $r;
    3434        if ($id_mot) {
    35                         if ($objet)
    36                           // desassocier un/des mot d'un objet precis
    37                                 sql_delete("spip_mots_$table", "$table_id=$id_objet" . (($id_mot <= 0) ? "" : " AND id_mot=$id_mot"));
    38                         else {
    39                                 // disparition complete d'un mot
    40                                 // on ne doit plus passer ici mais dans action/supprimer_mot
    41                                 include_spip('action/editer_mot');
    42                                 supprimer_mot($id_mot);
     35                if ($objet) {
     36                        // desassocier un/des mot d'un objet precis
     37                        $where = array(
     38                                "objet=" . sql_quote($objet),
     39                                "id_objet=$id_objet"
     40                        );
     41                        if ($id_mot > 0) {
     42                                $where[] = "id_mot=$id_mot";
    4343                        }
     44                        sql_delete("spip_mots_liens", $where);
     45                } else {
     46                        // disparition complete d'un mot
     47                        // on ne doit plus passer ici mais dans action/supprimer_mot
     48                        include_spip('action/editer_mot');
     49                        supprimer_mot($id_mot);
     50                }
    4451        }
    4552        if ($nouv_mot ? $nouv_mot : ($nouv_mot = _request('nouv_mot'))) {
    46                 // recopie de:
    47                 // inserer_mot("spip_mots_$table", $table_id, $id_objet, $nouv_mot);
    48                 $result = sql_countsel("spip_mots_$table", "id_mot=".intval($nouv_mot)." AND $table_id=$id_objet");
     53                $result = sql_countsel("spip_mots_liens", array(
     54                        "objet=" . sql_quote($objet),
     55                        "id_mot=".intval($nouv_mot),
     56                        "id_objet=$id_objet"));
    4957                if (!$result)
    50                         sql_insertq("spip_mots_$table", array('id_mot' => $nouv_mot, $table_id =>$id_objet));
     58                        sql_insertq("spip_mots_liens", array('objet'=> $objet, 'id_mot' => $nouv_mot,"id_objet" =>$id_objet));
    5159        }
    5260
     
    5765                                'args' => array(
    5866                                        'operation' => 'editer_mots',
    59                                         'table' => 'spip_'.$table,
     67                                        'table' => table_objet_sql($table),
    6068                                        'id_objet' => $id_objet
    6169                                ),
  • _core_/plugins/mots/base/mots.php

    r41139 r41559  
    2828        $interfaces['table_titre']['mots'] = "titre, '' AS lang";
    2929
    30         $interfaces['tables_jointures']['spip_articles'][]= 'mots_articles';
     30        $interfaces['tables_jointures']['spip_articles'][]= 'mots_liens';
    3131        $interfaces['tables_jointures']['spip_articles'][]= 'mots';
    3232       
    33         $interfaces['tables_jointures']['spip_breves'][]= 'mots_breves';
     33        $interfaces['tables_jointures']['spip_breves'][]= 'mots_liens';
    3434        $interfaces['tables_jointures']['spip_breves'][]= 'mots';
    3535       
    36         $interfaces['tables_jointures']['spip_documents'][]= 'mots_documents';
     36        $interfaces['tables_jointures']['spip_documents'][]= 'mots_liens';
    3737        $interfaces['tables_jointures']['spip_documents'][]= 'mots';
    3838       
    39         $interfaces['tables_jointures']['spip_rubriques'][]= 'mots_rubriques';
     39        $interfaces['tables_jointures']['spip_rubriques'][]= 'mots_liens';
    4040        $interfaces['tables_jointures']['spip_rubriques'][]= 'mots';
    4141       
    42         $interfaces['tables_jointures']['spip_syndic'][]= 'mots_syndic';
     42        $interfaces['tables_jointures']['spip_syndic'][]= 'mots_liens';
    4343        $interfaces['tables_jointures']['spip_syndic'][]= 'mots';
    4444       
    45         $interfaces['tables_jointures']['spip_syndic_articles'][]= 'mots_syndic';
     45        $interfaces['tables_jointures']['spip_syndic_articles'][]= 'mots_liens';
    4646        $interfaces['tables_jointures']['spip_syndic_articles'][]= 'mots';
    4747       
    48         $interfaces['tables_jointures']['spip_mots'][]= 'mots_articles';
    49         $interfaces['tables_jointures']['spip_mots'][]= 'mots_breves';
    50         $interfaces['tables_jointures']['spip_mots'][]= 'mots_rubriques';
    51         $interfaces['tables_jointures']['spip_mots'][]= 'mots_syndic';
    52         $interfaces['tables_jointures']['spip_mots'][]= 'mots_documents';
     48        $interfaces['tables_jointures']['spip_mots'][]= 'mots_liens';
    5349       
    5450        $interfaces['tables_jointures']['spip_groupes_mots'][]= 'mots';
    5551
    5652        $interfaces['exceptions_des_jointures']['type_mot'] = array('spip_mots', 'type');
    57         $interfaces['exceptions_des_jointures']['id_mot_syndic'] = array('spip_mots_syndic', 'id_mot');
     53        $interfaces['exceptions_des_jointures']['id_mot_syndic'] = array('spip_mots_liens', 'id_mot');
    5854        $interfaces['exceptions_des_jointures']['titre_mot_syndic'] = array('spip_mots', 'titre');
    5955        $interfaces['exceptions_des_jointures']['type_mot_syndic'] = array('spip_mots', 'type');
     
    9692                        "obligatoire"   => "varchar(3) DEFAULT '' NOT NULL",
    9793                        "tables_liees" => "text DEFAULT '' NOT NULL",
    98                         # suppression des champs a faire dans la maj
    99                         #"articles"     => "varchar(3) DEFAULT '' NOT NULL",
    100                         #"breves"       => "varchar(3) DEFAULT '' NOT NULL",
    101                         #"rubriques"    => "varchar(3) DEFAULT '' NOT NULL",
    102                         #"syndic"       => "varchar(3) DEFAULT '' NOT NULL",
    10394                        "minirezo"      => "varchar(3) DEFAULT '' NOT NULL",
    10495                        "comite"        => "varchar(3) DEFAULT '' NOT NULL",
     
    124115function mots_declarer_tables_auxiliaires($tables_auxiliaires){
    125116
     117        $spip_mots_liens = array(
     118                        "id_mot"        => "bigint(21) DEFAULT '0' NOT NULL",
     119                        "id_objet"      => "bigint(21) DEFAULT '0' NOT NULL",
     120                        "objet" => "VARCHAR (25) DEFAULT '' NOT NULL");
    126121
    127         $spip_mots_articles = array(
    128                         "id_mot"        => "bigint(21) DEFAULT '0' NOT NULL",
    129                         "id_article"    => "bigint(21) DEFAULT '0' NOT NULL");
    130 
    131         $spip_mots_articles_key = array(
    132                         "PRIMARY KEY"   => "id_article, id_mot",
     122        $spip_mots_liens_key = array(
     123                        "PRIMARY KEY"           => "id_mot,id_objet,objet",
    133124                        "KEY id_mot"    => "id_mot");
    134125
    135         $spip_mots_breves = array(
    136                         "id_mot"        => "bigint(21) DEFAULT '0' NOT NULL",
    137                         "id_breve"      => "bigint(21) DEFAULT '0' NOT NULL");
    138 
    139         $spip_mots_breves_key = array(
    140                         "PRIMARY KEY"   => "id_breve, id_mot",
    141                         "KEY id_mot"    => "id_mot");
    142 
    143         $spip_mots_rubriques = array(
    144                         "id_mot"        => "bigint(21) DEFAULT '0' NOT NULL",
    145                         "id_rubrique"   => "bigint(21) DEFAULT '0' NOT NULL");
    146 
    147         $spip_mots_rubriques_key = array(
    148                         "PRIMARY KEY"   => "id_rubrique, id_mot",
    149                         "KEY id_mot"    => "id_mot");
    150 
    151         $spip_mots_syndic = array(
    152                         "id_mot"        => "bigint(21) DEFAULT '0' NOT NULL",
    153                         "id_syndic"     => "bigint(21) DEFAULT '0' NOT NULL");
    154 
    155         $spip_mots_syndic_key = array(
    156                         "PRIMARY KEY"   => "id_syndic, id_mot",
    157                         "KEY id_mot"    => "id_mot");
    158 
    159         $spip_mots_documents = array(
    160                         "id_mot"        => "bigint(21) DEFAULT '0' NOT NULL",
    161                         "id_document"   => "bigint(21) DEFAULT '0' NOT NULL");
    162 
    163         $spip_mots_documents_key = array(
    164                         "PRIMARY KEY"   => "id_document, id_mot",
    165                         "KEY id_mot"    => "id_mot");
    166 
    167         $tables_auxiliaires['spip_mots_articles'] = array(
    168                 'field' => &$spip_mots_articles,
    169                 'key' => &$spip_mots_articles_key);
    170         $tables_auxiliaires['spip_mots_breves'] = array(
    171                 'field' => &$spip_mots_breves,
    172                 'key' => &$spip_mots_breves_key);
    173         $tables_auxiliaires['spip_mots_rubriques'] = array(
    174                 'field' => &$spip_mots_rubriques,
    175                 'key' => &$spip_mots_rubriques_key);
    176         $tables_auxiliaires['spip_mots_syndic'] = array(
    177                 'field' => &$spip_mots_syndic,
    178                 'key' => &$spip_mots_syndic_key);
    179         $tables_auxiliaires['spip_mots_documents'] = array(
    180                 'field' => &$spip_mots_documents,
    181                 'key' => &$spip_mots_documents_key);
    182 
     126        $tables_auxiliaires['spip_mots_liens'] =
     127                array('field' => &$spip_mots_liens, 'key' => &$spip_mots_liens_key);
     128               
    183129        return $tables_auxiliaires;
    184130}
  • _core_/plugins/mots/base/mots_upgrade.php

    r41284 r41559  
    3131                        ecrire_meta($nom_meta_base_version,$current_version=$version_cible);
    3232                }
     33                // passer a spip_mots_liens
     34                if (version_compare($current_version, '2.0', '<')) {
     35                        // supprime par defaut les anciennes tables une fois le travail effectue
     36                        mots_maj_tables_liaisons(array(
     37                                'article', 'breve', 'rubrique', 'syndic', 'forum', // core
     38                                'auteur', 'document' // autres plugins ?
     39                        ));
     40                        ecrire_meta($nom_meta_base_version,$current_version = '2.0');
     41                }
     42
    3343        }
    3444}
     
    4353        sql_drop_table("spip_mots");
    4454        sql_drop_table("spip_groupes_mots");
    45         sql_drop_table("spip_mots_articles");
    46         sql_drop_table("spip_mots_breves");
    47         sql_drop_table("spip_mots_rubriques");
    48         sql_drop_table("spip_mots_syndic");
    49         sql_drop_table("spip_mots_documents");
    50 
     55        sql_drop_table("spip_mots_liens");
     56       
    5157        effacer_meta('articles_mots');
    5258        effacer_meta('config_precise_groupes');
     
    5561}
    5662
     63
     64
     65/**
     66  * Reunir en une seule table les liens de mots dans spip_mots_liens
     67  * Passe spip_mots_xx(id_mot, id_xx) dans spip_mots_liens(objet, id_objet, id_mot)
     68  * (peut fonctionner pour d'autres table spip_xx_liens).
     69  *
     70  * @param array $objets : liste d'objets à transférer.
     71  * @param string $destination : table de destination (se terminant par _liens).
     72  * @param bool $supprimer_ancienne_table : supprimer l'ancienne table une fois la copie réalisée ?.
     73  * @return
     74 **/
     75function mots_maj_tables_liaisons ($objets, $destination='spip_mots_liens', $supprimer_ancienne_table = true) {
     76        // creer la table spip_mots_liens manquante
     77        include_spip('base/create');
     78        creer_base();
     79
     80        $trouver_table = charger_fonction('trouver_table','base');
     81       
     82        // Recopier les donnees
     83        foreach ($objets as $objet) {
     84                $table_objet = table_objet($objet);
     85                if ($table_objet == 'forums') $table_objet = 'forum'; // #naze #bug #forum
     86                $_id_objet = id_table_objet($objet);
     87                $source = substr($destination, 0, -5) . $table_objet; // spip_mots_xx
     88                spip_log("Transfert SQL de : '$source' vers '$destination'");
     89               
     90                if (!$trouver_table($source)) continue; // la source n'existe pas... ne rien tenter...
     91               
     92                if ($s = sql_select('*', $source)) {
     93                        $tampon = array();
     94                        while ($t = sql_fetch($s)) {
     95                                // transformer id_xx=N en (id_objet=N, objet=xx)
     96                                $t['id_objet'] = $t[$_id_objet];
     97                                $t['objet'] = $objet;
     98                                unset($t[$_id_objet]);
     99                                unset($t['maj']);
     100                                $tampon[] = $t;
     101                                if (count($tampon)>10000) {
     102                                        sql_insertq_multi($destination, $tampon);
     103                                        $tampon = array();
     104                                }
     105                        }
     106                       
     107                        if (count($tampon)) {
     108                                sql_insertq_multi($destination, $tampon);
     109                        }
     110                       
     111                        if ($supprimer_ancienne_table) {
     112                                sql_drop_table($source);
     113                        }
     114                }
     115        }
     116}
     117
     118
    57119?>
  • _core_/plugins/mots/formulaires/editer_mot.php

    r41050 r41559  
    9494function ajouter_nouveau_mot($id_groupe, $table, $table_id, $id_mot, $id)
    9595{
     96        $type = objet_type($table);
    9697        if (un_seul_mot_dans_groupe($id_groupe)) {
    97                 sql_delete("spip_mots_$table", "$table_id=$id AND " . sql_in_select("id_mot", "id_mot", "spip_mots", "id_groupe = $id_groupe"));
     98                sql_delete("spip_mots_liens", array(
     99                        "objet=" . sql_quote($type),
     100                        "id_objet = $id",
     101                        sql_in_select("id_mot", "id_mot", "spip_mots", "id_groupe = $id_groupe")
     102                ));
    98103        }
    99         sql_insertq("spip_mots_$table", array("id_mot" => $id_mot, $table_id => $id));
     104        sql_insertq("spip_mots_liens", array(
     105                "objet" => $type,
     106                "id_mot" => $id_mot,
     107                "id_objet" => $id)
     108        );
    100109}
    101110
  • _core_/plugins/mots/inc/editer_mots.php

    r41091 r41559  
    2424        $desc = $trouver_table($nom);
    2525        $table_id =  @$desc['key']["PRIMARY KEY"];
    26 
     26        $objet = objet_type($objet);
     27       
    2728        $reponse = ($flag AND $cherche_mot)
    2829                ? chercher_inserer_mot($cherche_mot, $select_groupe, $objet, $id_objet, $nom, $table_id, $url_base)
     
    6970        foreach($nouveaux_mots as $nouv_mot) {
    7071                if ($nouv_mot!='x') {
    71                         $modifier |= inserer_mot("spip_mots_$nom", $table_id, $id_objet, $nouv_mot);
     72                        $modifier |= inserer_mot($objet, $table_id, $id_objet, $nouv_mot);
    7273                }
    7374        }
     
    8788}
    8889// http://doc.spip.org/@inserer_mot
    89 function inserer_mot($table, $table_id, $id_objet, $id_mot)
    90 {
    91         $r = sql_countsel($table, "id_mot=$id_mot AND $table_id=$id_objet");
     90function inserer_mot($objet, $id_objet, $id_mot)
     91{
     92        $r = sql_countsel('spip_mots_liens', array("id_mot=$id_mot", "objet=".sql_quote($objet), "id_objet=$id_objet"));
    9293        if (!$r) {
    93                 sql_insertq($table, array('id_mot' =>$id_mot,  $table_id => $id_objet));
     94                sql_insertq('spip_mots_liens', array('id_mot' =>$id_mot, 'objet' => $objet, 'id_objet' => $id_objet));
    9495                return true;
    9596        }
     
    146147function afficher_mots_cles($flag, $objet, $id_objet, $table, $table_id, $url)
    147148{
    148         $q = array('SELECT' => "M.id_mot, M.titre, M.id_groupe", 'FROM' => "spip_mots AS M LEFT JOIN spip_mots_$table AS L ON M.id_mot=L.id_mot", 'WHERE' => "L.$table_id=$id_objet", 'ORDER BY' => "M.type, M.titre");
     149        $q = array(
     150                'SELECT' => "M.id_mot, M.titre, M.id_groupe",
     151                'FROM' => "spip_mots AS M LEFT JOIN spip_mots_liens AS L ON M.id_mot=L.id_mot",
     152                'WHERE' => "L.objet=" . sql_quote($objet) . " AND L.id_objet=$id_objet",
     153                'ORDER BY' => "M.type, M.titre");
    149154
    150155        $ret = generer_url_retour($url, "$table_id=$id_objet#editer_mots-$id_objet");
  • _core_/plugins/mots/mots_autoriser.php

    r41099 r41559  
    5454
    5555
    56 // http://doc.spip.org/@autoriser_rubrique_editermots_dist
    57 function autoriser_rubrique_editermots_dist($faire,$quoi,$id,$qui,$opts){
     56
     57function autoriser_objet_editermots_dist($faire,$quoi,$id,$qui,$opts){
    5858        // on verifie que le champ de droit passe en opts colle bien
    5959        $droit = substr($GLOBALS['visiteur_session']['statut'],1);
     
    7676                );
    7777}
     78
     79// http://doc.spip.org/@autoriser_rubrique_editermots_dist
     80function autoriser_rubrique_editermots_dist($faire,$quoi,$id,$qui,$opts){
     81        return autoriser_objet_editermots_dist($faire,'rubrique',0,$qui,$opts);
     82}
    7883// http://doc.spip.org/@autoriser_article_editermots_dist
    7984function autoriser_article_editermots_dist($faire,$quoi,$id,$qui,$opts){
    80         return autoriser_rubrique_editermots_dist($faire,'article',0,$qui,$opts);
     85        return autoriser_objet_editermots_dist($faire,'article',0,$qui,$opts);
    8186}
    8287// http://doc.spip.org/@autoriser_breve_editermots_dist
    8388function autoriser_breve_editermots_dist($faire,$quoi,$id,$qui,$opts){
    84         return autoriser_rubrique_editermots_dist($faire,'breve',0,$qui,$opts);
     89        return autoriser_objet_editermots_dist($faire,'breve',0,$qui,$opts);
    8590}
    8691// http://doc.spip.org/@autoriser_syndic_editermots_dist
    8792function autoriser_syndic_editermots_dist($faire,$quoi,$id,$qui,$opts){
    88         return autoriser_rubrique_editermots_dist($faire,'syndic',0,$qui,$opts);
     93        return autoriser_objet_editermots_dist($faire,'syndic',0,$qui,$opts);
    8994}
    9095
  • _core_/plugins/mots/mots_pipelines.php

    r41466 r41559  
    119119        $n = &$flux['data'];
    120120
    121 
    122         # les liens des mots affectes a une id_rubrique inexistante
    123         $res = sql_select("M.id_rubrique AS id",
    124                       "spip_mots_rubriques AS M
    125                         LEFT JOIN spip_rubriques AS R
    126                           ON M.id_rubrique=R.id_rubrique",
    127                         "R.id_rubrique IS NULL");
    128 
    129         $n+= optimiser_sansref('spip_mots_rubriques', 'id_rubrique', $res);
    130 
    131 
    132         # les liens de mots affectes a des articles effaces
    133         $res = sql_select("M.id_article AS id",
    134                         "spip_mots_articles AS M
    135                         LEFT JOIN spip_articles AS A
    136                           ON M.id_article=A.id_article",
    137                         "A.id_article IS NULL");
    138 
    139         $n+= optimiser_sansref('spip_mots_articles', 'id_article', $res);
    140 
    141 
    142         # les liens de mots affectes a des breves effacees
    143         $res = sql_select("M.id_breve AS id",
    144                         "spip_mots_breves AS M
    145                         LEFT JOIN spip_breves AS B
    146                           ON M.id_breve=B.id_breve",
    147                         "B.id_breve IS NULL");
    148 
    149         $n+= optimiser_sansref('spip_mots_breves', 'id_breve', $res);
    150 
    151 
    152         # les liens de mots affectes a des sites effaces
    153         $res = sql_select("M.id_syndic AS id",
    154                         "spip_mots_syndic AS M
    155                         LEFT JOIN spip_syndic AS syndic
    156                           ON M.id_syndic=syndic.id_syndic",
    157                         "syndic.id_syndic IS NULL");
    158 
    159         $n+= optimiser_sansref('spip_mots_syndic', 'id_syndic', $res);
    160 
    161 
    162         //
    163         // Mots-cles
    164         //
    165 
    166121        $result = sql_delete("spip_mots", "length(titre)=0 AND maj < $mydate");
    167 
    168 
    169         # les liens mots-articles sur des mots effaces
    170         $res = sql_select("A.id_mot AS id",
    171                         "spip_mots_articles AS A
    172                         LEFT JOIN spip_mots AS M
    173                           ON A.id_mot=M.id_mot",
    174                         "M.id_mot IS NULL");
    175 
    176         $n+= optimiser_sansref('spip_mots_articles', 'id_mot', $res);
    177 
    178         # les liens mots-breves sur des mots effaces
    179         $res = sql_select("B.id_mot AS id",
    180                         "spip_mots_breves AS B
    181                         LEFT JOIN spip_mots AS M
    182                           ON B.id_mot=M.id_mot",
    183                         "M.id_mot IS NULL");
    184 
    185         $n+= optimiser_sansref('spip_mots_breves', 'id_mot', $res);
    186 
    187         # les liens mots-rubriques sur des mots effaces
    188         $res = sql_select("R.id_mot AS id",
    189                       "spip_mots_rubriques AS R
    190                         LEFT JOIN spip_mots AS M
    191                           ON R.id_mot=M.id_mot",
    192                         "M.id_mot IS NULL");
    193 
    194         $n+= optimiser_sansref('spip_mots_rubriques', 'id_mot', $res);
    195 
    196         # les liens mots-syndic sur des mots effaces
    197         $res = sql_select("S.id_mot AS id",
    198                         "spip_mots_syndic AS S
    199                         LEFT JOIN spip_mots AS M
    200                           ON S.id_mot=M.id_mot",
    201                         "M.id_mot IS NULL");
    202 
    203         $n+= optimiser_sansref('spip_mots_syndic', 'id_mot', $res);
    204 
     122       
     123        #[todo] optimiser_table_liens_objet_lie_inexistant('spip_mots_liens');
     124        # les liens des mots qui sont lies a un objet inexistant
     125        $objets = allfetsel("DISTINCT objet","spip_mots_liens");
     126        foreach ($objets as $t){
     127                $type = $t['objet'];
     128                $spip_table_objet = table_objet_sql($type);
     129                $id_table_objet = id_table_objet($type);
     130                $res = sql_select("L.id_mot AS id,id_objet",
     131                              "spip_mots_liens AS L
     132                                LEFT JOIN $spip_table_objet AS O
     133                                  ON O.$id_table_objet=L.id_objet AND L.objet=".sql_quote($type),
     134                                "O.$id_table_objet IS NULL");
     135                // sur une cle primaire composee, pas d'autres solutions que de virer un a un
     136                while ($row = sql_fetch($sel)){
     137                        sql_delete("spip_mots_liens", array("id_mot=".$row['id'],"id_objet=".$row['id_objet'],"objet=".sql_quote($type)));
     138                        spip_log("Entree ".$row['id']."/".$row['id_objet']."/$type supprimee dans la table spip_mots_liens");
     139                }
     140        }
     141       
     142        #[todo] optimiser_table_liens_id_lie_inexistant('spip_mots_liens');
     143        # les liens des mots qui sont lies a un mot inexistant
     144        $table_origine = substr("spip_mots_liens", 0, -6);
     145        $id_table_origine = id_table_objet($table_origine);
     146        $res = sql_select("L.$id_table_origine AS id,id_objet",
     147                          "spip_mots_liens AS L
     148                                LEFT JOIN $table_origine AS O
     149                                  ON O.$id_table_origine=L.$id_table_origine",
     150                        "O.$id_table_origine IS NULL");
     151        // sur une cle primaire composee, pas d'autres solutions que de virer un a un
     152        while ($row = sql_fetch($sel)){
     153                sql_delete("spip_mots_liens", array("id_mot=".$row['id']));
     154                spip_log("Entree id_mot=".$row['id']."/$type supprimee dans la table spip_mots_liens");
     155        }
     156       
    205157
    206158
  • _core_/plugins/mots/plugin.xml

    r41142 r41559  
    22        <nom>Mots</nom>
    33        <auteur>Collectif SPIP</auteur>
    4         <version>1.0</version>
    5         <version_base>1.0</version_base>
     4        <version>2.0</version>
     5        <version_base>2.0</version_base>
    66        <etat>test</etat>
    77        <description>Mots et Groupes de mots</description>
  • _core_/plugins/mots/prive/listes/mots-admin_fonctions.php

    r41050 r41559  
    4545function calculer_utilisations_mots($id_groupe)
    4646{
    47         $aff_articles = sql_in('O.statut',  ($GLOBALS['connect_statut'] =="0minirezo")  ? array('prepa','prop','publie') : array('prop','publie'));
     47        $statuts = sql_in('O.statut',  ($GLOBALS['connect_statut'] =="0minirezo")  ? array('prepa','prop','publie') : array('prop','publie'));
     48        $retour = array();
     49        $objets = sql_allfetsel('DISTINCT objet', array('spip_mots_liens AS L', 'spip_mots AS M'), array('L.id_mot=M.id_mot', 'M.id_groupe='.$id_groupe));
    4850
    49         $res = sql_allfetsel("COUNT(*) AS cnt, L.id_mot", "spip_mots_articles AS L LEFT JOIN spip_mots AS M ON L.id_mot=M.id_mot LEFT JOIN spip_articles AS O ON L.id_article=O.id_article", "M.id_groupe=$id_groupe AND $aff_articles", "L.id_mot");
    50         $articles = array();
    51         foreach($res as $row) $articles[$row['id_mot']] = $row['cnt'];
     51        foreach($objets as $o) {
     52                $objet=$o['objet'];
     53                $_id_objet = id_table_objet($objet);
     54                $table_objet = table_objet($objet);
     55                $table_objet_sql = table_objet_sql($objet);
     56                $res = sql_allfetsel(
     57                        "COUNT(*) AS cnt, L.id_mot",
     58                        "spip_mots_liens AS L
     59                                LEFT JOIN spip_mots AS M ON L.id_mot=M.id_mot
     60                                        AND L.objet=" . sql_quote($objet) . "
     61                                LEFT JOIN " . $table_objet_sql . " AS O ON L.id_objet=O.$_id_objet" ,
     62                        "M.id_groupe=$id_groupe AND $statuts",
     63                        "L.id_mot");
    5264
    53         $rubriques = array();
    54         $res = sql_allfetsel("COUNT(*) AS cnt, L.id_mot", "spip_mots_rubriques AS L LEFT JOIN spip_mots AS M ON L.id_mot=M.id_mot", "M.id_groupe=$id_groupe", "L.id_mot");
    55         foreach($res as $row) $rubriques[$row['id_mot']] = $row['cnt'];
    56  
    57         $breves = array();
    58         $res = sql_allfetsel("COUNT(*) AS cnt, L.id_mot", "spip_mots_breves AS L LEFT JOIN spip_mots AS M ON L.id_mot=M.id_mot LEFT JOIN spip_breves AS O ON L.id_breve=O.id_breve", "M.id_groupe=$id_groupe AND $aff_articles", "L.id_mot");
    59         foreach($res as $row) $breves[$row['id_mot']] = $row['cnt'];
     65                foreach($res as $row) {
     66                        $retour[$table_objet][$row['id_mot']] = $row['cnt'];
     67                }
     68        }
    6069
    61         $syndic = array();
    62         $res = sql_allfetsel("COUNT(*) AS cnt, L.id_mot", "spip_mots_syndic AS L LEFT JOIN spip_mots AS M ON L.id_mot=M.id_mot LEFT JOIN spip_syndic AS O ON L.id_syndic=O.id_syndic", "M.id_groupe=$id_groupe AND $aff_articles", "L.id_mot");
    63         foreach($res as $row) $syndic[$row['id_mot']] = $row['cnt'];
    64 
    65         return array('articles' => $articles,
    66                 'breves' => $breves,
    67                 'rubriques' => $rubriques,
    68                 'syndic' => $syndic);
     70        return $retour;
    6971}
    7072?>
Note: See TracChangeset for help on using the changeset viewer.