diff --git a/src/Connected.php b/src/Connected.php index 2aaca31200f0836aa8d12911985a276717135692..0f64a0c0776885924f5ef8d10f6a21b25ab10cf7 100755 --- a/src/Connected.php +++ b/src/Connected.php @@ -8,6 +8,45 @@ * **/ class ConnectedHooks { + private static $user = false; + + //try to get the user anyway I can + //through user or parser or output or wgUser… + //and set it for next time + private static function get_user($parserOrOther=null){ + if(self::$user === false){ + $res = false; + if (!is_null($parserOrOther)){ + if(get_class($parserOrOther) == "User"){ + $res = $parserOrOther; + } + else if(get_class($parserOrOther) == "Parser"){ + //cf. https://github.com/wikimedia/mediawiki-extensions-WikiTextLoggedInOut/blob/d764bd3972ed6b84a4af3ed423a3a5fd9b82c493/includes/WikiTextLoggedInOut.php#L39 + if ( method_exists( $parserOrOther, 'getUserIdentity' ) ) { + // MW 1.36+ + $res = $parserOrOther->getUserIdentity(); + } + else { + if (method_exists( $parserOrOther, 'getUser' )){ + $res = $parserOrOther->getUser(); + } + } + } + else if(get_class($parserOrOther) == "OutputPage"){ + $res = $parserOrOther->getUser(); + } + } + if($res === false){ + global $wgUser; + $res = $wgUser; + } + self::$user = $res; + } + else{ + $res = self::$user; + } + return $res; + } // Register any render callbacks with the parser public static function onParserFirstCallInit( Parser $parser ) { @@ -19,7 +58,7 @@ class ConnectedHooks { public static function ifConnectedRender( Parser $parser, $ifLoggedIn = '', $ifNot = '') { // The input parameters are wikitext with templates expanded. // The output should be wikitext too. - if (!$parser->getUser()->isRegistered()) { + if (!self::get_user($parser)->isRegistered()) { $output = $ifNot; } else{ @@ -33,7 +72,7 @@ class ConnectedHooks { $result = false; switch($magicWordId){ case 'connected' : - if (!$parser->getUser()->isRegistered()) { + if (!self::get_user($parser)->isRegistered()) { $ret = 0; } else{ @@ -42,13 +81,13 @@ class ConnectedHooks { $result = true; break; case 'u_name': - if (!$parser->getUser()->isRegistered()) { + if (!self::get_user($parser)->isRegistered()) { //$ret = self::$theUser->getName(); - $ret = $parser->getUser()->getName(); + $ret = self::get_user($parser)->getName(); } else{ //$ret = self::$theUser->getName(); - $ret = $parser->getUser()->getName(); + $ret = self::get_user($parser)->getName(); } $resutl = true; break; @@ -68,9 +107,8 @@ class ConnectedHooks { //https://www.mediawiki.org/wiki/Manual:Interface/Sidebar#Change_sidebar_content_when_logged_in_(PHP) //https://www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL public static function lfHideSidebar( $skin, &$bar ) { - global $wgUser; // Hide sidebar for anonymous users - if ( !$wgUser->isLoggedIn() ) { + if ( !self::get_user() ) { $bar = array( 'navigation' => array( array( @@ -87,7 +125,7 @@ class ConnectedHooks { #Ajouter une feuille de style quand pas connecté public static function add_NotLoggedIncss( OutputPage $out, Skin $skin ) { - if ( !$out->getUser()->isRegistered() ) { + if ( !self::get_user($out)->isRegistered() ) { $out->addStyle('/w/index.php?title=MediaWiki:NotLoggedIn.css&action=raw&ctype=text/css'); $out->addMeta( "logged", "no" ); } @@ -101,9 +139,6 @@ class ConnectedHooks { // so the cache of a page is always related to anonymous/registered_users //https://github.com/thomas-topway-it/mediawiki-extensions-PageOwnership/blob/13c379e0bac178a963d08a63fd776a30fa85a339/includes/PageOwnership.php#L326 public static function onPageRenderingHash( &$confstr, User $user, &$forOptions ) { - - // *** see also parserOptions->addExtraKey - // *** for some reason we cannot rely on $user->isRegistered() if ( $user->isRegistered() ) { $confstr .= '+registered_user';