From d7531b1502cd5f4ce83666437fbc173fcef359a9 Mon Sep 17 00:00:00 2001
From: Mathieu Loiseau <mathieu.loiseau@liris.cnrs.fr>
Date: Wed, 2 Oct 2024 10:49:39 +0200
Subject: [PATCH] update 1.42

---
 README.md                                     |  2 +-
 extension.json                                |  2 +-
 .../Connected.php                             |  6 ++
 src/Connected.php                             | 75 +++++++------------
 4 files changed, 36 insertions(+), 49 deletions(-)
 rename Connected.i18n.magic.php => i18n/Connected.php (55%)

diff --git a/README.md b/README.md
index ccd35ce..4dcdcb5 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 0393b63..22a6042 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 4d5f911..f3bc3da 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 0a6087a..9cce7b6 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" );
 		}
-- 
GitLab