(bug 5167) Add {{SUBPAGENAME}} variable
[lhc/web/wiklou.git] / includes / Article.php
index 6a1c0e3..bfdb68d 100644 (file)
@@ -91,11 +91,8 @@ class Article {
                                        } else {
                                                return $rt->getFullURL();
                                        }
-                               } elseif( $rt->exists() ) {
-                                       // Internal redirects can be handled relatively gracefully.
-                                       // We may have to change to another Article subclass, though.
-                                       return $rt;
-                               }
+                               } 
+                               return $rt;
                        }
                }
                
@@ -427,6 +424,7 @@ class Article {
         * @access private
         */
        function loadPageData( $data ) {
+               $this->mTitle->mArticleID = $data->page_id;
                $this->mTitle->loadRestrictions( $data->page_restrictions );
                $this->mTitle->mRestrictionsLoaded = true;
 
@@ -818,8 +816,10 @@ class Article {
                                $t = $this->mTitle->getPrefixedText();
                                if( $oldid ) {
                                        $t .= ',oldid='.$oldid;
+                                       $text = wfMsg( 'missingarticle', $t );
+                               } else {
+                                       $text = wfMsg( 'noarticletext', $t );
                                }
-                               $text = wfMsg( 'missingarticle', $t );
                        }
 
                        # Another whitelist check in case oldid is altering the title
@@ -978,23 +978,16 @@ class Article {
                $this->view();
        }
 
+       /**
+        * Handle action=purge
+        */
        function purge() {
-               global $wgUser, $wgRequest, $wgOut, $wgUseSquid;
-
-               if ( $wgUser->isLoggedIn() || $wgRequest->wasPosted() || ! wfRunHooks( 'ArticlePurge', array( &$this ) ) ) {
-                       // Invalidate the cache
-                       $this->mTitle->invalidateCache();
+               global $wgUser, $wgRequest, $wgOut;
 
-                       if ( $wgUseSquid ) {
-                               // Commit the transaction before the purge is sent
-                               $dbw = wfGetDB( DB_MASTER );
-                               $dbw->immediateCommit();
-
-                               // Send purge
-                               $update = SquidUpdate::newSimplePurge( $this->mTitle );
-                               $update->doUpdate();
+               if ( $wgUser->isLoggedIn() || $wgRequest->wasPosted() ) {
+                       if( wfRunHooks( 'ArticlePurge', array( &$this ) ) ) {
+                               $this->doPurge();
                        }
-                       $this->view();
                } else {
                        $msg = $wgOut->parse( wfMsg( 'confirm_purge' ) );
                        $action = $this->mTitle->escapeLocalURL( 'action=purge' );
@@ -1009,6 +1002,26 @@ class Article {
                        $wgOut->addHTML( $msg );
                }
        }
+       
+       /**
+        * Perform the actions of a page purging
+        */
+       function doPurge() {
+               global $wgUseSquid;
+               // Invalidate the cache
+               $this->mTitle->invalidateCache();
+
+               if ( $wgUseSquid ) {
+                       // Commit the transaction before the purge is sent
+                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw->immediateCommit();
+
+                       // Send purge
+                       $update = SquidUpdate::newSimplePurge( $this->mTitle );
+                       $update->doUpdate();
+               }
+               $this->view();
+       }
 
        /**
         * Insert a new empty page record for this article.
@@ -1122,10 +1135,7 @@ class Article {
        }
 
        /**
-        * Theoretically we could defer these whole insert and update
-        * functions for after display, but that's taking a big leap
-        * of faith, and we want to be able to report database
-        * errors at some point.
+        * Insert a new article into the database
         * @access private
         */
        function insertNewArticle( $text, $summary, $isminor, $watchthis, $suppressRC=false, $comment=false ) {
@@ -2006,6 +2016,8 @@ class Article {
                $dbw->delete( 'pagelinks', array( 'pl_from' => $id ) );
                $dbw->delete( 'imagelinks', array( 'il_from' => $id ) );
                $dbw->delete( 'categorylinks', array( 'cl_from' => $id ) );
+               $dbw->delete( 'templatelinks', array( 'tl_from' => $id ) );
+               $dbw->delete( 'externallinks', array( 'el_from' => $id ) );
 
                # Log the deletion
                $log = new LogPage( 'delete' );
@@ -2173,6 +2185,7 @@ class Article {
 
                # Parse the text
                $options = new ParserOptions;
+                $options->setTidy(true);
                $poutput = $wgParser->parse( $text, $this->mTitle, $options, true, true, $newid );
 
                # Save it to the parser cache
@@ -2214,14 +2227,16 @@ class Article {
                # If this is another user's talk page, update newtalk
 
                if ($this->mTitle->getNamespace() == NS_USER_TALK && $shortTitle != $wgUser->getName()) {
-                       $other = User::newFromName( $shortTitle );
-                       if( is_null( $other ) && User::isIP( $shortTitle ) ) {
-                               // An anonymous user
-                               $other = new User();
-                               $other->setName( $shortTitle );
-                       }
-                       if( $other ) {
-                               $other->setNewtalk( true );
+                       if (wfRunHooks('ArticleEditUpdateNewTalk', array(&$this)) ) {
+                               $other = User::newFromName( $shortTitle );
+                               if( is_null( $other ) && User::isIP( $shortTitle ) ) {
+                                       // An anonymous user
+                                       $other = new User();
+                                       $other->setName( $shortTitle );
+                               }
+                               if( $other ) {
+                                       $other->setNewtalk( true );
+                               }
                        }
                }
 
@@ -2233,7 +2248,11 @@ class Article {
        }
 
        /**
-        * @todo document this function
+        * Generate the navigation links when browsing through an article revisions
+        * It shows the information as:
+        *   Revision as of <date>; view current revision
+        *   <- Previous version | Next Version ->
+        *
         * @access private
         * @param string $oldid         Revision ID of this article revision
         */
@@ -2246,7 +2265,10 @@ class Article {
                $lnk = $current
                        ? wfMsg( 'currentrevisionlink' )
                        : $lnk = $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'currentrevisionlink' ) );
-               $prevlink = $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'previousrevision' ), 'direction=prev&oldid='.$oldid );
+               $prev = $this->mTitle->getPreviousRevisionID( $oldid ) ;
+               $prevlink = $prev
+                       ? $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'previousrevision' ), 'direction=prev&oldid='.$oldid )
+                       : wfMsg( 'previousrevision' );
                $nextlink = $current
                        ? wfMsg( 'nextrevision' )
                        : $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'nextrevision' ), 'direction=next&oldid='.$oldid );