Jump to content

Manuel:Préférences utilisateur

From mediawiki.org
This page is a translated version of the page Manual:User preferences and the translation is 100% complete.

Récupérer les préférences utilisateur

Pour récupérer toutes les préférences d'un utilisateur, utiliser UserOptionsLookup::getOptions() avec un objet d'identité utilisateur comme paramètre.

Pour récupérer une préférence spécifique d'un utilisateur, utilisez UserOptionsLookup::getOption() avec une identité d'utilisateur et le nom de la préférence comme paramètre, par exemple :

$emailFrequency = MediaWikiServices::getInstance()->getUserOptionsLookup()->getOption( $this->getUser(), 'echo-email-frequency' );

Si la préférence est de type multisélection ou matrice de cases à cocher, le paramètre sera <preference-name><option-value>. Par exemple, si le nom de préférence est 'searchNs' et que la valeur de l'option est '2', le paramètre pour getOption sera 'searchNs2'. Il y a toutefois une exception à cette règle : si la préférence spécifie un préfixe explicite de l'option, ce préfixe sera utilisé à la place du nom de la préférence (<nom-du-préfixe><nom-de-l'option>). Voir l'extension Gadgets pour un exemple.

Pour le récupérer en JavaScript, utilisez le module user.options .

Définir les préférences par défaut

Pour plus d'informations sur la façon de définir les préférences par défaut pour tous les utilisateurs, voir Manuel:$wgDefaultUserOptions .

Modifier une préférence

Les préférences peuvent être modifiées par l'API action Options .

Créer une interface de préférences

Pour plus d'informations sur la création d'une interface de préférences pour vos fonctionnalités, voir Manuel:Accroches/GetPreferences .

Gadgets et préférences des scripts utilisateur

Tout gadget ou script utilisateur peut définir une préférence, dont le nom doit commencer par "userjs-". Une telle préférence n'apparaîtra pas dans les réponses de Special:Preferences ou de API:Userinfo et ne sera pas validée. On peut le lire à partir de user.options et le passer à API:Options .

Préférences masquées d'API

Les préférences de l'API sont également définies par l'accroche GetPreferences, avec le type défini à 'api'. Elles sont validées et lisibles de manière standard, mais ne font pas partie du formulaire Special:Preferences.

Désactiver les préférences utilisateur

De préférence

Version de MediaWiki :
1.16

Pour désactiver les préférences individuelles pour tous les utilisateurs, ajouter le nom des préférences à la variable de configuration $wgHiddenPrefs . Par exemple, pour empêcher les utilisateurs de pouvoir marquer leurs modifications mineures par défaut, définissez ce qui suit dans votre LocalSettings.php  :

$wgHiddenPrefs[] = 'minordefault';

Par groupe d'utilisateurs

Version de MediaWiki :
1.22

Pour empêcher les groupes d'utilisateurs individuels de modifier leurs préférences, vous pouvez utiliser le droit utilisateur 'editmyoptions'. Avec cette ligne dans votre LocalSettings.php , les utilisateurs du groupe 'user' (qui contient tous les utilisateurs connectés) ne peuvent pas modifier leurs préférences utilisateur :

$wgGroupPermissions['user']['editmyoptions'] = false;

Par utilisateur

Il n'est pas possible de désactiver uniquement certaines préférences individuelles des utilisateurs.

Ajouter des préférences dans les extensions

Dans extension.json

	"Hooks": {
		"GetPreferences": "main"
	},
	"HookHandlers": {
		"main": {
			"class": "MediaWiki\\Extension\\ExampleExtension\\Hooks",
			"services": [
				"MainConfig",
				"UserOptionsLookup"
			]
		}
	},
	"config": {
		"PersonalSettingsEnabledPageId": {
			"type": "boolean",
			"value": false
		},
		"PersonalSettingsNumberOfMostViewedPages": {
			"type": "int",
			"value": 50
		},
		"PersonalSettingsNumberOfMostViewedPages": {
			"type": "string",
			"value": "year"
		}

Dans includes/Hooks.php

namespace MediaWiki\Extension\ExampleExtension;

class Hooks implements GetPreferencesHook {
	private UserOptionsLookup $userOptionsLookup;
	private bool $enabledPageId;
	private int $numberOfMostViewedPages;
	private string $periodForLastViewedPages;

	public function __construct(
		GlobalVarConfig $config,
		UserOptionsLookup $userOptionsLookup
	) {
		$this->userOptionsLookup = $userOptionsLookup;
		$this->enabledPageId = $config->get( 'PersonalSettingsEnabledPageId' );
		$this->numberOfMostViewedPages = $config->get( 'PersonalSettingsNumberOfMostViewedPages' );
		$this->periodForLastViewedPages = $config->get( 'PersonalSettingsPeriodForLastViewedPages' );
	}

	public function onGetPreferences( $user, &$preferences ) {

		$your_new_extensions_section = 'hitcounters';

		// Une case à cocher
		$preferences_key = 'hitcounters-pageid';
		$preferences_default = $this->userOptionsLookup->getOption( $user, $preferences_key, $this->enabledPageId );
		$preferences[$preferences_key] = [
			'type' => 'toggle',
			'label-message' => 'hitcounters-pageid-label',
			'default' => $preferences_default,
			'section' => $your_new_extensions_section
		];

		// Une boîte de saisie int
		$preferences_key = 'hitcounters-numberofmostviewedpages';
		$preferences_default = $this->userOptionsLookup->getOption( $user, $preferences_key, $this->numberOfMostViewedPages );
		$preferences[$preferences_key] = [
			'type' => 'int',
			'help-message' => 'hitcounters-numberofmostviewedpages-help',
			'label-message' => 'hitcounters-numberofmostviewedpages-label',
			'maxLength' => 4,
			'default' => $preferences_default,
			'section' => $your_new_extensions_section
		];

		// Une boîte de sélection
		$ctx = RequestContext::getMain();
		$preferences_key = 'hitcounters-periodforlastviewedpages';
		$key_base = 'hitcounters-statistics-mostpopular';

		// Veiller à ce que "par défaut" soit toujours le premier élément du tableau
		$preferences_default = $period = $this->periodForLastViewedPages;
		$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
		$itemArray = [ $itemDisplayName => $period ];

		$period = 'week';
		$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
		$itemArray[$itemDisplayName] = $period;

		$period = 'month';
		$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
		$itemArray[$itemDisplayName] = $period;

		$period = 'year';
		$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
		$itemArray[$itemDisplayName] = $period;

		$usersItem = $this->userOptionsLookup->getOption( $user, $preferences_key, $preferences_default );

		$preferences[$preferences_key] = [
			'type' => 'select',
			'options' => $itemArray,
			'default' => $usersItem,
			'label-message' => "$preferences_key-label",
			'section' => $your_new_extensions_section
		];
	}
<!-- [...] -->
}

Dans i18n/en.json

{
	"hitcounters-pageid-label": "Show page ID",
	"hitcounters-numberofmostviewedpages-help": "Hide with the entry of “0”.",
	"hitcounters-numberofmostviewedpages-label": "Number of most viewed pages",
	"hitcounters-periodforlastviewedpages-label": "Period for last viewed pages:",
	"hitcounters-statistics-mostpopular-week": "Most viewed pages in the current week",
	"hitcounters-statistics-mostpopular-month": "Most viewed pages in the current month",
	"hitcounters-statistics-mostpopular-year": "Most viewed pages in the current year",
}

Voir aussi