Changeset 85799 in spip-zone for _dev_


Ignore:
Timestamp:
Nov 2, 2014, 11:49:44 AM (5 years ago)
Author:
kent1@…
Message:

En cas de duplication de chaîne, récupérer l'ensemble des traductions déjà réalisées

En relation avec ce ticket : http://core.spip.org/issues/2318

Notamment le message de cerdic ici : http://core.spip.org/issues/2318#note-3

Il se pourrait même que cela fonctionne en renommant une chaîne puisque la chaîne disparue n'est pas supprimée mais dispose du statut ATTIC, donc on peut la récupérer

utilisation de quelques sql_allfetsel + foreach au lieu de sql_select + while + sql_fetch (Performances)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _dev_/salvatore2/lecteur.php

    r85262 r85799  
    133133                                 */
    134134                                if(($modifs > 0) && function_exists('inc_tradlang_verifier_langue_base_dist')){
    135                                         $langues_pas_a_jour = sql_select('lang','spip_tradlangs','id_tradlang_module='.intval($id_module).' AND '.sql_in('lang',$langues_a_jour,'NOT'),'lang');
    136                                         while($langue_a_jour = sql_fetch($langues_pas_a_jour)){
     135                                        $langues_pas_a_jour = sql_allfetsel('lang','spip_tradlangs','id_tradlang_module='.intval($id_module).' AND '.sql_in('lang',$langues_a_jour,'NOT'),'lang');
     136                                        foreach($langues_pas_a_jour as $langue_a_jour){
    137137                                                inc_tradlang_verifier_langue_base_dist($source[1],$langue_a_jour['lang']);
    138138                                                trad_log("|-- Synchro de la langue non exportée en fichier ".$langue_a_jour['lang']." pour le module ".$source[1]."\n");
     
    157157                         */
    158158                        $langues = $langues_a_ajouter = array();
    159                         $langues_en_base = sql_select('lang','spip_tradlangs','module='.sql_quote($source[1]),'lang');
    160                         while($langue = sql_fetch($langues_en_base)){
     159                        $langues_en_base = sql_allfetsel('lang','spip_tradlangs','module='.sql_quote($source[1]),'lang');
     160                        foreach($langues_en_base as $langue){
    161161                                $langues[] = $langue['lang'];
    162162                        }
     
    374374                                                $data = array('id_tradlang_module' => $id_module,'titre' => $titre,'module' =>$source[1],'lang' =>$lang,'id'=>$id,'str'=>$str_lang[$id],'comm' => $comm,'md5'=>$md5,'statut'=>$status[$id]);
    375375                                                $id_tradlang = sql_insertq('spip_tradlangs',$data);
     376                                               
     377                                                /**
     378                                                 * L'identifiant de la chaîne de langue a peut être déjà été utilisé puis mis au grenier
     379                                                 * On le récupère donc
     380                                                 */
    376381                                                if(!$id_tradlang){
    377382                                                        $tradlang = sql_fetsel('*','spip_tradlangs','id='.sql_quote($id).' AND module='.sql_quote($source[1]). 'AND lang='.sql_quote($lang).' AND statut='.sql_quote('attic'));
    378383                                                        if(is_array($tradlang)){
     384                                                                $id_tradlang = intval($tradlang['id_tradlang']);
    379385                                                                trad_log("\n Changement d'une chaine dans ATTIC \n");
    380                                                                 sql_updateq('spip_tradlangs',$data,'id_tradlang='.intval($tradlang['id_tradlang']));
     386                                                                sql_updateq('spip_tradlangs',$data,'id_tradlang='.intval($id_tradlang));
    381387                                                                $trads = sql_allfetsel('id_tradlang','spip_tradlangs','id='.sql_quote($id).' AND module='.sql_quote($source[1]). 'AND lang !='.sql_quote($lang).' AND statut='.sql_quote('attic'));
    382388                                                                $maj = array('statut' => 'MODIF');
     
    385391                                                                        sql_updateq('spip_tradlangs',$maj,'id_tradlang='.intval($trad['id_tradlang']));
    386392                                                                }
     393                                                        }
     394                                                }
     395                                               
     396                                                /**
     397                                                 * Vérifier si une autre chaîne de langue était identique (str == str)
     398                                                 *
     399                                                 * Si oui, on sélectionne toutes les occurences existantes dans les autres langues et on les duplique
     400                                                 */
     401                                                $identique_module = sql_getfetsel('id','spip_tradlangs',"module =".sql_quote($source[1]). 'AND lang='.sql_quote($lang).' AND str='.sql_quote($str_lang[$id]));
     402                                                if($identique_module){
     403                                                        trad_log("La nouvelle chaine est une chaine dupliquée : ".$identique_module."\n");
     404                                                        $chaines_a_dupliquer = sql_allfetsel('*','spip_tradlangs','id='.sql_quote($identique_module).' AND lang != '.sql_quote($lang));
     405                                                        foreach($chaines_a_dupliquer as $chaine){
     406                                                                unset($chaine['id_tradlang']);
     407                                                                unset($chaine['maj']);
     408                                                                $chaine['id'] = $id;
     409                                                                $chaine['titre'] = $id.' : '.$source[1].' - '.$chaine['lang'];
     410                                                                $chaine['md5'] = md5($chaine['str']);
     411                                                                $chaine['date_modif'] = date('Y-m-d H:i:s');
     412                                                                if($chaine['statut'] == 'ATTIC')
     413                                                                        $chaine['statut'] = 'NEW';
     414                                                                $nouvelle_chaine = sql_insertq('spip_tradlangs',$chaine);
     415                                                                trad_log("Ajout de la version ".$chaine['lang']." - ".$nouvelle_chaine."\n");
    387416                                                        }
    388417                                                }
Note: See TracChangeset for help on using the changeset viewer.