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 :

This will tell the Widgets extension not to protect Widget:* pages using permissions, but rather require changes to be reviewed for security before they can take effect.

To just use FlaggedRevs to review widgets, the following configuration should suffice:



Modifier le répertoire de stockage des widgets compilés
You can use the  variable to change the directory for storing the compiled widgets ($compile_dir in the code). The default setting is

If you change the location by setting the parameter with another directory, make sure that it exists and has the correct permissions.



Droits utilisateur
This extension adds a namespace called "Widget", but due to potential security implications that can result from using insecure widget code, this namespace is only editable by users who have the  permission (the   group is also created to add users to; see Help:User rights management for more details).

Utilisation
To add a widget to your MediaWiki installation, just create a page in the Widget: namespace. You can then use the  parser function to include it in any page in the wiki.



Fonction d'analyseur
To add a defined widget to pages, users can use the  parser function. The syntax is as follows:

Where WidgetName is a page name in the Widget namespace (e.g. Widget:WidgetName) and param=value pairs are the settable parameters, defined within the widget code.

Parameters can be expanded inside a widget using Smarty syntax, as follows:

The  options specifies how the parameter will be 'escaped', or encoded, in the resultant Widget. It is critically important that all parameters are escaped to prevent cross-site scripting vulnerabilities. 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
All widgets in the wiki are defined by creating pages in the special "Widget:WidgetName" namespace, like e.g. "Widget:WidgetName".

To see all Widgets defined in your system, you can simply go to the page "Special:AllPages", select "Widget" in the namespace dropdown and click "Go".

For security reasons, these pages are only editable by wiki administrators - see User rights above for more info.

You can find many pre-defined widgets to install in your wiki at MediaWikiWidgets.org. Si vous souhaitez créer vous-même des widgets, consultez la section suivante.



Syntaxe de la page Widget
The Widgets extension uses the Smarty PHP templating engine to provide simple templating functionality within widget pages. Tous les paramètres passés à un widget sont convertis en paramètres Smarty.

Important : Use escape modifiers on all passed-in parameters to prevent users from passing in raw HTML from normal wiki pages. 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. You can use to go through the array.



Booléens (true/false)
In addition to PHP's default handling of Boolean conversions, you can (unlike in PHP) use the values "true" or "false" to set the Boolean value. The following would set the  parameter to , for example:

In addition, you can set Boolean parameters to  by just using a parameter name without a value, like this:



Notation à points
Parameter names can have dots, and Smarty will interpret them as associative arrays, so you can use with both   and   attributes to traverse through them, or you can just use the same name with dots if you want to reference the parameter directly.

Widget:AssocTest might look like this:
 * Exemple

...and you might call this Widget as follows:

..which would be displayed as:


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



Modificateur validate
In addition to standard Smarty modifiers (like the heavily used ), the Widgets extension implements the   modifier, that uses PHP Data filtering to allow for validating widget parameters. Validating a parameter is not a replacement for escaping a parameter. You should still use an escape modifier even when validating. The following values for the validate are supported (mapping to PHP's validation filters):


 * &mdash; Valider en tant qu'URL. Staring in Widgets 1.4.2 this uses MediaWiki's url validation instead of PHP's validation. This only allows url schemes listed in $wgUrlProtocols and unlike PHP validation does not allow urls with characters dangerous in HTML. Prior to Widgets 1.4.2 this used PHP's FILTER_VALIDATE_URL which is much less strict.
 * (FILTER_VALIDATE_URL) &mdash; Warning: Validating as a URL still allows JavaScript URLs that can lead to XSS. Autorise également les URL avec des caractères non sécurisés en HTML.
 * (FILTER_VALIDATE_INT) &mdash;
 * or  (FILTER_VALIDATE_BOOLEAN)  &mdash;
 * (FILTER_VALIDATE_FLOAT) &mdash;
 * (FILTER_VALIDATE_EMAIL) &mdash; Warning: Valid email address can still contain characters that are unsafe in HTML, be sure to escape in addition to validating
 * (FILTER_VALIDATE_IP) &mdash;
 * (FILTER_VALIDATE_DOMAIN) &mdash; Warning: Valid domains can still contain characters that are unsafe in HTML, be sure to escape in addition to validating.
 * (FILTER_VALIDATE_MAC) &mdash;



Rafraîchier une page de widget
If you're using a call to the widget within the widget page itself, then you will not see the updated widget (and no widget at all when you just created a page). This happens because the page contents are not available to the Widgets extension until a page is saved, but the call to the  parser function is made before the page is saved. 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. To make the latest edits to the widget code appear, you need to refresh the page in the cache; to do this, you just need to use the  action (see also Purge extension), or wait a certain amount of time (up to 24 hours).



Widgets et modèles
Placing widgets within templates makes them an invaluable tool for creating complex displays of data with minimal lines of code.

It is particularly helpful if you want to preset some parameters of the widget while allowing users to modify others (e.g. video ID for the YouTube widget or username for the Twitter widget).

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.

<span id="Widget_library">

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?