Ajax suggestions:
[lhc/web/wiklou.git] / includes / Skin.php
index aba1171..5e324bb 100644 (file)
@@ -105,7 +105,7 @@ class Skin extends Linker {
         */
        static function &newFromKey( $key ) {
                global $wgStyleDirectory;
-               
+
                $key = Skin::normalizeKey( $key );
 
                $skinNames = Skin::getSkinNames();
@@ -153,34 +153,30 @@ class Skin extends Linker {
        }
 
        function initPage( &$out ) {
-               global $wgFavicon, $wgAppleTouchIcon, $wgScriptPath, $wgSitename, $wgContLang;
+               global $wgFavicon, $wgAppleTouchIcon, $wgScriptPath, $wgScriptExtension;
 
                wfProfileIn( __METHOD__ );
 
                if( false !== $wgFavicon ) {
                        $out->addLink( array( 'rel' => 'shortcut icon', 'href' => $wgFavicon ) );
                }
-               
+
                if( false !== $wgAppleTouchIcon ) {
                        $out->addLink( array( 'rel' => 'apple-touch-icon', 'href' => $wgAppleTouchIcon ) );
-               }               
-
-               $code = $wgContLang->getCode();
-               $name = $wgContLang->getLanguageName( $code );
-               $langName = $name ? $name : $code;
+               }
 
                # OpenSearch description link
-               $out->addLink( array( 
-                       'rel' => 'search', 
+               $out->addLink( array(
+                       'rel' => 'search',
                        'type' => 'application/opensearchdescription+xml',
-                       'href' => "$wgScriptPath/opensearch_desc.php",
-                       'title' => "$wgSitename ($langName)",
+                       'href' => "$wgScriptPath/opensearch_desc{$wgScriptExtension}",
+                       'title' => wfMsgForContent( 'opensearch-desc' ),
                ));
 
                $this->addMetadataLinks($out);
 
                $this->mRevisionId = $out->mRevisionId;
-               
+
                $this->preloadExistence();
 
                wfProfileOut( __METHOD__ );
@@ -207,7 +203,7 @@ class Skin extends Linker {
                $lb = new LinkBatch( $titles );
                $lb->execute();
        }
-       
+
        function addMetadataLinks( &$out ) {
                global $wgTitle, $wgEnableDublinCoreRdf, $wgEnableCreativeCommonsRdf;
                global $wgRightsPage, $wgRightsUrl;
@@ -300,19 +296,23 @@ class Skin extends Linker {
                global $wgScript, $wgStylePath, $wgUser;
                global $wgArticlePath, $wgScriptPath, $wgServer, $wgContLang, $wgLang;
                global $wgTitle, $wgCanonicalNamespaceNames, $wgOut, $wgArticle;
-               global $wgBreakFrames, $wgRequest;
+               global $wgBreakFrames, $wgRequest, $wgVariantArticlePath, $wgActionPaths;
                global $wgUseAjax, $wgAjaxWatch;
                global $wgVersion, $wgEnableAPI, $wgEnableWriteAPI;
+               global $wgRestrictionTypes, $wgLivePreview;
+               global $wgMWSuggestTemplate, $wgDBname, $wgEnableMWSuggest;
 
                $ns = $wgTitle->getNamespace();
                $nsname = isset( $wgCanonicalNamespaceNames[ $ns ] ) ? $wgCanonicalNamespaceNames[ $ns ] : $wgTitle->getNsText();
 
-               $vars = array( 
+               $vars = array(
                        'skin' => $data['skinname'],
                        'stylepath' => $wgStylePath,
                        'wgArticlePath' => $wgArticlePath,
                        'wgScriptPath' => $wgScriptPath,
                        'wgScript' => $wgScript,
+                       'wgVariantArticlePath' => $wgVariantArticlePath,
+                       'wgActionPaths' => $wgActionPaths,
                        'wgServer' => $wgServer,
                        'wgCanonicalNamespace' => $nsname,
                        'wgCanonicalSpecialPageName' => SpecialPage::resolveAlias( $wgTitle->getDBkey() ),
@@ -320,8 +320,6 @@ class Skin extends Linker {
                        'wgPageName' => $wgTitle->getPrefixedDBKey(),
                        'wgTitle' => $wgTitle->getText(),
                        'wgAction' => $wgRequest->getText( 'action', 'view' ),
-                       'wgRestrictionEdit' => $wgTitle->getRestrictions( 'edit' ),
-                       'wgRestrictionMove' => $wgTitle->getRestrictions( 'move' ),
                        'wgArticleId' => $wgTitle->getArticleId(),
                        'wgIsArticle' => $wgOut->isArticle(),
                        'wgUserName' => $wgUser->isAnon() ? NULL : $wgUser->getName(),
@@ -334,8 +332,17 @@ class Skin extends Linker {
                        'wgEnableAPI' => $wgEnableAPI,
                        'wgEnableWriteAPI' => $wgEnableWriteAPI,
                );
+               
+               if( $wgUseAjax && $wgEnableMWSuggest && !$wgUser->getOption( 'disablesuggest', false )){
+                       $vars['wgMWSuggestTemplate'] = SearchEngine::getMWSuggestTemplate();
+                       $vars['wgDBname'] = $wgDBname;
+                       $vars['wgSearchNamespaces'] = SearchEngine::userNamespaces( $wgUser );
+                       $vars['wgMWSuggestMessages'] = array( wfMsg('search-mwsuggest-enabled'), wfMsg('search-mwsuggest-disabled'));
+               }
+
+               foreach( $wgRestrictionTypes as $type )
+                       $vars['wgRestriction' . ucfirst( $type )] = $wgTitle->getRestrictions( $type );
 
-               global $wgLivePreview;
                if ( $wgLivePreview && $wgUser->getOption( 'uselivepreview' ) ) {
                        $vars['wgLivepreviewMessageLoading'] = wfMsg( 'livepreview-loading' );
                        $vars['wgLivepreviewMessageReady']   = wfMsg( 'livepreview-ready' );
@@ -541,8 +548,10 @@ END;
                        }
                        $a['onload'] .= 'setupRightClickEdit()';
                }
-               $a['class'] = 'ns-'.$wgTitle->getNamespace().' '.($wgContLang->isRTL() ? "rtl" : "ltr").
-               ' '.Sanitizer::escapeClass( 'page-'.$wgTitle->getPrefixedText() );
+               $a['class'] =
+                       'mediawiki ns-'.$wgTitle->getNamespace().
+                       ' '.($wgContLang->isRTL() ? "rtl" : "ltr").
+                       ' '.Sanitizer::escapeClass( 'page-'.$wgTitle->getPrefixedText() );
                return $a;
        }
 
@@ -625,9 +634,9 @@ END;
        }
 
 
-       function getCategoryLinks () {
+       function getCategoryLinks() {
                global $wgOut, $wgTitle, $wgUseCategoryBrowser;
-               global $wgContLang;
+               global $wgContLang, $wgUser;
 
                if( count( $wgOut->mCategoryLinks ) == 0 ) return '';
 
@@ -639,11 +648,33 @@ END;
                $dir = $wgContLang->isRTL() ? 'rtl' : 'ltr';
                $embed = "<span dir='$dir'>";
                $pop = '</span>';
-               $t = $embed . implode ( "{$pop} {$sep} {$embed}" , $wgOut->mCategoryLinks ) . $pop;
 
-               $msg = wfMsgExt( 'pagecategories', array( 'parsemag', 'escape' ), count( $wgOut->mCategoryLinks ) );
-               $s = $this->makeLinkObj( Title::newFromText( wfMsgForContent('pagecategorieslink') ), $msg )
-                       . ': ' . $t;
+               $allCats = $wgOut->getCategoryLinks();
+               $s = '';
+               $colon = wfMsgExt( 'colon-separator', 'escapenoentities' );
+               if ( !empty( $allCats['normal'] ) ) {
+                       $t = $embed . implode ( "{$pop} {$sep} {$embed}" , $allCats['normal'] ) . $pop;
+
+                       $msg = wfMsgExt( 'pagecategories', array( 'parsemag', 'escapenoentities' ), count( $allCats['normal'] ) );
+                       $s .= '<div id="mw-normal-catlinks">' .
+                               $this->makeLinkObj( Title::newFromText( wfMsgForContent('pagecategorieslink') ), $msg )
+                               . $colon . $t . '</div>';
+               }
+
+               # Hidden categories
+               if ( isset( $allCats['hidden'] ) ) {
+                       if ( $wgUser->getBoolOption( 'showhiddencats' ) ) {
+                               $class ='mw-hidden-cats-user-shown';
+                       } elseif ( $wgTitle->getNamespace() == NS_CATEGORY ) {
+                               $class = 'mw-hidden-cats-ns-shown';
+                       } else {
+                               $class = 'mw-hidden-cats-hidden';
+                       }
+                       $s .= "<div id=\"mw-hidden-catlinks\" class=\"$class\">" .
+                               wfMsgExt( 'hidden-categories', array( 'parsemag', 'escapenoentities' ), count( $allCats['hidden'] ) ) .
+                               $colon . $embed . implode( "$pop $sep $embed", $allCats['hidden'] ) . $pop .
+                               "</div>";
+               }
 
                # optional 'dmoz-like' category browser. Will be shown under the list
                # of categories an article belong to
@@ -689,8 +720,15 @@ END;
 
        function getCategories() {
                $catlinks=$this->getCategoryLinks();
+
+               $classes = 'catlinks';
+
+               if(FALSE === strpos($catlinks,'<div id="mw-normal-catlinks">')) {
+                       $classes .= ' catlinks-allhidden';
+               }
+
                if(!empty($catlinks)) {
-                       return "<p class='catlinks'>{$catlinks}</p>";
+                       return "<div id='catlinks' class='$classes'>{$catlinks}</div>";
                }
        }
 
@@ -700,7 +738,7 @@ END;
 
        /**
         * This gets called shortly before the \</body\> tag.
-        * @return String HTML to be put before \</body\> 
+        * @return String HTML to be put before \</body\>
         */
        function afterContent() {
                $printfooter = "<div class=\"printfooter\">\n" . $this->printFooter() . "</div>\n";
@@ -709,7 +747,7 @@ END;
 
        /**
         * This gets called shortly before the \</body\> tag.
-        * @return String HTML-wrapped JS code to be put before \</body\> 
+        * @return String HTML-wrapped JS code to be put before \</body\>
         */
        function bottomScripts() {
                global $wgJsMimeType;
@@ -962,14 +1000,14 @@ END;
                }
                # Many people don't like this dropdown box
                #$s .= $sep . $this->specialPagesList();
-               
+
                $s .= $this->variantLinks();
-               
+
                $s .= $this->extensionTabLinks();
 
                return $s;
        }
-       
+
        /**
         * Compatibility for extensions adding functionality through tabs.
         * Eventually these old skins should be replaced with SkinTemplate-based
@@ -987,7 +1025,7 @@ END;
                }
                return $s;
        }
-       
+
        /**
         * Language/charset variant links for classic-style skins
         * @return string
@@ -1154,7 +1192,7 @@ END;
        }
 
        function lastModified() {
-               global $wgLang, $wgArticle, $wgLoadBalancer;
+               global $wgLang, $wgArticle;
 
                $timestamp = $wgArticle->getTimestamp();
                if ( $timestamp ) {
@@ -1164,7 +1202,7 @@ END;
                } else {
                        $s = '';
                }
-               if ( $wgLoadBalancer->getLaggedSlaveMode() ) {
+               if ( wfGetLB()->getLaggedSlaveMode() ) {
                        $s .= ' <strong>' . wfMsg( 'laggedslavemode' ) . '</strong>';
                }
                return $s;
@@ -1253,11 +1291,13 @@ END;
        function editThisPage() {
                global $wgOut, $wgTitle;
 
-               if ( ! $wgOut->isArticleRelated() ) {
+               if ( !$wgOut->isArticleRelated() ) {
                        $s = wfMsg( 'protectedpage' );
                } else {
-                       if ( $wgTitle->userCan( 'edit' ) ) {
+                       if( $wgTitle->userCan( 'edit' ) && $wgTitle->exists() ) {
                                $t = wfMsg( 'editthispage' );
+                       } elseif( $wgTitle->userCan( 'create' ) && !$wgTitle->exists() ) {
+                               $t = wfMsg( 'create-this-page' );
                        } else {
                                $t = wfMsg( 'viewsource' );
                        }
@@ -1360,15 +1400,15 @@ END;
        function whatLinksHere() {
                global $wgTitle;
 
-               return $this->makeKnownLinkObj( 
-                       SpecialPage::getTitleFor( 'Whatlinkshere', $wgTitle->getPrefixedDBkey() ), 
+               return $this->makeKnownLinkObj(
+                       SpecialPage::getTitleFor( 'Whatlinkshere', $wgTitle->getPrefixedDBkey() ),
                        wfMsg( 'whatlinkshere' ) );
        }
 
        function userContribsLink() {
                global $wgTitle;
 
-               return $this->makeKnownLinkObj( 
+               return $this->makeKnownLinkObj(
                        SpecialPage::getTitleFor( 'Contributions', $wgTitle->getDBkey() ),
                        wfMsg( 'contributions' ) );
        }
@@ -1387,7 +1427,7 @@ END;
        function emailUserLink() {
                global $wgTitle;
 
-               return $this->makeKnownLinkObj( 
+               return $this->makeKnownLinkObj(
                        SpecialPage::getTitleFor( 'Emailuser', $wgTitle->getDBkey() ),
                        wfMsg( 'emailuser' ) );
        }
@@ -1398,8 +1438,8 @@ END;
                if ( ! $wgOut->isArticleRelated() ) {
                        return '(' . wfMsg( 'notanarticle' ) . ')';
                } else {
-                       return $this->makeKnownLinkObj( 
-                               SpecialPage::getTitleFor( 'Recentchangeslinked', $wgTitle->getPrefixedDBkey() ), 
+                       return $this->makeKnownLinkObj(
+                               SpecialPage::getTitleFor( 'Recentchangeslinked', $wgTitle->getPrefixedDBkey() ),
                                wfMsg( 'recentchangeslinked' ) );
                }
        }
@@ -1502,7 +1542,7 @@ END;
                if ( $wgTitle->getNamespace() == NS_SPECIAL ) {
                        return '';
                }
-               
+
                # __NEWSECTIONLINK___ changes behaviour here
                # If it's present, the link points to this page, otherwise
                # it points to the talk page
@@ -1513,7 +1553,7 @@ END;
                } else {
                        $title = $wgTitle->getTalkPage();
                }
-               
+
                return $this->makeKnownLinkObj( $title, wfMsg( 'postcomment' ), 'action=edit&section=new' );
        }
 
@@ -1602,7 +1642,7 @@ END;
         * @private
         */
        function buildSidebar() {
-               global $parserMemc, $wgEnableSidebarCache;
+               global $parserMemc, $wgEnableSidebarCache, $wgSidebarCacheExpiry;
                global $wgLang, $wgContLang;
 
                $fname = 'SkinTemplate::buildSidebar';
@@ -1612,7 +1652,7 @@ END;
                $key = wfMemcKey( 'sidebar' );
                $cacheSidebar = $wgEnableSidebarCache &&
                        ($wgLang->getCode() == $wgContLang->getCode());
-               
+
                if ($cacheSidebar) {
                        $cachedsidebar = $parserMemc->get( $key );
                        if ($cachedsidebar!="") {
@@ -1663,9 +1703,8 @@ END;
                        }
                }
                if ($cacheSidebar)
-                       $parserMemc->set( $key, $bar, 86400 );
+                       $parserMemc->set( $key, $bar, $wgSidebarCacheExpiry );
                wfProfileOut( $fname );
                return $bar;
        }
-       
 }