Changeset 119736 in spip-zone


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

lecteur : refactoring + retrouver un module meme si le dir_module vient de changer a cause d'un changement de repo/methode/branche

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

Legend:

Unmodified
Added
Removed
  • _plugins_/trad-lang/trunk

    • Property subgit:lock:50c7e5872dbe6b17726087e3fc026920cc586593 deleted
    • Property subgit:lock:1ff44b773568a26890c4a894cdf2524636dd5e17 set to 2020-01-13T18:14:51.696
  • _plugins_/trad-lang/trunk/inc/salvatore.php

    r119638 r119736  
    202202}
    203203
     204
    204205/**
    205206 * Verifier si un module de langue est gere par ce salvatore
     
    211212 */
    212213function salvatore_verifier_gestionnaire_traduction($dir_module, $module) {
     214
     215        /**
     216         * On teste ici si le fichier est géré par un autre salvatore
     217         * Si oui on empeche son import en le signifiant
     218         */
     219        if ($t = salvatore_lire_gestionnaire_traduction($dir_module, $module)){
     220                $url = extraire_attribut($t, 'url');
     221                $gestionnaire = extraire_attribut($t, 'gestionnaire');
     222                if ($gestionnaire !== 'salvatore'
     223                  or protocole_implicite($url) !== protocole_implicite($GLOBALS['meta']['adresse_site'])) {
     224                        return "$gestionnaire@$url";
     225                }
     226        }
     227
     228        return '';
     229}
     230
     231/**
     232 * Lire la balise <traduction> du fichier .xml
     233 * @param string $dir_module
     234 * @param string $module
     235 * @return string
     236 */
     237function salvatore_lire_gestionnaire_traduction($dir_module, $module) {
    213238        $xml_file = $dir_module . '/' . $module . '.xml';
    214 
    215239        /**
    216240         * On teste ici si le fichier est géré par un autre salvatore
     
    220244                $xml_content = spip_xml_load($xml_file);
    221245                if (is_array($xml_content)){
    222                         spip_xml_match_nodes('/^traduction/', $xml_content, $matches);
    223                         $nodes = array_keys($matches);
    224                         $test = '<' . reset($nodes) . '>';
    225                         $url = extraire_attribut($test, 'url');
    226                         $gestionnaire = extraire_attribut($test, 'gestionnaire');
    227                         if ($gestionnaire !== 'salvatore'
    228                           or protocole_implicite($url) !== protocole_implicite($GLOBALS['meta']['adresse_site'])) {
    229                                 return "$gestionnaire@$url";
    230                         }
    231                 }
    232         }
    233 
     246                        // normalement on a qu'une balise <traduction...> englobante, donc on prend la premiere qu'on trouve
     247                        if (spip_xml_match_nodes('/^traduction/', $xml_content, $matches)
     248                          and $nodes = array_keys($matches)
     249                          and $node = reset($nodes)) {
     250                                return "<$node>";
     251                        }
     252                }
     253        }
    234254        return '';
    235255}
    236256
     257/**
     258 * Retrouver la ligne de spip_tradlang_modules qui correspond a un dir_module/module, meme en cas de chanchement de repo (url/branches)
     259 * Attention : ca veut dire que si on branche et qu'on veut traduire 2 branches d'un meme module
     260 * il faut supprimer le fichier xml de la nouvelle branche pour qu'elle soit bien ajoutee a trad-lang
     261 * et eviter qu'on pense que c'est un renommage
     262 *
     263 * @param $dir_module
     264 * @param $module
     265 * @return array|bool
     266 */
     267function salvatore_retrouver_tradlang_module($dir_module, $module) {
     268        $base_dir_module = basename($dir_module);
     269        if ($row_module = sql_fetsel('*', 'spip_tradlang_modules', 'dir_module = ' . sql_quote($base_dir_module))) {
     270                return $row_module;
     271        }
     272        // peut-etre c'est un module qui a change d'url repo, et donc son dir_module a change ?
     273        // TODO : ecrire dir_module dans dir=".." de la balise <traduction>
     274        if ($t = salvatore_lire_gestionnaire_traduction($dir_module, $module)
     275          and $old_dir_module = extraire_attribut($t, 'dir')
     276          and $old_dir_module !== $base_dir_module){
     277
     278                if ($row_module = sql_fetsel('*', 'spip_tradlang_modules', 'dir_module = ' . sql_quote($old_dir_module))) {
     279                        return $row_module;
     280                }
     281        }
     282
     283        return false;
     284}
    237285
    238286/**
  • _plugins_/trad-lang/trunk/inc/salvatore_lecteur.php

    r119639 r119736  
    5454        $tradlang_verifier_langue_base = charger_fonction('tradlang_verifier_langue_base', 'inc', true);
    5555        $tradlang_verifier_bilans = charger_fonction('tradlang_verifier_bilans', 'inc', true);
    56 
     56        $invalider = false;
    5757
    5858        foreach ($liste_sources as $source){
     
    8282                $last_update = filemtime($fichier_lang_principal);
    8383
    84                 $row_module = sql_fetsel('id_tradlang_module, lang_mere', 'spip_tradlang_modules', 'dir_module = ' . sql_quote($source['dir_module']));
     84                if ($row_module = salvatore_retrouver_tradlang_module($dir_module, $module)) {
     85                        $id_module = intval($row_module['id_tradlang_module']);
     86                        /**
     87                         * Si la langue mere a changée, on la modifie
     88                         */
     89                        if ($row_module['lang_mere']!==$source['lang']){
     90                                sql_updateq('spip_tradlang_modules', array('lang_mere' => $source['lang']), 'id_tradlang_module = ' . intval($id_module));
     91                                $last_update = time();
     92                        }
     93                        /**
     94                         * Si le dir_module a change, on le met a jour
     95                         */
     96                        if ($row_module['dir_module']!==$source['dir_module']){
     97                                sql_updateq('spip_tradlang_modules', array('dir_module' => $source['dir_module']), 'id_tradlang_module = ' . intval($id_module));
     98                                $last_update = time();
     99                        }
     100                }
     101
    85102                $langues_a_jour = array();
    86103
     
    96113                         */
    97114                        if (!$row_module or !$id_module = intval($row_module['id_tradlang_module'])){
    98                                 // TODO : c'est peut-etre juste un repo qui a change d'adresse ?
    99115                                $insert = [
    100116                                        'module' => $source['module'],
     
    112128                                        salvatore_fail("[Lecteur] Erreur sur $module", "Echec insertion dans spip_tradlang_modules " . json_encode($insert));
    113129                                }
    114                         }
    115                         elseif ($row_module['lang_mere']!==$source['lang']) {
    116                                 /**
    117                                  * Si la langue mere a changée, on la modifie
    118                                  */
    119                                 sql_updateq('spip_tradlang_modules', array('lang_mere' => $source['lang']), 'id_tradlang_module = ' . intval($id_module));
    120130                        }
    121131                }
Note: See TracChangeset for help on using the changeset viewer.