Changeset 77237 in spip-zone for _dev_


Ignore:
Timestamp:
Oct 15, 2013, 2:36:17 PM (6 years ago)
Author:
kent1@…
Message:

Ce script est fonctionnel avec salvatore2, il faudrait que je réorganise l'ensemble

Location:
_dev_/salvatore2
Files:
4 edited
1 moved

Legend:

Unmodified
Added
Removed
  • _dev_/salvatore2/ecriveur.php

    r76026 r77237  
    3636include_spip('base/abstract_sql');
    3737include_spip('inc/filtres');
     38include_spip('inc/texte');
     39include_spip('inc/config');
    3840include_spip('inc/xml');
    3941
     
    4547 */
    4648$url_site = sql_getfetsel('valeur','spip_meta','nom="adresse_site"');
     49
     50if(isset($argv[1]) && strlen($argv[1]) > 1)
     51        $message_commit = $argv[1]."\n\n";
    4752
    4853foreach ($liste_sources as $source) {
     
    7479                $id_tradlang_module = sql_getfetsel('id_tradlang_module','spip_tradlang_modules','module='.sql_quote($source[1]));
    7580                $url_trad = url_absolue(generer_url_entite($id_tradlang_module,'tradlang_module'),$url_site);
    76                 export_trad_module($source,$url_site,$url_trad);
     81                export_trad_module($source,$url_site,$url_trad,$message_commit);
    7782        }
    7883}
     
    8388// Genere les fichiers de traduction d'un module
    8489//
    85 function export_trad_module($source,$url_site,$url_trad) {
     90function export_trad_module($source,$url_site,$url_trad,$message_commit='') {
    8691        global $tmp;
    8792
     
    9095                return false;
    9196
    92         // charger la langue originale, pour la copier si necessaire
    93         $res=spip_query("SELECT id,id_tradlang_module,str,comm,statut FROM spip_tradlangs WHERE module='".$source[1]."' and lang='".$source[2]."' GROUP BY id");
    94         $count_original = 0;
    95         while ($row=spip_mysql_fetch($res)) {
    96                 $row['statut'] = 'NEW';
    97                 $lorigine[$row['id']] = $row;
    98                 $id_tradlang_module = $row['id_tradlang_module'];
    99                 $count_original++;
     97        $module = sql_fetsel('*','spip_tradlang_modules','module='.sql_quote($source[1]));
     98
     99        $seuil_export = 50;
     100        if(is_numeric($module['limite_trad']) && $module['limite_trad'] > 0){
     101                $seuil_export = $module['limite_trad'];
     102        }elseif(function_exists('lire_config')){
     103                $seuil_export = lire_config('tradlang/seuil_export_tradlang',50);
    100104        }
    101        
    102         $res=spip_query("SELECT lang,COUNT(*) as N FROM spip_tradlangs WHERE module='".$source[1]."' AND statut != 'NEW' AND statut != 'attic' GROUP BY lang ORDER BY lang");
    103         $liste_lang=array();
    104         $minimal = $count_original/2;
    105         while ($row=spip_fetch_array($res)) {
    106                 if($row['N'] >= $minimal)
    107                         $liste_lang[]=$row['lang'];
    108                 else
    109                         $liste_lang_non_exportees[]=$row['lang'];
    110         }
    111 
    112         // traiter chaque langue
    113         $infos = array();
    114         foreach($liste_lang as $lang) {
    115                 trad_log(" generation de la langue $lang ");
    116                 $typo = (in_array($lang,array('eo','fr','cpf')) || strncmp($lang, 'fr_', 3)==0) ? 'fr' : 'en';
    117                 $typographie = charger_fonction($typo, 'typographie');
    118                 $tab = "\t";
    119                 // On ne prend que les MODIF, les RELIRE et les OK pour ne pas rendre les sites multilingues en français
    120                 $res=spip_query("SELECT id,str,comm,statut FROM spip_tradlangs WHERE module='".$source[1]."' AND lang='".$lang."' AND statut != 'NEW' AND statut != 'attic' GROUP BY id");
    121                 $x=array();
    122                 $prev="";
    123                 $traduits = $modifs = $relire = 0;
    124                 //$tous = $lorigine; // on part de l'origine comme ca on a tout meme si c'est pas dans la base de donnees (import de salvatore/lecteur.php)
    125                 $tous = array();
    126                 while ($row=spip_mysql_fetch($res)) {
    127                         $tous[$row['id']] = $row;
    128                 }
    129                 ksort($tous);
    130                 foreach ($tous as $row) {
    131                         if ($row['statut'] == 'OK')
    132                                 $traduits ++;
    133                         else if($row['statut'] == 'MODIF')
    134                                 $modifs ++;
    135                         else if($row['statut'] == 'RELIRE')
    136                                 $relire ++;
    137 
    138                         if(strlen($row['comm']) > 1){
    139                                 // On remplace les sauts de lignes des commentaires sinon ça crée des erreurs php
    140                                 $row['comm'] = str_replace(array("\r\n", "\n", "\r"),' ', $row['comm']);
    141                                 // Conversion des commentaires en utf-8
    142                                 $row['comm'] = unicode_to_utf_8(
     105        if(intval($module['id_tradlang_module']) >= 1){
     106                // charger la langue originale, pour la copier si necessaire
     107                $count_original = 0;
     108                $res=sql_allfetsel("id,id_tradlang_module,str,comm,statut","spip_tradlangs","id_tradlang_module='".$module['id_tradlang_module']."' and lang='".$module['lang_mere']."' AND statut='OK'","id");
     109                foreach ($res as $row) {
     110                        $row['statut'] = 'NEW';
     111                        $lorigine[$row['id']] = $row;
     112                        $id_tradlang_module = $row['id_tradlang_module'];
     113                        $count_original++;
     114                }
     115
     116                $res=spip_query("SELECT lang,COUNT(*) as N FROM spip_tradlangs WHERE module='".$source[1]."' AND statut != 'NEW' AND statut != 'attic' GROUP BY lang ORDER BY lang");
     117                $liste_lang = $liste_lang_non_exportees = $liste_lang_supprimer = array();
     118                $minimal = ceil((($count_original*$seuil_export)/100));
     119                trad_log("\n Minimal = $minimal ($seuil_export %)\n");
     120               
     121                while ($row=spip_fetch_array($res)) {
     122                        /**
     123                         * Le fichier est il suffisamment traduit
     124                         */
     125                        if($row['N'] >= $minimal)
     126                                $liste_lang[]=$row['lang'];
     127                        else{
     128                                /**
     129                                 * Le fichier n'est pas suffisamment traduit et n'existe pas, on ne fera donc rien
     130                                 */
     131                                if(!file_exists($tmp.$source[1]."/".$source[1].'_'.$row['lang'].'.php')){
     132                                        $liste_lang_non_exportees[]=$row['lang'];
     133                                }
     134                                /**
     135                                 * Il n'est pas suffisamment traduit, cependant, il existe déjà
     136                                 * On ne va donc pas le supprimer à la barbare, mais on le met à jour quand même
     137                                 */
     138                                else{
     139                                        $liste_lang[]=$row['lang'];
     140                                        $liste_lang_supprimer[]=$row['lang'];
     141                                        $percent = (($row['N']/$count_original)*100);
     142                                        if($percent < ($seuil_export-15))
     143                                                $message_commit .= "La langue '".$row['lang']."' devrait être supprimée car trop peu traduite (".number_format($percent,2)." %)\n";
     144                                }
     145                        }
     146                }
     147       
     148                // traiter chaque langue
     149                $infos = $commiteurs = array();
     150                foreach($liste_lang as $lang) {
     151                        spip_timer('temp');
     152                        //trad_log(" generation de la langue $lang ");
     153                        // Proteger les caracteres typographiques a l'interieur des tags html
     154                        $typo = (in_array($lang,array('eo','fr','cpf')) || strncmp($lang, 'fr_', 3)==0) ? 'fr' : 'en';
     155                        $typographie = charger_fonction($typo, 'typographie');
     156                        $tab = "\t";
     157                       
     158                        $x = $tradlangs = array();
     159                        $prev="";
     160                        $traduits = $modifs = $relire = 0;
     161                        //$tous = $lorigine; // on part de l'origine comme ca on a tout meme si c'est pas dans la base de donnees (import de salvatore/lecteur.php)
     162                        $tous = array();
     163                        //while ($row=spip_mysql_fetch($res)) {
     164                        // On ne prend que les MODIF, les RELIRE et les OK pour ne pas rendre les sites multilingues en français
     165                        $res=sql_allfetsel("id_tradlang,id,str,comm,statut,md5","spip_tradlangs", "module='".$source[1]."' AND lang='".$lang."' AND statut != 'NEW' AND statut != 'attic'","id");
     166                        foreach ($res as $row) {
     167                                $tradlangs[] = $row['id_tradlang'];
     168                                $tous[$row['id']] = $row;
     169                        }
     170                        ksort($tous);
     171                        foreach ($tous as $row) {
     172                                if ($row['statut'] == 'OK')
     173                                        $traduits ++;
     174                                else if($row['statut'] == 'MODIF')
     175                                        $modifs ++;
     176                                else if($row['statut'] == 'RELIRE')
     177                                        $relire ++;
     178       
     179                                if(strlen($row['comm']) > 1){
     180                                        // On remplace les sauts de lignes des commentaires sinon ça crée des erreurs php
     181                                        $row['comm'] = str_replace(array("\r\n", "\n", "\r"),' ', $row['comm']);
     182                                        // Conversion des commentaires en utf-8
     183                                        $row['comm'] = unicode_to_utf_8(
     184                                                html_entity_decode(
     185                                                        preg_replace('/&([lg]t;)/S', '&amp;\1', $row['comm']),
     186                                                        ENT_NOQUOTES, 'utf-8')
     187                                        );
     188                                }
     189                               
     190                                if ($prev!=strtoupper($row['id'][0])) $x[] = "\n$tab// ".strtoupper($row['id'][0]);
     191                                $prev=strtoupper($row['id'][0]);
     192                               
     193                                if (strlen($row['statut']) && ($row['statut'] != 'OK'))
     194                                        $row['comm'] .= ' '.$row['statut'];
     195                                if (trim($row['comm'])) $row['comm']=" # ".trim($row['comm']); // on rajoute les commentaires ?
     196       
     197                                $str = $row['str'];
     198                               
     199                                /**
     200                                 * On enlève les sauts de lignes windows pour des sauts de ligne linux
     201                                 */
     202                                $str = str_replace("\r\n", "\n", $str);
     203                               
     204                                /**
     205                                 * protection dans les balises genre <a href="..." ou <img src="..."
     206                                 * cf inc/filtres
     207                                 */
     208                                if (preg_match_all(_TYPO_BALISE, $str, $regs, PREG_SET_ORDER)) {
     209                                        foreach ($regs as $reg) {
     210                                                $insert = $reg[0];
     211                                                // hack: on transforme les caracteres a proteger en les remplacant
     212                                                // par des caracteres "illegaux". (cf corriger_caracteres())
     213                                                $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
     214                                                $str = str_replace($reg[0], $insert, $str);
     215                                        }
     216                                }
     217                               
     218                                /**
     219                                 * Protéger le contenu des balises <html> <code> <cadre> <frame> <tt> <pre>
     220                                 */
     221                                define('_PROTEGE_BLOCS_HTML', ',<(html|code|cadre|pre|tt)(\s[^>]*)?>(.*)</\1>,UimsS');
     222                                if ((strpos($str,"<")!==false) && preg_match_all(_PROTEGE_BLOCS_HTML, $str, $matches, PREG_SET_ORDER)) {
     223                                        foreach ($matches as $reg) {
     224                                                $insert = $reg[0];
     225                                                // hack: on transforme les caracteres a proteger en les remplacant
     226                                                // par des caracteres "illegaux". (cf corriger_caracteres())
     227                                                $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
     228                                                $str = str_replace($reg[0], $insert, $str);
     229                                        }
     230                                }
     231                               
     232                                /**
     233                                 * On applique la typographie de la langue
     234                                 */
     235                                $str = $typographie($str);
     236                                /**
     237                                 * On remet les caractères normaux sur les caractères illégaux
     238                                 */
     239                                $str = strtr($str, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
     240                               
     241                                $str = unicode_to_utf_8(
    143242                                        html_entity_decode(
    144                                                 preg_replace('/&([lg]t;)/S', '&amp;\1', $row['comm']),
     243                                                preg_replace('/&([lg]t;)/S', '&amp;\1',$str),
    145244                                                ENT_NOQUOTES, 'utf-8')
    146245                                );
    147                         }
    148                        
    149                         //trad_log($row['comm']);
    150                         if ($prev!=strtoupper($row['id'][0])) $x[] = "\n$tab// ".strtoupper($row['id'][0]);
    151                         $prev=strtoupper($row['id'][0]);
    152                        
    153                         if (strlen($row['statut']) && ($row['statut'] != 'OK'))
    154                                 $row['comm'] .= ' '.$row['statut'];
    155                         if (trim($row['comm'])) $row['comm']=" # ".trim($row['comm']); // on rajoute les commentaires ?
    156 
    157                         $str = $row['str'];
    158 
    159                         $oldmd5 = md5($str);
    160                         //$str = unicode_to_utf_8(html_entity_decode($str, ENT_NOQUOTES, 'utf-8'));
    161                         $str = unicode_to_utf_8(
    162                                 html_entity_decode(
    163                                         preg_replace('/&([lg]t;)/S', '&amp;\1', $typographie($str)),
    164                                         ENT_NOQUOTES, 'utf-8')
    165                         );
    166                        
    167                         $newmd5 = md5($str);
    168                         if ($oldmd5 !== $newmd5) spip_query("UPDATE spip_tradlangs SET md5='$newmd5', str="._q($str)."' WHERE md5='$oldmd5' AND module='$source[1]'");
    169 
    170                         $x[]="$tab".var_export($row['id'],1).' => ' .var_export($str,1).','.$row['comm'];
    171                 }
    172                 $orig = ($lang == $source[2]) ? $source[0] : false;
    173 
    174                 trad_log(" - traduction ($traduits/$count_original OK | $relire/$count_original RELIRE | $modifs/$count_original MODIFS), export\n");
    175                 // historiquement les fichiers de lang de spip_loader ne peuvent pas etre securises
    176                 $secure = ($source[1] == 'tradloader')
    177                         ? ''
    178                         : "if (!defined('_ECRIRE_INC_VERSION')) return;\n\n";
    179 
    180                 $fd = fopen($tmp.$source[1]."/".$source[1].'_'.$lang.'.php', 'w');
    181 
    182                 # supprimer la virgule du dernier item
    183                 $x[count($x)-1] = preg_replace('/,([^,]*)$/', '\1', $x[count($x)-1]);
    184 
    185                 $contenu = join("\n",$x);
    186 
    187                 // L'URL du site de traduction
    188                 $url_trad = parametre_url($url_trad,'lang_cible',$lang);
    189                 # ecrire le fichier
    190                 fwrite($fd,
    191                 '<'.'?php
     246                               
     247                                /**
     248                                 * Calcul du nouveau md5
     249                                 */
     250                                $newmd5 = md5($str);
     251                               
     252                                /**
     253                                 * Si le md5 ou la chaine à changé, on la met à jour dans la base
     254                                 */
     255                                if (($row['md5'] != $newmd5) || ($str != $row['str']))
     256                                        $r = sql_updateq("spip_tradlangs",array('md5'=>$newmd5,'str' =>$str),"id_tradlang=".intval($row['id_tradlang']));
     257       
     258                                $x[]="$tab".var_export($row['id'],1).' => ' .var_export($str,1).','.$row['comm'];
     259                        }
     260                        $orig = ($lang == $source[2]) ? $source[0] : false;
     261       
     262                        //trad_log(" - traduction ($traduits/$count_original OK | $relire/$count_original RELIRE | $modifs/$count_original MODIFS), export\n");
     263                        // historiquement les fichiers de lang de spip_loader ne peuvent pas etre securises
     264                        $secure = ($source[1] == 'tradloader')
     265                                ? ''
     266                                : "if (!defined('_ECRIRE_INC_VERSION')) return;\n\n";
     267       
     268                        $fd = fopen($tmp.$source[1]."/".$source[1].'_'.$lang.'.php', 'w');
     269       
     270                        # supprimer la virgule du dernier item
     271                        $x[count($x)-1] = preg_replace('/,([^,]*)$/', '\1', $x[count($x)-1]);
     272       
     273                        $contenu = join("\n",$x);
     274       
     275                        // L'URL du site de traduction
     276                        $url_trad = parametre_url($url_trad,'lang_cible',$lang);
     277                        /**
     278                         * Ecrire le fichier de langue complet
     279                         */
     280                        fwrite($fd,
     281                        '<'.'?php
    192282// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
    193283'
     
    201291."\n".$secure.'$GLOBALS[$GLOBALS[\'idx_lang\']] = array(
    202292'
    203 . str_replace("\r\n", "\n", $contenu)
     293. $contenu
    204294.'
    205295);
     
    207297?'.'>
    208298'
    209                 );
    210                 fclose($fd);
     299                        );
     300                        fclose($fd);
     301                       
     302                        // noter la langue et les traducteurs pour lang/module.xml
     303                        $infos[$lang] = $people_unique = array();
     304                        $infos[$lang]['traducteurs'] = array();
     305                        $infos[$lang]['traduits'] = $traduits;
     306                        $infos[$lang]['modifs'] = $modifs;
     307                        $infos[$lang]['relire'] = $relire;
     308                        if(defined('_ID_AUTEUR_SALVATORE') && intval(_ID_AUTEUR_SALVATORE) > 0)
     309                                $people_unique[] = _ID_AUTEUR_SALVATORE;
     310                        $s = spip_query('SELECT DISTINCT(traducteur) FROM spip_tradlangs WHERE module='._q($source[1])." and lang="._q($lang));
     311                        while ($t = sql_fetch($s)){
     312                                $traducteurs_lang = explode(',',$t['traducteur']);
     313                                foreach($traducteurs_lang as $traducteur){
     314                                        if(!in_array($traducteur,$people_unique)){
     315                                                if(is_numeric($traducteur) AND $id_auteur=intval($traducteur)){
     316                                                        $traducteur_supp['nom'] = extraire_multi(sql_getfetsel('nom','spip_auteurs','id_auteur='.$id_auteur));
     317                                                        $traducteur_supp['lien'] = url_absolue(generer_url_entite($id_auteur,'auteur'),$url_site);
     318                                                }else if(trim(strlen($traducteur)) > 0){
     319                                                        $traducteur_supp['nom'] = trim($traducteur);
     320                                                        $traducteur_supp['lien'] = '';
     321                                                }
     322                                                if(isset($traducteur_supp['nom']))
     323                                                        $infos[$lang]['traducteurs'][strtolower($traducteur_supp['nom'])] = $traducteur_supp;
     324                                                unset($traducteur_supp);
     325                                                $people_unique[] = $traducteur;
     326                                        }
     327                                }
     328                        }
     329                        unset($people_unique);
     330
     331                        if(substr(exec("svn status "._SALVATORE_TMP.$source[1]."/".$source[1]."_$lang.php"),0,1) == '?'){
     332                                if($module['limite_trad'] == 0)
     333                                        passthru("svn add "._SALVATORE_TMP.$source[1]."/".$source[1]."_$lang.php 2> /dev/null") ? trad_log("$log\n") : '';
     334                                else if(!in_array($source[1],array('ecrire','spip','public'))){
     335                                        if((intval(($infos[$lang]['traduits']/$count_original)*100) > $seuil_export))
     336                                                passthru("svn add "._SALVATORE_TMP.$source[1]."/".$source[1]."_$lang.php* 2> /dev/null") ? trad_log("$log\n") : '';
     337                                }
     338                        }
     339                        // fichier modifié
     340                        if(in_array(substr(exec("svn status "._SALVATORE_TMP.$source[1]."/".$source[1]."_$lang.php"),0,1),array('A','M'))){
     341                                $last_change = exec("env LC_MESSAGES=en_US.UTF-8 svn info "._SALVATORE_TMP.$source[1]."/".$source[1]."_$lang.php | awk '/^Last Changed Date/ { print $4 \" \" $5 }'");
     342                                $auteur_versions = sql_allfetsel('id_auteur','spip_versions','objet="tradlang" AND date > '.sql_quote($last_change).' AND '.sql_in('id_objet',$tradlangs).' AND id_auteur != "-1" AND id_auteur !='.intval(_ID_AUTEUR_SALVATORE),"id_auteur");
     343                                trad_log($auteur_versions[0]['id_auteur']);
     344                                if(count($auteur_versions) == 1){
     345                                        $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($auteur_versions[0]['id_auteur']));
     346                                        if($email)
     347                                                $commiteurs[$lang] = $email;
     348                                }
     349
     350                                trad_log("\nLe commiteur sera pour la langue $lang : ".$commiteurs[$lang]." \n");
     351                                //die("Last change = $last_change");
     352                        }
     353                }
     354       
     355                // ecrire lang/module.xml
     356                $xml = "<traduction module=\"$source[1]\" gestionnaire=\"salvatore\" url=\"$url_site\" source=\"$source[0]\" reference=\"$source[2]\">\n";
     357                foreach($infos as $lang => $info) {
     358                        if (count($info['traducteurs'] > 0)) {
     359                                $xml .= "       <langue code=\"$lang\" url=\"".parametre_url($url_trad,'lang_cible',$lang)."\" total=\"$count_original\" traduits=\"".$info['traduits']."\" relire=\"".$info['relire']."\" modifs=\"".$info['modifs']."\" nouveaux=\"".($count_original-($info['modifs']+$info['traduits']+$info['relire']))."\" pourcent=\"".number_format((($info['traduits']/$count_original)*100),2)."\">\n";
     360                                ksort($info['traducteurs']);
     361                                foreach ($info['traducteurs'] as $nom => $people) {
     362                                        $xml .= "               <traducteur nom=\"".entites_html($people['nom'])."\" lien=\"".entites_html($people['lien'])."\" />\n";
     363                                }
     364                                $xml .= "       </langue>\n";
     365                        } else
     366                                $xml .= "       <langue code=\"$lang\" url=\"".parametre_url($url_trad,'lang_cible',$lang)."\" />\n";
     367                }
     368                unset($traducteurs[$source[2]]);
     369                $xml .= "</traduction>\n";
     370       
     371                ecrire_fichier($tmp.$source[1]."/".$source[1].'.xml', $xml);
    211372               
    212                 // noter la langue et les traducteurs pour lang/module.xml
    213                 $infos[$lang] = $people_unique = array();
    214                 $infos[$lang]['traducteurs'] = array();
    215                 $infos[$lang]['traduits'] = $traduits;
    216                 $infos[$lang]['modifs'] = $modifs;
    217                 $infos[$lang]['relire'] = $relire;
    218                 $s = spip_query('SELECT DISTINCT(traducteur) FROM spip_tradlangs WHERE module='._q($source[1])." and lang="._q($lang));
    219                 while ($t = sql_fetch($s)){
    220                         $traducteurs_lang = explode(',',$t['traducteur']);
    221                         foreach($traducteurs_lang as $traducteur){
    222                                 if(!in_array($traducteur,$people_unique)){
    223                                         if(is_numeric($traducteur) AND $id_auteur=intval($traducteur)){
    224                                                 $traducteur_supp['nom'] = extraire_multi(sql_getfetsel('nom','spip_auteurs','id_auteur='.$id_auteur));
    225                                                 $traducteur_supp['lien'] = url_absolue(generer_url_entite($id_auteur,'auteur'),$url_site);
    226                                         }else if(trim(strlen($traducteur)) > 0){
    227                                                 $traducteur_supp['nom'] = trim($traducteur);
    228                                                 $traducteur_supp['lien'] = '';
    229                                         }
    230                                         if(isset($traducteur_supp['nom']))
    231                                                 $infos[$lang]['traducteurs'][strtolower($traducteur_supp['nom'])] = $traducteur_supp;
    232                                         unset($traducteur_supp);
    233                                         $people_unique[] = $traducteur;
    234                                 }
    235                         }
    236                 }
    237                 unset($people_unique);
     373                if(isset($liste_lang_non_exportees) && (count($liste_lang_non_exportees) > 0)){
     374                        $liste_lang_non_exportees_string = implode(', ',$liste_lang_non_exportees);
     375                        trad_log("\nLes langues suivantes ne sont pas exportées car trop peu traduites:\n");
     376                        trad_log("$liste_lang_non_exportees_string\n");
     377                }
     378                if(isset($liste_lang_supprimer) && (count($liste_lang_supprimer) > 0)){
     379                        $liste_lang_supprimer_string = implode(', ',$liste_lang_supprimer);
     380                        trad_log("\nLes langues suivantes devraient être supprimées car trop peu traduites:\n");
     381                        trad_log("$liste_lang_supprimer_string\n");
     382                }
     383                if($module['limite_trad'] == 0){
     384                        foreach($liste_lang as $lang){
     385                                passthru("svn add "._SALVATORE_TMP.$source[1]."/".$source[1]."_$lang.php* 2> /dev/null") ? trad_log("$log\n") : '';
     386                        }
     387                }
     388                else if(!in_array($source[1],array('ecrire','spip','public'))){
     389                        trad_log('Limite trad = '.$seuil_export);
     390                        foreach($liste_lang as $lang){
     391                                if( (intval(($infos[$lang]['traduits']/$count_original)*100) > $seuil_export)
     392                                        && (substr(exec("svn status "._SALVATORE_TMP.$source[1]."/".$source[1]."_$lang.php"),0,1) == '?')){
     393                                        passthru("svn add "._SALVATORE_TMP.$source[1]."/".$source[1]."_$lang.php* 2> /dev/null") ? trad_log("$log\n") : '';
     394                                }
     395                        }
     396                }
     397                trad_log("\n".passthru("svn status "._SALVATORE_TMP.$source[1]."/")."\n");
     398                trad_log(var_export($commiteurs,1));
     399                if(strlen($message_commit) > 1 || count($commiteurs) > 0){
     400                        $fd = fopen($tmp.$source[1]."/message_commit.inc", 'w');
     401                        # ecrire le fichier
     402                        fwrite($fd,
     403                        '<'.'?php
     404$message_commit = "'.$message_commit.'";
     405
     406$commiteurs = '.var_export($commiteurs,1).';
     407
     408?'.'>
     409'
     410                        );
     411                        fclose($fd);
     412                }
     413        }else{
     414                trad_log("\n Ce module n'existe pas\n");
    238415        }
    239 
    240         // ecrire lang/module.xml
    241         $xml = "<traduction module=\"$source[1]\" gestionnaire=\"salvatore\" url=\"$url_site\" source=\"$source[0]\" reference=\"$source[2]\">\n";
    242         foreach($infos as $lang => $info) {
    243                 if (count($info['traducteurs'] > 0)) {
    244                         $xml .= "       <langue code=\"$lang\" url=\"".parametre_url($url_trad,'lang_cible',$lang)."\" total=\"$count_original\" traduits=\"".$info['traduits']."\" relire=\"".$info['relire']."\" modifs=\"".$info['modifs']."\" nouveaux=\"".($count_original-($info['modifs']+$info['traduits']+$info['relire']))."\" pourcent=\"".number_format((($info['traduits']/$count_original)*100),2)."\">\n";
    245                         ksort($info['traducteurs']);
    246                         foreach ($info['traducteurs'] as $nom => $people) {
    247                                 $xml .= "               <traducteur nom=\"".entites_html($people['nom'])."\" lien=\"".entites_html($people['lien'])."\" />\n";
    248                         }
    249                         $xml .= "       </langue>\n";
    250                 } else
    251                         $xml .= "       <langue code=\"$lang\" url=\"".parametre_url($url_trad,'lang_cible',$lang)."\" />\n";
    252         }
    253         unset($traducteurs[$source[2]]);
    254         $xml .= "</traduction>\n";
    255 
    256         ecrire_fichier($tmp.$source[1]."/".$source[1].'.xml', $xml);
    257        
    258         if(isset($liste_lang_non_exportees) && (count($liste_lang_non_exportees) > 0)){
    259                 $liste_lang_non_exportees_string = implode(', ',$liste_lang_non_exportees);
    260                 trad_log("\nLes langues suivantes ne sont pas exportées car trop peu traduites:\n");
    261                 trad_log("$liste_lang_non_exportees_string\n");
    262         }
    263         if(!in_array($source[1],array('spip','ecrire','public'))){
    264                 foreach($liste_lang as $lang){
    265                         passthru("svn add "._SALVATORE_TMP.$source[1]."/".$source[1]."_$lang.php* 2> /dev/null") ? trad_log("$log\n") : '';
    266                 }
    267         }
    268         trad_log("\n".passthru("svn status "._SALVATORE_TMP.$source[1]."/")."\n");
    269416}
    270417
  • _dev_/salvatore2/inc_tradlang.php

    r75344 r77237  
    2929
    3030// modules demandes en ligne de commande
    31 $GLOBALS['modules'] = $_SERVER['argv'];
    32 array_shift($GLOBALS['modules']);
     31//$GLOBALS['modules'] = $_SERVER['argv'];
     32//array_shift($GLOBALS['modules']);
    3333
    3434ini_set('memory_limit', '50M');
  • _dev_/salvatore2/lecteur.php

    r76027 r77237  
    3333include_spip('base/abstract_sql');
    3434include_spip('inc/tradlang_verifier_langue_base');
     35include_spip('inc/tradlang_verifier_bilans');
    3536include_spip('inc/charsets');
    3637include_spip('inc/filtres');
     
    8384                 */
    8485                $last_update = filemtime($fic_lang_principal);
    85                 if ($last_update > strtotime('-1 hour')){
     86                if ($last_update > strtotime('-1 day')){
    8687                        $priorite = '';
    8788                        $modifs = 0;
     
    176177                                foreach($langues_a_ajouter as $fichier){
    177178                                        import_module_spip($source,$fichier['fichier'],$liste_id_orig,0,$id_module);
    178                                         if(($modifs > 0) && function_exists('inc_tradlang_verifier_langue_base_dist')){
     179                                        if(($modifs > 0) && function_exists('inc_tradlang_verifier_langue_base_dist'))
    179180                                                inc_tradlang_verifier_langue_base_dist($source[1],$lang);
    180                                         }
    181181                                }
    182182                        }
    183183                        trad_log("\n");
     184                }
     185                // Mise à jour des bilans
     186                if(function_exists('inc_tradlang_verifier_bilans_dist')){
     187                        trad_log("Création ou MAJ des bilans de ".$source[1]."\n\n");
     188                        inc_tradlang_verifier_bilans_dist($source[1],$source[2]);
    184189                }
    185190        }
     
    264269                if ($nb == 0 OR $orig == 1) {
    265270                        // La liste de ce qui existe deja
    266                         $existant = array();
    267                         while ($t = spip_fetch_array($res))
     271                        $existant = $str_existant = array();
     272                        while ($t = spip_fetch_array($res)){
    268273                                $existant[$t['id']] = $t['md5'];
     274                                $str_existant[$t['id']] = $t['str'];
     275                        }
    269276       
    270277                        $bigwhere = "module='".$source[1]."' and lang='".$lang."'";
     
    278285                                // * chaine neuve
    279286                                if (isset($str_lang[$id])
    280                                 AND !isset($existant[$id]))
    281                                 {
    282                                         if ($orig) {
     287                                        AND !isset($existant[$id])) {
     288                                        if ($orig)
    283289                                                $md5 = md5($str_lang[$id]);
    284                                         } else if (!isset($liste_id_orig[$id])) {
     290                                        else if (!isset($liste_id_orig[$id])) {
    285291                                                trad_log("!-- Chaine $id inconnue dans la langue principale\n");
    286292                                                $ignorees++;
    287                                         } else {
     293                                        }else
    288294                                                $md5 = $liste_id_orig[$id];
    289                                         }
    290295       
    291296                                        if (isset($md5)){
     
    336341                                        }
    337342                                }
    338                                 else
    339343                                // * chaine existante
    340                                 if (isset($str_lang[$id]) AND isset($existant[$id]))
    341                                 {
     344                                else if (isset($str_lang[$id]) AND isset($existant[$id])){
    342345                                        // * identique ? => NOOP
    343346                                        $md5 = md5($str_lang[$id]);
    344                                         if ($md5 == $existant[$id]) {
     347                                        if ($md5 == $existant[$id])
    345348                                                $inchangees++;
    346                                         }
    347349                                        // * modifiee ? => UPDATE
    348350                                        else {
     351                                                trad_log(md5($str_lang[$id])." !- ".md5($str_existant[$id])."\n");
    349352                                                // modifier la chaine
    350353                                                $modifs = array(
     
    354357                                                        'comm' => $comm,
    355358                                                );
    356                                                
    357359                                                $id_tradlang = sql_getfetsel('id_tradlang','spip_tradlangs',"$bigwhere AND id=".sql_quote($id));
    358360                                                $test = tradlang_set($id_tradlang,$modifs);
    359        
    360                                                 // signaler le status MODIF de ses traductions
     361
     362                                                /**
     363                                                 * signaler le statut MODIF de ses traductions OK
     364                                                 * update des str de ses traductions NEW
     365                                                 */
    361366                                                if ($orig && ($orig != 0))
    362367                                                        spip_query("UPDATE spip_tradlangs SET statut='MODIF'
     
    367372                                                                ." AND statut!='NEW'"
    368373                                                        );
     374                                                        spip_query("UPDATE spip_tradlangs SET str=".sql_quote($str_lang[$id])."
     375                                                                WHERE module='".$source[1]
     376                                                                ."' AND id="._q($id)
     377                                                                ." AND md5!="._q($md5)
     378                                                                ." AND lang!="._q($lang)
     379                                                                ." AND statut = 'NEW'"
     380                                                        );
    369381                                                $modifiees++;
    370382                                        }
    371383                                }
    372                                 else
    373384                                // * chaine supprimee
    374                                 if (!isset($str_lang[$id]) AND isset($existant[$id])){
     385                                else if (!isset($str_lang[$id]) AND isset($existant[$id])){
    375386                                        // mettre au grenier
    376387                                        spip_query("UPDATE spip_tradlangs SET statut='attic' WHERE id="._q($id)." AND module="._q($source[1]));
     
    381392                                        $liste_id_orig[$id] = md5($str_lang[$id]);
    382393                        }
    383        
    384394                        trad_log("!-- module ".$source[1].", $lang : $modifiees modifiees, $ajoutees ajoutees, $supprimees supprimees, $ignorees ignorees, $inchangees inchangees\n");
    385395                }
  • _dev_/salvatore2/pousseur.php

    r75723 r77237  
    5555
    5656        $f = _SALVATORE_TMP.$module.'/';
    57 #       trad_log(exec("svn add --quiet $f*php 2>/dev/null")."\n");
     57       
    5858        /**
    5959         * On ajoute les .xml
     
    6666        if (in_array($module , $ignore))
    6767                trad_log("$module ignore'\n");
    68         else
    69                 trad_log(exec("svn commit $f --username $user --password $pass --no-auth-cache --non-interactive -m'langues ($module)'")."\n");
     68        else{
     69                $message = $message_commit = $commiteurs = false;
     70                if(file_exists($f.'message_commit.inc')){
     71                        $message = true;
     72                        require_once(dirname(__FILE__).'/'.str_replace('./','',$f).'message_commit.inc');
     73                        $message_commit .= "\n\nlangues ($module)";
     74                }
     75                if(!$message_commit)
     76                        $message_commit = "langues ($module)";
     77               
     78                if(is_array($commiteurs)){
     79                        //trad_log("$message_commit\n");
     80                        if(count($commiteurs) > 0){
     81                                foreach($commiteurs as $lang => $email){
     82                                        if($email){
     83                                                $message_commit_unique = "[Salvatore] export depuis http://trad.spip.net\n\n";
     84                                                $message_commit_unique .= "Langue $lang ($module)";
     85                                                /**
     86                                                 * Si plusieurs commiteurs ou si le fichier original est modifié, on ne commit que fichier par fichier
     87                                                 */
     88                                                if(count($commiteurs) > 1 || in_array(substr(exec("svn status "._SALVATORE_TMP.$source[1]."/".$source[1]."_".$source[2].".php"),0,1),array('A','M')))
     89                                                        $path = $f.$module.'_'.$lang.'.php';
     90                                                /**
     91                                                 * Sinon on ne s'embarasse pas, on balance tout avec cet utilisateur
     92                                                 */
     93                                                else
     94                                                        $path = $f;
     95                                                trad_log("On devrait commiter $path avec comme message '$message_commit_unique' avec l'email $email\n");
     96                                                //trad_log(exec("svn commit $path --username $user --password $pass --no-auth-cache --non-interactive -m ".escapeshellarg($message_commit_unique))."\n");
     97                                                $revision = exec("env LC_MESSAGES=en_US.UTF-8 svn info $path |awk '/^Revision/ { print $2 }'");
     98                                                //trad_log(exec("svn propset --revprop -r $revision svn:author '$email' $path --username $user --password $pass --no-auth-cache --non-interactive")."\n");
     99                                                trad_log("svn propset --revprop -r $revision svn:author '$email' $path --username $user --password $pass --no-auth-cache --non-interactive\n");
     100                                        }
     101                                }
     102                        }
     103                }
     104               
     105                /**
     106                 * Si on a encore un fichier ajouté ou modifié
     107                 * On commite le tout avec salvatore
     108                 */
     109                if(strlen(trim(exec("svn status $f |awk /^[MA]/"))) > 1){
     110                        trad_log(strlen(trim(exec("svn status $f |awk /^[MA]/"))));
     111                        trad_log("On commit $f car il reste des fichiers\n");
     112                        //trad_log(exec("svn commit $f --username $user --password $pass --no-auth-cache --non-interactive -m ".escapeshellarg($message_commit))."\n");
     113                }
     114               
     115                //if(file_exists($f.'message_commit.inc'))
     116                //      unlink($f.'message_commit.inc');
     117        }
    70118}
    71119
Note: See TracChangeset for help on using the changeset viewer.