Valider b7b0183e rédigé par RastaPopoulos's avatar RastaPopoulos
Parcourir les fichiers

Amélioration (très) notable du multilinguisme dans les Notifications !...

Amélioration (très) notable du multilinguisme dans les Notifications ! Désormais on change toujours dynamiquement la langue générale d'exécution durant la génération de toute notif afin de ne JAMAIS se baser sur la langue en cours du hit PHP, qui peut être absolument n'importe quoi puisqu'on est dans un job, donc de l'arabe, du chinois, etc suivant le visiteur du moment, alors qu'on envoie une notif à un hispanophone ou un japonais. Donc la langue spécifique de la notif doit toujours être : 1) soit la langue forcée dans les options 2) soit la langue de l'utilisateur SPIP en base 3) si tout vide, au moins explicitement la langue principale par défaut du SPIP (ce que n'est pas forcément du tout la langue du hit en cours !). On remet bien sûr la langue du hit à la toute fin de l'envoi. Et tout ça on le fait au tout tout début, donc aussi pour les notifs dont le contenu est généré en PHP, pas juste pour les squelettes.
parent 24c1d69c
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+28 −17
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -361,6 +361,8 @@ function notifications_modes_charger_infos($type_mode){
 * @return bool Retourne false si une erreur se produit
 */
function notifications_envoyer($destinataire, $mode, $quoi, $id=0, $options=array()){
	$retour = false;
	
	// On commence par aller chercher la bonne information de contact adapté au mode
	// Car si on ne la trouve pas... on envoie rien
	if (
@@ -368,6 +370,25 @@ function notifications_envoyer($destinataire, $mode, $quoi, $id=0, $options=arra
		and $mode_contact = charger_fonction('contact', "notifications/modes/$mode/", true)
		and $contact = $mode_contact($destinataire)
	){
		// Avant toute chose, on change la langue en cours, le temps de la notif uniquement, en gardant la langue du hit actuel pour la remettre à la fin
		// - soit une langue forcée en option
		// - soit la langue de l'utilisateurice
		// - soit si vide la langue principale par défaut du site,
		// … mais JAMAIS laisser la langue en cours du hit PHP actuel, car on est dans un job et ça peut être absolument n'importe quoi,
		//   un visiteur en chinois alors que la notif est pour un anglophone, etc
		$langue_hit = $GLOBALS['spip_lang'];
		include_spip('inc/lang');
		if (!empty($options['lang'])) {
			$langue_notif = $options['lang'];
		}
		elseif ($id_auteur = intval($destinataire) and $langue_auteur = sql_getfetsel('lang', 'spip_auteurs', 'id_auteur=' . $id_auteur)) {
			$langue_notif = $langue_auteur;
		}
		else {
			$langue_notif = $GLOBALS['meta']['langue_site'];
		}
		changer_langue($langue_notif);
		
		// On cherche maintenant le contenu
		$contenu = array();
		// Si la notification a une fonction dédiée au contenu, c'est ça qu'on prend
@@ -386,7 +407,8 @@ function notifications_envoyer($destinataire, $mode, $quoi, $id=0, $options=arra
			'options' => $options,
			'destinataire' => $destinataire,
			'contact' => $contact,
			'mode' => $mode
			'mode' => $mode,
			'lang' => $langue_notif,
		);

		// Pour ajouter des informations utiles on cherche un objet dans le nom de la notif
@@ -402,20 +424,6 @@ function notifications_envoyer($destinataire, $mode, $quoi, $id=0, $options=arra
			$contexte[$cle_objet] = $id;
		}

		// Utiliser de préférence la langue du destinataire dans le contexte,
		// à moins qu'il y en ait une forcée dans les options.
		if (
			(
				!empty($options['lang'])
				and $langue_auteur = $options['lang']
			) or (
				intval($destinataire)
				and $langue_auteur = sql_getfetsel('lang', 'spip_auteurs', 'id_auteur='.intval($destinataire))
			)
		) {
			$contexte['lang'] = $langue_auteur;
		}

		//Si un expéditeur est défini on l'utilise
		if ($options['from'])
			$contenu['from'] = $options['from'];
@@ -468,11 +476,14 @@ function notifications_envoyer($destinataire, $mode, $quoi, $id=0, $options=arra
			}

			// Maintenant qu'on a tout on appelle le mode d'envoi
			return $mode_envoyer($contact, $contenu, $options);
			$retour = $mode_envoyer($contact, $contenu, $options);
		}
		
		// On a fini, on remet la langue du hit du visiteur
		changer_langue($langue_hit);
	}

	return false;
	return $retour;
}

/**
+3 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<paquet
	prefix="notifavancees"
	categorie="outil"
	version="1.0.0"
	etat="dev"
	version="1.1.0"
	etat="stable"
	compatibilite="[3.2.0;4.0.*]"
	logo="images/notifications-128.png"
	schema="0.1.0"
@@ -12,6 +12,7 @@
	<!-- Permet une gestion fine des notifications à envoyer avec possibilité de s'inscrire/se désinscrire et de choisir les modes d'envois -->

	<auteur lien="http://www.ldd.fr">Les Développements Durables</auteur>
	<auteur lien="https://www.mukt.fr">Mukt</auteur>

	<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>