diff --git a/includes/menu/Definitions.php b/includes/menu/Definitions.php
index 66105fb..8ccc1c0 100644
--- a/includes/menu/Definitions.php
+++ b/includes/menu/Definitions.php
@@ -76,7 +76,6 @@ final class Definitions {
'contributions',
$this->context->msg( 'mobile-frontend-main-menu-contributions' )->escaped(),
SpecialPage::getTitleFor( 'Contributions', $this->user->getName() )->getLocalURL()
-
) );
}
@@ -110,12 +109,12 @@ final class Definitions {
}
/**
- * Creates a login or logout button
+ * Creates a login or logout button with a profile button.
*
* @param Group $group
* @throws MWException
*/
- public function insertLogInOutMenuItem( Group $group ) {
+ public function insertAuthMenuItem( Group $group ) {
$group->insertEntry( new AuthMenuEntry(
$this->user,
$this->context,
diff --git a/includes/menu/Main/AdvancedBuilder.php b/includes/menu/Main/AdvancedBuilder.php
index 2490c23..e455910 100644
--- a/includes/menu/Main/AdvancedBuilder.php
+++ b/includes/menu/Main/AdvancedBuilder.php
@@ -23,6 +23,8 @@ namespace MediaWiki\Minerva\Menu\Main;
use FatalError;
use Hooks;
use MWException;
+use User;
+use MediaWiki\Minerva\Menu\Definitions;
use MediaWiki\Minerva\Menu\Group;
/**
@@ -32,29 +34,88 @@ use MediaWiki\Minerva\Menu\Group;
*
* @package MediaWiki\Minerva\Menu\Main
*/
-class AdvancedBuilder extends DefaultBuilder {
+final class AdvancedBuilder implements IBuilder {
+ /**
+ * @var bool
+ */
+ private $showMobileOptions;
/**
+ * Currently logged in user
+ * @var User
+ */
+ private $user;
+
+ /**
+ * @var Definitions
+ */
+ private $definitions;
+
+ /**
+ * Initialize the Default Main Menu builder
+ *
+ * @param bool $showMobileOptions Show MobileOptions instead of Preferences
+ * @param User $user The current user
+ * @param Definitions $definitions A menu items definitions set
+ */
+ public function __construct( $showMobileOptions, User $user, Definitions $definitions ) {
+ $this->showMobileOptions = $showMobileOptions;
+ $this->user = $user;
+ $this->definitions = $definitions;
+ }
+
+ /**
+ * @inheritDoc
* @return Group[]
* @throws FatalError
* @throws MWException
*/
public function getGroups(): array {
return [
- $this->getDiscoveryTools(),
+ BuilderUtil::getDiscoveryTools( $this->definitions ),
$this->getPersonalTools(),
$this->getSiteTools(),
- $this->getConfigurationTools(),
+ BuilderUtil::getConfigurationTools( $this->definitions, $this->showMobileOptions ),
];
}
+ /**
+ * @inheritDoc
+ * @throws FatalError
+ * @throws MWException
+ */
+ public function getSiteLinks(): Group {
+ return BuilderUtil::getSiteLinks( $this->definitions );
+ }
+
+ /**
+ * Builds the personal tools menu item group.
+ * @return Group
+ * @throws FatalError
+ * @throws MWException
+ */
+ private function getPersonalTools(): Group {
+ $group = new Group();
+
+ $this->definitions->insertAuthMenuItem( $group );
+
+ if ( $this->user->isLoggedIn() ) {
+ $this->definitions->insertWatchlistMenuItem( $group );
+ $this->definitions->insertContributionsMenuItem( $group );
+ }
+
+ // Allow other extensions to add or override tools
+ Hooks::run( 'MobileMenu', [ 'personal', &$group ] );
+ return $group;
+ }
+
/**
* Prepares a list of links that have the purpose of discovery in the main navigation menu
* @return Group
* @throws FatalError
* @throws MWException
*/
- public function getSiteTools(): Group {
+ private function getSiteTools(): Group {
$group = new Group();
$this->definitions->insertSpecialPages( $group );
diff --git a/includes/menu/Main/BuilderUtil.php b/includes/menu/Main/BuilderUtil.php
new file mode 100644
index 0000000..493e600
--- /dev/null
+++ b/includes/menu/Main/BuilderUtil.php
@@ -0,0 +1,90 @@
+insertHomeItem( $group );
+ $definitions->insertRandomItem( $group );
+ $definitions->insertNearbyIfSupported( $group );
+
+ // Allow other extensions to add or override tools
+ Hooks::run( 'MobileMenu', [ 'discovery', &$group ] );
+ return $group;
+ }
+
+ /**
+ * Like SkinMinerva#getDiscoveryTools
and #getPersonalTools
, create
+ * a group of configuration-related menu items. Currently, only the Settings menu item is in the
+ * group.
+ * @param Definitions $definitions A menu items definitions set
+ * @param bool $showMobileOptions Show MobileOptions instead of Preferences
+ * @return Group
+ * @throws MWException
+ */
+ public static function getConfigurationTools(
+ Definitions $definitions, $showMobileOptions
+ ): Group {
+ $group = new Group();
+
+ $showMobileOptions ?
+ $definitions->insertMobileOptionsItem( $group ) :
+ $definitions->insertPreferencesItem( $group );
+
+ return $group;
+ }
+
+ /**
+ * Returns an array of sitelinks to add into the main menu footer.
+ * @param Definitions $definitions A menu items definitions set
+ * @return Group Collection of site links
+ * @throws MWException
+ */
+ public static function getSiteLinks( Definitions $definitions ): Group {
+ $group = new Group();
+
+ $definitions->insertAboutItem( $group );
+ $definitions->insertDisclaimersItem( $group );
+ // Allow other extensions to add or override tools
+ Hooks::run( 'MobileMenu', [ 'sitelinks', &$group ] );
+ return $group;
+ }
+}
diff --git a/includes/menu/Main/DefaultBuilder.php b/includes/menu/Main/DefaultBuilder.php
index 8bd6d12..1695eac 100644
--- a/includes/menu/Main/DefaultBuilder.php
+++ b/includes/menu/Main/DefaultBuilder.php
@@ -30,7 +30,7 @@ use MediaWiki\Minerva\Menu\Group;
/**
* Used to build default (available for everyone by default) main menu
*/
-class DefaultBuilder implements IBuilder {
+final class DefaultBuilder implements IBuilder {
/**
* @var bool
@@ -41,12 +41,12 @@ class DefaultBuilder implements IBuilder {
* Currently logged in user
* @var User
*/
- protected $user;
+ private $user;
/**
* @var Definitions
*/
- protected $definitions;
+ private $definitions;
/**
* Initialize the Default Main Menu builder
@@ -62,34 +62,24 @@ class DefaultBuilder implements IBuilder {
}
/**
- * @return Group[]
+ * @inheritDoc
* @throws FatalError
* @throws MWException
*/
public function getGroups(): array {
return [
- $this->getDiscoveryTools(),
+ BuilderUtil::getDiscoveryTools( $this->definitions ),
$this->getPersonalTools(),
- $this->getConfigurationTools(),
+ BuilderUtil::getConfigurationTools( $this->definitions, $this->showMobileOptions ),
];
}
/**
- * Prepares a list of links that have the purpose of discovery in the main navigation menu
- * @return Group
- * @throws FatalError
+ * @inheritDoc
* @throws MWException
*/
- protected function getDiscoveryTools(): Group {
- $group = new Group();
-
- $this->definitions->insertHomeItem( $group );
- $this->definitions->insertRandomItem( $group );
- $this->definitions->insertNearbyIfSupported( $group );
-
- // Allow other extensions to add or override tools
- Hooks::run( 'MobileMenu', [ 'discovery', &$group ] );
- return $group;
+ public function getSiteLinks(): Group {
+ return BuilderUtil::getSiteLinks( $this->definitions );
}
/**
@@ -101,10 +91,10 @@ class DefaultBuilder implements IBuilder {
* @throws FatalError
* @throws MWException
*/
- protected function getPersonalTools(): Group {
+ private function getPersonalTools(): Group {
$group = new Group();
- $this->definitions->insertLogInOutMenuItem( $group );
+ $this->definitions->insertAuthMenuItem( $group );
if ( $this->user->isLoggedIn() ) {
$this->definitions->insertWatchlistMenuItem( $group );
@@ -115,38 +105,4 @@ class DefaultBuilder implements IBuilder {
Hooks::run( 'MobileMenu', [ 'personal', &$group ] );
return $group;
}
-
- /**
- * Like SkinMinerva#getDiscoveryTools
and #getPersonalTools
, create
- * a group of configuration-related menu items. Currently, only the Settings menu item is in the
- * group.
- *
- * @return Group
- * @throws MWException
- */
- protected function getConfigurationTools(): Group {
- $group = new Group();
-
- $this->showMobileOptions ?
- $this->definitions->insertMobileOptionsItem( $group ) :
- $this->definitions->insertPreferencesItem( $group );
-
- return $group;
- }
-
- /**
- * Returns an array of sitelinks to add into the main menu footer.
- * @return Group Collection of site links
- * @throws MWException
- */
- public function getSiteLinks(): Group {
- $group = new Group();
-
- $this->definitions->insertAboutItem( $group );
- $this->definitions->insertDisclaimersItem( $group );
- // Allow other extensions to add or override tools
- Hooks::run( 'MobileMenu', [ 'sitelinks', &$group ] );
- return $group;
- }
-
}