Fix a couple of typos from last commit (one possibly error-causing for picky browsers...
[lhc/web/wiklou.git] / docs / hooks.txt
index 62e4c46..0886c0c 100644 (file)
@@ -35,19 +35,19 @@ order of a title before displaying the article; the other converts the
 title to all uppercase letters. Currently, in MediaWiki code, we
 would handle this as follows (note: not real code, here):
 
-    function showAnArticle($article) {
-        global $wgReverseTitle, $wgCapitalizeTitle;
-       
-       if ($wgReverseTitle) {
-           wfReverseTitle($article);
-        }
-       
-       if ($wgCapitalizeTitle) {
-          wfCapitalizeTitle($article);
-        }
-       
-       # code to actually show the article goes here
-    }
+       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,
@@ -75,15 +75,15 @@ 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) {
+       function showAnArticle($article) {
 
-       if (wfRunHooks('ArticleShow', array(&$article))) {
-       
-           # code to actually show the article goes here
-           
-           wfRunHooks('ArticleShowComplete', array(&$article));
+               if (wfRunHooks('ArticleShow', array(&$article))) {
+
+                       # code to actually show the article goes here
+
+                       wfRunHooks('ArticleShowComplete', array(&$article));
+               }
        }
-    }
 
 We've cleaned up the code here by removing clumps of weird,
 infrequently used code and moving them off somewhere else. It's much
@@ -96,24 +96,24 @@ having little title-reversing if-blocks spread all over the codebase
 in showAnArticle, deleteAnArticle, exportArticle, etc., we can
 concentrate it all in an extension file:
 
-    function reverseArticleTitle($article) {
-        # ...
-    }
+       function reverseArticleTitle($article) {
+               # ...
+       }
 
-    function reverseForExport($article) {
-        # ...
-    }
+       function reverseForExport($article) {
+               # ...
+       }
 
 The setup function for the extension just has to add its hook
 functions to the appropriate events:
 
-    setupTitleReversingExtension() {
-        global $wgHooks;
-       
-       $wgHooks['ArticleShow'][] = 'reverseArticleTitle';
-       $wgHooks['ArticleDelete'][] = 'reverseArticleTitle';
-       $wgHooks['ArticleExport'][] = 'reverseForExport';
-    }
+       setupTitleReversingExtension() {
+               global $wgHooks;
+
+               $wgHooks['ArticleShow'][] = 'reverseArticleTitle';
+               $wgHooks['ArticleDelete'][] = 'reverseArticleTitle';
+               $wgHooks['ArticleExport'][] = 'reverseForExport';
+       }
 
 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
@@ -124,8 +124,8 @@ 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:
 
-    require_once('extensions/ReverseTitle.php');
-    
+       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.
 
@@ -143,31 +143,31 @@ A hook is a chunk of code run at some particular event. It consists of:
 Hooks are registered by adding them to the global $wgHooks array for a
 given event. All the following are valid ways to define hooks:
 
-      $wgHooks['EventName'][] = 'someFunction'; # function, no data
-      $wgHooks['EventName'][] = array('someFunction', $someData);
-      $wgHooks['EventName'][] = array('someFunction'); # weird, but OK
-      
-      $wgHooks['EventName'][] = $object; # object only
-      $wgHooks['EventName'][] = array($object, 'someMethod');
-      $wgHooks['EventName'][] = array($object, 'someMethod', $someData);
-      $wgHooks['EventName'][] = array($object); # weird but OK
+       $wgHooks['EventName'][] = 'someFunction'; # function, no data
+       $wgHooks['EventName'][] = array('someFunction', $someData);
+       $wgHooks['EventName'][] = array('someFunction'); # weird, but OK
+
+       $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)
+       # 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
@@ -176,8 +176,8 @@ 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:
 
-      $wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'TimStarling');
-      $wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'brion');
+       $wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'TimStarling');
+       $wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'brion');
 
 This code would result in ircNotify being run twice when an article is
 saved: once for 'TimStarling', and once for 'brion'.
@@ -195,12 +195,12 @@ the main functionality. For example, if you wanted to authenticate
 users to a custom system (LDAP, another PHP program, whatever), you
 could do:
 
-    $wgHooks['UserLogin'][] = array('ldapLogin', $ldapServer);
-                               
-    function ldapLogin($username, $password) {
-        # log user into LDAP
-       return false;
-    }
+       $wgHooks['UserLogin'][] = array('ldapLogin', $ldapServer);
+  
+       function ldapLogin($username, $password) {
+               # log user into LDAP
+               return false;
+       }
 
 Returning false makes less sense for events where the action is
 complete, and will normally be ignored.
@@ -210,14 +210,15 @@ complete, and will normally be ignored.
 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;
-           if (wfRunHooks('ArticleProtect', array(&$this, &$wgUser))) {
-               # protect the article
-               wfRunHooks('ArticleProtectComplete', array(&$this, &$wgUser));
-           }
+       class Article { 
+               # ...
+               function protect() {
+                       global $wgUser;
+                       if (wfRunHooks('ArticleProtect', array(&$this, &$wgUser))) {
+                               # protect the article
+                               wfRunHooks('ArticleProtectComplete', array(&$this, &$wgUser));
+                       }
+               }
        }
                                                    
 wfRunHooks() returns true if the calling function should continue
@@ -251,6 +252,11 @@ $message: out parameter: error message to display on abort
 'AddNewAccount': after a user account is created
 $user: the User object that was created. (Parameter added in 1.7)
 
+'AlternateEdit': before checking if an user can edit a page and
+before showing the edit form ( EditPage::edit() ). This is triggered
+on &action=edit.
+$EditPage : the EditPage object
+
 'ArticleDelete': before an article is deleted
 $article: the article (object) being deleted
 $user: the user (object) deleting the article
@@ -298,6 +304,10 @@ $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)
 
+'ArticleViewHeader': Before the parser cache is about to be tried for article viewing.
+&$pcache: whether to try the parser cache or not
+&$outputDone: whether the output for this page finished or not
+
 '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
@@ -312,6 +322,27 @@ $name: Image name being checked
 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.
 
+'BeforeGalleryFindFile': before an image is fetched for a gallery
+&$gallery,: the gallery object
+&$nt: the image title 
+&$time: image timestamp
+
+'BeforeParserFetchTemplateAndtitle': before a template is fetched by Parser
+&$parser: Parser object
+&$title: title of the template
+&$skip: skip this template and link it?
+&$id: the id of the revision being parsed
+
+'BeforeParserMakeImageLinkObj': before an image is rendered by Parser
+&$parser: Parser object
+&$nt: the image title
+&$skip: skip this image and link it?
+&$time: the image timestamp
+
+'BeforeParserrenderImageGallery': before an image gallery is rendered by Parser
+&$parser: Parser object
+&$ig: ImageGallery object
+
 '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)
@@ -361,6 +392,21 @@ Alternatively, modifying $error and returning true will cause the contents of $e
 to be echoed at the top of the edit form as wikitext. Return true without altering
 $error to allow the edit to proceed.
 
+'EditSectionLink': Override the return value of Linker::editSectionLink()
+$skin: Skin rendering the UI
+$title: Title being linked to
+$section: Section to link to
+$link: Default link
+$result: Result (alter this to override the generated links)
+
+'EditSectionLinkForOther': Override the return value of Linker::editSectionLinkForOther()
+$skin: Skin rendering the UI
+$title: Title being linked to
+$section: Section to link to
+$hint: Anchor title/tooltip attributes
+$link: Default link
+$result: Result (alter this to override the generated links)
+
 'EmailConfirmed': When checking that the user's email address is "confirmed"
 $user: User being checked
 $confirmed: Whether or not the email address is confirmed
@@ -403,6 +449,10 @@ $title: Title object of page
 $url: string value as output (out parameter, can modify)
 $query: query options passed to Title::getFullURL()
 
+'ImageOpenShowImageInlineBefore': Call potential extension just before showing the image on an image page
+$imagePage: ImagePage object ($this)
+$output: $wgOut
+
 'InternalParseBeforeLinks': during Parser's internalParse method before links but
 after noinclude/includeonly/onlyinclude and other processing.
 &$this: Parser object
@@ -506,6 +556,9 @@ Alter the contents of $siteNotice to add to/alter the sitenotice/anonnotice.
 &$sktemplate: SkinTemplate object
 &$tpl: Template engine object
 
+'TitleLinkUpdatesAfterCompletion': after Linker->doUpdate() is called
+&$title: title of the updated page
+
 'TitleMoveComplete': after moving an article (title)
 $old: old title
 $nt: new title