* Fix explicit s-maxage=0 on raw pages; should help with proxy issues in
[lhc/web/wiklou.git] / includes / Skin.php
index 58007b8..c0b7ba1 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+if ( ! defined( 'MEDIAWIKI' ) )
+       die( -1 );
 
 /**
  *
@@ -6,11 +8,6 @@
  * @subpackage Skins
  */
 
-/**
- * This is not a valid entry point, perform no further processing unless MEDIAWIKI is defined
- */
-if( defined( "MEDIAWIKI" ) ) {
-
 # See skin.txt
 require_once( 'Linker.php' );
 require_once( 'Image.php' );
@@ -24,7 +21,8 @@ $skinDir = dir($IP.'/skins');
 
 # while code from www.php.net
 while (false !== ($file = $skinDir->read())) {
-       if(preg_match('/^([^.].*)\.php$/',$file, $matches)) {
+       // Skip non-PHP files, hidden files, and '.dep' includes
+       if(preg_match('/^([^.]*)\.php$/',$file, $matches)) {
                $aSkin = $matches[1];
                $wgValidSkinNames[strtolower($aSkin)] = $aSkin;
        }
@@ -32,31 +30,8 @@ while (false !== ($file = $skinDir->read())) {
 $skinDir->close();
 unset($matches);
 
-require_once( 'RecentChange.php' );
-
-/**
- * @todo document
- * @package MediaWiki
- */
-class RCCacheEntry extends RecentChange
-{
-       var $secureName, $link;
-       var $curlink , $difflink, $lastlink , $usertalklink , $versionlink ;
-       var $userlink, $timestamp, $watched;
-
-       function newFromParent( $rc )
-       {
-               $rc2 = new RCCacheEntry;
-               $rc2->mAttribs = $rc->mAttribs;
-               $rc2->mExtra = $rc->mExtra;
-               return $rc2;
-       }
-} ;
-
-
 /**
- * The main skin class that provide methods and properties for all other skins
- * including PHPTal skins.
+ * The main skin class that provide methods and properties for all other skins.
  * This base class is also the "Standard" skin.
  * @package MediaWiki
  */
@@ -82,7 +57,7 @@ class Skin extends Linker {
                global $wgValidSkinNames;
                return $wgValidSkinNames;
        }
-       
+
        /**
         * Normalize a skin preference value to a form that can be loaded.
         * If a skin can't be found, it will fall back to the configured
@@ -94,7 +69,7 @@ class Skin extends Linker {
        function normalizeKey( $key ) {
                global $wgDefaultSkin;
                $skinNames = Skin::getSkinNames();
-               
+
                if( $key == '' ) {
                        // Don't return the default immediately;
                        // in a misconfiguration we need to fall back.
@@ -104,7 +79,7 @@ class Skin extends Linker {
                if( isset( $skinNames[$key] ) ) {
                        return $key;
                }
-               
+
                // Older versions of the software used a numeric setting
                // in the user preferences.
                $fallback = array(
@@ -115,7 +90,7 @@ class Skin extends Linker {
                if( isset( $fallback[$key] ) ){
                        $key = $fallback[$key];
                }
-               
+
                if( isset( $skinNames[$key] ) ) {
                        return $key;
                } else {
@@ -123,7 +98,7 @@ class Skin extends Linker {
                        return 'standard';
                }
        }
-       
+
        /**
         * Factory method for loading a skin of a given type
         * @param string $key 'monobook', 'standard', etc
@@ -132,14 +107,17 @@ class Skin extends Linker {
         */
        function &newFromKey( $key ) {
                $key = Skin::normalizeKey( $key );
-               
+
                $skinNames = Skin::getSkinNames();
                $skinName = $skinNames[$key];
-               
+
                global $IP;
 
-               # Grab the skin class and initialise it. Each skin checks for PHPTal
-               # and will not load if it's not enabled.
+               # Grab the skin class and initialise it.
+               wfSuppressWarnings();
+               // Preload base classes to work around APC/PHP5 bug
+               include_once( $IP.'/skins/'.$skinName.'.deps.php' );
+               wfRestoreWarnings();
                require_once( $IP.'/skins/'.$skinName.'.php' );
 
                # Check if we got if not failback to default skin
@@ -176,13 +154,17 @@ class Skin extends Linker {
        }
 
        function initPage( &$out ) {
+               global $wgFavicon;
+
                $fname = 'Skin::initPage';
                wfProfileIn( $fname );
 
-               $out->addLink( array( 'rel' => 'shortcut icon', 'href' => '/favicon.ico' ) );
+               if( false !== $wgFavicon ) {
+                       $out->addLink( array( 'rel' => 'shortcut icon', 'href' => $wgFavicon ) );
+               }
 
                $this->addMetadataLinks($out);
-               
+
                $this->mRevisionId = $out->mRevisionId;
 
                wfProfileOut( $fname );
@@ -291,7 +273,7 @@ class Skin extends Linker {
                        $wgRequest->getVal( 'wpEditToken' ) );
        }
 
-       # get the user/site-specific stylesheet, SkinPHPTal called from RawPage.php (settings are cached that way)
+       # get the user/site-specific stylesheet, SkinTemplate loads via RawPage.php (settings are cached that way)
        function getUserStylesheet() {
                global $wgOut, $wgStylePath, $wgRequest, $wgContLang, $wgSquidMaxage;
                $sheet = $this->getStylesheet();
@@ -332,7 +314,7 @@ class Skin extends Linker {
                global $wgUser, $wgContLang, $wgUser, $wgRequest, $wgTitle, $wgAllowUserCss;
 
                $s = '';
-               
+
                if( $wgAllowUserCss && $wgUser->isLoggedIn() ) { # logged in
                        if($wgTitle->isCssSubpage() && $this->userCanPreview( $action ) ) {
                                $s .= $wgRequest->getText('wpTextbox1');
@@ -505,7 +487,7 @@ END;
                $embed = "<span dir='$dir'>";
                $pop = '</span>';
                $t = $embed . implode ( "$pop | $embed" , $wgOut->mCategoryLinks ) . $pop;
-               
+
                $msg = count( $wgOut->mCategoryLinks ) === 1 ? 'categories1' : 'categories';
                $s = $this->makeKnownLinkObj( Title::makeTitle( NS_SPECIAL, 'Categories' ),
                        wfMsg( $msg ), 'article=' . urlencode( $wgTitle->getPrefixedDBkey() ) )
@@ -644,7 +626,7 @@ END;
                global $wgUser, $wgTitle, $wgContLang, $action;
                if(     $wgUser->isAllowed( 'deletedhistory' ) &&
                        (($wgTitle->getArticleId() == 0) || ($action == "history")) &&
-                       ($n = $wgTitle->isDeleted() ) ) 
+                       ($n = $wgTitle->isDeleted() ) )
                {
                        if ( $wgUser->isAllowed( 'delete' ) ) {
                                $msg = 'thisisdeleted';
@@ -1099,7 +1081,7 @@ END;
                }
                return $s;
        }
-       
+
        /**
         * Return URL options for the 'edit page' link.
         * This may include an 'oldid' specifier, if the current page view is such.
@@ -1109,7 +1091,7 @@ END;
         */
        function editUrlOptions() {
                global $wgArticle;
-               
+
                if( $this->mRevisionId && ! $wgArticle->isCurrent() ) {
                        return "action=edit&oldid=" . intval( $this->mRevisionId );
                } else {
@@ -1276,13 +1258,10 @@ END;
        }
 
        function dateLink() {
-               global $wgLinkCache;
                $t1 = Title::newFromText( gmdate( 'F j' ) );
                $t2 = Title::newFromText( gmdate( 'Y' ) );
 
-               $wgLinkCache->suspend();
                $id = $t1->getArticleID();
-               $wgLinkCache->resume();
 
                if ( 0 == $id ) {
                        $s = $this->makeBrokenLink( $t1->getText() );
@@ -1291,9 +1270,7 @@ END;
                }
                $s .= ', ';
 
-               $wgLinkCache->suspend();
                $id = $t2->getArticleID();
-               $wgLinkCache->resume();
 
                if ( 0 == $id ) {
                        $s .= $this->makeBrokenLink( $t2->getText() );
@@ -1304,7 +1281,7 @@ END;
        }
 
        function talkLink() {
-               global $wgTitle, $wgLinkCache;
+               global $wgTitle;
 
                if ( NS_SPECIAL == $wgTitle->getNamespace() ) {
                        # No discussion links for special pages
@@ -1334,15 +1311,13 @@ END;
                        $text = wfMsg( 'talkpage' );
                }
 
-               $wgLinkCache->suspend();
                $s = $this->makeLinkObj( $link, $text );
-               $wgLinkCache->resume();
 
                return $s;
        }
 
        function commentLink() {
-               global $wgContLang, $wgTitle, $wgLinkCache;
+               global $wgContLang, $wgTitle;
 
                if ( $wgTitle->getNamespace() == NS_SPECIAL ) {
                        return '';
@@ -1351,7 +1326,7 @@ END;
                        wfMsg( 'postcomment' ), 'action=edit&section=new' );
        }
 
-       /* these are used extensively in SkinPHPTal, but also some other places */
+       /* these are used extensively in SkinTemplate, but also some other places */
        /*static*/ function makeSpecialUrl( $name, $urlaction='' ) {
                $title = Title::makeTitle( NS_SPECIAL, $name );
                return $title->getLocalURL( $urlaction );
@@ -1425,12 +1400,26 @@ END;
         * @access private
         */
        function buildSidebar() {
-               global $wgTitle, $action;
+               global $wgTitle, $action, $wgDBname, $parserMemc;
+               global $wgLanguageCode, $wgContLanguageCode;
 
                $fname = 'SkinTemplate::buildSidebar';
-               $pageurl = $wgTitle->getLocalURL();
+
                wfProfileIn( $fname );
 
+               if ($wgLanguageCode == $wgContLanguageCode)
+                       $cacheSidebar = true;
+               else
+                       $cacheSidebar = false;
+               
+               if ($cacheSidebar) {
+                       $cachedsidebar=$parserMemc->get("{$wgDBname}:sidebar");
+                       if ($cachedsidebar!="") {
+                               wfProfileOut($fname);
+                               return $cachedsidebar;
+                       }
+               }
+
                $bar = array();
                $lines = explode( "\n", wfMsgForContent( 'sidebar' ) );
                foreach ($lines as $line) {
@@ -1454,16 +1443,15 @@ END;
                                                'text' => $text,
                                                'href' => $href,
                                                'id' => 'n-' . strtr($line[1], ' ', '-'),
-                                               'active' => $pageurl == $href
+                                               'active' => false
                                        );
                                } else { continue; }
                        }
                }
-
+               if ($cacheSidebar)
+                       $cachednotice=$parserMemc->set("{$wgDBname}:sidebar",$bar,86400);
                wfProfileOut( $fname );
                return $bar;
        }
 }
-
-}
 ?>