From 92bb738f6fa41cb91bb2223211fd2c318e2e11f3 Mon Sep 17 00:00:00 2001
From: Mathieu Loiseau <mathieu.loiseau@liris.cnrs.fr>
Date: Mon, 16 May 2022 16:05:51 +0200
Subject: [PATCH] =?UTF-8?q?Semble=20marcher=20quoi=20que=20peu=20test?=
 =?UTF-8?q?=C3=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/Connected.php | 57 ++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 46 insertions(+), 11 deletions(-)

diff --git a/src/Connected.php b/src/Connected.php
index 2aaca31..0f64a0c 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';
-- 
GitLab