. * * @file * @ingroup extensions */ namespace Popups; use MediaWiki\Config\Config; use MediaWiki\Extension\Gadgets\GadgetRepo; use MediaWiki\User\User; /** * Gadgets integration * * @package Popups */ class PopupsGadgetsIntegration { public const CONFIG_NAVIGATION_POPUPS_NAME = 'PopupsConflictingNavPopupsGadgetName'; public const CONFIG_REFERENCE_TOOLTIPS_NAME = 'PopupsConflictingRefTooltipsGadgetName'; /** * @var string */ private $navPopupsGadgetName; /** * @var string */ private $refTooltipsGadgetName; private ?GadgetRepo $gadgetRepo; /** * @param Config $config MediaWiki configuration * @param GadgetRepo|null $gadgetRepo */ public function __construct( Config $config, ?GadgetRepo $gadgetRepo ) { $this->navPopupsGadgetName = $this->sanitizeGadgetName( $config->get( self::CONFIG_NAVIGATION_POPUPS_NAME ) ); $this->refTooltipsGadgetName = $this->sanitizeGadgetName( $config->get( self::CONFIG_REFERENCE_TOOLTIPS_NAME ) ); $this->gadgetRepo = $gadgetRepo; } /** * @param string $gadgetName * @return string */ private function sanitizeGadgetName( $gadgetName ) { return str_replace( ' ', '_', trim( $gadgetName ) ); } /** * Check if Popups conflicts with Nav Popups Gadget * If user enabled Nav Popups, Popups is unavailable * * @param User $user User whose gadget settings are checked * @return bool */ public function conflictsWithNavPopupsGadget( User $user ) { if ( $this->gadgetRepo ) { $match = array_search( $this->navPopupsGadgetName, $this->gadgetRepo->getGadgetIds() ); if ( $match !== false ) { try { return $this->gadgetRepo->getGadget( $this->navPopupsGadgetName ) ->isEnabled( $user ); } catch ( \InvalidArgumentException $e ) { return false; } } } return false; } /** * Check if Popups conflicts with Ref Tooltips Gadget * If user enabled Ref Tooltip, Popups is unavailable * * @param User $user User whose gadget settings are checked * @return bool */ public function conflictsWithRefTooltipsGadget( User $user ) { if ( $this->gadgetRepo ) { $match = array_search( $this->refTooltipsGadgetName, $this->gadgetRepo->getGadgetIds() ); if ( $match !== false ) { try { return $this->gadgetRepo->getGadget( $this->refTooltipsGadgetName ) ->isEnabled( $user ); } catch ( \InvalidArgumentException $e ) { return false; } } } return false; } }