Fix syntax terror from r79884
[lhc/web/wiklou.git] / includes / Skin.php
index 7da81b4..c88e8a0 100644 (file)
@@ -27,6 +27,8 @@ class Skin extends Linker {
        protected $skinname = 'standard';
        // @todo Fixme: should be protected :-\
        var $mTitle = null;
+       protected $mRelevantTitle = null;
+       protected $mRelevantUser = null;
 
        /** Constructor, call parent constructor */
        function __construct() {
@@ -41,7 +43,7 @@ class Skin extends Linker {
                global $wgValidSkinNames;
                static $skinsInitialised = false;
 
-               if ( !$skinsInitialised ) {
+               if ( !$skinsInitialised || !count( $wgValidSkinNames ) ) {
                        # Get a list of available skins
                        # Build using the regular expression '^(.*).php$'
                        # Array keys are all lower case, array value keep the case used by filename
@@ -365,6 +367,66 @@ class Skin extends Linker {
                return $this->mTitle;
        }
 
+       /**
+        * Set the "relevant" title
+        * @see self::getRelevantTitle()
+        * @param $t Title object to use
+        */
+       public function setRelevantTitle( $t ) {
+               $this->mRelevantTitle = $t;
+       }
+
+       /**
+        * Return the "relevant" title.
+        * A "relevant" title is not necessarily the actual title of the page.
+        * Special pages like Special:MovePage use set the page they are acting on
+        * as their "relevant" title, this allows the skin system to display things
+        * such as content tabs which belong to to that page instead of displaying
+        * a basic special page tab which has almost no meaning.
+        */
+       public function getRelevantTitle() {
+               if ( isset($this->mRelevantTitle) ) {
+                       return $this->mRelevantTitle;
+               }
+               return $this->mTitle;
+       }
+
+       /**
+        * Set the "relevant" user
+        * @see self::getRelevantUser()
+        * @param $u User object to use
+        */
+       public function setRelevantUser( $u ) {
+               $this->mRelevantUser = $u;
+       }
+
+       /**
+        * Return the "relevant" user.
+        * A "relevant" user is similar to a relevant title. Special pages like
+        * Special:Contributions mark the user which they are relevant to so that
+        * things like the toolbox can display the information they usually are only
+        * able to display on a user's userpage and talkpage.
+        */
+       public function getRelevantUser() {
+               if ( isset($this->mRelevantUser) ) {
+                       return $this->mRelevantUser;
+               }
+               $title = $this->getRelevantTitle();
+               if( $title->getNamespace() == NS_USER || $title->getNamespace() == NS_USER_TALK ) {
+                       $rootUser = strtok( $title->getText(), '/' );
+                       if ( User::isIP( $rootUser ) ) {
+                               $this->mRelevantUser = User::newFromName( $rootUser, false );
+                       } else {
+                               $user = User::newFromName( $rootUser );
+                               if ( $user->isLoggedIn() ) {
+                                       $this->mRelevantUser = $user;
+                               }
+                       }
+                       return $this->mRelevantUser;
+               }
+               return null;
+       }
+
        /**
         * Outputs the HTML generated by other functions.
         * @param $out Object: instance of OutputPage
@@ -422,7 +484,7 @@ class Skin extends Linker {
         * You will only be adding bloat to the page and causing page caches to have to be purged on configuration changes.
         */
        static function makeGlobalVariablesScript( $skinName ) {
-               global $wgTitle, $wgUser, $wgRequest, $wgArticle, $wgOut, $wgRestrictionTypes, $wgUseAjax, $wgEnableMWSuggest;
+               global $wgTitle, $wgUser, $wgRequest, $wgArticle, $wgOut, $wgUseAjax, $wgEnableMWSuggest;
                
                $ns = $wgTitle->getNamespace();
                $nsname = MWNamespace::exists( $ns ) ? MWNamespace::getCanonicalName( $ns ) : $wgTitle->getNsText();
@@ -440,8 +502,9 @@ class Skin extends Linker {
                        'wgUserGroups' => $wgUser->getEffectiveGroups(),
                        'wgCurRevisionId' => isset( $wgArticle ) ? $wgArticle->getLatest() : 0,
                        'wgCategories' => $wgOut->getCategories(),
+                       'wgBreakFrames' => $wgOut->getFrameOptions() == 'DENY',
                );
-               foreach ( $wgRestrictionTypes as $type ) {
+               foreach ( $wgTitle->getRestrictionTypes() as $type ) {
                        $vars['wgRestriction' . ucfirst( $type )] = $wgTitle->getRestrictions( $type );
                }
                if ( $wgUseAjax && $wgEnableMWSuggest && !$wgUser->getOption( 'disablesuggest', false ) ) {
@@ -1503,9 +1566,7 @@ class Skin extends Linker {
                // Allow for site and per-namespace customization of copyright notice.
                $forContent = true;
 
-               if ( isset( $wgArticle ) ) {
-                       wfRunHooks( 'SkinCopyrightFooter', array( $wgArticle->getTitle(), $type, &$msg, &$link, &$forContent ) );
-               }
+               wfRunHooks( 'SkinCopyrightFooter', array( $this->mTitle, $type, &$msg, &$link, &$forContent ) );
 
                if ( $forContent ) {
                        $out .= wfMsgForContent( $msg, $link );