Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

— dans le titre des notifications #211

Closed
brunob opened this issue Jul 9, 2019 · 20 comments
Closed

— dans le titre des notifications #211

brunob opened this issue Jul 9, 2019 · 20 comments

Comments

@brunob
Copy link
Member

brunob commented Jul 9, 2019

Le mail de notification de https://seenthis.net/messages/791824 a pour sujet Project Raven — Inside the UAE’s secret hacking team of American mercenaries. Cela vient de extraire_titre() https://github.com/seenthis/seenthis/blob/spip31/seenthis_options.php#L671

$texte = 'Project Raven — Inside the UAE’s secret hacking team of American mercenaries';
var_dump(trim(extraire_titre(texte_de_me(726))));
=> Project Raven — Inside the UAE’s secret hacking team of American mercenaries
@brunob
Copy link
Member Author

brunob commented Jul 9, 2019

Plus précisément, cela vient de notre utilisation de extraire_titre dans https://github.com/seenthis/seenthis/blob/spip31/inc/seenthis_notifier.php#L176 ; en passant l'option brut à true ça fonctionne bien mieux => trim(extraire_titre($texte, 100, true)).

@brunob brunob changed the title — dans le titre des notifications => bug dans extraire_titre() — dans le titre des notifications Jul 9, 2019
brunob added a commit to seenthis/seenthis that referenced this issue Jul 9, 2019
texte brut pour le sujet des notifications pour ne pas y envoyer d'entité html, facteur gère ça pour nous
@brunob
Copy link
Member Author

brunob commented Jul 9, 2019

Corrigé, à voir s'il faudrait appliquer ça ici aussi https://github.com/seenthis/seenthis/blob/spip31/inc/seenthis_notifier.php#L345 mais j'en doute.

@brunob brunob closed this as completed Jul 9, 2019
@brunob
Copy link
Member Author

brunob commented Jul 10, 2019

J'ouvre de nouveau car @Fil me dit que ça reste transcodé cf :

---------- Message transféré ---------
De : mad meg (mad_meg) - SeenThis <no-reply@seenthis.net>
Date : mer. 10 juil. 2019 à 07:11
Objet : Re : Du &laquo; transidentitaire &raquo; à l'enfant-machine :
entretien avec Fabien Ollier

Pourtant, je viens de tester sur mon instance locale avec le même titre et je ne reproduis pas :\

@brunob brunob reopened this Jul 10, 2019
@brunob
Copy link
Member Author

brunob commented Jul 10, 2019

Avec le test suivant j'obtiens ceci https://seenthis.net/spip.php?page=bb

var_dump(extraire_titre(texte_de_me(791824)));
var_dump(extraire_titre(texte_de_me(791824), 100, true));

var_dump(extraire_titre(texte_de_me(791830)));
var_dump(extraire_titre(texte_de_me(791830), 100, true));

Donc si c'est encore transcodé, ça doit venir de facteur, mais je l'utilise aussi sur mon instance de test...

@brunob
Copy link
Member Author

brunob commented Jul 10, 2019

Ha, je crois que j'ai trouvé le fautif !

https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/typo_guillemets/typo_guillemets_fonctions.php#L31

https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/typo_guillemets/plugin.xml#L18

Comme facteur génère des mails html, typo guillemets entre en action dans ce squelette :

https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/facteur/trunk/emails/texte.html

On pourrait rétablir les mails texte uniquement en suivant l'astuce donnée dans le commentaire :

// si le mail est en texte brut, on l'encapsule dans un modele surchargeable
// pour garder le texte brut, il suffit de faire un modele qui renvoie uniquement #ENV*{texte}

https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/facteur/trunk/inc/envoyer_mail.php#L115

@brunob
Copy link
Member Author

brunob commented Jul 11, 2019

< b_b‎ >  haha le sketche
< b_b‎ >  forcément
< b_b‎ >  https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/facteur/trunk/inc/envoyer_mail.php#L117
< b_b‎ >  si pas de messge html => créer un message html
< b_b‎ >  et si message html => content type html
< b_b‎ >  https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/facteur/trunk/classes/facteur.php#L185
< b_b‎ >  donc on ne peut pas faire uniquement des mails txt avec facteur

Ça vient de ce commit https://zone.spip.net/trac/spip-zone/changeset/59363/spip-zone

@brunob
Copy link
Member Author

brunob commented Jul 11, 2019

