diff --git a/README.md b/README.md index ccd35ce02f713e9a73ac76505cb8296406a8f4fa..4dcdcb5380c8c4ced2afc9e2e6d923dcb0645aec 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A small mediawiki extension to have a variable to know if the user is connected or not. - Version 0.2 + Version 0.3 Mathieu Loiseau This is free software licensed under the GNU General Public License. Please diff --git a/extension.json b/extension.json index 0393b63bef4e65ab0012a0429b70fb7a383eef8b..22a6042c112e4a068d194c52ee859c95302e8b7f 100644 --- a/extension.json +++ b/extension.json @@ -18,7 +18,7 @@ "ConnectedHooks": "src/Connected.php" }, "ExtensionMessagesFiles": { - "ExampleExtensionMagic": "Connected.i18n.magic.php" + "ConnectedMagic": "i18n/Connected.php" }, "Hooks": { "ParserFirstCallInit": "ConnectedHooks::onParserFirstCallInit", diff --git a/Connected.i18n.magic.php b/i18n/Connected.php similarity index 55% rename from Connected.i18n.magic.php rename to i18n/Connected.php index 4d5f911ced5cdb91b82f694ab123f511c0c48835..f3bc3da2d4c868231f7454b7e114083571c00370 100755 --- a/Connected.i18n.magic.php +++ b/i18n/Connected.php @@ -6,3 +6,9 @@ $magicWords['en'] = [ 'u_name' => [1, 'USERNAME'], 'iflogged' => [0, 'ifloggedin'] ]; + +$magicWords['fr'] = [ + 'connected' => [1, 'CONNECTE'], + 'u_name' => [1, 'NOM'], + 'iflogged' => [0, 'siconnecte'] +]; diff --git a/src/Connected.php b/src/Connected.php index 0a6087a2a7e018607b1f056bab6d1b0a5099e2b1..9cce7b632846cd902d5460051712660cd819851b 100755 --- a/src/Connected.php +++ b/src/Connected.php @@ -7,68 +7,54 @@ * @link https://gitlab.liris.cnrs.fr/mloiseau/mw_connected * **/ + class ConnectedHooks { private static $user = false; + // Register any render callbacks with the parser + public static function onParserFirstCallInit( Parser $parser ) { + // Create a function hook associating the "example" magic word with renderExample() + $parser->setFunctionHook( 'iflogged', [ self::class, 'ifConnectedRender' ] ); + } + //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(); - } - } - self::$user = $res; + if (self::$user === false){ + self::$user = RequestContext::getMain()->getUser(); } - else{ - $res = self::$user; - } - return $res; + return self::$user; } - // Register any render callbacks with the parser - public static function onParserFirstCallInit( Parser $parser ) { - // Create a function hook associating the "example" magic word with renderExample() - $parser->setFunctionHook( 'iflogged', [ self::class, 'ifConnectedRender' ] ); + private static function is_registered(){ + return self::$user != false && self::$user->mId !=0; } // Render the output of {{#ifloggedin:}} i.e. iflogged function. public static function ifConnectedRender( Parser $parser, $ifLoggedIn = '', $ifNot = '') { // The input parameters are wikitext with templates expanded. // The output should be wikitext too. - if (!self::get_user($parser)->isRegistered()) { - $output = $ifNot; + $parser->getOutput()->updateCacheExpiry( 0 ); + self::get_user($parser); + + if (self::is_registered()) { + $output = $ifLoggedIn; } else{ - $output = $ifLoggedIn; + $output = $ifNot; } - return [ $output, 'noparse' => false ]; + return [$output, 'noparse' => false ]; } //calcul des variables public static function wfConnectedAssignValue( Parser $parser, &$cache, $magicWordId, &$ret, $frame) { $result = false; + self::get_user(); + $parser->getOutput()->updateCacheExpiry( 0 ); switch($magicWordId){ case 'connected' : - if (!self::get_user($parser)->isRegistered()) { + if (!self::is_registered()) { $ret = 0; } else{ @@ -77,15 +63,8 @@ class ConnectedHooks { $result = true; break; case 'u_name': - if (!self::get_user($parser)->isRegistered()) { - //$ret = self::$theUser->getName(); - $ret = self::get_user($parser)->getName(); - } - else{ - //$ret = self::$theUser->getName(); - $ret = self::get_user($parser)->getName(); - } - $resutl = true; + $ret = self::$user->mName; + $result = true; break; } return $result; @@ -104,7 +83,8 @@ class ConnectedHooks { //https://www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL public static function lfHideSidebar( $skin, &$bar ) { // Hide sidebar for anonymous users - if ( !self::get_user()->isRegistered() ) { + $user = self::get_user(); + if (!self::is_registered()) { $bar = array( 'navigation' => array( array( @@ -121,7 +101,8 @@ class ConnectedHooks { #Ajouter une feuille de style quand pas connecté public static function add_NotLoggedIncss( OutputPage $out, Skin $skin ) { - if ( !self::get_user($out)->isRegistered() ) { + $user = self::get_user($out); + if (!self::is_registered()) { $out->addStyle('/w/index.php?title=MediaWiki:NotLoggedIn.css&action=raw&ctype=text/css'); $out->addMeta( "logged", "no" ); }