Extension:Widgets/fr

L'extension Widgets permet de créer des pages en HTML brut pouvant être transcluses (comme les modèles) dans les pages de wiki standard. Cela est possible en créant des pages dans l'espace de noms. Elles évitent les problèmes de sécurité du HTML brut dans les pages modifiables du wiki par la restriction des droits d'édition dans l'espace de noms Widget. Beaucoup de widgets déjà écrits sont disponibles.

Téléchargement
Pour obtenir le code avec Git, entrez les commandes suivantes : Composer est un gestionnaire PHP de dépendances. Pour MediaWiki >= 1.35.2, vous devrez peut-être mettre à jour Composer à la version 2. Instructions ici.

Installation
Pour appeler cette extension, ajoutez ceci à :

De plus, il faut que le répertoire  soit accessible en écriture par le serveur Web. Voir Rendre un répertoire accessible en écriture par le serveur web. Le dossier des modèles compilés est celui où Smarty stocke les modèles pré-compilés.
 * Droits sur les répertoires

Configuration
Les étapes de cette section sont facultatives : l'extension doit fonctionner correctement même sans ces modifications, mais ces dernières vous apporteront plus de flexibilité dans le cas d'une installation Médiawiki complexe.



Utiliser FlaggedRevs pour la relecture des widgets
Vous pouvez utiliser l'extension FlaggedRevs pour activer un processus de révision de sécurité des widgets. Cela permettra à l'extension Widgets d'utiliser uniquement les versions stables des pages Widget:*. Pour faire cela, ajoutez simplement ceci à votre fichier LocalSettings.php :

Cela indique à l'extension Widgets de ne pas protéger les pages Widget:* à l'aide des droits, mais plutôt de demander à ce que les modifications soient relues pour la sécurité avant qu'elles ne puissent devenir opérationnelles.

Pour utiliser simplement FlaggedRevs pour relire les widgets, la configuration suivante devrait suffire :



Modifier le répertoire de stockage des widgets compilés
Vous pouvez utiliser la variable  pour modifier le répertoire de stockage des widgets compilés ($compile_dir dans le code). Le paramètre par défaut est

Si vous modifiez l'emplacement en positionnant le paramètre sur un autre répertoire, assurez-vous que celui-ci existe et qu'il dispose des droits d'accès corrects.



Droits utilisateur
Cette extension ajoute l'espace de noms "Widget", mais à cause de conséquences potentielles sur la sécurité pouvant résulter de l'utilisation du code non sécurisé du widget, cet espace de noms ne peut être modifié que par les utilisateurs qui ont les droits  (le groupe   est aussi créé pour lui ajouter des utilisateurs; voir la gestion des droits utilisateur pour plus de détails).

Utilisation
Pour ajouter un widget à votre installation MediaWiki, il suffit de créer une page dans l'espace de noms Widget:. Vous pouvez ensuite utiliser la fonction d'analyse  pour l'inclure dans n'importe quelle page du wiki.

Fonction d'analyseur
Pour ajouter un widget défini aux pages, les utilisateurs peuvent utiliser la fonction d'analyse. La syntaxe est la suivante :

où WidgetName est un nom de page dans l'espace de noms Widget (par exemple Widget:WidgetName) et les paires param=valeur sont les paramètres initialisables définis dans le code du widget.

Les paramètres peuvent être développés à l'intérieur d'un widget en utilisant la syntaxe Smarty, comme suit :

Les options  spécifient la manière dont le paramètre sera échappé ou encodé dans le widget résultant. Il est essentiel que tous les paramètres soient échappés pour empêcher l'attaque des scripts intersites. Certaines méthodes d'échappement sont inefficaces. En général, vous devez utiliser une valeur parmi,  ,   ou. Voir http://www.smarty.net/docsv2/en/language.modifier.escape pour plus d'informations à ce sujet.



Pages de l'espace de noms Widget
Tous les widgets du wiki sont définis en créant leur page dans l'espace de noms spécial Widget: comme par exemple Widget:WidgetName.

Pour voir tous les Widgets définis dans votre système, vous pouvez simplement aller à la page "Special:AllPages", sélectionner "Widget" dans l'espace de noms déroulant et cliquer sur "Go".

Pour des raisons de sécurité, ces pages ne peuvent être éditées que par les administrateurs du wiki - voir les droits utilisateur ci-dessus pour plus d'informations.

Vous trouverez de nombreux widgets prédéfinis à installer dans votre wiki sur MediaWikiWidgets.org. Si vous souhaitez créer vous-même des widgets, consultez la section suivante.



