Changeset 114831 in spip-zone


Ignore:
Timestamp:
Apr 5, 2019, 3:38:27 PM (8 months ago)
Author:
abelass@…
Message:

bug fixes

  • enlever code inutile qui provoque erreur sql (merci pipol)
  • permettre de modifier référence des traductions dans une rubrique
  • ajax au bon endroit

-Eviter de conflits entres les différents objets en ouvrant les traductions

  • optimisation:
  • nommage de fichiers plus clair
  • ne faire de requete uniquement si pas de squelette personnalisé
Location:
_plugins_/interface_traduction_objets/trunk
Files:
5 added
9 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/interface_traduction_objets/trunk/interface_traduction_objets_pipelines.php

    r114785 r114831  
    4949        ) {
    5050                $langues_dispos = explode(',', $GLOBALS['meta']['langues_multilingue']);
    51 
    5251                $select = ['id_trad', 'lang', $id_table_objet];
    5352
     
    6766                        $table_objet,
    6867                        $id_table_objet . '=' . $contexte[$id_table_objet]);
    69 
    70                 $id_trad_parent = '';
    71                 if ($id_parent_table) {
    72                         $rubrique_parent = sql_fetsel(
    73                                 'id_trad, id_rubrique',
    74                                 'spip_rubriques',
    75                                 'id_rubrique=' . $donnees_objet[$id_parent_table]);
    76 
    77                                 $id_trad_parent = $rubrique_parent['id_rubrique'];
    78                 }
    79 
    8068
    8169                $lang_objet = $donnees_objet['lang'];
     
    113101                $contexte['lang_objet'] = $lang_objet;
    114102                $contexte['id_trad'] = $id_trad;
    115                 $contexte['id_trad_parent'] = $id_trad_parent;
    116103                $contexte['langues_traduites'] = $langues_traduites;
    117104
     
    140127                !in_array($table_objet_sql, $config)) {
    141128
    142                 $contexte['objets'] = $objets;
    143                 $contexte['objet'] = $objet;
    144                 $contexte['table_objet_sql'] = $table_objet_sql;
    145                 $contexte['id_table_objet'] = $id_table_objet;
    146                 $contexte['champs'] = $desc['field'];
    147 
    148                 $champ = [$id_table_objet . ' as id'];
    149                 $from = $table_objet_sql;
    150                 $where = [];
    151                 $order = ' order by ' . id_table_objet($objet) . ' desc';
    152                 $left_join = [];
    153                 $join = '';
    154 
    155                 /*
    156                 * Affichage de champs supplémentaires
    157                 */
    158 
    159                 // Les auteurs liés s'il y en a en moins un.
    160                 $auteur = sql_getfetsel('id_auteur', 'spip_auteurs_liens', 'objet LIKE' . sql_quote($objet));
    161                 if ($auteur) {
    162                         $contexte['champ_auteur'] = TRUE;
    163                 }
    164 
    165                 // Existence d'un champ date.
    166                 $champ_date = '';
    167                 if (isset($desc['date']) and $desc['date']) {
    168                         $champ_date = $desc['date'];
    169                 } elseif (isset($desc['field']['date'])) {
    170                         $champ_date = 'date';
    171                 }
    172                 if ($champ_date) {
    173                         $contexte['champ_date'] = $champ_date;
    174                         $champ[] = $champ_date . ' as date';
    175                 }
    176 
    177                 /*
    178                 * Des requêtes conditionnelles dépendant du contexte.
    179                 */
    180 
    181                 // Page auteur.
    182                 if (isset($contexte['id_auteur'])) {
    183                         if (isset($desc['field']['id_auteur'])) {
    184                                 $where[] = 'id_auteur=' . $contexte['id_auteur'];
    185                         }
    186                         else {
    187                                 $left_join[] = 'spip_auteurs_liens';
    188                                 $where[] = 'objet LIKE ' . sql_quote($objet) . ' AND id_auteur=' . $contexte['id_auteur'];
    189                         }
    190                 }
    191 
    192                 // Page mot clé.
    193                 if (isset($contexte['id_mot'])) {
    194                         $left_join[] = 'spip_mots_liens';
    195                         $where[] = 'spip_mots_liens.objet LIKE ' . sql_quote($objet) . ' AND spip_mots_liens.id_mot=' . $contexte['id_mot'];
    196                 }
    197 
    198                 $on = '';
    199                 if (count($left_join) > 0) {
    200                         foreach ($left_join AS $table_jointure) {
    201                                 $on = ' ON ' . $table_objet_sql . '.' . $id_table_objet . '=' . $table_jointure . '.id_objet';
    202                                 $join .= ' LEFT JOIN ' . $table_jointure . $on;
    203                         }
    204                 }
    205 
    206                 // Si on est dans une rubrique on prend les objets de la rubrique
    207                 if (isset($contexte['id_rubrique'])) {
    208                         $where[] = $table_objet_sql . '.id_rubrique=' . $contexte['id_rubrique'];
    209                 }
    210 
    211 
    212                 // Si pas dans une rubrique ou secteur_langue pas activé,
    213                 // on prend les objets non traduits et ceux de références si traduit.
    214                 if (!isset($contexte['id_rubrique']) OR !test_plugin_actif('secteur_langue')){
    215                         $objets = sql_allfetsel(
    216                                 'id_trad,' . $id_table_objet,
    217                                 $from . $join,
    218                                 $where,
    219                                 '',
    220                                 $id_table_objet . ' desc');
    221 
    222                         $id_objets = [];
    223                         foreach ($objets AS $row) {
    224                                 $id_trad = $row['id_trad'];
    225                                 $id_objet = $row[$id_table_objet];
    226                                 if ($id_trad > 0 AND $id_trad == $id_objet) {
    227                                         $id_objets[$id_trad] = $id_objet;
    228                                 }
    229                                 elseif ($id_trad == 0) {
    230                                         $id_objets[$id_objet] = $id_objet;
    231                                 }
    232                         }
    233                         if (count($id_objets) == 0) {
    234                                 $id_objets = [-1];
    235                         }
    236                         $where[] = $table_objet_sql . '.' .$id_table_objet . ' IN (' . implode(',', $id_objets) . ')';
    237                 }
    238 
    239                 // On passe le résultat de la requête dans le contexte.
    240                 $contexte['donnees'] = sql_allfetsel($champ, $from . $join, $where, '', id_table_objet($objet) . ' desc');
    241 
    242                 $flux['texte'] = recuperer_fond('prive/objets/liste/objets_compacte', $contexte);
     129                // Détermine si la liste est de type sections.
     130                if (test_plugin_actif('secteur_langue') AND isset($contexte['id_rubrique'])) {
     131                        $contexte['type'] = 'sections';
     132                }
     133
     134                // S'il existe un squelette compacte pour l'objet on le prend.
     135                if (find_in_path('prive/objets/liste/compacte/' . $objets . '.html')) {
     136                        $liste_compacte = recuperer_fond('prive/objets/liste/compacte/' . $objets, $contexte, ['ajax'=>'oui']);
     137                }
     138                // Sinon on prend le générique.
     139                else {
     140                        $contexte['objets'] = $objets;
     141                        $contexte['objet'] = $objet;
     142                        $contexte['table_objet_sql'] = $table_objet_sql;
     143                        $contexte['id_table_objet'] = $id_table_objet;
     144                        $contexte['champs'] = $desc['field'];
     145                        $contexte['voir'] = _request('voir');
     146
     147                        $champ = [$id_table_objet . ' as id'];
     148                        $from = $table_objet_sql;
     149                        $where = [];
     150                        $order = ' order by ' . id_table_objet($objet) . ' desc';
     151                        $left_join = [];
     152                        $join = '';
     153
     154                        /*
     155                        * Affichage de champs supplémentaires
     156                        */
     157
     158                        // Les auteurs liés s'il y en a en moins un.
     159                        $auteur = sql_getfetsel('id_auteur', 'spip_auteurs_liens', 'objet LIKE' . sql_quote($objet));
     160                        if ($auteur) {
     161                                $contexte['champ_auteur'] = TRUE;
     162                        }
     163
     164                        // Existence d'un champ date.
     165                        $champ_date = '';
     166                        if (isset($desc['date']) and $desc['date']) {
     167                                $champ_date = $desc['date'];
     168                        } elseif (isset($desc['field']['date'])) {
     169                                $champ_date = 'date';
     170                        }
     171                        if ($champ_date) {
     172                                $contexte['champ_date'] = $champ_date;
     173                                $champ[] = $champ_date . ' as date';
     174                        }
     175
     176                        /*
     177                        * Des requêtes conditionnelles dépendant du contexte.
     178                        */
     179
     180                        // Page auteur.
     181                        if (isset($contexte['id_auteur'])) {
     182                                if (isset($desc['field']['id_auteur'])) {
     183                                        $where[] = 'id_auteur=' . $contexte['id_auteur'];
     184                                }
     185                                else {
     186                                        $left_join[] = 'spip_auteurs_liens';
     187                                        $where[] = 'objet LIKE ' . sql_quote($objet) . ' AND id_auteur=' . $contexte['id_auteur'];
     188                                }
     189                        }
     190
     191                        // Page mot clé.
     192                        if (isset($contexte['id_mot'])) {
     193                                $left_join[] = 'spip_mots_liens';
     194                                $where[] = 'spip_mots_liens.objet LIKE ' . sql_quote($objet) . ' AND spip_mots_liens.id_mot=' . $contexte['id_mot'];
     195                        }
     196
     197                        $on = '';
     198                        if (count($left_join) > 0) {
     199                                foreach ($left_join AS $table_jointure) {
     200                                        $on = ' ON ' . $table_objet_sql . '.' . $id_table_objet . '=' . $table_jointure . '.id_objet';
     201                                        $join .= ' LEFT JOIN ' . $table_jointure . $on;
     202                                }
     203                        }
     204
     205                        // Si on est dans une rubrique on prend les objets de la rubrique
     206                        if (isset($contexte['id_rubrique'])) {
     207                                $where[] = $table_objet_sql . '.id_rubrique=' . $contexte['id_rubrique'];
     208                        }
     209
     210
     211                        // Si pas dans une rubrique ou secteur_langue pas activé,
     212                        // on prend les objets non traduits et ceux de références si traduit.
     213                        if (!isset($contexte['id_rubrique']) OR !test_plugin_actif('secteur_langue')){
     214                                $objets = sql_allfetsel(
     215                                        'id_trad,' . $id_table_objet,
     216                                        $from . $join,
     217                                        $where,
     218                                        '',
     219                                        $id_table_objet . ' desc');
     220
     221                                $id_objets = [];
     222                                foreach ($objets AS $row) {
     223                                        $id_trad = $row['id_trad'];
     224                                        $id_objet = $row[$id_table_objet];
     225                                        if ($id_trad > 0 AND $id_trad == $id_objet) {
     226                                                $id_objets[$id_trad] = $id_objet;
     227                                        }
     228                                        elseif ($id_trad == 0) {
     229                                                $id_objets[$id_objet] = $id_objet;
     230                                        }
     231                                }
     232                                if (count($id_objets) == 0) {
     233                                        $id_objets = [-1];
     234                                }
     235                                $where[] = $table_objet_sql . '.' .$id_table_objet . ' IN (' . implode(',', $id_objets) . ')';
     236                        }
     237
     238                        // On passe le résultat de la requête dans le contexte.
     239                        $contexte['donnees'] = sql_allfetsel($champ, $from . $join, $where, '', id_table_objet($objet) . ' desc');
     240
     241                        $liste_compacte = recuperer_fond('prive/objets/liste/objets_compacte', $contexte, ['ajax'=>'oui']);
     242                }
     243                $flux['texte'] = $liste_compacte;
    243244        }
    244245
     
    265266                        $flux['data']['lang_dest'] = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . $id_parent);
    266267                }
     268
     269                        // pour afficher la liste des trad sur la base de l'id_trad en base
    267270                if (isset($flux['data']['lang_dest'])) {
    268271                        $flux['data']['_hidden'] .= '<input type="hidden" name="lang_dest" value="' . $flux['data']['lang_dest'] . '"/>';
     
    271274
    272275        if ($form == 'traduire') {
    273                 // Rendre le changement de langue possible si pas dans rubrique
    274                 // ou si dans rubrique sans que secteur_langue soit activé
    275                 if (!isset($flux['data']['id_rubrique']) OR
    276                         (
    277                                 isset($flux['data']['id_rubrique']) AND !test_plugin_actif('secteur_langue')
    278                         )
    279                 ) {
    280                         $flux['data']['editable'] = TRUE;
    281                         $flux['data']['_langue'] = $flux['data']['langue'];
    282                 }
     276                // Rendre le changement de la langue possible aunsi que le changement de la référence des traductions
     277
     278                $flux['data']['_langue'] = $flux['data']['langue'];
     279                $flux['data']['editable'] = TRUE;
    283280        }
    284281
  • _plugins_/interface_traduction_objets/trunk/paquet.xml

    r114785 r114831  
    22        prefix="interface_traduction_objets"
    33        categorie="edition"
    4         version="1.0.1"
     4        version="1.0.2"
    55        etat="test"
    66        compatibilite="[3.0.0;3.2.*]"
    77        logo="prive/themes/spip/images/interface_traduction_objets-64.png"
    8         documentation="https://github.com/abelass/interface_traduction_objets"
     8        documentation="https://contrib.spip.net/Interface-de-traduction-pour-objets"
    99>
    1010
     
    1212        <!-- Rend la traduction de vos objets encore plus simple -->
    1313
    14         <auteur>Rainer Müller Müller</auteur>
     14        <auteur>Rainer Müller</auteur>
    1515
    1616        <licence>GNU/GPL</licence>
  • _plugins_/interface_traduction_objets/trunk/prive/inclure/barre_traductions_objet.html

    r114756 r114831  
    1818                                        #SET{parent,''}
    1919                                        [(#ENV{objet}|=={rubrique}|oui)#SET{parent,1}]
    20                                         [(#SET{donnees_trad,#VALEUR|rubrique_destination_traduction{#ENV{id_parent},#GET{parent}}})]
     20                                        [(#SET{donnees_trad,#VALEUR|appliquer_filtre{rubrique_destination_traduction, #ENV{id_parent},#GET{parent}}})]
    2121                                        #SET{id_parent_trad,#GET{donnees_trad}|table_valeur{id_parent_trad}}
    2222                                        [(#SET{creer_racine, #GET{donnees_trad}|table_valeur{creer_racine}})]
     
    3737                </ul>
    3838                        [(#ENV{voir}|non)<a  class="ajax bouton_options" href="[(#SELF|parametre_url{voir,options})]" title="<:interface_traduction_objets:options:>"><img src="#CHEMIN{prive/themes/spip/images/interface_traduction_objets-32.png}"/></a>]
    39                         [(#ENV{voir}|oui)<a class="ajax bouton_options" href="[(#SELF|parametre_url{voir,''})]" title="<:interface_traduction_objets:fermer:>"><img src="#CHEMIN{prive/themes/spip/images/interface_traduction_objets-32.png}"/></a>]
     39                        [(#ENV{voir}|oui)<a class="ajax bouton_options" href="[(#SELF|parametre_url{voir,''})]" title="<:ecrire:bouton_fermer:>"><img src="#CHEMIN{prive/themes/spip/images/interface_traduction_objets-32.png}"/></a>]
    4040
    4141                </div>
  • _plugins_/interface_traduction_objets/trunk/prive/objets/liste/compacte/articles.html

    r114727 r114831  
    11[(#REM) Squelettes différent si langues par section]
    22
    3 <INCLURE{fond=prive/objets/liste/compacte/inc-articles#ENV{type},env}/>
     3[(#INCLURE{fond=prive/objets/liste/compacte/inc-articles[_(#ENV{type})],env})]
  • _plugins_/interface_traduction_objets/trunk/prive/objets/liste/compacte/inc-articles.html

    r114727 r114831  
    5757        <BOUCLE_liste_art(ARTICLES){id_article IN #GET{id_articles}}{id_rubrique?}{id_mot?}{id_auteur?}{where?}{statut?}{recherche?}{tri #GET{tri},#GET{defaut_tri}}{par titre}{pagination #ENV{nb,10}}{!lang_select}>
    5858                #SET{class,#COMPTEUR_BOUCLE|alterner{row_odd,row_even}}
    59                 <INCLURE{fond=prive/objets/liste/compacte/inc-articles_row,env,trads=oui,id_article,class=#GET{class},exclus=,rang_actif=#GET{rang_actif}}/>
     59                <INCLURE{fond=prive/objets/liste/compacte/inc-articles_row,env,id_article,class=#GET{class},exclus=,rang_actif=#GET{rang_actif}}/>
    6060        </BOUCLE_liste_art>
    6161        </tbody>
  • _plugins_/interface_traduction_objets/trunk/prive/objets/liste/compacte/inc-articles_row.html

    r114727 r114831  
    1313                #ID_ARTICLE
    1414                })]</td>
    15         [(#ENV{trads}|oui)<td class="trad">]
    16 
     15        <td class="trad">
    1716        <BOUCLE_art_trads(ARTICLES){traduction}{id_mot?}{id_auteur?}{statut IN prepa,publie,prop}{id_article!=#ID_ARTICLE}>
    18         [(#ENV{trads}|oui)
    19                 [(#ENV{voir}|!={#ID_TRAD}|?{
     17                [(#SET{voir,[article_(#ID_TRAD)]})]
     18                [(#ENV{voir}|!={#GET{voir}}|?{
    2019                        <span>[(#ID_ARTICLE|puce_changement_statut{#STATUT,#ID_RUBRIQUE,article})]&nbsp;[(#AUTORISER{modifier,article,#ID_ARTICLE}|?{
    2120                                <a href="[(#ID_ARTICLE|generer_url_entite{article})]" title="#TITRE / <:info_numero_abbreviation:>#ID_ARTICLE">#LANG</a>,
     
    2524                        &nbsp;
    2625                        })]
    27                 ]
    2826        </BOUCLE_art_trads>
    29         [(#ENV{trads}|oui)
    30                         <div>
    31                         [(#ENV{voir}|=={#ID_TRAD}|?{<a class="ajax" href="[(#SELF|parametre_url{voir,''})]" title="<:interface_traduction_objets:fermer:>"><img src="[(#CHEMIN{prive/images/deplierbas.gif})]" alt="replier"/></a>,<a class="ajax" href="[(#SELF|parametre_url{voir,#ID_TRAD})]" title="<:interface_traduction_objets:voir_traductions:>"><img src="[(#CHEMIN{prive/images/deplierhaut.gif})]" alt="deplier"/></a>})]
    32                         </div>
    33         </td>]
     27                <div>
     28                [(#ENV{voir}|=={#GET{voir}}|?{<a class="ajax" href="[(#SELF|parametre_url{voir,''})]" title="<:interface_traduction_objets:fermer:>"><img src="[(#CHEMIN{prive/images/deplierbas.gif})]" alt="replier"/></a>,<a class="ajax" href="[(#SELF|parametre_url{voir,#GET{voir}})]" title="<:interface_traduction_objets:voir_traductions:>"><img src="[(#CHEMIN{prive/images/deplierhaut.gif})]" alt="deplier"/></a>})]
     29                </div>
     30        </td>
    3431        </B_art_trads>
    3532</BOUCLE_art>
    3633</tr>
    37 
    38 [(#ENV{voir}|=={#GET{id_trad}}|oui)
    39         <INCLURE{fond=prive/objets/liste/compacte/inc-articles_trads_detail}{id_trad=#GET{id_trad}}{id_article=#GET{id_article}}{env}/>
     34[(#ENV{voir}|=={#GET{voir}}|oui)
     35        <INCLURE{fond=prive/objets/liste/compacte/inc-articles_trads_row}{id_trad=#GET{id_trad}}{id_article=#GET{id_article}}{env}/>
    4036        ]
    4137
  • _plugins_/interface_traduction_objets/trunk/prive/objets/liste/objets_compacte.html

    r114727 r114831  
    1 [(#REM) Squelettes différent si langues par section]
     1#SET{picto,#ENV{objet}|objet_icone{16}}
     2<B_objets>
     3#ANCRE_PAGINATION
     4<div class="liste-objets [(#ENV{objets})]">
     5<table class='spip liste'>
     6[<caption><strong class="caption">(#ENV*{titre,[(#GRAND_TOTAL|singulier_ou_pluriel{#ENV{objet}|objet_info{info_1_objet},#ENV{objet}|objet_info{info_nb_objets}})]})</strong></caption>]
     7        <thead>
     8                <tr class='first_row'>
     9                        [(#ENV{champs}|table_valeur{statut}|oui)
     10                        <th class='statut'><span title="<:afficher_objets:info_statut|attribut_html:>">#</span>
     11                        ]
     12                        <th class='picto' scope='col'></th>
     13                        <th class='titre principale' scope='col'><:info_titre:></th>
     14                        [(#ENV{champ_auteur}|oui)
     15                        <th class='auteur' scope='col'><:auteur:></th>
     16                        ]
     17                        [(#ENV{champ_date}|oui)
     18                        <th class='date' scope='col'><:date:></th>
     19                        ]
     20                        <th class='id' scope='col'><:info_numero_abbreviation:></th>
     21                        <th class='trad'><:interface_traduction_objets:traductions:></th>
     22                </tr>
     23        </thead>
     24        <tbody>
     25        <BOUCLE_objets(DATA){source tableau,#ENV{donnees}}{pagination #ENV{nb,10}}>
     26                #SET{class, #COMPTEUR_BOUCLE|alterner{row_odd,row_even}}
     27                <INCLURE{fond=prive/objets/liste/inc-objets_compacte_row,id,date,class=#GET{class},picto=#GET{picto},env} />
     28        </BOUCLE_objets>
     29        [(#REM|changer_typo)]
     30        </tbody>
     31</table>
     32[<p class='pagination'>(#PAGINATION{prive})</p>]
     33</div>
     34</B_objets>[
     35<div class="liste-objets [(#ENV{objet}|objet_info{table_objet})] caption-wrap"><strong class="caption">(#ENV*{sinon,''})</strong></div>
     36]<//B_objets>
    237
    3 [(#PLUGIN{secteur_langue}|oui)
    4         [(#ENV{id_rubrique}|oui)
    5                 #SET{type,_sections}
    6         ]
    7 ]
    8 
    9 [(#CHEMIN{prive/objets/liste/compacte/#ENV{objets}|concat{.html}}|?{
    10         [(#INCLURE{fond=prive/objets/liste/compacte/#ENV{objets},type=#GET{type},env,ajax})],
    11         [(#INCLURE{fond=prive/objets/liste/inc-objets_compacte,ajax,env,trads=oui})]
    12 })]
    13 
    14 
Note: See TracChangeset for help on using the changeset viewer.