Jump to content

Extension:Replace Text

From mediawiki.org
This page is a translated version of the page Extension:Replace Text and the translation is 100% complete.
Cette extension est fournie avec MediaWiki 1.31 et supérieur. Ainsi vous n'avez pas besoin de la télécharger à nouveau. Néanmoins, vous devez encore suivre les autres instructions fournies.
Manuel des extensions MediaWiki
ReplaceText
État de la version : stable
Implémentation Page spéciale
Description Fournit un formulaire permettant aux administrateurs de remplacer les chaînes sur l'ensemble du wiki, à la fois dans le contenu et le titre des pages
Auteur(s) Yaron Koren <yaron57@gmail.com> et Niklas Laxström
Dernière version 1.8
Politique de compatibilité Versions ponctuelles alignées avec MediaWiki. Le master n'est pas compatible arrière.
MediaWiki 1.31+
Licence Licence publique générale GNU v2.0 ou supérieur
Téléchargement
  • $wgReplaceTextResultsLimit
  • replacetext
Utilisé par les wikis publics 1,812 (Ranked 200th)
Traduire l’extension Replace Text sur translatewiki.net si elle y est disponible
Problèmes Tâches ouvertes · Signaler un bogue

Replace Text est une extension de MediaWiki qui fournit une page spéciale, ainsi qu'un script de ligne de commande, pour permettre aux administrateurs de faire côté serveur un chercher-remplacer de chaîne global, sur le texte et les titres des pages de contenu du wiki.

L'opération de remplacement de texte est une opération différée et validée dans la file d'attente des travaux. Vous pouvez exécuter runJobs.php à partir du dossier maintenance pour effectuer le remplacement immédiatement et traiter la file d'attente des travaux.

Installation

  • Téléchargez et placez le(s) fichier(s) dans un répertoire appelé ReplaceText dans votre dossier extensions/.
    Les développeurs et les contributeurs au code doivent à la place installer l'extension à partir de Git en utilisant:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/ReplaceText
  • Ajoutez le code suivant à la fin de votre fichier LocalSettings.php  :
    wfLoadExtension( 'ReplaceText' );
    
  • Par défaut, seuls les membres du groupe d'utilisateurs "sysop" ont accès à la fonctionnalité Remplacer le texte. Vous pouvez ajouter ou modifier l'ensemble d'utilisateurs autorisés en modifiant le tableau $wgGroupPermissions dans LocalSettings.php. Pour ajouter la permission aux utilisateurs de "bureaucrat" ou "bot" ajoutez par exemple ceci :
    $wgGroupPermissions['bureaucrat']['replacetext'] = true;
    
  • Yes Fait – Accédez à Special:Version sur votre wiki pour vérifier que l'extension a bien été installée.

Utilisation

Replace Text définit la page spéciale Special:ReplaceText (ou son équivalent dans une autre langue), qui gère la recherche globale et le remplacement; il définit également le script replaceAll.php qui fait la même chose mais à partir de la ligne de commande. Ce document couvre d'abord la page spéciale, puis le script de ligne de commande.

La page Special:ReplaceText affiche initialement un formulaire pour qu'un administrateur remplisse les détails de la recherche et du remplacement : l'administrateur entre une chaîne de recherche et la chaîne de remplacement, l'ensemble des espaces de noms sur lequel effectuer la recherche, et choisir de remplacer le texte dans le contenu de la page, dans son titre ou dans les deux. En option, l'administrateur peut également ajouter deux filtres supplémentaires : le nom d'une catégorie à laquelle toutes les pages doivent appartenir et le préfixe par lequel tous les noms de pages doivent commencer. Lorsque ce formulaire est soumis, une liste de toutes les pages contenant cette chaîne de recherche ou de toutes les pages dont les titres contiennent la chaîne de recherche, ou les deux, s'affiche. À côté de chaque nom de page figure une case à cocher pour chaque page, afin que l'on puisse désélectionner les pages que l'on ne souhaite pas remplacer. L'utilisateur peut alors appuyer sur Remplacer pour effectuer le remplacement réel. Une fois qu'un remplacement de texte est fait, il n'est pas directement annulable; bien que vous puissiez toujours exécuter un remplacement inverse, en remplaçant la nouvelle chaîne par la chaîne d'origine. Pour cette raison, si la chaîne de remplacement est vide ou s'il s'agit d'une chaîne qui existe déjà dans le wiki, l'utilisateur reçoit un message d'avertissement.

Si la chaîne de recherche est contenue plusieurs fois sur une page, toutes ces instances sont remplacées. Les remplacements de chaque page s'affichent sous la forme d'une modification wiki (mineure), avec l'administrateur qui a effectué le remplacement de texte comme l'utilisateur qui a effectué l'édition et un résumé d'édition qui ressemble à « Remplacement de texte : chaîne à remplacer en nouvelle chaîne».

