Annonce

#1 2014-09-03 19:30:29

mmoy
Membre
2014-09-03
19

Message d'erreur qui casse la structure HTML (ou JSON)

Bonjour/Bonsoir,

Toujours suite au test de la version 2.7.0RC1, j'ai eu un comportement bizare dont j'ai fini par identifier l'origine. La distance entre la cause et l'effet est assez amusante ;-).

L'effet : avec le thème modus, un passage de souris sur la miniature d'un album faisait passer le texte en surimpression sur la miniature en souligné (un :hover {text-decoration: underline}, quoi). Normalement, un screenshot est attaché à ce message. Ça ne se produit que quand je suis identifié sur la galerie.

La cause : le plugin Google2Piwigo.

L'explication : le plugin en question n'est pas encore compatible avec la 2.7. Je l'avais testé sur une 2.6 et un effet de bord de la manière dont plg a mis à jour pour me permettre de tester la 2.7 est que le plugin est resté activé.

Du coup, le plugin déclenchait un message d'erreur : « Warning: Function PluginMaintain::autoUpdate deprecated in /home/sys/var/www/piwigo.us/beta/mmoy/include/functions_plugins.inc.php on line 81 ». Plus précisément, quand le message d'erreur apparait, le HTML envoyé est le suivant :

Code:

  <html dir="ltr" lang="fr"><head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body id="theCategoryPage">Warning:
   Function PluginMaintain::autoUpdate deprecated in
  /home/sys/var/www/piwigo.us/beta/mmoy/include/functions_plugins.inc.php
  on line 81
  
  <title>Une galerie Piwigo de plus</title>

et les cas où le bug ne se produit pas donnent :

Code:

  <!DOCTYPE html>
  <html dir="ltr" lang="en"><head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Une galerie Piwigo de plus</title>

Dans le premier cas, on a un </head> immédiatement, et tout le reste (y compris les <link rel="stylesheet" ...>) sont dans le <body>, et Firefox n'a pas l'air d'aimer.

Autre effet de bord du message : ça casse partiellement la page http://piwigo.us/beta/mmoy/admin.php?page=user_list, qui m'affiche un popup « DataTables warning >> (table id = 'userList'): DataTables warning: JSON data from server >> could not be parsed. This is caused by a JSON formatting error. ». En effet, il charge http://piwigo.us/beta/mmoy/admin/user_list_backend.php qui est censé envoyer du JSON mais envoie le message d'erreur avant le vrai JSON.

La bonne nouvelle : je n'ai eu le message d'erreur que parce que j'étais dans une configuration bien particulière, ça peu de chance d'arriver normalement.

La mauvaise nouvelle : un plugin pas à jour a causé des cassages à d'autres endroits qui auraient du être indépendants, et le lien de cause à effet est vraiment dur à identifier (qu'un Google2Piwigo pas à jour casse la page http://piwigo.us/beta/mmoy/admin.php?pa … le2Piwigo, c'est mérité, mais qu'il casse le rendu de la galerie, c'est beaucoup moins attendu).

J'ai l'impression que le système qui envoie le message d'erreur mériterait d'être améliorée pour éviter de casser le HTML. J'ai jeté un œil rapide aux sources, visiblement c'est

Code:

include/functions_plugins.inc.php:81:      trigger_error('Function PluginMaintain::autoUpdate deprecated', E_USER_WARNING);

qui envoie l'erreur. Je n'ai pas compris ce qui faisait envoyer un </head>, mais dans l'idéal il faudrait mémoriser l'erreur et ne l'envoyer à l'écran qu'une fois le <body> généré (comme le système de gestion des erreurs à base de $page['errors'][] = '...' ailleurs dans Piwigo). Ça éviterait d'envoyer du HTML cassé en cas de warning, tout en permettant l'affichage du message.

Dans le cas où on emmet du JSON, je ne sais pas trop quelle est la meilleure solution, mais envoyer un message d'erreur au milieu du JSON ne me parait pas idéal. Pourquoi pas tout simplement ignorer les warnings dans les fichiers comme admin/user_list_backend.php.

Version de Piwigo: 2.7.0RC1
PHP: 5.3.3-7+squeeze15
MySQL: 5.1.66-0+squeeze1
URL Piwigo: http://piwigo.us/beta/mmoy/

Hors ligne

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact