Extension:Replace Text

Replace Text is an extension to MediaWiki that provides a special page to allow administrators to do a global string find-and-replace on both the text and titles of the wiki's content pages.

Description
Replace Text defines a special page, at 'Special:ReplaceText' (or its equivalent in another language), that handles global searching and replacing. The page initially displays a form for an administrator to fill out the search-and-replace details: the administrator enters a search string and its replacement, the set of namespaces on which to search, as well as choosing whether to replace text within page contents, page titles, or both. Optionally, the administrator can also add two additional filters: the name of a category that all pages must belong to, and a prefix that all page names must start with. When this form is submitted, they are then shown a list of either all the pages that contain that search string, or all the pages whose titles contain the search string, or both. Next to each page name is a checkbox for each, so that they can unselect whichever pages they don't want replaced. The user then can hit "Replace" to do the actual replacement. Once a text replace is done, it is not directly undoable; though you can always run a "reverse" replace, replacing the new string with the original string. For that reason, if the replacement string is blank or is a string that already exists in the wiki, the user is first asked to confirm their action before being shown the list of possible pages, since this action may not be easily undoable.

If the search string is contained multiple times on a page, every such instance is replaced. Every page's replacements shows up as a (minor) wiki edit, with the administrator who performed the text replacement as the user who made the edit and an edit summary that looks like "Text replace: ' search string ' to ' replacement string '".

A page's title cannot be moved to a title that already exists in the wiki. Pages that cannot be moved will be simply listed on the "select" page as being unmovable, without a checkbox near them.

The search is case-sensitive, and does not currently allow regular expressions.

Note: the replacement actions themselves are structured as MediaWiki "jobs", to ensure that the system is not overloaded if the user wants to do many at the same time. This means that a large set of replacements will not be done immediately, and may take minutes, hours or even longer to complete. Jobs get activated every time a page is viewed on the wiki; to speed up the process (or slow it down), you change the number of jobs run when a page is viewed; the default is 1. For information on how to change it, see the $wgJobRunRate page.

Attention: If your revisions are compressed (that is, if $wgCompressRevisions is enabled in LocalSettings.php) then ReplaceText will not work because it makes use of SQL queries that can't search compressed text.

Code and download
You can download the Replace Text code in either one of these two compressed files:


 * replace_text_0.7.1.tar.gz
 * replace_text_0.7.1.zip

You can also download the code directly via SVN from the MediaWiki source code repository, at http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/ReplaceText/. From a command line, you can call the following:

To view the code online, including version history for each file, you can go here.

Installation
After you've obtained a 'ReplaceText' directory (either by extracting a compressed file or downloading via SVN), place this directory within the main MediaWiki 'extensions' directory. Then, anywhere in the file 'LocalSettings.php' in the main MediaWiki directory, add the following lines:

Authors
Replace Text was mostly written by Yaron Koren, reachable at yaron57 -at- gmail.com, with important contributions made by Niklas Laxström.

Version
Replace Text is currently at version 0.7.1. See the entire version history.

Screenshots
Below are images of the workflow of Replace Text. First, the initial page in which "George F. Will" and "George Will" are entered for the target string and replacement string, respectively, and replacing text in page titles is specified as well, on Discourse DB:



And here is what the page looks like after the user hits "Continue":



Hitting "Replace" would replace this value in all of the listed pages, as well as moving the page at the end to its new value.

Code structure
The following are the files in the Replace Text extension:


 * README - description of the extension
 * ReplaceText.js - Javascript needed for the forms
 * ReplaceText.php - main file
 * ReplaceTextJob.php - class for the MediaWiki job that does the text replacement
 * ReplaceText.alias.php - special-page aliases
 * ReplaceText.i18n.php - language file
 * SpecialReplaceText.php - the "Special" page that provides the interface for the replacement

Languages supported
Replace Text supports Arabic, Egyptian Arabic, Bulgarian, Taiwanese Chinese, Traditional Chinese, Czech, Dutch, English, Finnish, French, German, Greek, Hebrew, Italian, Japanese, Javanese, Khmer, Marathi, Persian, Polish, Portuguese, Brazilian Portuguese, Romanian, Russian, Slovak, Spanish, Swedish, Tagalog, Telugu, Thai, Turkish, Vietnamese and many other languages.

Known issues

 * Replacement of backlashes seems not to work in versions of MediaWiki before 1.15.

Bugs and feature requests
Send any bug reports and requests to Yaron Koren, at yaron57 -at- gmail.com.

Contributing patches to the project
If you found some bug and fixed it, please create a patch by going to the "ReplaceText" directory, and typing:

svn diff >descriptivename.patch

Then send this patch, with a description, to Yaron Koren.

Translating
Translation of Replace Text is done through translatewiki.net. The translation for this extension can be found here. To add language values or change existing ones, you should create an account on translatewiki.net, then request permission from the administrators to translate a certain language or languages on this page (this is a very simple process). Once you have permission for a given language, you can log in and add or edit whatever messages you want to in that language.