Avec le retour des mails de notifications au format texte brut on devrait être bons (j'espère), je ferme le ticket.

@brunob brunob closed this as completed Jul 11, 2019
@brunob
Copy link
Member Author

brunob commented Jul 15, 2019

Et c'est reparti... reçu à l'instant Mère de famille fauchée à Montpellier : &laquo; La catastrophe est arrivée ! &raquo; cf https://seenthis.net/messages/792830

Si quelqu'un est intéressé pour y regarder de plus prêt, de mon côté j'ai juste envie de désactiver le plugin guillemets typographiques /me blasé

@brunob brunob reopened this Jul 15, 2019
@brunob
Copy link
Member Author

brunob commented Jul 15, 2019

Comme je ne lâche pas l'affaire comme ça, j'y ai passé encore "un peu" de temps, et je découvre que c'est nettoyer_titre_email() qui effectue cette transformation cf

$texte = 'Mère de famille fauchée à #Montpellier : "La catastrophe est arrivée !"';
var_dump(trim(extraire_titre($texte, 100, true))); => 'Mère de famille fauchée à Montpellier : "La catastrophe est arrivée !"'
var_dump(nettoyer_titre_email(trim(extraire_titre($texte, 100, true)))); => 'Mère de famille fauchée à Montpellier : &laquo; La catastrophe est arrivée ! &raquo;'

En effet, nettoyer_titre_email() appelle corriger_typo() qui contient un appel au pipeline post_typo dans lequel s'insère les fonctions de remplacement du plugin... typo_guillemets ^^

Je proposerais bien de passer outre en insérant de force notre sujet de mail par le biais du pipeline facteur_pre_envoi qui est appelé après nettoyer_titre_email().

@rastapopougros
Copy link

Et donc tout simplement parce que nettoyer_titre_email() utilise corriger_typo() qui est le cœur de typo() et c'est là qu'il y a les pipelines pre_typo et post_typo, donc que le plugin Orthotypo ou assimilé fait son œuvre.

@rastapopougros
Copy link

Plutôt que de forcer un autre titre, alors que ce qui a été fait avant peu contenir des choses intéressantes, y compris de correction typo indispensable (espaces, etc), est-ce qu'on ne peut pas simplement prendre ce qui a été produit et passer dessus une fonction qui remet les entités en vrais caractères UTF ?

@brunob
Copy link
Member Author

brunob commented Jul 15, 2019

Pour comparaison, en 2.1 on n'utilisait pas facteur et donc on utilisait envoyer_mail() du core qui n'appliquait que nettoyer_caracteres_mail() au sujet :

https://core.spip.net/projects/spip/repository/entry/branches/spip-2.1/ecrire/inc/envoyer_mail.php#L161

Fonction qui avait "le bon goût" de remplacer les &mdash; par -- cf https://core.spip.net/projects/spip/repository/entry/branches/spip-2.1/ecrire/inc/envoyer_mail.php#L87

D'ailleurs si je reprends l'exemple précédent, on obtient var_dump(nettoyer_caracteres_mail(trim(extraire_titre($texte, 100, true)))); => 'Mère de famille fauchée à Montpellier : "La catastrophe est arrivée !"' qui est bien ce qu'on "souhaite" :)

@brunob
Copy link
Member Author

brunob commented Jul 15, 2019

@rastapopougros quand tu dis :

est-ce qu'on ne peut pas simplement prendre ce qui a été produit et passer dessus une fonction qui remet les entités en vrais caractères UTF ?

Je doute sur le fait d'appeler une fonction pour défaire ce qui a été fait plus haut. À quelle fonction penses-tu ?

@rastapopougros
Copy link

@brunob bé :
var_dump(html_entity_decode('Mère de famille fauchée à Montpellier : &laquo; La catastrophe est arrivée ! &raquo;'));
string(78) "Mère de famille fauchée à Montpellier : « La catastrophe est arrivée ! »"

@brunob
Copy link
Member Author

brunob commented Jul 15, 2019

Dans ce cas on pourrait utiliser la méthode html2text de la classe phpmailer https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/facteur/trunk/phpmailer-php5/class.phpmailer.php#L3494

Ou celle proposée par la classe facteur, mais celle-ci semble bien plus complexe https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/facteur/trunk/facteur_fonctions.php#L307 et elle renvoie du markdown.

Sinon, un simple html_entity_decode comme tu le proposes + les bonnes options devrait faire l'affaire.

@rastapopougros
Copy link

Normalement, à l'endroit dont on parle, il n'y a jamais de HTML, de balises, donc html2text ou l'autre c'est pas pour ça. Là on parle juste d'entités uniquement, à priori.

@brunob
Copy link
Member Author

brunob commented Jul 15, 2019

Je parlais de cette méthode car elle appelle justement html_entity_decode et "rien d'autre" :p

@brunob
Copy link
Member Author

brunob commented Jul 15, 2019

Proposition de patch :

diff --git a/seenthis_pipelines.php b/seenthis_pipelines.php
index 6277467..e956343 100644
--- a/seenthis_pipelines.php
+++ b/seenthis_pipelines.php
@@ -21,5 +21,7 @@ function seenthis_facteur_pre_envoi($facteur){
 	// focer les mails au format txt
 	$facteur->ContentType = 'text/plain';
 	$facteur->AltBody = '';
+	// décoder les entités html du sujet (insérées par typo_guillemets dans post_typo par exemple)
+	$facteur->Subject = html_entity_decode($facteur->Subject, ENT_QUOTES, $facteur->CharSet);
 	return $facteur;
 }

@rastapopougros
Copy link

On peut déjà faire ça, et puis si on voit d'autres problèmes arriver on complètera.

brunob added a commit to seenthis/seenthis that referenced this issue Jul 16, 2019
@brunob
Copy link
Member Author

brunob commented Jul 16, 2019

Patch commité, up en prod, je ferme et on y reviendra si nécessaire.

@brunob brunob closed this as completed Jul 16, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants