2005-08-17 19:48:24 +00:00
|
|
|
hooks.txt
|
2004-11-27 21:43:06 +00:00
|
|
|
|
|
|
|
|
This document describes how event hooks work in MediaWiki; how to add
|
|
|
|
|
hooks for an event; and how to run hooks for an event.
|
|
|
|
|
|
|
|
|
|
==Glossary==
|
|
|
|
|
|
|
|
|
|
event
|
|
|
|
|
Something that happens with the wiki. For example: a user logs
|
|
|
|
|
in. A wiki page is saved. A wiki page is deleted. Often there are
|
|
|
|
|
two events associated with a single action: one before the code
|
|
|
|
|
is run to make the event happen, and one after. Each event has a
|
|
|
|
|
name, preferably in CamelCase. For example, 'UserLogin',
|
|
|
|
|
'ArticleSave', 'ArticleSaveComplete', 'ArticleDelete'.
|
|
|
|
|
|
|
|
|
|
hook
|
|
|
|
|
A clump of code and data that should be run when an event
|
|
|
|
|
happens. This can be either a function and a chunk of data, or an
|
|
|
|
|
object and a method.
|
|
|
|
|
|
|
|
|
|
hook function
|
|
|
|
|
The function part of a hook.
|
|
|
|
|
|
|
|
|
|
==Rationale==
|
|
|
|
|
|
|
|
|
|
Hooks allow us to decouple optionally-run code from code that is run
|
|
|
|
|
for everyone. It allows MediaWiki hackers, third-party developers and
|
|
|
|
|
local administrators to define code that will be run at certain points
|
|
|
|
|
in the mainline code, and to modify the data run by that mainline
|
|
|
|
|
code. Hooks can keep mainline code simple, and make it easier to
|
|
|
|
|
write extensions. Hooks are a principled alternative to local patches.
|
|
|
|
|
|
|
|
|
|
Consider, for example, two options in MediaWiki. One reverses the
|
|
|
|
|
order of a title before displaying the article; the other converts the
|
|
|
|
|
title to all uppercase letters. Currently, in MediaWiki code, we
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
would handle this as follows (note: not real code, here):
|
2004-11-27 21:43:06 +00:00
|
|
|
|
|
|
|
|
function showAnArticle($article) {
|
|
|
|
|
global $wgReverseTitle, $wgCapitalizeTitle;
|
|
|
|
|
|
|
|
|
|
if ($wgReverseTitle) {
|
|
|
|
|
wfReverseTitle($article);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($wgCapitalizeTitle) {
|
|
|
|
|
wfCapitalizeTitle($article);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# code to actually show the article goes here
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
An extension writer, or a local admin, will often add custom code to
|
|
|
|
|
the function -- with or without a global variable. For example,
|
|
|
|
|
someone wanting email notification when an article is shown may add:
|
|
|
|
|
|
|
|
|
|
function showAnArticle($article) {
|
|
|
|
|
global $wgReverseTitle, $wgCapitalizeTitle;
|
|
|
|
|
|
|
|
|
|
if ($wgReverseTitle) {
|
|
|
|
|
wfReverseTitle($article);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($wgCapitalizeTitle) {
|
|
|
|
|
wfCapitalizeTitle($article);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# code to actually show the article goes here
|
|
|
|
|
|
|
|
|
|
if ($wgNotifyArticle) {
|
|
|
|
|
wfNotifyArticleShow($article));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Using a hook-running strategy, we can avoid having all this
|
|
|
|
|
option-specific stuff in our mainline code. Using hooks, the function
|
|
|
|
|
becomes:
|
|
|
|
|
|
|
|
|
|
function showAnArticle($article) {
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
|
|
|
|
|
if (wfRunHooks('ArticleShow', array(&$article))) {
|
|
|
|
|
|
2004-11-27 21:43:06 +00:00
|
|
|
# code to actually show the article goes here
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
|
|
|
|
|
wfRunHooks('ArticleShowComplete', array(&$article));
|
2004-11-27 21:43:06 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
We've cleaned up the code here by removing clumps of weird,
|
|
|
|
|
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
|
|
|
|
|
on, and make changes or fix bugs.
|
|
|
|
|
|
|
|
|
|
In addition, we can take all the code that deals with the little-used
|
|
|
|
|
title-reversing options (say) and put it in one place. Instead of
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
having little title-reversing if-blocks spread all over the codebase
|
2004-11-27 21:43:06 +00:00
|
|
|
in showAnArticle, deleteAnArticle, exportArticle, etc., we can
|
|
|
|
|
concentrate it all in an extension file:
|
|
|
|
|
|
|
|
|
|
function reverseArticleTitle($article) {
|
|
|
|
|
# ...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function reverseForExport($article) {
|
|
|
|
|
# ...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
The setup function for the extension just has to add its hook
|
|
|
|
|
functions to the appropriate events:
|
|
|
|
|
|
|
|
|
|
setupTitleReversingExtension() {
|
|
|
|
|
global $wgHooks;
|
|
|
|
|
|
2004-11-28 00:51:43 +00:00
|
|
|
$wgHooks['ArticleShow'][] = 'reverseArticleTitle';
|
|
|
|
|
$wgHooks['ArticleDelete'][] = 'reverseArticleTitle';
|
|
|
|
|
$wgHooks['ArticleExport'][] = 'reverseForExport';
|
2004-11-27 21:43:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Having all this code related to the title-reversion option in one
|
|
|
|
|
place means that it's easier to read and understand; you don't have to
|
|
|
|
|
do a grep-find to see where the $wgReverseTitle variable is used, say.
|
|
|
|
|
|
|
|
|
|
If the code is well enough isolated, it can even be excluded when not
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
used -- making for some slight savings in memory and load-up
|
|
|
|
|
performance at runtime. Admins who want to have all the reversed
|
|
|
|
|
titles can add:
|
2004-11-27 21:43:06 +00:00
|
|
|
|
|
|
|
|
require_once('extensions/ReverseTitle.php');
|
|
|
|
|
|
|
|
|
|
...to their LocalSettings.php file; those of us who don't want or need
|
|
|
|
|
it can just leave it out.
|
|
|
|
|
|
|
|
|
|
The extensions don't even have to be shipped with MediaWiki; they
|
|
|
|
|
could be provided by a third-party developer or written by the admin
|
|
|
|
|
him/herself.
|
|
|
|
|
|
|
|
|
|
==Writing hooks==
|
|
|
|
|
|
|
|
|
|
A hook is a chunk of code run at some particular event. It consists of:
|
|
|
|
|
|
|
|
|
|
* a function with some optional accompanying data, or
|
|
|
|
|
* an object with a method and some optional accompanying data.
|
|
|
|
|
|
|
|
|
|
Hooks are registered by adding them to the global $wgHooks array for a
|
|
|
|
|
given event. All the following are valid ways to define hooks:
|
|
|
|
|
|
2004-11-28 00:51:43 +00:00
|
|
|
$wgHooks['EventName'][] = 'someFunction'; # function, no data
|
|
|
|
|
$wgHooks['EventName'][] = array('someFunction', $someData);
|
|
|
|
|
$wgHooks['EventName'][] = array('someFunction'); # weird, but OK
|
2004-11-27 21:43:06 +00:00
|
|
|
|
|
|
|
|
$wgHooks['EventName'][] = $object; # object only
|
|
|
|
|
$wgHooks['EventName'][] = array($object, 'someMethod');
|
|
|
|
|
$wgHooks['EventName'][] = array($object, 'someMethod', $someData);
|
|
|
|
|
$wgHooks['EventName'][] = array($object); # weird but OK
|
|
|
|
|
|
|
|
|
|
When an event occurs, the function (or object method) will be called
|
|
|
|
|
with the optional data provided as well as event-specific parameters.
|
|
|
|
|
The above examples would result in the following code being executed
|
|
|
|
|
when 'EventName' happened:
|
|
|
|
|
|
|
|
|
|
# function, no data
|
|
|
|
|
someFunction($param1, $param2)
|
|
|
|
|
# function with data
|
|
|
|
|
someFunction($someData, $param1, $param2)
|
|
|
|
|
|
|
|
|
|
# object only
|
|
|
|
|
$object->onEventName($param1, $param2)
|
|
|
|
|
# object with method
|
|
|
|
|
$object->someMethod($param1, $param2)
|
|
|
|
|
# object with method and data
|
|
|
|
|
$object->someMethod($someData, $param1, $param2)
|
|
|
|
|
|
|
|
|
|
Note that when an object is the hook, and there's no specified method,
|
|
|
|
|
the default method called is 'onEventName'. For different events this
|
|
|
|
|
would be different: 'onArticleSave', 'onUserLogin', etc.
|
|
|
|
|
|
|
|
|
|
The extra data is useful if we want to use the same function or object
|
|
|
|
|
for different purposes. For example:
|
|
|
|
|
|
2004-11-28 00:51:43 +00:00
|
|
|
$wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'TimStarling');
|
|
|
|
|
$wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'brion');
|
2004-11-27 21:43:06 +00:00
|
|
|
|
|
|
|
|
This code would result in ircNotify being run twice when an article is
|
|
|
|
|
saved: once for 'TimStarling', and once for 'brion'.
|
|
|
|
|
|
|
|
|
|
Hooks can return three possible values:
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
|
2004-11-27 21:43:06 +00:00
|
|
|
* true: the hook has operated successfully
|
|
|
|
|
* "some string": an error occurred; processing should
|
|
|
|
|
stop and the error should be shown to the user
|
|
|
|
|
* false: the hook has successfully done the work
|
|
|
|
|
necessary and the calling function should skip
|
|
|
|
|
|
|
|
|
|
The last result would be for cases where the hook function replaces
|
|
|
|
|
the main functionality. For example, if you wanted to authenticate
|
|
|
|
|
users to a custom system (LDAP, another PHP program, whatever), you
|
|
|
|
|
could do:
|
|
|
|
|
|
2004-11-28 00:51:43 +00:00
|
|
|
$wgHooks['UserLogin'][] = array('ldapLogin', $ldapServer);
|
2004-11-27 21:43:06 +00:00
|
|
|
|
|
|
|
|
function ldapLogin($username, $password) {
|
|
|
|
|
# log user into LDAP
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Returning false makes less sense for events where the action is
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
complete, and will normally be ignored.
|
2004-11-27 21:43:06 +00:00
|
|
|
|
|
|
|
|
==Using hooks==
|
|
|
|
|
|
|
|
|
|
A calling function or method uses the wfRunHooks() function to run
|
|
|
|
|
the hooks related to a particular event, like so:
|
|
|
|
|
|
|
|
|
|
class Article {
|
|
|
|
|
# ...
|
|
|
|
|
function protect() {
|
|
|
|
|
global $wgUser;
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
if (wfRunHooks('ArticleProtect', array(&$this, &$wgUser))) {
|
2004-11-27 21:43:06 +00:00
|
|
|
# protect the article
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
wfRunHooks('ArticleProtectComplete', array(&$this, &$wgUser));
|
2004-11-27 21:43:06 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wfRunHooks() returns true if the calling function should continue
|
|
|
|
|
processing (the hooks ran OK, or there are no hooks to run), or false
|
|
|
|
|
if it shouldn't (an error occurred, or one of the hooks handled the
|
|
|
|
|
action already). Checking the return value matters more for "before"
|
|
|
|
|
hooks than for "complete" hooks.
|
|
|
|
|
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
Note that hook parameters are passed in an array; this is a necessary
|
|
|
|
|
inconvenience to make it possible to pass reference values (that can
|
|
|
|
|
be changed) into the hook code. Also note that earlier versions of
|
|
|
|
|
wfRunHooks took a variable number of arguments; the array() calling
|
|
|
|
|
protocol came about after MediaWiki 1.4rc1.
|
|
|
|
|
|
2004-11-27 23:10:05 +00:00
|
|
|
==Events and parameters==
|
|
|
|
|
|
|
|
|
|
This is a list of known events and parameters; please add to it if
|
|
|
|
|
you're going to add events to the MediaWiki code.
|
|
|
|
|
|
2005-12-17 03:18:39 +00:00
|
|
|
'AbortNewAccount': Return false to cancel account creation.
|
|
|
|
|
$user: the User object about to be created (read-only, incomplete)
|
2006-01-29 07:35:28 +00:00
|
|
|
$message: out parameter: error message to display on abort
|
2005-12-17 03:18:39 +00:00
|
|
|
|
2005-08-17 07:44:38 +00:00
|
|
|
'AddNewAccount': after a user account is created
|
2006-04-17 04:06:13 +00:00
|
|
|
$user: the User object that was created. (Parameter added in 1.7)
|
2005-08-17 07:44:38 +00:00
|
|
|
|
2004-11-28 06:15:22 +00:00
|
|
|
'ArticleDelete': before an article is deleted
|
|
|
|
|
$article: the article (object) being deleted
|
|
|
|
|
$user: the user (object) deleting the article
|
|
|
|
|
$reason: the reason (string) the article is being deleted
|
|
|
|
|
|
|
|
|
|
'ArticleDeleteComplete': after an article is deleted
|
|
|
|
|
$article: the article that was deleted
|
|
|
|
|
$user: the user that deleted the article
|
|
|
|
|
$reason: the reason the article was deleted
|
|
|
|
|
|
2004-11-28 00:20:37 +00:00
|
|
|
'ArticleProtect': before an article is protected
|
|
|
|
|
$article: the article being protected
|
|
|
|
|
$user: the user doing the protection
|
|
|
|
|
$protect: boolean whether this is a protect or an unprotect
|
|
|
|
|
$reason: Reason for protect
|
|
|
|
|
$moveonly: boolean whether this is for move only or not
|
|
|
|
|
|
|
|
|
|
'ArticleProtectComplete': after an article is protected
|
|
|
|
|
$article: the article that was protected
|
|
|
|
|
$user: the user who did the protection
|
|
|
|
|
$protect: boolean whether it was a protect or an unprotect
|
|
|
|
|
$reason: Reason for protect
|
|
|
|
|
$moveonly: boolean whether it was for move only or not
|
|
|
|
|
|
2004-11-28 06:45:24 +00:00
|
|
|
'ArticleSave': before an article is saved
|
|
|
|
|
$article: the article (object) being saved
|
|
|
|
|
$user: the user (object) saving the article
|
|
|
|
|
$text: the new article text
|
|
|
|
|
$summary: the article summary (comment)
|
|
|
|
|
$isminor: minor flag
|
|
|
|
|
$iswatch: watch flag
|
|
|
|
|
$section: section #
|
|
|
|
|
|
|
|
|
|
'ArticleSaveComplete': after an article is saved
|
|
|
|
|
$article: the article (object) saved
|
|
|
|
|
$user: the user (object) who saved the article
|
|
|
|
|
$text: the new article text
|
|
|
|
|
$summary: the article summary (comment)
|
|
|
|
|
$isminor: minor flag
|
|
|
|
|
$iswatch: watch flag
|
|
|
|
|
$section: section #
|
|
|
|
|
|
2007-01-18 07:44:25 +00:00
|
|
|
'ArticleUndeleted': When one or more revisions of an article are restored
|
|
|
|
|
$title: Title corresponding to the article restored
|
|
|
|
|
$create: Whether or not the restoration caused the page to be created
|
|
|
|
|
(i.e. it didn't exist before)
|
|
|
|
|
|
2006-11-30 07:47:34 +00:00
|
|
|
'AuthPluginSetup': update or replace authentication plugin object ($wgAuth)
|
|
|
|
|
Gives a chance for an extension to set it programattically to a variable class.
|
|
|
|
|
&$auth: the $wgAuth object, probably a stub
|
|
|
|
|
|
2005-12-20 21:25:54 +00:00
|
|
|
'AutoAuthenticate': called to authenticate users on external/environmental means
|
|
|
|
|
$user: writes user object to this parameter
|
|
|
|
|
|
2006-07-02 21:54:34 +00:00
|
|
|
'BadImage': When checking against the bad image list
|
|
|
|
|
$name: Image name being checked
|
|
|
|
|
&$bad: Whether or not the image is "bad"
|
|
|
|
|
|
|
|
|
|
Change $bad and return false to override. If an image is "bad", it is not
|
|
|
|
|
rendered inline in wiki pages or galleries in category pages.
|
|
|
|
|
|
2004-11-27 23:57:55 +00:00
|
|
|
'BlockIp': before an IP address or user is blocked
|
|
|
|
|
$block: the Block object about to be saved
|
|
|
|
|
$user: the user _doing_ the block (not the one being blocked)
|
|
|
|
|
|
|
|
|
|
'BlockIpComplete': after an IP address or user is blocked
|
|
|
|
|
$block: the Block object that was saved
|
|
|
|
|
$user: the user who did the block (not the one being blocked)
|
|
|
|
|
|
2007-01-16 19:06:56 +00:00
|
|
|
'BookInformation': Before information output on Special:Booksources
|
|
|
|
|
$isbn: ISBN to show information for
|
|
|
|
|
$output: OutputPage object in use
|
|
|
|
|
|
2007-01-20 19:51:21 +00:00
|
|
|
'CustomEditor': When invoking the page editor
|
|
|
|
|
$article: Article being edited
|
|
|
|
|
$user: User performing the edit
|
|
|
|
|
|
|
|
|
|
Return true to allow the normal editor to be used, or false
|
|
|
|
|
if implementing a custom editor, e.g. for a special namespace,
|
|
|
|
|
etc.
|
|
|
|
|
|
2006-05-24 09:05:49 +00:00
|
|
|
'DiffViewHeader': called before diff display
|
|
|
|
|
$diff: DifferenceEngine object that's calling
|
|
|
|
|
$oldRev: Revision object of the "old" revision (may be null/invalid)
|
|
|
|
|
$newRev: Revision object of the "new" revision
|
|
|
|
|
|
2006-12-01 21:18:40 +00:00
|
|
|
'EditPage::attemptSave': called before an article is
|
|
|
|
|
saved, that is before insertNewArticle() is called
|
|
|
|
|
&$editpage_Obj: the current EditPage object
|
|
|
|
|
|
2006-06-14 13:12:08 +00:00
|
|
|
'EditFormPreloadText': Allows population of the edit form when creating new pages
|
|
|
|
|
&$text: Text to preload with
|
|
|
|
|
&$title: Title object representing the page being created
|
|
|
|
|
|
2007-04-02 21:53:06 +00:00
|
|
|
'EditPage::showEditForm:fields': allows injection of form field into edit form
|
|
|
|
|
&$editor: the EditPage instance for reference
|
|
|
|
|
&$out: an OutputPage instance to write to
|
|
|
|
|
return value is ignored (should always return true)
|
|
|
|
|
|
2006-05-06 21:41:53 +00:00
|
|
|
'EditFilter': Perform checks on an edit
|
|
|
|
|
$editor: Edit form (see includes/EditPage.php)
|
|
|
|
|
$text: Contents of the edit box
|
2006-05-07 07:26:25 +00:00
|
|
|
$section: Section being edited
|
|
|
|
|
&$error: Error message to return
|
2006-05-06 21:41:53 +00:00
|
|
|
|
|
|
|
|
Return false to halt editing; you'll need to handle error messages, etc. yourself.
|
|
|
|
|
Alternatively, modifying $error and returning true will cause the contents of $error
|
|
|
|
|
to be echoed at the top of the edit form as wikitext. Return true without altering
|
|
|
|
|
$error to allow the edit to proceed.
|
|
|
|
|
|
2006-05-02 20:07:54 +00:00
|
|
|
'EmailConfirmed': When checking that the user's email address is "confirmed"
|
|
|
|
|
$user: User being checked
|
|
|
|
|
$confirmed: Whether or not the email address is confirmed
|
|
|
|
|
This runs before the other checks, such as anonymity and the real check; return
|
|
|
|
|
true to allow those checks to occur, and false if checking is done.
|
|
|
|
|
|
2004-11-29 04:23:12 +00:00
|
|
|
'EmailUser': before sending email from one user to another
|
|
|
|
|
$to: address of receiving user
|
|
|
|
|
$from: address of sending user
|
|
|
|
|
$subject: subject of the mail
|
|
|
|
|
$text: text of the mail
|
|
|
|
|
|
|
|
|
|
'EmailUserComplete': after sending email from one user to another
|
|
|
|
|
$to: address of receiving user
|
|
|
|
|
$from: address of sending user
|
|
|
|
|
$subject: subject of the mail
|
|
|
|
|
$text: text of the mail
|
|
|
|
|
|
2006-06-21 00:18:55 +00:00
|
|
|
'FetchChangesList': When fetching the ChangesList derivative for a particular user
|
|
|
|
|
&$user: User the list is being fetched for
|
|
|
|
|
&$skin: Skin object to be used with the list
|
|
|
|
|
&$list: List object (defaults to NULL, change it to an object instance and return
|
|
|
|
|
false override the list derivative used)
|
|
|
|
|
|
2005-12-26 07:14:42 +00:00
|
|
|
'GetInternalURL': modify fully-qualified URLs used for squid cache purging
|
|
|
|
|
$title: Title object of page
|
|
|
|
|
$url: string value as output (out parameter, can modify)
|
|
|
|
|
$query: query options passed to Title::getInternalURL()
|
|
|
|
|
|
|
|
|
|
'GetLocalURL': modify local URLs as output into page links
|
|
|
|
|
$title: Title object of page
|
|
|
|
|
$url: string value as output (out parameter, can modify)
|
|
|
|
|
$query: query options passed to Title::getLocalURL()
|
|
|
|
|
|
|
|
|
|
'GetFullURL': modify fully-qualified URLs used in redirects/export/offsite data
|
|
|
|
|
$title: Title object of page
|
|
|
|
|
$url: string value as output (out parameter, can modify)
|
|
|
|
|
$query: query options passed to Title::getFullURL()
|
|
|
|
|
|
2006-05-25 07:37:20 +00:00
|
|
|
'LogPageValidTypes': action being logged. DEPRECATED: Use $wgLogTypes
|
|
|
|
|
&$type: array of strings
|
2005-07-29 15:08:57 +00:00
|
|
|
|
2006-05-25 07:37:20 +00:00
|
|
|
'LogPageLogName': name of the logging page(s). DEPRECATED: Use $wgLogNames
|
|
|
|
|
&$typeText: array of strings
|
2005-07-29 15:08:57 +00:00
|
|
|
|
2006-05-25 07:37:20 +00:00
|
|
|
'LogPageLogHeader': strings used by wfMsg as a header. DEPRECATED: Use $wgLogHeaders
|
|
|
|
|
&$headerText: array of strings
|
|
|
|
|
|
|
|
|
|
'LogPageActionText': strings used by wfMsg as a header. DEPRECATED: Use $wgLogActions
|
|
|
|
|
&$actionText: array of strings
|
2005-07-29 15:08:57 +00:00
|
|
|
|
2006-01-03 15:45:36 +00:00
|
|
|
'MarkPatrolled': before an edit is marked patrolled
|
|
|
|
|
$rcid: ID of the revision to be marked patrolled
|
|
|
|
|
$user: the user (object) marking the revision as patrolled
|
|
|
|
|
$wcOnlySysopsCanPatrol: config setting indicating whether the user
|
|
|
|
|
needs to be a sysop in order to mark an edit patrolled
|
|
|
|
|
|
|
|
|
|
'MarkPatrolledComplete': after an edit is marked patrolled
|
|
|
|
|
$rcid: ID of the revision marked as patrolled
|
|
|
|
|
$user: user (object) who marked the edit patrolled
|
|
|
|
|
$wcOnlySysopsCanPatrol: config setting indicating whether the user
|
|
|
|
|
must be a sysop to patrol the edit
|
|
|
|
|
|
2006-06-26 15:50:03 +00:00
|
|
|
'MathAfterTexvc': after texvc is executed when rendering mathematics
|
|
|
|
|
$mathRenderer: instance of MathRenderer
|
|
|
|
|
$errmsg: error message, in HTML (string). Nonempty indicates failure
|
|
|
|
|
of rendering the formula
|
|
|
|
|
|
2006-01-13 17:00:05 +00:00
|
|
|
'OutputPageBeforeHTML': a page has been processed by the parser and
|
|
|
|
|
the resulting HTML is about to be displayed.
|
|
|
|
|
$parserOutput: the parserOutput (object) that corresponds to the page
|
|
|
|
|
$text: the text that will be displayed, in HTML (string)
|
|
|
|
|
|
2007-03-25 23:42:09 +00:00
|
|
|
'PageHistoryBeforeList': When a history page list is about to be constructed.
|
2007-03-25 23:20:48 +00:00
|
|
|
$article: the article that the history is loading for
|
|
|
|
|
|
2007-03-25 23:42:09 +00:00
|
|
|
'PageHistoryLineEnding' : right before the end <li> is added to a history line
|
2007-03-25 23:20:48 +00:00
|
|
|
$row: the revision row for this line
|
|
|
|
|
$s: the string representing this parsed line
|
|
|
|
|
|
2005-12-25 11:04:40 +00:00
|
|
|
'PageRenderingHash': alter the parser cache option hash key
|
|
|
|
|
A parser extension which depends on user options should install
|
|
|
|
|
this hook and append its values to the key.
|
|
|
|
|
$hash: reference to a hash key string which can be modified
|
|
|
|
|
|
2007-02-09 05:37:44 +00:00
|
|
|
'ParserTestTables': alter the list of tables to duplicate when parser tests
|
|
|
|
|
are run. Use when page save hooks require the presence of custom tables
|
|
|
|
|
to ensure that tests continue to run properly.
|
|
|
|
|
&$tables: array of table names
|
|
|
|
|
|
2006-05-08 22:20:55 +00:00
|
|
|
'PersonalUrls': Alter the user-specific navigation links (e.g. "my page,
|
|
|
|
|
my talk page, my contributions" etc).
|
|
|
|
|
|
|
|
|
|
&$personal_urls: Array of link specifiers (see SkinTemplate.php)
|
2006-05-17 07:02:06 +00:00
|
|
|
&$title: Title object representing the current page
|
2006-05-08 22:20:55 +00:00
|
|
|
|
2006-12-22 20:21:14 +00:00
|
|
|
'PingLimiter': Allows extensions to override the results of User::pingLimiter()
|
|
|
|
|
&$user : User performing the action
|
|
|
|
|
$action : Action being performed
|
|
|
|
|
&$result : Whether or not the action should be prevented
|
|
|
|
|
Change $result and return false to give a definitive answer, otherwise
|
|
|
|
|
the built-in rate limiting checks are used, if enabled.
|
|
|
|
|
|
2006-12-30 11:43:42 +00:00
|
|
|
'PreferencesUserInformationPanel': Add HTML bits to user information list in preferences form
|
|
|
|
|
$form : PreferencesForm object
|
|
|
|
|
&$html : HTML to append to
|
|
|
|
|
|
2007-01-11 14:50:34 +00:00
|
|
|
'RawPageViewBeforeOutput': Right before the text is blown out in action=raw
|
|
|
|
|
&$obj: RawPage object
|
|
|
|
|
&$text: The text that's going to be the output
|
|
|
|
|
|
2006-06-04 16:55:19 +00:00
|
|
|
'SiteNoticeBefore': Before the sitenotice/anonnotice is composed
|
|
|
|
|
&$siteNotice: HTML returned as the sitenotice
|
|
|
|
|
Return true to allow the normal method of notice selection/rendering to work,
|
|
|
|
|
or change the value of $siteNotice and return false to alter it.
|
|
|
|
|
|
|
|
|
|
'SiteNoticeAfter': After the sitenotice/anonnotice is composed
|
|
|
|
|
&$siteNotice: HTML sitenotice
|
|
|
|
|
Alter the contents of $siteNotice to add to/alter the sitenotice/anonnotice.
|
|
|
|
|
|
2007-01-10 15:23:32 +00:00
|
|
|
'SkinTemplateOutputPageBeforeExec': Before SkinTemplate::outputPage() starts page output
|
|
|
|
|
&$sktemplate: SkinTemplate object
|
|
|
|
|
&$tpl: Template engine object
|
|
|
|
|
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
'TitleMoveComplete': after moving an article (title)
|
|
|
|
|
$old: old title
|
|
|
|
|
$nt: new title
|
|
|
|
|
$user: user who did the move
|
2005-06-01 02:31:45 +00:00
|
|
|
$pageid: database ID of the page that's been moved
|
|
|
|
|
$redirid: database ID of the created redirect
|
Changed the calling protocol for function wfRunHooks() in Hooks.php.
Previously, this function used variable arguments to allow
different hooks to pass different parameters. However, var args
silently convert reference-calling to value-calling. So a call
that used to work like this:
# old
wfRunHooks('SomeEvent', $param1, &$param2, $param3);
...now works like this:
# new
wfRunHooks('SomeEvent', array($param1, &$param2, $param3));
Hook functions can now change pass-by-reference parameters correctly
(e.g. $param2 in the above example).
All calls to wfRunHooks() were changed and tested, and the change
was documented in docs/hooks.doc. This change was originally checked
in on REL1_4 branch as a bugfix, but per vibber reverted and checked
in to HEAD instead.
2005-03-13 15:29:43 +00:00
|
|
|
|
2004-11-28 07:06:25 +00:00
|
|
|
'UnknownAction': An unknown "action" has occured (useful for defining
|
|
|
|
|
your own actions)
|
|
|
|
|
$action: action name
|
|
|
|
|
$article: article "acted on"
|
|
|
|
|
|
2004-11-30 05:45:56 +00:00
|
|
|
'UnwatchArticle': before a watch is removed from an article
|
|
|
|
|
$user: user watching
|
|
|
|
|
$article: article object to be removed
|
|
|
|
|
|
|
|
|
|
'UnwatchArticle': after a watch is removed from an article
|
|
|
|
|
$user: user that was watching
|
|
|
|
|
$article: article object removed
|
|
|
|
|
|
2006-11-25 13:51:50 +00:00
|
|
|
'UploadForm:initial': before the upload form is generated
|
|
|
|
|
$form: UploadForm object
|
|
|
|
|
You might set the member-variables $uploadFormTextTop and
|
|
|
|
|
$uploadFormTextAfterSummary to inject text (HTML) either before
|
|
|
|
|
or after the editform.
|
|
|
|
|
|
2006-11-29 18:21:56 +00:00
|
|
|
'UploadForm:BeforeProcessing': at the beginning of processUpload()
|
|
|
|
|
$form: UploadForm object
|
|
|
|
|
Lets you poke at member variables like $mUploadDescription before the
|
|
|
|
|
file is saved.
|
|
|
|
|
|
2005-09-06 04:53:59 +00:00
|
|
|
'UploadVerification': additional chances to reject an uploaded file
|
|
|
|
|
string $saveName: destination file name
|
|
|
|
|
string $tempName: filesystem path to the temporary file for checks
|
|
|
|
|
string &$error: output: HTML error to show if upload canceled by returning false
|
|
|
|
|
|
2006-04-13 18:29:18 +00:00
|
|
|
'UploadComplete': Upon completion of a file upload
|
|
|
|
|
$image: Image object representing the file that was uploaded
|
|
|
|
|
|
2006-04-04 08:46:06 +00:00
|
|
|
'UserCan': To interrupt/advise the "user can do X to Y article" check
|
2006-02-05 18:53:37 +00:00
|
|
|
$title: Title object being checked against
|
|
|
|
|
$user : Current user object
|
|
|
|
|
$action: Action being checked
|
2006-04-04 08:46:06 +00:00
|
|
|
$result: Pointer to result returned if hook returns false. If null is returned,
|
|
|
|
|
UserCan checks are continued by internal code
|
2006-02-05 18:53:37 +00:00
|
|
|
|
2006-01-29 07:35:28 +00:00
|
|
|
'UserCreateForm': change to manipulate the login form
|
|
|
|
|
$template: SimpleTemplate instance for the form
|
|
|
|
|
|
2004-11-27 23:10:05 +00:00
|
|
|
'UserLoginComplete': after a user has logged in
|
|
|
|
|
$user: the user object that was created on login
|
|
|
|
|
|
2006-01-29 07:35:28 +00:00
|
|
|
'UserLoginForm': change to manipulate the login form
|
|
|
|
|
$template: SimpleTemplate instance for the form
|
|
|
|
|
|
2004-11-27 23:10:05 +00:00
|
|
|
'UserLogout': before a user logs out
|
|
|
|
|
$user: the user object that is about to be logged out
|
|
|
|
|
|
|
|
|
|
'UserLogoutComplete': after a user has logged out
|
|
|
|
|
$user: the user object _after_ logout (won't have name, ID, etc.)
|
2006-03-29 02:31:15 +00:00
|
|
|
|
|
|
|
|
'UserRights': After a user's group memberships are changed
|
|
|
|
|
$user : User object that was changed
|
|
|
|
|
$add : Array of strings corresponding to groups added
|
|
|
|
|
$remove: Array of strings corresponding to groups removed
|
2004-11-27 23:10:05 +00:00
|
|
|
|
2004-11-30 05:45:56 +00:00
|
|
|
'WatchArticle': before a watch is added to an article
|
|
|
|
|
$user: user that will watch
|
|
|
|
|
$article: article object to be watched
|
|
|
|
|
|
|
|
|
|
'WatchArticleComplete': after a watch is added to an article
|
|
|
|
|
$user: user that watched
|
|
|
|
|
$article: article object watched
|
|
|
|
|
|
2006-05-10 15:30:43 +00:00
|
|
|
'UnwatchArticleComplete': after a watch is removed from an article
|
|
|
|
|
$user: user that watched
|
|
|
|
|
$article: article object that was watched
|
|
|
|
|
|
2005-04-25 11:09:21 +00:00
|
|
|
'CategoryPageView': before viewing a categorypage in CategoryPage::view
|
|
|
|
|
$catpage: CategoryPage instance
|
|
|
|
|
|
2005-08-09 08:01:55 +00:00
|
|
|
'SkinTemplateContentActions': after building the $content_action array right
|
2006-10-21 07:10:33 +00:00
|
|
|
before returning it, see Content_action.php in
|
|
|
|
|
the extensions/examples/ directory
|
|
|
|
|
( http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/examples/ )
|
|
|
|
|
for a demonstration of how to use this hook.
|
2005-08-09 08:01:55 +00:00
|
|
|
$content_actions: The array of content actions
|
|
|
|
|
|
2006-05-27 08:23:05 +00:00
|
|
|
'BeforePageDisplay': Called just before outputting a page (all kinds of,
|
|
|
|
|
articles, special, history, preview, diff, edit, ...)
|
|
|
|
|
Can be used to set custom CSS/JS
|
|
|
|
|
$out: OutputPage object
|
2005-07-29 15:08:57 +00:00
|
|
|
|
2007-01-21 16:46:36 +00:00
|
|
|
'AjaxAddScript': Called in output page just before the initialisation
|
|
|
|
|
of the javascript ajax engine. The hook is only called when ajax
|
|
|
|
|
is enabled ( $wgUseAjax = true; ).
|
|
|
|
|
|
2006-05-02 20:59:56 +00:00
|
|
|
More hooks might be available but undocumented, you can execute
|
|
|
|
|
./maintenance/findhooks.php to find hidden one.
|