Changeset 119737 in spip-zone


Ignore:
Timestamp:
Jan 13, 2020, 5:03:09 PM (2 weeks ago)
Author:
Cerdic
Message:

Refactoring : utiliser de preference id_tradlang_module en entree mais supporter aussi module pour compat avec tous les appels

Location:
_plugins_/trad-lang/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/trad-lang/trunk

    • Property subgit:lock:1ff44b773568a26890c4a894cdf2524636dd5e17 deleted
    • Property subgit:lock:661b62ad6afcd080c36541dcc19a9e5b51a6532e set to 2020-01-13T18:14:52.759
  • _plugins_/trad-lang/trunk/inc/tradlang_verifier_langue_base.php

    r97009 r119737  
    1414 * Fonction de vérification de la concordance d'une langue x par rapport à la langue mère
    1515 *
    16  * @param string $module
    17  *              Le nom du module
     16 * @param int $id_tradlang_module
     17 *              id du module concerne
     18 *    ou module (deprecated)
    1819 * @param string $langue
    1920 *              La langue à comparer
     21 * @return array
    2022 */
    21 function inc_tradlang_verifier_langue_base_dist($module, $langue) {
     23function inc_tradlang_verifier_langue_base_dist($id_tradlang_module, $langue) {
     24
     25        // compat anciens appels avec module
     26        if (!is_numeric($id_tradlang_module)) {
     27                $module = $id_tradlang_module;
     28                $ids = sql_allfetsel('id_tradlang_module', 'spip_tradlang_modules', 'module='.sql_quote($module));
     29                $ids = array_column($ids, 'id_tradlang_module');
     30                $res = [];
     31                foreach ($ids as $id) {
     32                        $res[] = inc_tradlang_verifier_langue_base_dist($id, $langue);
     33                }
     34                $inserees = array_sum(array_column($res, 0));
     35                $supprimees = array_sum(array_column($res, 1));
     36                $recuperees = array_sum(array_column($res, 2));
     37
     38                return array($inserees,$supprimees,$recuperees);
     39        }
     40
     41        if (!$row_module = sql_fetsel('*', 'spip_tradlang_modules', 'id_tradlang_module=' . intval($id_tradlang_module))) {
     42                return array(0,0,0);
     43        }
     44        $where_module = 'id_tradlang_module=' . intval($id_tradlang_module);
     45        $module = $row_module['module']; // pour les logs
     46
    2247        /**
    2348         * Quelle est la langue mère
    2449         */
    25         $langue_mere = sql_getfetsel('lang_mere', 'spip_tradlang_modules', 'module = ' . sql_quote($module));
    26 
     50        $langue_mere = $row_module['lang_mere'];
    2751        $trad_langue_mere_id = $trad_langue_cible_id = $trad_langue_cible_id_attic = array();
    2852
     
    3458         * (dans le cas où l'on doit en récupérer)
    3559         */
    36         $trad_langue_meres = sql_allfetsel('id', 'spip_tradlangs', 'module = ' . sql_quote($module) . ' AND lang = ' . sql_quote($langue_mere) . ' AND statut !="attic"', '', 'id');
    37         foreach ($trad_langue_meres as $trad_langue_mere) {
    38                 $trad_langue_mere_id[] = $trad_langue_mere['id'];
    39         }
    40         $trad_langue_cibles  = sql_allfetsel('id', 'spip_tradlangs', 'module = ' . sql_quote($module) . ' AND lang = ' . sql_quote($langue).' AND statut !="attic"', '', 'id');
    41         foreach ($trad_langue_cibles as $trad_langue_cible) {
    42                 $trad_langue_cible_id[] = $trad_langue_cible['id'];
    43         }
     60        $trad_langue_mere_id = sql_allfetsel('id', 'spip_tradlangs', "$where_module AND lang=" . sql_quote($langue_mere) . " AND statut!='attic'", '', 'id');
     61        $trad_langue_mere_id = array_column($trad_langue_mere_id, 'id');
    4462
    45         $trad_langue_cibles_attic  = sql_allfetsel('id', 'spip_tradlangs', 'module=' . sql_quote($module) . ' AND lang = ' . sql_quote($langue) . ' AND statut ="attic"', '', 'id');
    46         foreach ($trad_langue_cibles_attic as $trad_langue_cible_attic) {
    47                 $trad_langue_cible_id_attic[] = $trad_langue_cible_attic['id'];
    48         }
     63        $trad_langue_cible_id  = sql_allfetsel('id', 'spip_tradlangs', "$where_module AND lang=" . sql_quote($langue) . " AND statut!='attic'", '', 'id');
     64        $trad_langue_cible_id = array_column($trad_langue_cible_id, 'id');
     65
     66        $trad_langue_cible_id_attic  = sql_allfetsel('id', 'spip_tradlangs', "$where_module AND lang=" . sql_quote($langue) . " AND statut='attic'", '', 'id');
     67        $trad_langue_cible_id_attic = array_column($trad_langue_cible_id_attic, 'id');
    4968
    5069        $inserees = $supprimees = $recuperees = 0;
     
    5877        $diff1 = array_diff($trad_langue_mere_id, $trad_langue_cible_id);
    5978        if (count($diff1) > 0) {
    60                 $diff1_array = sql_allfetsel('*', 'spip_tradlangs', 'module = ' . sql_quote($module) . ' AND lang = ' . sql_quote($langue_mere) . ' AND ' . sql_in('id', $diff1));
     79                $diff1_array = sql_allfetsel('*', 'spip_tradlangs', "$where_module AND lang=" . sql_quote($langue_mere) . ' AND ' . sql_in('id', $diff1));
     80                foreach ($diff1_array as $diff) {
     81                        /**
     82                         * La chaine était préalablement supprimée
     83                         * Elle a le statut "attic"
     84                         * On la récupère donc en lui donnant le statut "MODIF"
     85                         */
     86                        if (in_array($diff['id'], $trad_langue_cible_id_attic)) {
     87                                $titre = $diff['id'].' : '.$diff['module'].' - '.$langue;
     88                                sql_updateq('spip_tradlangs', array('statut' => 'MODIF', 'titre' => $titre), "$where_module AND id=" . sql_quote($diff['id']) . ' AND lang=' . sql_quote($langue) . " AND statut='attic'");
     89                                $recuperees++;
     90                        } else {
     91                                $diff['orig'] = 0;
     92                                $diff['lang'] = $langue;
     93                                $diff['titre'] = $diff['id'].' : '.$diff['module'].' - '.$langue;
     94                                $diff['statut'] = 'NEW';
     95                                unset($diff['maj']);
     96                                unset($diff['id_tradlang']);
     97                                unset($diff['traducteur']);
     98                                $id_tradlang = sql_insertq('spip_tradlangs', $diff);
     99                                $inserees++;
     100                        }
     101                }
    61102        }
    62103
     
    66107         */
    67108        $diff2 = array_diff($trad_langue_cible_id, $trad_langue_mere_id);
    68 
    69         /**
    70          * Si on a des éléments dans les diffs, on applique les modifications
    71          */
    72         if ((count($diff1) > 0) or (count($diff2) > 0)) {
    73                 if (isset($diff1_array) and is_array($diff1_array)) {
    74                         foreach ($diff1_array as $key => $array) {
    75                                 /**
    76                                  * La chaine était préalablement supprimée
    77                                  * Elle a le statut "attic"
    78                                  * On la récupère donc en lui donnant le statut "MODIF"
    79                                  */
    80                                 if (in_array($array['id'], $trad_langue_cible_id_attic)) {
    81                                         $titre = $array['id'].' : '.$array['module'].' - '.$langue;
    82                                         sql_updateq('spip_tradlangs', array('statut' => 'MODIF', 'titre' => $titre), 'id = ' . sql_quote($array['id']).' AND lang='.sql_quote($langue).' AND statut="attic"');
    83                                         $recuperees++;
    84                                 } else {
    85                                         $array['orig'] = 0;
    86                                         $array['lang'] = $langue;
    87                                         $array['titre'] = $array['id'].' : '.$array['module'].' - '.$langue;
    88                                         $array['statut'] = 'NEW';
    89                                         unset($array['maj']);
    90                                         unset($array['id_tradlang']);
    91                                         unset($array['traducteur']);
    92                                         $id_tradlang = sql_insertq('spip_tradlangs', $array);
    93                                         $inserees++;
    94                                 }
    95                         }
     109        if (count($diff2) > 0) {
     110                foreach ($diff2 as $id) {
     111                        sql_updateq('spip_tradlangs', array('statut' => 'attic'), "$where_module AND id=" . sql_quote($id) . ' AND lang=' . sql_quote($langue));
     112                        $supprimees++;
    96113                }
    97                 /**
    98                  * On donne le statut attic aux chaînes en trop
    99                  * On incrémente le nombre de chaînes supprimées
    100                  */
    101                 if (count($diff2) > 0) {
    102                         foreach ($diff2 as $key => $id) {
    103                                 sql_updateq('spip_tradlangs', array('statut' => 'attic'), 'id = ' . sql_quote($id).' AND lang = ' . sql_quote($langue).' AND module = '.sql_quote($module));
    104                                 $supprimees++;
    105                         }
    106                 }
    107         } else {
    108                 return array('0','0','0');
    109114        }
    110115
    111         include_spip('inc/invalideur');
    112         suivre_invalideur('1');
    113         spip_log("insert => $inserees - suppressions => $supprimees - recuperations => $recuperees", 'bilan.'._LOG_ERREUR);
    114         return array($inserees,$supprimees,$recuperees);
     116        if ($inserees + $supprimees + $recuperees > 0) {
     117                include_spip('inc/invalideur');
     118                suivre_invalideur('1');
     119                spip_log("$module: insert => $inserees - suppressions => $supprimees - recuperations => $recuperees", 'bilan.'._LOG_ERREUR);
     120                return array($inserees,$supprimees,$recuperees);
     121        }
     122
     123        return array(0,0,0);
    115124}
Note: See TracChangeset for help on using the changeset viewer.