From cf576ec0479b18afaedf6cff6414b0c65cd5247c Mon Sep 17 00:00:00 2001
From: Matthieu Marcillaud <marcimat@rezo.net>
Date: Thu, 11 May 2023 18:07:56 +0200
Subject: [PATCH] fix: Notices diverses, simplification de code

---
 action/tradlang_exporter_langue.php | 31 +++++++++--------------------
 export_lang/po.php                  | 19 ++++++++++++------
 export_lang/spip.php                |  9 +--------
 3 files changed, 23 insertions(+), 36 deletions(-)

diff --git a/action/tradlang_exporter_langue.php b/action/tradlang_exporter_langue.php
index 64468a3..3361a41 100644
--- a/action/tradlang_exporter_langue.php
+++ b/action/tradlang_exporter_langue.php
@@ -32,35 +32,22 @@ function action_tradlang_exporter_langue_dist() {
 		$tradlang_sauvegarde_module = charger_fonction('tradlang_sauvegarde_module', 'inc');
 		$fichier = $tradlang_sauvegarde_module($module, $lang_cible, false, $type, $tout);
 		if (file_exists($fichier)) {
-			// supprimer et vider les buffers qui posent des problemes de memory limit
-			// http://www.php.net/manual/en/function.readfile.php#81032
-			// Copie du plugin acces restreint action/api_docrestreint.php
-			@ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure
-			@ini_set('output_buffering', 'off');
-			@ini_set('implicit_flush', 1);
-			@ob_implicit_flush(1);
-			while ($level--) {
-				@ob_end_clean();
-			}
-
 			switch ($type) {
 				case 'po':
-					header('Content-Type: application/x-gettext;');
+					$content_type = 'application/x-gettext';
 					break;
 				case 'csv':
-					header('Content-type: text/csv');
+					$content_type = 'text/csv';
+					break;
+				case 'php':
+					$content_type = 'application/x-httpd-php';
 					break;
 				default:
-					header('Content-Type: application/x-httpd-php;');
+					$content_type = 'application/octet-stream';
+					break;
 			}
-			header('Content-Length: ' . filesize($fichier));
-			header('Content-Transfer-Encoding: binary');
-			header('Pragma: public'); // required
-			header('Expires: 0');
-			header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
-			header('Cache-Control: private', false); // required for certain browsers
-			header('Content-Disposition: attachment; filename="' . basename($fichier) . '"');
-			readfile($fichier);
+			include_spip('inc/livrer_fichier');
+			spip_livrer_fichier($fichier, $content_type);
 			die();
 		} else {
 			include_spip('inc/minipres');
diff --git a/export_lang/po.php b/export_lang/po.php
index 0dd0fc9..379c003 100644
--- a/export_lang/po.php
+++ b/export_lang/po.php
@@ -30,7 +30,6 @@ if (!defined('_ECRIRE_INC_VERSION')) {
  */
 function export_lang_po_dist($module, $langue, $dir_lang) {
 	$traducteurs = [];
-	$lang = null;
 	$x = $tous = [];
 	$contenu = '';
 
@@ -64,22 +63,30 @@ function export_lang_po_dist($module, $langue, $dir_lang) {
 
 		$last_auteur = sql_fetsel('nom,email', 'spip_auteurs', 'id_auteur=' . (int) $id_auteur);
 
-		$traducteurs[$lang] = [];
+		$traducteurs[$langue] = [];
 		$people_unique = [];
-		$liste_traducteurs = sql_select('DISTINCT(traducteur)', 'spip_tradlangs', 'id_tradlang_module = ' . (int) $info_module['id_tradlang_module'] . ' AND lang = ' . sql_quote($langue));
-		while ($t = sql_fetch($liste_traducteurs)) {
+		$liste_traducteurs = sql_allfetsel(
+			'DISTINCT(traducteur)',
+			'spip_tradlangs',
+			[
+				'id_tradlang_module = ' . (int) $info_module['id_tradlang_module'],
+				'lang = ' . sql_quote($langue),
+				'traducteur IS NOT NULL'
+			]
+		);
+		foreach ($liste_traducteurs as $t) {
 			$traducteurs_lang = explode(',', $t['traducteur']);
 			foreach ($traducteurs_lang as $traducteur) {
 				if (!in_array($traducteur, $people_unique)) {
 					if (is_numeric($traducteur) && ($id_auteur = (int) $traducteur)) {
 						$traducteur_supp['nom'] = extraire_multi(sql_getfetsel('nom', 'spip_auteurs', 'id_auteur = ' . $id_auteur));
-						$traducteur_supp['lien'] = url_absolue(generer_objet_url($id_auteur, 'auteur'), $url_site);
+						$traducteur_supp['lien'] = url_absolue(generer_objet_url($id_auteur, 'auteur'));
 					} elseif (trim(strlen($traducteur)) > 0) {
 						$traducteur_supp['nom'] = trim($traducteur);
 						$traducteur_supp['lien'] = '';
 					}
 					if (isset($traducteur_supp['nom'])) {
-						$traducteurs[$lang][] = $traducteur_supp;
+						$traducteurs[$langue][] = $traducteur_supp;
 					}
 					unset($traducteur_supp);
 					$people_unique[] = $traducteur;
diff --git a/export_lang/spip.php b/export_lang/spip.php
index c45b45a..c731f4b 100644
--- a/export_lang/spip.php
+++ b/export_lang/spip.php
@@ -43,14 +43,7 @@ function export_lang_spip_dist($module, $langue, $dir_lang, $tout = false) {
 	$res = sql_allfetsel('id,str,comm,statut', 'spip_tradlangs', $where, 'id');
 	$x = [];
 	$prev = '';
-	/**
-	 * 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)
-	 */
-	$tous = $lorigine;
-	foreach ($res as $row) {
-		$tous[$row['id']] = $row;
-	}
+	$tous = array_column($res, null, 'id');
 	ksort($tous);
 	foreach ($tous as $row) {
 		if ($prev !== strtoupper($row['id'][0])) {
-- 
GitLab