diff --git a/extension.json b/extension.json index 8cdba58d8429ed64c4a995a67534dfe48e3e7f10..724fd526550ad9dd24221a1f59abcf84fdab8c44 100644 --- a/extension.json +++ b/extension.json @@ -6,6 +6,9 @@ "license-name": "GPL-2.0-or-later", "descriptionmsg": "connected-desc", "type": "parserhook", + "requires": { + "MediaWiki": ">= 1.34.0" + }, "MessagesDirs": { "Connected": [ "i18n" @@ -19,6 +22,8 @@ }, "Hooks": { "ParserFirstCallInit": "ConnectedHooks::onParserFirstCallInit", + "ParserOptionsRegister": "ConnectedHooks::onParserOptionsRegister", + "onPageRenderingHash": "ConnectedHooks::setParserOptions", "ParserGetVariableValueSwitch": "ConnectedHooks::wfConnectedAssignValue", "MagicWordwgVariableIDs": "ConnectedHooks::connectedDeclareVarIds", "SkinBuildSidebar": "ConnectedHooks::lfHideSidebar", diff --git a/src/Connected.php b/src/Connected.php index 4b5fe6f989a0a5caa4ca24fa43cb3503d21e7ff0..6f83668544dccb15d18c2c7b77ad97a73d3d1281 100755 --- a/src/Connected.php +++ b/src/Connected.php @@ -12,51 +12,65 @@ class ConnectedHooks { public static function onParserFirstCallInit( Parser $parser ) { // Create a function hook associating the "example" magic word with renderExample() $parser->setFunctionHook( 'iflogged', [ self::class, 'ifConnectedRender' ] ); + // TODO: Le getuser ne marche pas car $parser est null ne marche pas ici à voir comment on fait + //cf. https://github.com/wikimedia/mediawiki-extensions-WikiTextLoggedInOut/blob/d764bd3972ed6b84a4af3ed423a3a5fd9b82c493/includes/WikiTextLoggedInOut.php#L39 + if ( method_exists( $parser, 'getUserIdentity' ) ) { + // MW 1.36+ + $res = $parser->getUserIdentity()->isRegistered(); + } else { + if (method_exists( $parser, 'getUser' )){ + $res = $parser->getUser()->isRegistered(); + } + else{ + $res = ''; + } + } + $parser->getOptions()->setOption( 'connected', string($res) ); + } + + public static function onParserOptionsRegister( &$defaults, &$inCacheKey, &$lazyOptions ) { + $inCacheKey['connected'] = true; + $defaults['connected'] = ''; + return true; } // 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. - global $wgUser; - if($wgUser->isSafeToLoad()){ - if ( $wgUser->isLoggedIn() ) { - $output = $ifLoggedIn; - } - else{ - $output = $ifNot; - } + if ( $parser->getOptions()->getOption('connected') == string(true)) { + $output = $ifLoggedIn; + } + else{ + $output = $ifNot; } return [ $output, 'noparse' => false ]; } //calcul des variables public static function wfConnectedAssignValue( Parser $parser, &$cache, $magicWordId, &$ret, $frame) { - global $wgUser; $result = false; - if($wgUser->isSafeToLoad()){ - switch($magicWordId){ - case 'connected' : - if ( !$wgUser->isLoggedIn() ) { - $ret = 0; - $result = true; - } - else{ - $ret = 1; - $result = true; - } - break; - case 'u_name': - if ( !$wgUser->isLoggedIn() ) { - $ret = $wgUser->getName(); - $result = true; - } - else{ - $ret = $wgUser->getName(); - $result = true; - } - break; - } + switch($magicWordId){ + case 'connected' : + if ( $parser->getOptions()->getOption('connected') == string(false)) { + $ret = 0; + $result = true; + } + else{ + $ret = 1; + $result = true; + } + break; + case 'u_name': + if ( $parser->getOptions()->getOption('connected') == string(false)) { + $ret = $wgUser->getName(); + $result = true; + } + else{ + $ret = $wgUser->getName(); + $result = true; + } + break; } return $result; } @@ -73,9 +87,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 ( $parser->getOptions()->getOption('connected') == string(false)) { $bar = array( 'navigation' => array( array( @@ -92,8 +105,7 @@ class ConnectedHooks { #Ajouter une feuille de style quand pas connecté public static function add_NotLoggedIncss( OutputPage $out, Skin $skin ) { - global $wgUser; - if ( !$wgUser->isLoggedIn() ) { + if ( $parser->getOptions()->getOption('connected') == string(false)) { $out->addStyle('/w/index.php?title=MediaWiki:NotLoggedIn.css&action=raw&ctype=text/css'); $out->addMeta( "logged", "no" ); }