Le titre d'une page ne peut pas être déplacé vers un titre qui existe déjà dans le wiki, ou vers un titre à plusieurs lignes. Les pages qui ne peuvent pas être déplacées seront simplement listées sur la page de sélection comme étant non déplaçables, sans case à cocher près d'elle.

La recherche est sensible à la casse. Voir ci-dessous pour savoir comment le rendre insensible à la casse.

Considérations

  1. ReplaceText ne traite que 250 pages à la fois par défaut. Pour changer cela, vous pouvez affecter $wgReplaceTextResultsLimit à une valeur plus grande dans votre fichier LocalSettings.php. Cependant, vous pouvez être limité par le max_input_vars de PHP ; si l'extension signale un tel avertissement, vous devrez peut-être le changer.
  2. Tous les remplacements sont placés dans la file d'attente des travaux. Ainsi, si vous devez traiter un grand nombre de pages, vous devrez exécuter Replace Text puis "runJobs.php" (potentiellement plusieurs fois).

Utiliser les expressions régulières

Si vous utilisez une base de données MySQL ou PostgreSQL, vous verrez une case à cocher "Utiliser des expressions régulières" dans le formulaire Special:ReplaceText. Cette case à cocher n'apparaît pas pour les bases de données SQLite, car SQLite n'a pas d'opérateur natif « REGEXP ».

Si vous cliquez sur cette case, vous pouvez utiliser les expressions régulières, ou regexps, dans les chaînes de recherche et de remplacement. L'ensemble des expressions régulières autorisées est essentiellement un petit sous-ensemble de l'ensemble des expresssions régulières PHP et, MySQL ou PostgreSQL. Les caractères spéciaux que l'on peut utiliser dans la chaîne de recherche sont « ( ) . * + ? [ ] | », et dans la chaîne de remplacement on peut avoir des valeurs comme $1, $2 etc. (pour les utiliser comme caractères standard il suffit de les faire précéder de l'échappement « \ » - ce que vous devriez également faire avec le caractère « / »). Cette section ne fournira pas de tutoriel sur l'utilisation des expressions régulières (l'article de Wikipedia est un bon point de départ pour cela, comme cette page sur les expressions régulières MySQL), mais voici l'exemple de base présenté dans l'explication en ligne :

Chaîne à rechercher - a(.*)c
Chaîne de remplacement - ac$1

Cela recherche les pages contenant la lettre a, la lettre c, et tout texte figurant entre les deux (représenté par .*). Il va mettre ensuite le texte du milieu après le a et le c - le $1 dans la chaîne de remplacement se réfère au premier élément de la chaîne de recherche se trouvant entre les parenthèses (dans ce cas, il n'y en a qu'un).

Pour chaque page où le remplacement est réellement appelé, celui-ci se produit pour chaque occurrence de la chaîne de recherche et pas seulement une fois, comme cela se produit avec les expressions régulières et non-régulières.

Expressions régulières plus complexes

Chaîne à rechercher - hello([0-9]*)\.([0-9]*)
Chaîne de remplacement - $1,$2

Cela va remplacer hello222.555 par 222,555 et hello2.55" with "2,55

D'abord le mot hello est trouvé. Puis entre crochets nous avons une expression qui identifie des chiffres 0-9. L'astérisque suivant identifie plusieurs correspondances de l'élément précédent. Les crochets et l'astérisque sont entourés de parenthèses, donc nous avons la correspondance du terme complet et nous le transférons dans $1. Le \. indique qu'il s'agit d'un vrai point, et non d'un caractère spécial. La deuxième expression entre parenthèses est trouvée et insérée dans $2.

Remplacements suivis de nombres

Ceci ne fonctionnera pas :

Chaîne à rechercher - 123(.*)456
Chaîne de remplacement - $1123456

That's because the search will think the number of the replacement is 1123456, not 1. Au lieu de cela, vous devriez avoir :

Chaîne de remplacement - {$1}123456

En général, vous pouvez toujours mettre les valeurs numérotées entre parenthèses.

Recherche indépendante de la casse

Pour rendre votre recherche insensible à la casse, utilisez l'expression régulière avec le modificateur d'insensibilité à la casse (?i) :

Chaîne à rechercher - (?i)iphone
Chaîne de remplacement - iPhone

Ceci recouvrira les occurences de iPhone, iPhone, IPHONE comme s'il s'agissait de iPhone.

Encapsuler les horodatages

