Merge "Revert "Adding sanity check to Title::isRedirect().""
[lhc/web/wiklou.git] / includes / resourceloader / ResourceLoaderWikiModule.php
index 1643e25..f35e774 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Abstraction for resource loader modules which pull from wiki pages.
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * @author Roan Kattouw
  */
 
-defined( 'MEDIAWIKI' ) || die( 1 );
-
 /**
  * Abstraction for resource loader modules which pull from wiki pages
  *
  * This can only be used for wiki pages in the MediaWiki and User namespaces,
  * because of its dependence on the functionality of
- * Title::isValidCssJsSubpage.
+ * Title::isCssJsSubpage.
  */
 abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
 
@@ -51,13 +51,14 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
 
        /**
         * Get the Database object used in getTitleMTimes(). Defaults to the local slave DB
-        * but subclasses may want to override this to return a remote DB object.
+        * but subclasses may want to override this to return a remote DB object, or to return
+        * null if getTitleMTimes() shouldn't access the DB at all.
         *
         * NOTE: This ONLY works for getTitleMTimes() and getModifiedTime(), NOT FOR ANYTHING ELSE.
         * In particular, it doesn't work for getting the content of JS and CSS pages. That functionality
         * will use the local DB irrespective of the return value of this method.
         *
-        * @return DatabaseBase
+        * @return DatabaseBase|null
         */
        protected function getDB() {
                return wfGetDB( DB_SLAVE );
@@ -69,8 +70,10 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
         */
        protected function getContent( $title ) {
                if ( $title->getNamespace() === NS_MEDIAWIKI ) {
-                       $message = wfMessage( $title->getDBkey() )->inContentLanguage();
-                       return $message->exists() ? $message->plain() : '';
+                       // The first "true" is to use the database, the second is to use the content langue
+                       // and the last one is to specify the message key already contains the language in it ("/de", etc.)
+                       $text = MessageCache::singleton()->get( $title->getDBkey(), true, true, true );
+                       return $text === false ? '' : $text;
                }
                if ( !$title->isCssJsSubpage() && !$title->isCssOrJsPage() ) {
                        return null;
@@ -156,6 +159,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                if ( count( $mtimes ) ) {
                        $modifiedTime = max( $modifiedTime, max( $mtimes ) );
                }
+               $modifiedTime = max( $modifiedTime, $this->getMsgBlobMtime( $context->getLanguage() ) );
                return $modifiedTime;
        }
 
@@ -174,6 +178,12 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
         * @return array( prefixed DB key => UNIX timestamp ), nonexistent titles are dropped
         */
        protected function getTitleMtimes( ResourceLoaderContext $context ) {
+               $dbr = $this->getDB();
+               if ( !$dbr ) {
+                       // We're dealing with a subclass that doesn't have a DB
+                       return array();
+               }
+               
                $hash = $context->getHash();
                if ( isset( $this->titleMtimes[$hash] ) ) {
                        return $this->titleMtimes[$hash];
@@ -186,7 +196,6 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                }
 
                if ( !$batch->isEmpty() ) {
-                       $dbr = $this->getDB();
                        $res = $dbr->select( 'page',
                                array( 'page_namespace', 'page_title', 'page_touched' ),
                                $batch->constructSet( 'page', $dbr ),