Merge "resourceloader: Remove 'wgMainPageTitle' mw.config key"
[lhc/web/wiklou.git] / includes / cache / LinkCache.php
index b3dc004..c13f95e 100644 (file)
@@ -141,6 +141,7 @@ class LinkCache {
                        'revision' => (int)$revision,
                        'model' => $model ? (string)$model : null,
                        'lang' => $lang ? (string)$lang : null,
+                       'restrictions' => null
                ] );
        }
 
@@ -158,8 +159,15 @@ class LinkCache {
                        'length' => intval( $row->page_len ),
                        'redirect' => intval( $row->page_is_redirect ),
                        'revision' => intval( $row->page_latest ),
-                       'model' => !empty( $row->page_content_model ) ? strval( $row->page_content_model ) : null,
-                       'lang' => !empty( $row->page_lang ) ? strval( $row->page_lang ) : null,
+                       'model' => !empty( $row->page_content_model )
+                               ? strval( $row->page_content_model )
+                               : null,
+                       'lang' => !empty( $row->page_lang )
+                               ? strval( $row->page_lang )
+                               : null,
+                       'restrictions' => !empty( $row->page_restrictions )
+                               ? strval( $row->page_restrictions )
+                               : null
                ] );
        }
 
@@ -198,7 +206,13 @@ class LinkCache {
        public static function getSelectFields() {
                global $wgContentHandlerUseDB, $wgPageLanguageUseDB;
 
-               $fields = [ 'page_id', 'page_len', 'page_is_redirect', 'page_latest' ];
+               $fields = [
+                       'page_id',
+                       'page_len',
+                       'page_is_redirect',
+                       'page_latest',
+                       'page_restrictions'
+               ];
                if ( $wgContentHandlerUseDB ) {
                        $fields[] = 'page_content_model';
                }
@@ -281,7 +295,16 @@ class LinkCache {
        }
 
        private function isCacheable( LinkTarget $title ) {
-               return ( $title->inNamespace( NS_TEMPLATE ) || $title->inNamespace( NS_FILE ) );
+               $ns = $title->getNamespace();
+               if ( in_array( $ns, [ NS_TEMPLATE, NS_FILE, NS_CATEGORY ] ) ) {
+                       return true;
+               }
+               // Focus on transcluded pages more than the main content
+               if ( MWNamespace::isContent( $ns ) ) {
+                       return false;
+               }
+               // Non-talk extension namespaces (e.g. NS_MODULE)
+               return ( $ns >= 100 && MWNamespace::isSubject( $ns ) );
        }
 
        private function fetchPageRow( IDatabase $db, LinkTarget $nt ) {