Si vous avez un texte contenant des références de temps (comme les points de synchronisation d'une vidéo) dans le formulaire hh:mm:sshh et mm ne sont pas complétés par des zéros et où hh: peut ne pas être présent - par exemple :

0:03
Blah blah blah
11:21
Blah blah blah
2:31:54
Blah blah blah

et que vous voulez encapsuler les horodatages dans des balises span par exemple. Vous pouvez écrire :

  • Text original : ((([01]?\d|2[0-3]):)?[0-5]?\d:[0-5]\d)
  • Chaîne de remplacement : <span class="timespan">$0</span>

Ce qui donnera :

<span class="timespan">0:03</span>
Blah blah blah
<span class="timespan">11:21</span>
Blah blah blah
<span class="timespan">2:31:54</span>
Blah blah blah

(remerciements particuliers pour : https://matrix.to/#/@alex.mashin:matrix.org)

Script en ligne de commande : replaceAll.php

Replace Text propose le script replaceAll.php dans le répertoire extensions/ReplaceText/maintenance, qui peut être exécuté en mode ligne de commande, et qui fait les mêmes remplacements globalement que ceux réalisés par la page Special:ReplaceText. Les deux premiers arguments de ce script doivent être le texte de recherche et le texte de remplacement; vous pouvez appeler ce script simplement comme suit :

php replaceAll.php "Leningrad" "St. Petersburg"

Si vous utilisez des valeurs numérotées comme $1 dans la chaîne de remplacement, vous devez les échapper à l'intérieur de guillemets comme "ac\$1" ou utiliser des apostrophes simples. Sinon, le shell mettra des espaces vides à leur place car il pense que ce sont des variables.

D'autres arguments et drapeaux sont possibles pour ce script :

Description Valeur par défaut
--dry-run ne trouve que les textes recherchés, sans effectuer de remplacement effectif
--regex les expressions régulières doivent être utilisées false
--user utilisateur auteur des remplacements utilisateur avec l'ID 1
--yes répondre automatiquement aux invites en leur attribuant un yes par défaut
--summary définit un résumé personnalisé des modifications pour les modifications de remplacement
--rename renommer le titre des pages au lieu de remplacer le contenu
--bot-edit marquer toutes les modifications comme ayant été faites par un robot
--ns liste des espaces de noms à rechercher séparés par des virgules
--nsall recherche sur tous les espaces de noms; redéfinit la valeur de --ns.
--replacements nom du fichier qui contient la liste des remplacements à réaliser, séparés par des caractères de tabulation
--debug afficher les remplacements réalisés
--category chercher les pages uniquement dans cette catégorie
--prefix chercher uniquement les pages dont le nom commencent par cette chaîne

En outre, il existe deux drapeaux qui impriment strictement des informations utiles qui ne sont pas liées à un remplacement spécifique de texte :

Description Valeur par défaut
--show-file-format afficher une description du format de fichier à utiliser avec --replacements
--listns afficher une liste de tous les espaces de noms de ce wiki

(Toutes ces options sont déjà disponibles en appelant php replaceAll.php --help.)

Assigner des remplacements à un utilisateur

Par défaut tous les remplacements sont crédités dans la page historique, à l'utilisateur qui les a initiés. Néanmoins, il est possible que les remplacements soient crédités à un utilisateur prédéfini -- tel que le compte d'un robot -- en ajoutant une ligne telle que celle-ci dans LocalSettings.php, après l'inclusion de Replace Text :

$wgReplaceTextUser = "MyReplaceTextBot";

Le nom spécifié d'utilisateur doit être celui d'un compte déjà existant sur le wiki. Il sera ajouté à la table des noms d'utilisateurs de MediaWiki, qui peuvent ne pas être enregistrés, ni connectés à partir de lui.

Auteurs

Replace text a été principalement écrit par Yaron Koren que vous pouvez contacter à yaron57@gmail.com. Les contributions importantes ont été également apportées par Niklas Laxström, Ankit Garg (qui a contribué à la plupart du code sur les expressions régulières), Mark Hershberger (qui à écrit le script en mode ligne de commande), Brent Laabs, Cindy Cicalese, Nikhil Kumar, Umherirrender, James Forrester, Fomafix, Marijn van Wezel, Sahaj Khandelwal et autres.

Historique des versions

La version actuelle de Replace Text est la 1.8 . Voir l'historique des versions complet.

Captures d’écran

Vous trouverez ci-dessous les images du flux de travail de Replace Text. Premièrement, la page initiale dans laquelle « George F. Will » et « George Will » sont entrées pour la chaîne cible et la chaîne de remplacement respectivement, et le remplacement du texte dans le titre des pages est également spécifié, sur Discourse DB :

Note Note : les boutons All (tous) et None (aucun) ne s'affichent qu'avec l'habillage Vector ou les habillages basés sur celui-ci.

Voici l'aspect de la page après que l'utilisateur ait cliqué sur Continue :

En cliquant sur Replace, cette valeur sera remplacée dans toutes les pages énumérées, et déplacée à la fin à sa nouvelle valeur.

Problèmes connus

  • Les actions de remplacement elles-mêmes sont structurées comme des tâches de MediaWiki, pour s'assurer que le système ne soit pas surchargé si l'utilisateur veut en faire plusieurs en même temps. Cela signifie qu'un grand nombre de remplacements ne se fait pas d'un seul coup, mais qu'il peut prendre des minutes, des heures voire plus avant de se terminer. Normalement, les tâches sont activées à chaque fois qu'une page est vue sur le wiki; pour accélérer le processus (ou le ralentir), vous pouvez modifier le nombre de tâches exécutées lorsqu'une page sera vue; la valeur par défaut est 1. Ainsi, une requête Replace Text peut s'arrêter peu de temps après son démarrage si l'activité de l'interface utilisateur n'est pas suffisante pour dépasser les autres sources de nouvelles tâches par lot. Voir la page $wgJobRunRate pour plus d'informations sur la façon de modifier la valeur par défaut. Pour forcer le wiki à exécuter toutes les tâches immédiatement, allez au shell et exécutez le script runJobs.php ; il n'y a généralement pas de possibilité pour le faire à partir de l'interface utilisateur du wiki.
  • Pour faire fonctionner les tâches sur un wiki rarement utilisé, par exemple un wiki de travail pour une petite équipe de projet de hobby, vous pouvez par exemple forcer un rafraîchissement de la page spéciale « Toutes les pages ». Cela peut être fait par exemple en utilisant le script de shell suivant sur Unix :
#!/bin/bash
# $0 is the script name, $1 id the first ARG, $2 is second...
ITERATIONS=$1
WAIT=$2

n=1
while [ $n -le $ITERATIONS ]
do
	echo "Iteration $n/$ITERATIONS"
	# Getting a special page that must be regenerated forces the wiki's queued jobs to be run, the resulting download is discarded
	wget -nv --output-document=/dev/null http://yourwiki.tld/index.php/Special:AllPages
	echo "  wget OK"
	sleep $WAIT
	echo "  wait OK"
	n=$(( n+1 ))
done
  • Si vous avez encore des problèmes pour faire exécuter les tâches Replace Text, l'ajout de ce qui suit à LocalSettings.php peut résoudre le problème :
$wgRunJobsAsync = false;
  • Pour que les redirections ne soient pas créées lors des déplacements de la page (c'est-à-dire si la case « Enregistrer les anciens titres en redirection vers des nouveaux titres » n'est pas activée), vous devrez donner à l'utilisateur concerné le droit de supprimer les redirections. En supposant que vous avez donné les droits replacetext à un groupe utilisateur trusted-editor, vous devez ajouter ce qui suit à LocalSettings.php :
$wgGroupPermissions['trusted-editor']['suppressredirect'] = true;
  • Si vos révisions sont compressées (c'est-à-dire si $wgCompressRevisions est activé dans LocalSettings.php ou si le script compressOld.php a été exécuté avec l'option -t gzip) alors ReplaceText ne fonctionnera pas, car il utilise des requêtes SQL qui ne peuvent pas rechercher du texte compressé. (voir l'extension MassEditRegex en tant qu'alternative dans ce cas).
  • Si vous avez un grand nombre de remplacements, certains d'entre eux peuvent ne pas être effectués; ou vous pouvez voir un message d'erreur qui dit « Vous devez sélectionner au moins un espace de noms ». Dans les deux cas, la limite repose sur le nombre d'entrées du formulaire accepté par PHP. Ceci peut être corrigé de plusieurs manières :
    • Si l'extension PHP Suhosin est installée sur votre serveur, cela peut être la source du problème. Vous pouvez augmenter la valeur des variables suhosin.post.max_vars et suhosin.request.max_vars; ou simplement essayer de désactiver temporairement Suhosin pendant que vous faites les remplacements.
    • Le paramètre PHP max_input_vars (disponible depuis PHP 5.3.9) affecte également le nombre de remplacements que vous pouvez faire à tout moment - vous pouvez essayer de l'initialiser avec une trés grande valeur, comme 3 000.

Traductions

La traduction de Replace Text se fait sur translatewiki.net. La traduction pour cette extension se trouve sur translatewiki.net. Pour ajouter de nouvelles langues ou pour modifier les valeurs existantes, vous devez créer un compte sur translatewiki.net, puis demander les droits à un administrateur pour traduire dans une ou plusieurs langues données sur cette page (le procédé est très simple). Dès que vous avez les droits pour une langue donnée, vous pouvez vous connecter et ajouter ou modifier les messages que vous souhaitez dans cette langue.

Voir aussi

  • Extension:MassEditRegex - extension similaire permettant d'utiliser des expressions régulières pour modifier plusieurs pages à la fois