Go to the documentation of this file.
32 $IP = getenv(
"MW_INSTALL_PATH" ) ?: __DIR__ .
"/../../..";
33 if ( !is_readable(
"$IP/maintenance/Maintenance.php" ) ) {
34 die(
"MW_INSTALL_PATH needs to be set to your MediaWiki installation.\n" );
36 require_once (
"$IP/maintenance/Maintenance.php" );
60 parent::__construct();
61 $this->mDescription =
"CLI utility to replace text wherever it is " .
64 $this->
addArg(
"target",
"Target text to find.",
false );
65 $this->
addArg(
"replace",
"Text to replace.",
false );
67 $this->
addOption(
"dry-run",
"Only find the texts, don't replace.",
69 $this->
addOption(
"regex",
"This is a regex (false).",
71 $this->
addOption(
"user",
"The user to attribute this to (uid 1).",
73 $this->
addOption(
"yes",
"Skip all prompts with an assumed 'yes'.",
75 $this->
addOption(
"summary",
"Alternate edit summary. (%r is where to " .
76 " place the replacement text, %f the text to look for.)",
78 $this->
addOption(
"nsall",
"Search all canonical namespaces (false). " .
79 "If true, this option overrides the ns option.",
false,
false,
'a' );
80 $this->
addOption(
"ns",
"Comma separated namespaces to search in " .
81 "(Main) .",
false,
true );
82 $this->
addOption(
"replacements",
"File containing the list of " .
83 "replacements to be made. Fields in the file are tab-separated. " .
84 "See --show-file-format for more information.",
false,
true,
"f" );
85 $this->
addOption(
"show-file-format",
"Show a description of the " .
86 "file format to use with --replacements.",
false,
false );
87 $this->
addOption(
"no-announce",
"Do not announce edits on Special:RecentChanges or " .
88 "watchlists.",
false,
false,
"m" );
89 $this->
addOption(
"debug",
"Display replacements being made.",
false,
false );
90 $this->
addOption(
"listns",
"List out the namespaces on this wiki.",
92 $this->
addOption(
'rename',
"Rename page titles instead of replacing contents.",
96 if ( method_exists( $this,
'requireExtension' ) ) {
102 $userReplacing = $this->
getOption(
"user", 1 );
104 $user = is_numeric( $userReplacing ) ?
108 if ( get_class(
$user ) !==
'User' ) {
110 "Couldn't translate '$userReplacing' to a user.",
true
120 $this->
error(
"You have to specify a target.",
true );
128 $this->
error(
"You have to specify replacement text.",
true );
139 if ( !is_readable(
$file ) ) {
140 throw new MWException(
"File does not exist or is not readable: "
144 $handle = fopen(
$file,
"r" );
145 if ( $handle ===
false ) {
146 throw new MWException(
"Trouble opening file: $file\n" );
150 $this->defaultContinue =
true;
152 while ( (
$line = fgets( $handle ) ) !==
false ) {
154 $field = explode(
"\t", substr(
$line, 0, -1 ) );
155 if ( !isset( $field[1] ) ) {
159 $this->target[] = $field[0];
160 $this->replacement[] = $field[1];
167 if ( !is_bool( $this->defaultContinue ) ) {
168 $this->defaultContinue =
179 if ( $this->
getOption(
"summary" ) !==
null ) {
180 $msg = str_replace( [
'%f',
'%r' ],
181 [ $this->target, $this->replacement ],
188 echo
"Index\tNamespace\n";
191 foreach ( $nsList
as $int => $val ) {
195 echo
" $int\t$val\n";
202 The
format of the replacements
file is tab separated with three fields.
203 Any line
that does
not have
a tab
is ignored
and can be considered
a comment.
207 1. String to search
for.
209 3. (optional) The presence
of this field indicates
that the previous two
210 are considered
a regular expression.
216 regex(
p*) Count the Ps; \\1
true
225 if ( !$nsall && !$ns ) {
234 if ( is_numeric( $n ) ) {
235 if ( isset( $canonical[ $n ] ) ) {
244 }, explode(
",", $ns ) );
248 return $val !==
null;
276 $this->
output(
"$title -> $newTitle\n" );
289 'user_id' => $this->
user->getId(),
296 $params[
'create_redirect' ] =
false;
297 $params[
'watch_page' ] =
false;
300 echo
"Replacing on $title... ";
303 $this->
error(
"Trouble on the page '$title'." );
314 while ( $reply !==
"y" && $reply !==
"n" ) {
316 $reply = substr( strtolower( $reply ), 0, 1 );
318 return $reply ===
"y";
326 if ( $this->
getOption(
"show-file-format" ) ) {
351 $this->doAnnounce =
true;
357 $this->
error(
"No matching namespaces.",
true );
360 foreach ( array_keys( $this->target )
as $index ) {
361 $target = $this->target[$index];
366 echo
"Replacing '$target' with '$replacement'";
368 echo
" as regular expression.";
373 if ( $this->rename ) {
394 $this->
error(
'No targets found to replace.',
true );
406 if ( !$this->
getReply(
'Replace instances on these pages?' ) ) {
413 $comment =
" (Use --user to override)";
415 if ( $this->
getOption(
"no-announce",
false ) ) {
416 $this->doAnnounce =
false;
419 "Attribute changes to the user '{$this->user}'?$comment"
static newFromId( $id)
Static factory method for creation from a given user ID.
Using a hook running we can avoid having all this option specific stuff in our mainline code Using the function We ve cleaned up the code here by removing clumps of infrequently used code and moving them off somewhere else It s much easier for someone working with this code to see what s _really_ going and make changes or fix bugs In we can take all the code that deals with the little used title reversing we can concentrate it all in an extension file
if(PHP_SAPI !='cli-server') if(!isset( $_SERVER['SCRIPT_FILENAME'])) $file
static readconsole( $prompt='> ')
Prompt the console for input.
require_once RUN_MAINTENANCE_IF_MAIN
static newFromName( $name, $validate='valid')
Static factory method for creation from username.
</source > ! result< div class="mw-highlight mw-content-ltr" dir="ltr">< pre >< span ></span >< span class="kd"> var</span >< span class="nx"> a</span >< span class="p"></span ></pre ></div > ! end ! test Multiline< source/> in lists !input *< source > a b</source > *foo< source > a b</source > ! html< ul >< li >< div class="mw-highlight mw-content-ltr" dir="ltr">< pre > a b</pre ></div ></li ></ul >< ul >< li > foo< div class="mw-highlight mw-content-ltr" dir="ltr">< pre > a b</pre ></div ></li ></ul > ! html tidy< ul >< li >< div class="mw-highlight mw-content-ltr" dir="ltr">< pre > a b</pre ></div ></li ></ul >< ul >< li > foo< div class="mw-highlight mw-content-ltr" dir="ltr">< pre > a b</pre ></div ></li ></ul > ! end ! test Custom attributes !input< source lang="javascript" id="foo" class="bar" dir="rtl" style="font-size: larger;"> var a
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
This document provides an overview of the usage of PageUpdater and that is
__construct()
Default constructor.
injection txt This is an overview of how MediaWiki makes use of dependency injection The design described here grew from the discussion of RFC T384 The term dependency this means that anything an object needs to operate should be injected from the the object itself should only know narrow no concrete implementation of the logic it relies on The requirement to inject everything typically results in an architecture that based on two main types of and essentially stateless service objects that use other service objects to operate on the value objects As of the beginning MediaWiki is only starting to use the DI approach Much of the code still relies on global state or direct resulting in a highly cyclical dependency which acts as the top level factory for services in MediaWiki which can be used to gain access to default instances of various services MediaWikiServices however also allows new services to be defined and default services to be redefined Services are defined or redefined by providing a callback the instantiator that will return a new instance of the service When it will create an instance of MediaWikiServices and populate it with the services defined in the files listed by thereby bootstrapping the DI framework Per $wgServiceWiringFiles lists includes ServiceWiring php
to move a page</td >< td > &*You are moving the page across namespaces
namespace and then decline to actually register it file or subcat img or subcat $title
This document is intended to provide useful advice for parties seeking to redistribute MediaWiki to end users It s targeted particularly at maintainers for Linux since it s been observed that distribution packages of MediaWiki often break We ve consistently had to recommend that users seeking support use official tarballs instead of their distribution s and this often solves whatever problem the user is having It would be nice if this could such and we might be restricted by PHP settings such as safe mode or open_basedir We cannot assume that the software even has read access anywhere useful Many shared hosts run all users web applications under the same user
Background job to replace text in a given page.
addOption( $name, $description, $required=false, $withArg=false, $shortName=false, $multiOccurrence=false)
Add a parameter to the script.
requireExtension( $name)
Indicate that the specified extension must be loaded before the script can run.
as see the revision history and available at free of to any person obtaining a copy of this software and associated documentation to deal in the Software without including without limitation the rights to use
getSummary( $target, $replacement)
static configuration should be added through ResourceLoaderGetConfigVars instead can be used to get the real title e g db for database replication lag or jobqueue for job queue size converted to pseudo seconds It is possible to add more fields and they will be returned to the user in the API response after the basic globals have been set but before ordinary actions take place replace
shouldContinueByDefault()
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses & $ret
if the prop value should be in the metadata multi language array format
This list may contain false positives That usually means there is additional text with links below the first Each row contains links to the first and second as well as the first line of the second redirect text
listTitles( $titles, $target, $replacement, $regex, $rename)
and that you know you can do these things To protect your we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights These restrictions translate to certain responsibilities for you if you distribute copies of the or if you modify it For if you distribute copies of such a whether gratis or for a you must give the recipients all the rights that you have You must make sure that receive or can get the source code And you must show them these terms so they know their rights We protect your rights with two and(2) offer you this license which gives you legal permission to copy
static getReplacedTitle(Title $title, $search, $replacement, $regex)
Do a replacement on a title.
getOption( $name, $default=null)
Get an option, or return the default.
replaceTitles( $titles, $target, $replacement, $useRegex, $rename)
static doSearchQuery( $search, $namespaces, $category, $prefix, $use_regex=false)
The ContentHandler facility adds support for arbitrary content types on wiki instead of relying on wikitext for everything It was introduced in MediaWiki Each kind of and so on Built in content types are
if(count( $args)< 1) $job
Maintenance script that replaces text in pages.
addArg( $arg, $description, $required=true)
Add some args that are needed.
$wgShowExceptionDetails
If set to true, uncaught exceptions will print the exception message and a complete stack trace to ou...
This document is intended to provide useful advice for parties seeking to redistribute MediaWiki to end users It s targeted particularly at maintainers for Linux since it s been observed that distribution packages of MediaWiki often break We ve consistently had to recommend that users seeking support use official tarballs instead of their distribution s and this often solves whatever problem the user is having It would be nice if this could such as
static getCanonicalNamespaces( $rebuild=false)
Returns array of all defined namespaces with their canonical (English) names.
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return true
error( $err, $die=0)
Throw an error to the user.
output( $out, $channel=null)
Throw some output to the user.
globals txt Globals are evil The original MediaWiki code relied on globals for processing context far too often MediaWiki development since then has been a story of slowly moving context out of global variables and into objects Storing processing context in object member variables allows those objects to be reused in a much more flexible way Consider the elegance of
deferred txt A few of the database updates required by various functions here can be deferred until after the result page is displayed to the user For updating the view updating the linked to tables after a etc PHP does not yet have any way to tell the server to actually return and disconnect while still running these but it might have such a feature in the future We handle these by creating a deferred update object and putting those objects on a global then executing the whole list after the page is displayed We don t do anything smart like collating updates to the same table or such because the list is almost always going to have just one item on if that
hasOption( $name)
Checks to see if a particular option exists.
getArg( $argId=0, $default=null)
Get an argument.
either a unescaped string or a HtmlArmor object after in associative array form externallinks including delete and has completed for all link tables whether this was an auto creation use $formDescriptor instead default is conds Array Extra conditions for the No matching items in log is displayed if loglist is empty msgKey Array If you want a nice box with a set this to the key of the message First element is the message additional optional elements are parameters for the key that are processed with wfMessage() -> params() ->parseAsBlock() - offset Set to overwrite offset parameter in $wgRequest set to '' to unset offset - wrap String Wrap the message in html(usually something like "<
static getMatchingTitles( $str, $namespaces, $category, $prefix, $use_regex=false)