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