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èles 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:WidgetName 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 "true" ou "false" 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; Validates value as integer, optionally from the specified range, and converts to int on success.
 * or  (FILTER_VALIDATE_BOOLEAN)  &mdash; Returns true for "1", "true", "on" and "yes". Returns false otherwise.
 * (FILTER_VALIDATE_FLOAT) &mdash; Validates value as float, optionally from the specified range, and converts to float on success.
 * (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; Validates value as IP address, optionally only IPv4 or IPv6 or not from private or reserved ranges.
 * (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; Validates value as MAC address.



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 (February 14, 2023) - Improved language conversion, improved validation, removed Widgets.php entry point
 * 1.4.1 (December 10, 2020) - Improved Smarty validation
 * 1.4.0 (October 10, 2018) - Added extension.json file, dropped compatibility with MW 1.29 and earlier, Smarty downloaded via Composer rather than Git submodule, removed Makefile
 * 1.3.0 (August 3, 2017) - Removed i18n php shim, dropped compatibility with MW 1.22 and earlier
 * 1.2.2 (April 14, 2017) - Restored compatibility with MW 1.27 and later
 * 1.2.1 (November 9, 2015) - Minor changes: improved debugging, license to show on "Special:Version"
 * 1.2.0 (April 29, 2015) - Possibility of arbitrary HTML output removed, support added for PHP 5.3
 * 1.1.0 (May 28, 2014) - i18n messages moved into JSON files, fixes for MediaWiki 1.21+, new parameter for setting the storage location of compiled widgets, removed support for PHP 5.2 and earlier
 * 1.0 (February 21, 2013) - Security leak fixed.
 * 0.10.1 (February 20, 2013) - Smarty added as a Git submodule, and updated to version 3.1.7.
 * 0.10.0 (January 19, 2012) - 'editwidgets' permission given to sysops by default, support removed for MediaWiki < 1.16.
 * 0.9.2 (January 12, 2011) - PHP fixes.
 * 0.9.1 (September 19, 2010) - Some code structure changes and fix to a bug 25219.
 * 0.9 (April 16, 2010) - Added support for FlaggedRev extension controlling Widget review.
 * 0.8.10 (November 27, 2009) - Security Release: Fixed a security hole in error message.
 * 0.8.9 (November 11, 2009) - Bugfix release: base64 wasn't identified properly which caused some widgets not to be displayed.
 * 0.8.8 (November 2, 2009) - HTML is inserted as-is, thanks to Joshua C. Lerner.
 * 0.8.7 (June 19, 2009) - namespaces issues and i18n issues fixed by ialex.
 * 0.8.6 (May 22, 2009) - some important security fixes by Tim Starling.
 * 0.8.5 (March 12, 2009) - Allowing parameters without values to work as bulean "true" and converting test "false" into boolean false (which is not the case in PHP itself).
 * 0.8.4 (March 11, 2009) - Minor security release - compiled Smarty templates can't be accessed directly. Also fixed a problem with compiled_templates being empty in archives and therefore not extractable by some software.
 * 0.8.3 (February 10, 2009) - Added 'validate' modifier that makes sure variable value conforms to validation rules (using https://php.net/filter).
 * 0.8.2 (January 27, 2009) - Fixed a bug when widgets were not showing up correctly on old versions of the pages. Thanks to Max Ingleton for a bug report.
 * 0.8.1 (June 25, 2008) - Worked around MediaWiki bug that inserts in front of widget output.
 * 0.8.0 (June 10, 2008) - Fixed a bug where variables were carried over from one widget to another on the same page
 * 0.7.0 (May 23, 2008) - Added support for arrays and Smarty's dotted notation
 * 0.6.0 (May 9, 2008) - Minor tweaks and bug fixes, release Makefile
 * 0.5.0 (Feb 11, 2008) - First public release



Widgets contributeurs
If you created a widget and would like to share it, feel free to post it to MediaWikiWidgets.org website and to add a reference to it to the Widget library on this page.



Bogues et demandes de fonctionnalités
If you found a problem, would like to contribute a patch or request a new feature, feel free to open a bug in the Wikimedia bug tracker:

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

Résolution des problèmes
There are a few common problems that users encounter when they start to use Widgets extension - we'll try to document them here:


 * On a widget page, right after you just created it (or copied from MediaWikiWidgets.org) you see the message:

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


 * This is most likely caused by the widget not yet existing at the moment when the widget page itself is being processed - to solve this simply purge the page, e.g. add &action=purge (or ?action=purge if you have nice URLs) to the URL.
 * It's also possible that you called the Widget incorrectly. Widget page names are case sensitive and must match the name of the widget you're calling. E.g. don't use when the widget is called "Widget:YouTube", or 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:
 * If the page doesn't load and you see the following error message in the log file:
 * Check if you changed permissions and owner for Smarty to store compiled templates in. See also this post for further details.


 * If your wiki began returning totally white pages or 500 errors when you updated MediaWiki to 1.20 or a later version, try setting the permissions on /../extensions/Widgets/compiled_templates to 777.



Bibliothèque de widgets
MediaWikiWidgets.org contains a full library of ready-made widgets, including support for most of the major video sites. Any widget can be used simply by copying over the contents of the page.

To get the most up-to-date list of widgets, click here.

<span id="Extensions_that_can_be_replaced_with_widgets">

Extensions pouvant être remplacées par des widgets
Let's collect a list of extensions that can be replaced with widgets because all they do is output some HTML/JS/CSS with parameters and simple logic that can be done using Smarty templates.

Maybe someone will come and create a widget for that to simplify deployment. Also, these lists of extensions are a good source for action:



<span id="Frequently_asked_questions">

Foire aux questions
Use something like this. Note that the line break tags will have to be added manually. 180px is used for width because that is the default for thumbnails. 150px is used for height because that keeps the same ratio as for the default 350x420.
 * How do I get a video to align to the right with the other images?