Syntaxe de la page Widget
L'extension Widgets utilise le moteur de modèle PHP Smarty pour fournir de simples fonctionnalité de modèle dans les pages de widget. Tous les paramètres passés à un widget sont convertis en paramètres Smarty.

Important : Utilisez les modificateurs d'échappement sur tous les paramètres passés, pour empêcher les utilisateurs de soumettre du HTML brut venant des pages wiki standard. Si vous ne protégez pas contre cela, le site d'hébergement sera exposé à des attaques XSS (et autres).

Tableaux
Si vous utilisez le même paramètre plusieurs fois, le widget recevra un tableau de valeurs. Vous pouvez utiliser pour progresser dans le tableau.



Booléens (true/false)
En plus de la gestion par défaut des conversions booléennes PHP, vous pouvez (contrairement à PHP) utiliser les valeurs  ou   pour définir la valeur Boolean. Ceci initialisera par exemple le paramètre  à   :

En outre, vous pouvez définir les paramètres Boolean à  en utilisant simplement un nom de paramètre sans valeur, comme ceci :



Notation à points
Le nom des paramètres peut comporter des points, et Smarty les interprète alors comme des tableaux associatifs, vous pouvez donc utiliser avec à la fois les attributs   et   pour passer, ou utiliser simplement le même nom avec des points si vous souhaitez référencer le paramètre directement.

Widget:AssocTest pourrait ressembler à :
 * Exemple

...et vous pourriez appeler ce Widget ainsi :

...qui sera affiché comme :


 * foo initialisé à bar
 * bar initialisé à oni



Modificateur validate
En plus des modifieurs Smarty classiques (comme  qui est utilisé intensément), l'extension Widgets implémente le modifieur , qui utilise le filtrage PHP des données permettant ainsi de valider les paramètres du widget. La validation d'un paramètre ne remplace pas l'échappement de celui-ci. Vous devez toujours utiliser un caractère d'échappement même lors de la validation. Pour la validation, les valeurs suivantes sont prises en charge (correspondance avec les filtres PHP de validation) :


 * &mdash; Valider en tant qu'URL. En évaluant les Widgets 1.4.2 vous ulilisez l'URL de validation de MediaWiki au lieu de la validation PHP. Ceci ne permet d'avoir que des schémas d'URL tels qu'ils figurent dans $wgUrlProtocols et à la différence de la validation PHP, les URL avec des caractères dangereux en HTML sont exclues. Avant Widgets 1.4.2, il utilisait le FILTER_VALIDATE_URL de PHP qui est beaucoup moins strict.
 * (FILTER_VALIDATE_URL) &mdash; Attention : valider en tant qu'URL permet encore aux URL JavaScript d'accéder au XSS. Autorise également les URL avec des caractères non sécurisés en HTML.
 * (FILTER_VALIDATE_INT) &mdash; valide la valeur en tant qu'entier, optionnellement à partir de la plage spécifiée, et convertit en int.
 * or  (FILTER_VALIDATE_BOOLEAN)  &mdash; Renvoie   pour ,  ,   et  . Renvoie   sinon.
 * (FILTER_VALIDATE_FLOAT) &mdash; valide la valeur en tant que flottant, optionnellement à partir de la plage spécifiée, et la convertit en flottant.
 * (FILTER_VALIDATE_EMAIL) &mdash; Attention : une adresse courriel valide peut toujours contenir des caractères dangereux en HTML; assurez-vous d'échapper les caractères en plus de la validation
 * (FILTER_VALIDATE_IP) &mdash; valide la valeur en tant qu'adresse IP, optionnellement uniquement en IPv4 ou en IPv6 ou non, à partir de plages privées ou réservées.
 * (FILTER_VALIDATE_DOMAIN) &mdash; Attention :  les domaines valides peuvent toujours contenir des caractères qui ne sont pas sûrs en HTML; assurez-vous d'échapper les caractères en plus de la validation.
 * (FILTER_VALIDATE_MAC) &mdash; valide la valeur en tant qu'adresse MAC.



Rafraîchir une page de widget
Si vous faites appel au widget dans la page du widget lui-même, vous ne verrez pas le widget mis à jour (ni aucun autre widget, si vous venez de créer une page). Cela se produit parce que le contenu de la page n'est pas disponible pour l'extension Widgets tant que la page n'est pas sauvegardée, mais l'appel à la fonction d'analyse  est réalisé avant que la page ne soit enregistrée. Une fois la page sauvegardée, elle est mise en cache par MediaWiki, vous ne verrez donc pas le résultat même si vous chargez la page via le navigateur. Pour rendre effectifs les dernières modifications du code du widget, vous devez rafraîchir la page dans le cache; pour cela, il suffit d'utiliser l'action  (voir aussi l'extension Purge), ou attendre un certain temps (jusqu'à 24 heures).



Widgets et modèles
Placer les widgets dans des modèles en fait un outil inestimable pour créer des affichages complexes de données avec un nombre de lignes de code minimal.

C'est particulièrement utile si vous souhaitez préinitialiser des paramètres du widget tout en permettant aux utilisateurs de modifier les autres (par exemple l'identifiant vidéo du widget YouTube ou le nom d'utilisateur du widget Twitter).

Auteurs
L'extension widgets a été créée et conçue par Sergey Chernyshev. Il est actuellement maintenue par Yaron Koren, qui a également contribué à la base de code.

D'autres contributions importantes ont été apportées par Alexandre Emsenhuber, Jeroen De Dauw, Joshua Lerner, Majr, Sam Reed et Tim Starling.



Historique des versions

 * 1.4.2 (2023-02-14) - Conversion améliorée du langage, validation améliorée, suppression du point d'accès Widgets.php
 * 1.4.1 (2020-12-10) - validation Smarty améliorée
 * 1.4.0 (2018-10-10) - Ajout du fichier extension.json, suppression de la compatibilité avec MW 1.29 et plus ancien, téléchargement de Smarty via Composer plutôt qu'en tant que sous-module Git, suppression du Makefile
 * 1.3.0 (2017-08-03) - Suppression du shim PHP i18n, arrêt de la compatibilité avec MW 1.22 et plus ancien
 * 1.2.2 (2017-04-14) - Compatibilité rétablie avec MW 1.27 et plus ancien
 * 1.2.1 (2015-11-09) - Modifications mineures : amélioration du débogage, licence à afficher sur Special:Version
 * 1.2.0 (2015-04-29) - Possibilité de supprimer la sortie arbitraire HTML, support ajouté pour PHP 5.3
 * 1.1.0 (2014-05-28) - messages i18n déplacés dans des fichiers JSON, corrections pour MediaWiki 1.21+, nouveau paramètre pour la définition de l'emplacement de stockage des widgets compilés, suppression de la prise en charge de PHP 5.2 et plus ancien
 * 1.0 (2013-02-21) - Problème de sécurité corrigé.
 * 0.10.1 (2013-02-20) - Smarty ajouté comme sous-module de Git, et mise à jour vers la version 3.1.7.
 * 0.10.0 (2012-01-19) - Droits 'editwidgets' attribués par défaut aux administrateurs système, support supprimé pour les versions MediaWiki antérieures à la 1.16.
 * 0.9.2 (2011-01-12) - correctifs PHP.
 * 0.9.1 (2010-09-19) - Certaines modifications de la structure du code et correction du bogue 25219.
 * 0.9 (2010-04-16) - Ajout de support pour l'extension FlaggedRev contrôlant la révision du widget.
 * 0.8.10 (2009-11-27) - Version de sécurité: correction d'une faille de sécurité dans le message d'erreur.
 * 0.8.9 (2009-11-11) - Correction de bogue : base64 n'a pas été correctement identifié ce qui a fait que certains widgets n'ont pas été affichés.
 * 0.8.8 (2009-11-02) - Le HTML est inséré tel quel, grâce à Joshua C. Lerner.
 * 0.8.7 (2009-06-19) - problèmes d'espaces de noms et de problèmes i18n corrigés par ialex.
 * 0.8.6 (2009-05-22) - quelques corrections importantes de sécurité de Tim Starling.
 * 0.8.5 (2009-03-12) - Permettre aux paramètres sans valeurs de fonctionner comme des booléens à  et de convertir les tests faux en booléens   (ce qui n'est pas le cas dans PHP lui-même).
 * 0.8.4 (2009-03-11) - Version de sécurité mineure - les modèles Smarty compilés ne peuvent pas être accédés directement. un problème également corrigé avec les modèles compilés qui, étant vides dans les archives, ne sont pas extractibles par certains logiciels.
 * 0.8.3 (2009-02-10) - Modificateur 'validate' ajouté qui assure que la valeur de la variable est conforme aux règles de validation (en utilisant https://php.net/filter).
 * 0.8.2 (2009-01-27) - Correction d'un bogue où les widgets ne s'affichent pas correctement sur les anciennes versions des pages. Merci à Max Ingleton pour le rapport de faute.
 * 0.8.1 (2008-06-25) - Travail sur un bogue MediaWiki qui insère devant la sortie du widget.
 * 0.8.0 (2008-06-10) - Correction d'un bogue où les variables ont été transférées d'un widget à un autre sur la même page
 * 0.7.0 (2008-05-23) - Ajout du support pour les tableaux et la notation pointée de Smarty
 * 0.6.0 (2008-05-09) - Corrections mineures et correction de bogues, diffusion du Makefile
 * 0.5.0 (2008-02-11) - Première version publique



Widgets contributeurs
Si vous avez créé un widget et que vous souhaitez le partager, n'hésitez pas à le publier sur le site web MediaWikiWidgets.org et à y ajouter sur cette page, sa référence dans la bibliothèque de widget.



Bogues et demandes de fonctionnalités
Si vous rencontrez un problème, ou voulez contribuer à une correction, ou encore demander une nouvelle fonctionnalité, n'hésitez pas à rédiger une demande dans l'outil Wikimedia de suivi des bogues :

https://phabricator.wikimedia.org/maniphest/task/create/?projects=MediaWiki-extensions-Widgets

Résolution des problèmes
Il existe quelques problèmes communs que les utilisateurs rencontrent lorsqu'ils commencent à utiliser l'extension Widgets - nous allons essayer de les documenter ici :


 * Sur une page de widget, juste après l'avoir créé (ou copié à partir de MediaWikiWidgets.org) vous voyez le message :

Warning: Smarty error: unable to read resource: "Widget:" /../extensions/Widgets/ smarty/Smarty.class.php on line 1095


 * Ceci est le plus souvent causé par le widget qui n'existe pas encore au moment où la page du widget elle-même est traitée - pour résoudre cela, il suffit de purger la page, par exemple, d'ajouter &action=purge (ou ?action=purge si vous avez des URL courtes) à l'URL.
 * Il est également possible que le Widget n'ait pas été appelé de la bonne façon. Les noms des pages de widget sont sensibles à la casse et doivent correspondre au nom du widget que vous appelez. Par exemple, n'utilisez pas quand le widget s'appelle Widget:YouTube, et vice versa.

PHP Fatal error: Smarty error: unable to write to $compile_dir '/../extensions/Widgets/compiled_templates'. Be sure $compile_dir is writable by the web server user. in /../extensions/Widgets/smarty/Smarty.class.php on line 1095, referer: https://your-wiki.com/Widget:
 * Si la page ne se charge pas et que vous voyez le message d'erreur suivant dans le fichier journal :
 * Vérifiez si vous avez modifié les droits et le propriétaire pour que Smarty puisse y stocker les modèles compilés. Voir aussi ce billet pour plus de détails.


 * Si votre wiki envoie des pages totalement vides ou des erreurs 500 après une mise à jour vers MediaWiki 1.20 ou une version ultérieure, essayez de définir les autorisations sur /../extensions/Widgets/compiled_templates à 777.



Bibliothèque de widgets
MediaWikiWidgets.org contient une bibliothèque complète de widgets déjà prêts à l'emploi, avec le support pour la plupart des principaux sites vidéo. Tout widget peut être utilisé en copiant simplement le contenu sur la page.

Pour obtenir la liste la plus récente des widgets, cliquez ici.

<span id="Extensions_that_can_be_replaced_with_widgets">

Extensions qui peuvent être remplacées par des widgets
Nous rassemblons une liste d'extensions qui peuvent être remplacées par des widgets parce qu'elles ne font que produire du HTML/JS/CSS avec des paramètres et une logique simple pouvant être réalisée à l'aide de modèles Smarty.

Peut-être quelqu'un viendra créer un widget pour cela qui simplifiera le déploiement. En outre, ces listes d'extensions sont une bonne source d'action :



<span id="Frequently_asked_questions">

Foire aux questions
Utilisez quelque chose comme ceci. Notez que les balises de rupture de ligne doivent être ajoutées manuellement. 180px est utilisé pour la largeur car c'est la valeur par défaut pour les vignettes. 150px est utilisé pour la hauteur parce que cela garde le même ratio que pour le 350x420 par défaut.
 * Comment aligner une vidéo à droite avec les autres images ?

<span id="See_also">

Voir aussi

 * - liste des extensions qui permettent l'inclusion de HTML brut