les champs multi ne fonctionnent plus si une des rubriques n'est plus en multi #3430

Closed
opened 8 years ago by erational · 8 comments
Owner

Le bug est un peu compliqué

Voici la configuration:

  • Site multilingue Francais / Anglais
  • Réglages: Traduction Rubrique : non - Traduction Article: oui
  • Pas de forcer_lang

Si on a les rubriques suivantes

    1. [fr]Actu[en]News
    1. Gouache
  • 30 [fr]Musique[en]Music

Lorsqu'on liste les rubriques dans l'espace public avec un ?lang=en
on obtient

  • News
  • Gouache
  • Musique

Le fait d'avoir une rubrique sans multi (gouache) casse le fonctionnement des multi à venir.
même en forcant avec un [(#TITRE|extraire_multi{#ENV{lang})] impossible d'avoir le multi sur music
actuellement, la seule façon de resoudre le pb est de placer multi sur toutes les rubriques même si c'est inutile

Le bug est un peu compliqué Voici la configuration: - Site multilingue Francais / Anglais - Réglages: Traduction Rubrique : non - Traduction Article: oui - Pas de forcer_lang Si on a les rubriques suivantes - 10. <multi>[fr]Actu[en]News</multi> - 20. Gouache - 30 <multi>[fr]Musique[en]Music</multi> Lorsqu'on liste les rubriques dans l'espace public avec un ?lang=en on obtient - News - Gouache - Musique Le fait d'avoir une rubrique sans multi (gouache) casse le fonctionnement des multi à venir. même en forcant avec un `[(#TITRE|extraire_multi{#ENV{lang})]` impossible d'avoir le multi sur music actuellement, la seule façon de resoudre le pb est de placer multi sur toutes les rubriques même si c'est inutile
Poster
Owner

Version cible mise à 3.1

**Version cible mise à 3.1**
Owner

Je confirme le bug en 3.1 mais il doit aussi exister en 3.0.
En fait, dans typo() on appelle à un moment corriger_typo($letexte) sans préciser la langue en cours alors que cela est possible.
Dans corriger_typo() on appelle ensuite extraire_multi($letexte, $lang, true) mais $lang est la chaine vide car l'argument n'a pas été passé dans l'appel de la fonction.
De fait, dans extraire_multi() on passe par l'instruction :

if (!$lang) $lang = $GLOBALS['spip_lang'];

pour déterminer la langue qui est donc celle de l'index spip_lang de $GLOBALS.

Or, si on suit la boucle de erational on a dans $GLOBALS les valeurs suivantes :

  • pour le titre 10. xxx : $GLOBALS['spip_lang'] = 'en' et $GLOBALS['lang'] = 'en'
  • pour le titre 20. xxx : $GLOBALS['spip_lang'] = 'fr' et $GLOBALS['lang'] = 'en'
  • pour le titre 30. xxx : $GLOBALS['spip_lang'] = 'fr' et $GLOBALS['lang'] = 'en'

Il est donc normal que pour la deuxième et troisième rubrique on extrait la langue fr.
Si je patche extraire_multi() en rajoutant la ligne

if (!$lang and isset($GLOBALS['lang'])) $lang = $GLOBALS['lang'];

avant l'autre affectation de $lang en considérant que lang est prioritaire sur spip_lang cela fonctionne évidemment.

Maintenant, je ne connais pas la différence entre spip_lang et lang et je trouve bizarre qu'on laisse tout se faire par défaut dans tous les cas depuis typo(). A votre avis, où faut-il modifier le code pour corriger sans tout casser ?

Statut changé à En cours

Je confirme le bug en 3.1 mais il doit aussi exister en 3.0. En fait, dans typo() on appelle à un moment corriger_typo($letexte) sans préciser la langue en cours alors que cela est possible. Dans corriger_typo() on appelle ensuite extraire_multi($letexte, $lang, true) mais $lang est la chaine vide car l'argument n'a pas été passé dans l'appel de la fonction. De fait, dans extraire_multi() on passe par l'instruction : <pre> if (!$lang) $lang = $GLOBALS['spip_lang']; </pre> pour déterminer la langue qui est donc celle de l'index spip_lang de $GLOBALS. Or, si on suit la boucle de erational on a dans $GLOBALS les valeurs suivantes : - pour le titre 10. xxx : $GLOBALS['spip_lang'] = 'en' et $GLOBALS['lang'] = 'en' - pour le titre 20. xxx : $GLOBALS['spip_lang'] = 'fr' et $GLOBALS['lang'] = 'en' - pour le titre 30. xxx : $GLOBALS['spip_lang'] = 'fr' et $GLOBALS['lang'] = 'en' Il est donc normal que pour la deuxième et troisième rubrique on extrait la langue fr. Si je patche extraire_multi() en rajoutant la ligne <pre> if (!$lang and isset($GLOBALS['lang'])) $lang = $GLOBALS['lang']; </pre> avant l'autre affectation de $lang en considérant que lang est prioritaire sur spip_lang cela fonctionne évidemment. Maintenant, je ne connais pas la différence entre spip_lang et lang et je trouve bizarre qu'on laisse tout se faire par défaut dans tous les cas depuis typo(). A votre avis, où faut-il modifier le code pour corriger sans tout casser ? **Statut changé à En cours**
Poster
Owner

j'ai testé le patch qui fonctionne avec succès.
il faut vérifier si cela ne casse rien ailleurs.

j'ai testé le patch qui fonctionne avec succès. il faut vérifier si cela ne casse rien ailleurs.
Owner

$GLOBALS['spip_lang'] est la langue en cours d'utilisation dans le traitement alors que $GLOBALS['lang'] est la langue de la page en cours. Ce n'est donc pas bon de remplacer la première par la seconde.
Normalement chaque fois qu'on change de langue dans le traitement on est supposé revenir à la langue précédente juste après, et il semble qu'ici on oublie de revenir a en apres avoir passé $GLOBALS['spip_lang'] en fr pour traiter la typo du titre en fr

`$GLOBALS['spip_lang']` est la langue en cours d'utilisation dans le traitement alors que `$GLOBALS['lang']` est la langue de la page en cours. Ce n'est donc pas bon de remplacer la première par la seconde. Normalement chaque fois qu'on change de langue dans le traitement on est supposé revenir à la langue précédente juste après, et il semble qu'ici on oublie de revenir a en apres avoir passé `$GLOBALS['spip_lang']` en fr pour traiter la typo du titre en fr
Owner

Appliqué par commit r22346.
Statut changé à Fermé

Appliqué par commit r22346. **Statut changé à Fermé**
b_b commented 7 years ago
Owner
There is no content yet.
Poster
Owner

Il faudrait reporter sur la SPIP 3.0.
Cedric tu t'en charges ? ou je m'en occupe ?

Il faudrait reporter sur la SPIP 3.0. Cedric tu t'en charges ? ou je m'en occupe ?
Poster
Owner
report en 3.0 https://core.spip.net/projects/spip/repository/revisions/22452 (merci b_b)
Sign in to join this conversation.
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.