Skip to content
Extraits de code Groupes Projets
Valider 31958fee rédigé par cerdic's avatar cerdic
Parcourir les fichiers

refactoring ecriveur, wip

parent 95b8b992
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -60,352 +60,365 @@ function salvatore_ecrire($liste_sources, $dir_modules = null, $message_commit='
$dir_module = $dir_modules . $source['dir_module'];
if ($autre_gestionnaire = salvatore_verifier_gestionnaire_traduction($dir_module, $module)){
salvatore_fail("[Lecteur] Erreur sur $module", "Erreur : import impossible, le fichier est traduit autre part : $autre_gestionnaire\n");
salvatore_fail("[Ecriveur] Erreur sur $module", "Erreur : export impossible, le fichier est traduit autre part : $autre_gestionnaire\n");
}
$id_tradlang_module = sql_getfetsel('id_tradlang_module', 'spip_tradlang_modules', 'module = ' . sql_quote($source[1]));
// url de l'interface de traduction d'un module
$url_trad = url_absolue(generer_url_entite($id_tradlang_module, 'tradlang_module'), $url_gestionnaire);
export_trad_module($source, $url_gestionnaire, $url_trad, $message_commit);
$id_tradlang_module = sql_getfetsel('id_tradlang_module', 'spip_tradlang_modules', 'dir_module = ' . sql_quote($source['dir_module']));
if (!$id_tradlang_module) {
salvatore_fail("[Ecriveur] Erreur sur $module", "Erreur : export impossible, le module n'est pas en base\n");
}
else {
// url de l'interface de traduction d'un module
$url_trad_module = url_absolue(generer_url_entite($id_tradlang_module, 'tradlang_module'), $url_gestionnaire);
salvatore_exporter_module($id_tradlang_module, $source, $url_gestionnaire, $url_trad_module, $message_commit);
}
}
}
//
// Genere les fichiers de traduction d'un module
// TODO
//
function export_trad_module($source, $url_site, $url_trad, $message_commit = ''){
global $tmp;
/**
* Genere les fichiers de traduction d'un module
*
* @param int $id_tradlang_module
* @param array $source
* @param string $url_site
* @param string $url_trad_module
* @param string $dir_modules
* @param string $message_commit
*/
function salvatore_exporter_module($id_tradlang_module, $source, $url_site, $url_trad_module, $dir_modules, $message_commit = ''){
// sanity check
if (!is_dir($tmp . $source[1] . '/')){
$url_repo = $source['url'];
$row_module = sql_fetsel('*', 'spip_tradlang_modules', 'id_tradlang_module=' . intval($id_tradlang_module));
if (!$row_module) {
$module = $source['module'];
salvatore_log("<error>Le module #$id_tradlang_module $module n'existe pas</error>");
return false;
}
$lang_ref = $row_module['lang_mere'];
$dir_module = $dir_modules . $row_module['dir_module'];
$module = $row_module['module'];
$module = sql_fetsel('id_tradlang_module,limite_trad,lang_mere', 'spip_tradlang_modules', 'module = ' . sql_quote($source[1]));
$seuil_export = 50;
if (is_numeric($module['limite_trad']) and $module['limite_trad']>0){
$seuil_export = $module['limite_trad'];
} elseif (function_exists('lire_config')) {
$seuil_export = lire_config('tradlang/seuil_export_tradlang', 50);
if (is_numeric($row_module['limite_trad']) and $row_module['limite_trad']>0){
$seuil_export = $row_module['limite_trad'];
}
else {
$seuil_export = lire_config('tradlang/seuil_export_tradlang', _SALVATORE_SEUIL_EXPORT);
}
if (intval($module['id_tradlang_module'])>=1){
// charger la langue originale, pour la copier si necessaire
$count_original = 0;
$res = sql_allfetsel('id, id_tradlang_module,str,comm,statut', 'spip_tradlangs', 'id_tradlang_module = ' . intval($module['id_tradlang_module']) . ' AND lang = ' . sql_quote($module['lang_mere']) . ' AND statut="OK"', 'id');
foreach ($res as $row){
$row['statut'] = 'NEW';
$lorigine[$row['id']] = $row;
$id_tradlang_module = $row['id_tradlang_module'];
$count_original++;
}
$liste_lang = $liste_lang_non_exportees = $liste_lang_supprimer = array();
$minimal = ceil((($count_original*$seuil_export)/100));
salvatore_log("\nMinimal = $minimal ($seuil_export %)\n");
// charger la langue originale, pour la copier si necessaire
// TODO : simplifier ? aucune reference a $trad_reference
$trad_reference = [];
$count_trad_reference = 0;
$rows = sql_allfetsel('id, id_tradlang_module,str,comm,statut', 'spip_tradlangs', 'id_tradlang_module=' . intval($id_tradlang_module) . ' AND lang=' . sql_quote($row_module['lang_mere']) . " AND statut='OK'", 'id');
foreach ($rows as $row){
$row['statut'] = 'NEW';
$trad_reference[$row['id']] = $row;
$count_trad_reference++;
}
$res = sql_allfetsel('lang,COUNT(*) as N', 'spip_tradlangs', 'module = ' . sql_quote($source[1]) . ' AND statut != "NEW" AND statut != "attic"', 'lang', 'lang');
foreach ($res as $row){
$liste_lang = $liste_lang_non_exportees = $liste_lang_a_supprimer = array();
$minimal = ceil((($count_trad_reference*$seuil_export)/100));
salvatore_log("Minimal = $minimal ($seuil_export %)");
$langues = sql_allfetsel('lang,COUNT(*) as count', 'spip_tradlangs', 'id_tradlang_module=' . intval($id_tradlang_module) . " AND statut != 'NEW' AND statut != 'attic'", 'lang', 'lang');
foreach ($langues as $langue){
/**
* Le fichier est il suffisamment traduit
*/
if ($langue['count']>=$minimal){
$liste_lang[] = $langue['lang'];
}
else {
/**
* Le fichier est il suffisamment traduit
* Le fichier n'est pas suffisamment traduit et n'existe pas, on ne fera donc rien
*/
if ($row['N']>=$minimal){
$liste_lang[] = $row['lang'];
if (!file_exists($dir_module . '/' . $module . '_' . $row['lang'] . '.php')){
$liste_lang_non_exportees[] = $row['lang'];
} else {
/**
* Le fichier n'est pas suffisamment traduit et n'existe pas, on ne fera donc rien
* Il n'est pas suffisamment traduit, cependant, il existe déjà
* On ne va donc pas le supprimer à la barbare, mais on le met à jour quand même
*/
if (!file_exists($tmp . $source[1] . '/' . $source[1] . '_' . $row['lang'] . '.php')){
$liste_lang_non_exportees[] = $row['lang'];
} else {
/**
* Il n'est pas suffisamment traduit, cependant, il existe déjà
* On ne va donc pas le supprimer à la barbare, mais on le met à jour quand même
*/
$liste_lang[] = $row['lang'];
$liste_lang_supprimer[] = $row['lang'];
$percent = (($row['N']/$count_original)*100);
if ($percent<($seuil_export-15)){
$message_commit .= "La langue '" . $row['lang'] . "' devrait être supprimée car trop peu traduite (" . number_format($percent, 2) . " %)\n";
}
$liste_lang[] = $langue['lang'];
$liste_lang_a_supprimer[] = $langue['lang'];
$percent = (($row['N']/$count_trad_reference)*100);
if ($percent<($seuil_export-15)){
$message_commit .= "La langue '" . $langue['lang'] . "' devrait être supprimée car trop peu traduite (" . number_format($percent, 2) . " %)\n";
}
}
}
}
// traiter chaque langue
$infos = $commiteurs = array();
foreach ($liste_lang as $lang){
salvatore_log("Generation de la langue $lang ");
// Proteger les caracteres typographiques a l'interieur des tags html
$typo = (in_array($lang, array('eo', 'fr', 'cpf')) || strncmp($lang, 'fr_', 3)==0) ? 'fr' : 'en';
$typographie = charger_fonction($typo, 'typographie');
$tab = "\t";
$x = $tous = $tradlangs = array();
$prev = '';
$traduits = $modifs = $relire = 0;
// On ne prend que les MODIF, les RELIRE et les OK pour ne pas rendre les sites multilingues en français
$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');
foreach ($res as $row){
$tradlangs[] = $row['id_tradlang'];
$tous[$row['id']] = $row;
// traiter chaque langue
$infos = $commiteurs = array();
foreach ($liste_lang as $lang){
salvatore_log("Generation de la langue $lang ");
// Proteger les caracteres typographiques a l'interieur des tags html
$typo = (in_array($lang, array('eo', 'fr', 'cpf')) || strncmp($lang, 'fr_', 3)==0) ? 'fr' : 'en';
$typographie = charger_fonction($typo, 'typographie');
$tab = "\t";
$x = $tous = $tradlangs = array();
$prev = '';
$traduits = $modifs = $relire = 0;
// On ne prend que les MODIF, les RELIRE et les OK pour ne pas rendre les sites multilingues en français
$res = sql_allfetsel('id_tradlang,id,str,comm,statut,md5', 'spip_tradlangs', 'module = "' . $module . '" AND lang = "' . $lang . '" AND statut != "NEW" AND statut != "attic"', 'id');
foreach ($res as $row){
$tradlangs[] = $row['id_tradlang'];
$tous[$row['id']] = $row;
}
ksort($tous);
foreach ($tous as $row){
if ($row['statut']=='OK'){
$traduits++;
} elseif ($row['statut']=='MODIF') {
$modifs++;
} elseif ($row['statut']=='RELIRE') {
$relire++;
}
ksort($tous);
foreach ($tous as $row){
if ($row['statut']=='OK'){
$traduits++;
} elseif ($row['statut']=='MODIF') {
$modifs++;
} elseif ($row['statut']=='RELIRE') {
$relire++;
}
if (strlen($row['comm'])>1){
// On remplace les sauts de lignes des commentaires sinon ça crée des erreurs php
$row['comm'] = str_replace(array("\r\n", "\n", "\r"), ' ', $row['comm']);
// Conversion des commentaires en utf-8
$row['comm'] = unicode_to_utf_8(html_entity_decode(preg_replace('/&([lg]t;)/S', '&amp;\1', $row['comm']), ENT_NOQUOTES, 'utf-8'));
}
if (strlen($row['comm'])>1){
// On remplace les sauts de lignes des commentaires sinon ça crée des erreurs php
$row['comm'] = str_replace(array("\r\n", "\n", "\r"), ' ', $row['comm']);
// Conversion des commentaires en utf-8
$row['comm'] = unicode_to_utf_8(html_entity_decode(preg_replace('/&([lg]t;)/S', '&amp;\1', $row['comm']), ENT_NOQUOTES, 'utf-8'));
}
if ($prev!=strtoupper($row['id'][0])){
$x[] = "\n$tab// " . strtoupper($row['id'][0]);
}
$prev = strtoupper($row['id'][0]);
if ($prev!=strtoupper($row['id'][0])){
$x[] = "\n$tab// " . strtoupper($row['id'][0]);
}
$prev = strtoupper($row['id'][0]);
if (strlen($row['statut']) and ($row['statut']!='OK')){
$row['comm'] .= ' ' . $row['statut'];
}
if (trim($row['comm'])){
$row['comm'] = ' # ' . trim($row['comm']); // on rajoute les commentaires ?
}
if (strlen($row['statut']) and ($row['statut']!='OK')){
$row['comm'] .= ' ' . $row['statut'];
}
if (trim($row['comm'])){
$row['comm'] = ' # ' . trim($row['comm']); // on rajoute les commentaires ?
}
$str = $row['str'];
$str = $row['str'];
/**
* On enlève les sauts de lignes windows pour des sauts de ligne linux
*/
$str = str_replace("\r\n", "\n", $str);
/**
* On enlève les sauts de lignes windows pour des sauts de ligne linux
*/
$str = str_replace("\r\n", "\n", $str);
/**
* protection dans les balises genre <a href="..." ou <img src="..."
* cf inc/filtres
*/
if (preg_match_all(_TYPO_BALISE, $str, $regs, PREG_SET_ORDER)){
foreach ($regs as $reg){
$insert = $reg[0];
// hack: on transforme les caracteres a proteger en les remplacant
// par des caracteres "illegaux". (cf corriger_caracteres())
$insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
$str = str_replace($reg[0], $insert, $str);
}
/**
* protection dans les balises genre <a href="..." ou <img src="..."
* cf inc/filtres
*/
if (preg_match_all(_TYPO_BALISE, $str, $regs, PREG_SET_ORDER)){
foreach ($regs as $reg){
$insert = $reg[0];
// hack: on transforme les caracteres a proteger en les remplacant
// par des caracteres "illegaux". (cf corriger_caracteres())
$insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
$str = str_replace($reg[0], $insert, $str);
}
}
/**
* Protéger le contenu des balises <html> <code> <cadre> <frame> <tt> <pre>
*/
define('_PROTEGE_BLOCS_HTML', ',<(html|code|cadre|pre|tt)(\s[^>]*)?>(.*)</\1>,UimsS');
if ((strpos($str, '<')!==false) and preg_match_all(_PROTEGE_BLOCS_HTML, $str, $matches, PREG_SET_ORDER)){
foreach ($matches as $reg){
$insert = $reg[0];
// hack: on transforme les caracteres a proteger en les remplacant
// par des caracteres "illegaux". (cf corriger_caracteres())
$insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
$str = str_replace($reg[0], $insert, $str);
}
/**
* Protéger le contenu des balises <html> <code> <cadre> <frame> <tt> <pre>
*/
define('_PROTEGE_BLOCS_HTML', ',<(html|code|cadre|pre|tt)(\s[^>]*)?>(.*)</\1>,UimsS');
if ((strpos($str, '<')!==false) and preg_match_all(_PROTEGE_BLOCS_HTML, $str, $matches, PREG_SET_ORDER)){
foreach ($matches as $reg){
$insert = $reg[0];
// hack: on transforme les caracteres a proteger en les remplacant
// par des caracteres "illegaux". (cf corriger_caracteres())
$insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
$str = str_replace($reg[0], $insert, $str);
}
}
/**
* On applique la typographie de la langue
*/
$str = $typographie($str);
/**
* On remet les caractères normaux sur les caractères illégaux
*/
$str = strtr($str, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
$str = unicode_to_utf_8(html_entity_decode(preg_replace('/&([lg]t;)/S', '&amp;\1', $str), ENT_NOQUOTES, 'utf-8'));
/**
* On applique la typographie de la langue
*/
$str = $typographie($str);
/**
* On remet les caractères normaux sur les caractères illégaux
*/
$str = strtr($str, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
/**
* Calcul du nouveau md5
*/
$newmd5 = md5($str);
$str = unicode_to_utf_8(html_entity_decode(preg_replace('/&([lg]t;)/S', '&amp;\1', $str), ENT_NOQUOTES, 'utf-8'));
/**
* Si le md5 ou la chaine à changé, on la met à jour dans la base
*/
if (($row['md5']!=$newmd5) || ($str!=$row['str'])){
$r = sql_updateq('spip_tradlangs', array('md5' => $newmd5, 'str' => $str), 'id_tradlang = ' . intval($row['id_tradlang']));
}
/**
* Calcul du nouveau md5
*/
$newmd5 = md5($str);
$x[] = $tab . var_export($row['id'], 1) . ' => ' . var_export($str, 1) . ',' . $row['comm'];
/**
* Si le md5 ou la chaine à changé, on la met à jour dans la base
*/
if (($row['md5']!=$newmd5) || ($str!=$row['str'])){
$r = sql_updateq('spip_tradlangs', array('md5' => $newmd5, 'str' => $str), 'id_tradlang = ' . intval($row['id_tradlang']));
}
$orig = ($lang==$source[2]) ? $source[0] : false;
salvatore_log(" - traduction ($traduits/$count_original OK | $relire/$count_original RELIRE | $modifs/$count_original MODIFS), export\n");
// historiquement les fichiers de lang de spip_loader ne peuvent pas etre securises
$secure = ($source[1]=='tradloader')
? ''
: "if (!defined('_ECRIRE_INC_VERSION')) {
return;
$x[] = $tab . var_export($row['id'], 1) . ' => ' . var_export($str, 1) . ',' . $row['comm'];
}
$orig = ($lang==$lang_ref) ? $url_repo : false;
salvatore_log(" - traduction ($traduits/$count_trad_reference OK | $relire/$count_trad_reference RELIRE | $modifs/$count_trad_reference MODIFS), export\n");
// historiquement les fichiers de lang de spip_loader ne peuvent pas etre securises
$secure = ($module=='tradloader')
? ''
: "if (!defined('_ECRIRE_INC_VERSION')) {
return;
}\n\n";
$fd = fopen($tmp . $source[1] . '/' . $source[1] . '_' . $lang . '.php', 'w');
$fd = fopen($dir_module . '/' . $module . '_' . $lang . '.php', 'w');
# supprimer la virgule du dernier item
$x[count($x)-1] = preg_replace('/,([^,]*)$/', '\1', $x[count($x)-1]);
# supprimer la virgule du dernier item
$x[count($x)-1] = preg_replace('/,([^,]*)$/', '\1', $x[count($x)-1]);
$contenu = join("\n", $x);
$contenu = join("\n", $x);
// L'URL du site de traduction
$url_trad = parametre_url($url_trad, 'lang_cible', $lang);
/**
* Ecrire le fichier de langue complet
*/
fwrite(
$fd,
'<' . '?php
// L'URL du site de traduction
$url_trad_module = parametre_url($url_trad_module, 'lang_cible', $lang);
/**
* Ecrire le fichier de langue complet
*/
fwrite(
$fd,
'<' . '?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
'
. ($orig
? '// Fichier source, a modifier dans ' . $orig
: '// extrait automatiquement de ' . $url_trad . '
. ($orig
? '// Fichier source, a modifier dans ' . $orig
: '// extrait automatiquement de ' . $url_trad_module . '
// ** ne pas modifier le fichier **
'
)
. "\n" . $secure . '$GLOBALS[$GLOBALS[\'idx_lang\']] = array(
)
. "\n" . $secure . '$GLOBALS[$GLOBALS[\'idx_lang\']] = array(
'
. $contenu
. '
. $contenu
. '
);
'
);
fclose($fd);
// noter la langue et les traducteurs pour lang/module.xml
$infos[$lang] = $people_unique = array();
$infos[$lang]['traducteurs'] = array();
$infos[$lang]['traduits'] = $traduits;
$infos[$lang]['modifs'] = $modifs;
$infos[$lang]['relire'] = $relire;
if (defined('_ID_AUTEUR_SALVATORE') and intval(_ID_AUTEUR_SALVATORE)>0){
$people_unique[] = _ID_AUTEUR_SALVATORE;
}
$s = sql_allfetsel('DISTINCT(traducteur)', 'spip_tradlangs', 'id_tradlang_module = ' . intval($module['id_tradlang_module']) . ' AND lang = ' . sql_quote($lang));
foreach ($s as $t){
$traducteurs_lang = explode(',', $t['traducteur']);
foreach ($traducteurs_lang as $traducteur){
if (!in_array($traducteur, $people_unique)){
if (is_numeric($traducteur) and $id_auteur = intval($traducteur)){
$traducteur_supp['nom'] = extraire_multi(sql_getfetsel('nom', 'spip_auteurs', 'id_auteur = ' . $id_auteur));
$traducteur_supp['lien'] = url_absolue(generer_url_entite($id_auteur, 'auteur'), $url_site);
} elseif (trim(strlen($traducteur))>0) {
$traducteur_supp['nom'] = trim($traducteur);
$traducteur_supp['lien'] = '';
}
if (isset($traducteur_supp['nom'])){
$infos[$lang]['traducteurs'][strtolower($traducteur_supp['nom'])] = $traducteur_supp;
}
unset($traducteur_supp);
$people_unique[] = $traducteur;
);
fclose($fd);
// noter la langue et les traducteurs pour lang/module.xml
$infos[$lang] = $people_unique = array();
$infos[$lang]['traducteurs'] = array();
$infos[$lang]['traduits'] = $traduits;
$infos[$lang]['modifs'] = $modifs;
$infos[$lang]['relire'] = $relire;
if (defined('_ID_AUTEUR_SALVATORE') and intval(_ID_AUTEUR_SALVATORE)>0){
$people_unique[] = _ID_AUTEUR_SALVATORE;
}
$s = sql_allfetsel('DISTINCT(traducteur)', 'spip_tradlangs', 'id_tradlang_module = ' . intval($row_module['id_tradlang_module']) . ' AND lang = ' . sql_quote($lang));
foreach ($s as $t){
$traducteurs_lang = explode(',', $t['traducteur']);
foreach ($traducteurs_lang as $traducteur){
if (!in_array($traducteur, $people_unique)){
if (is_numeric($traducteur) and $id_auteur = intval($traducteur)){
$traducteur_supp['nom'] = extraire_multi(sql_getfetsel('nom', 'spip_auteurs', 'id_auteur = ' . $id_auteur));
$traducteur_supp['lien'] = url_absolue(generer_url_entite($id_auteur, 'auteur'), $url_site);
} elseif (trim(strlen($traducteur))>0) {
$traducteur_supp['nom'] = trim($traducteur);
$traducteur_supp['lien'] = '';
}
if (isset($traducteur_supp['nom'])){
$infos[$lang]['traducteurs'][strtolower($traducteur_supp['nom'])] = $traducteur_supp;
}
unset($traducteur_supp);
$people_unique[] = $traducteur;
}
}
unset($people_unique);
if (substr(exec('svn status ' . _DIR_SALVATORE_TMP . $source[1] . '/' . $source[1] . '_' . $lang . '.php'), 0, 1)=='?'){
if ($module['limite_trad']==0){
passthru('svn add ' . _DIR_SALVATORE_TMP . $source[1] . '/' . $source[1] . "_$lang.php 2> /dev/null") ? salvatore_log("$log\n") : '';
} elseif (!in_array($source[1], array('ecrire', 'spip', 'public'))) {
if ((intval(($infos[$lang]['traduits']/$count_original)*100)>$seuil_export)){
passthru('svn add ' . _DIR_SALVATORE_TMP . $source[1] . '/' . $source[1] . "_$lang.php* 2> /dev/null") ? salvatore_log("$log\n") : '';
}
}
unset($people_unique);
if (substr(exec('svn status ' . _DIR_SALVATORE_TMP . $module . '/' . $module . '_' . $lang . '.php'), 0, 1)=='?'){
if ($row_module['limite_trad']==0){
passthru('svn add ' . _DIR_SALVATORE_TMP . $module . '/' . $module . "_$lang.php 2> /dev/null") ? salvatore_log("$log\n") : '';
} elseif (!in_array($module, array('ecrire', 'spip', 'public'))) {
if ((intval(($infos[$lang]['traduits']/$count_trad_reference)*100)>$seuil_export)){
passthru('svn add ' . _DIR_SALVATORE_TMP . $module . '/' . $module . "_$lang.php* 2> /dev/null") ? salvatore_log("$log\n") : '';
}
}
/**
* Le fichier a été modifié ou ajouté (svn status A ou M)
*
* On récupère la date de dernier changement avec svn info
* On cherche toutes les dernières modifications dans la base de donnée
* Si un seul auteur de révisions (Hors salvatore et -1) on l'ajoute comme commiteur
* Si plusieurs auteurs le commiteur sera Salvatore
*/
if (in_array(substr(exec('svn status ' . _DIR_SALVATORE_TMP . $source[1] . '/' . $source[1] . "_$lang.php"), 0, 1), array('A', 'M'))){
$last_change = exec('env LC_MESSAGES=en_US.UTF-8 svn info ' . _DIR_SALVATORE_TMP . $source[1] . '/' . $source[1] . "_$lang.php | awk '/^Last Changed Date/ { print $4 \" \" $5 }'");
$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');
if (count($auteur_versions)==1){
$email = sql_getfetsel('email', 'spip_auteurs', 'id_auteur = ' . intval($auteur_versions[0]['id_auteur']));
if ($email){
$commiteurs[$lang] = $email;
}
salvatore_log("\nLe commiteur sera pour la langue $lang : " . $commiteurs[$lang] . " \n");
}
/**
* Le fichier a été modifié ou ajouté (svn status A ou M)
*
* On récupère la date de dernier changement avec svn info
* On cherche toutes les dernières modifications dans la base de donnée
* Si un seul auteur de révisions (Hors salvatore et -1) on l'ajoute comme commiteur
* Si plusieurs auteurs le commiteur sera Salvatore
*/
if (in_array(substr(exec('svn status ' . _DIR_SALVATORE_TMP . $module . '/' . $module . "_$lang.php"), 0, 1), array('A', 'M'))){
$last_change = exec('env LC_MESSAGES=en_US.UTF-8 svn info ' . _DIR_SALVATORE_TMP . $module . '/' . $module . "_$lang.php | awk '/^Last Changed Date/ { print $4 \" \" $5 }'");
$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');
if (count($auteur_versions)==1){
$email = sql_getfetsel('email', 'spip_auteurs', 'id_auteur = ' . intval($auteur_versions[0]['id_auteur']));
if ($email){
$commiteurs[$lang] = $email;
}
salvatore_log("\nLe commiteur sera pour la langue $lang : " . $commiteurs[$lang] . " \n");
}
}
}
// ecrire lang/module.xml
$xml = "<traduction module=\"$source[1]\" gestionnaire=\"salvatore\" url=\"$url_site\" source=\"$source[0]\" reference=\"$source[2]\">\n";
foreach ($infos as $lang => $info){
if (count($info['traducteurs']>0)){
$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";
ksort($info['traducteurs']);
foreach ($info['traducteurs'] as $nom => $people){
$xml .= ' <traducteur nom="' . entites_html($people['nom']) . '" lien="' . entites_html($people['lien']) . "\" />\n";
}
$xml .= " </langue>\n";
} else {
$xml .= " <langue code=\"$lang\" url=\"" . parametre_url($url_trad, 'lang_cible', $lang) . "\" />\n";
// ecrire lang/module.xml
$xml = "<traduction module=\"$module\" gestionnaire=\"salvatore\" url=\"$url_site\" source=\"$url_repo\" reference=\"$lang_ref\">\n";
foreach ($infos as $lang => $info){
if (count($info['traducteurs']>0)){
$xml .= " <langue code=\"$lang\" url=\"" . parametre_url($url_trad_module, 'lang_cible', $lang) . "\" total=\"$count_trad_reference\" traduits=\"" . $info['traduits'] . '" relire="' . $info['relire'] . '" modifs="' . $info['modifs'] . '" nouveaux="' . ($count_trad_reference-($info['modifs']+$info['traduits']+$info['relire'])) . '" pourcent="' . number_format((($info['traduits']/$count_trad_reference)*100), 2) . "\">\n";
ksort($info['traducteurs']);
foreach ($info['traducteurs'] as $nom => $people){
$xml .= ' <traducteur nom="' . entites_html($people['nom']) . '" lien="' . entites_html($people['lien']) . "\" />\n";
}
$xml .= " </langue>\n";
} else {
$xml .= " <langue code=\"$lang\" url=\"" . parametre_url($url_trad_module, 'lang_cible', $lang) . "\" />\n";
}
unset($traducteurs[$source[2]]);
$xml .= "</traduction>\n";
}
unset($traducteurs[$lang_ref]);
$xml .= "</traduction>\n";
ecrire_fichier($tmp . $source[1] . '/' . $source[1] . '.xml', $xml);
ecrire_fichier($dir_module . '/' . $module . '.xml', $xml);
if (isset($liste_lang_non_exportees) and (count($liste_lang_non_exportees)>0)){
$liste_lang_non_exportees_string = implode(', ', $liste_lang_non_exportees);
salvatore_log("\nLes langues suivantes ne sont pas exportées car trop peu traduites:\n");
salvatore_log("$liste_lang_non_exportees_string\n");
}
if (isset($liste_lang_supprimer) and (count($liste_lang_supprimer)>0)){
$liste_lang_supprimer_string = implode(', ', $liste_lang_supprimer);
salvatore_log("\nLes langues suivantes devraient être supprimées car trop peu traduites:\n");
salvatore_log("$liste_lang_supprimer_string\n");
if (isset($liste_lang_non_exportees) and (count($liste_lang_non_exportees)>0)){
$liste_lang_non_exportees_string = implode(', ', $liste_lang_non_exportees);
salvatore_log("\nLes langues suivantes ne sont pas exportées car trop peu traduites:\n");
salvatore_log("$liste_lang_non_exportees_string\n");
}
if (isset($liste_lang_a_supprimer) and (count($liste_lang_a_supprimer)>0)){
$liste_lang_a_supprimer_string = implode(', ', $liste_lang_a_supprimer);
salvatore_log("\nLes langues suivantes devraient être supprimées car trop peu traduites:\n");
salvatore_log("$liste_lang_a_supprimer_string\n");
}
if ($row_module['limite_trad']==0){
foreach ($liste_lang as $lang){
passthru('svn add ' . _DIR_SALVATORE_TMP . $module . '/' . $module . "_$lang.php* 2> /dev/null") ? salvatore_log("$log\n") : '';
}
if ($module['limite_trad']==0){
foreach ($liste_lang as $lang){
passthru('svn add ' . _DIR_SALVATORE_TMP . $source[1] . '/' . $source[1] . "_$lang.php* 2> /dev/null") ? salvatore_log("$log\n") : '';
}
} elseif (!in_array($source[1], array('ecrire', 'spip', 'public'))) {
salvatore_log('Limite trad = ' . $seuil_export);
foreach ($liste_lang as $lang){
if ((intval(($infos[$lang]['traduits']/$count_original)*100)>$seuil_export)
and (substr(exec('svn status ' . _DIR_SALVATORE_TMP . $source[1] . '/' . $source[1] . "_$lang.php"), 0, 1)=='?')){
passthru('svn add ' . _DIR_SALVATORE_TMP . $source[1] . '/' . $source[1] . "_$lang.php* 2> /dev/null") ? salvatore_log("$log\n") : '';
}
} elseif (!in_array($module, array('ecrire', 'spip', 'public'))) {
salvatore_log('Limite trad = ' . $seuil_export);
foreach ($liste_lang as $lang){
if ((intval(($infos[$lang]['traduits']/$count_trad_reference)*100)>$seuil_export)
and (substr(exec('svn status ' . _DIR_SALVATORE_TMP . $module . '/' . $module . "_$lang.php"), 0, 1)=='?')){
passthru('svn add ' . _DIR_SALVATORE_TMP . $module . '/' . $module . "_$lang.php* 2> /dev/null") ? salvatore_log("$log\n") : '';
}
}
salvatore_log("\n" . passthru('svn status ' . _DIR_SALVATORE_TMP . $source[1] . '/') . "\n");
if (strlen($message_commit)>1 || count($commiteurs)>0){
$fd = fopen($tmp . $source[1] . '/message_commit.inc', 'w');
# ecrire le fichier
fwrite(
$fd,
'<' . '?php
}
salvatore_log("\n" . passthru('svn status ' . _DIR_SALVATORE_TMP . $module . '/') . "\n");
if (strlen($message_commit)>1 || count($commiteurs)>0){
$fd = fopen($dir_module . '/message_commit.inc', 'w');
# ecrire le fichier
fwrite(
$fd,
'<' . '?php
$message_commit = "' . $message_commit . '";
$commiteurs = ' . var_export($commiteurs, 1) . ';
?' . '>
'
);
fclose($fd);
}
} else {
salvatore_log("\n Ce module n'existe pas\n");
);
fclose($fd);
}
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter