showMobileOptions = $showMobileOptions; $this->showDonateLink = $showDonateLink; $this->user = $user; $this->definitions = $definitions; } /** * @inheritDoc * @throws FatalError * @throws MWException */ public function getGroups(): array { $donate = $this->showDonateLink ? BuilderUtil::getDonateGroup( $this->definitions ) : null; $groups = [ BuilderUtil::getDiscoveryTools( $this->definitions ), $this->getPersonalTools( $this->showMobileOptions ), ]; if ( !$this->user->isRegistered() ) { $groups[] = BuilderUtil::getConfigurationTools( $this->definitions, $this->showMobileOptions ); } if ( $donate ) { $groups[] = $donate; } return $groups; } /** * @inheritDoc * @throws MWException */ public function getSiteLinks(): Group { return BuilderUtil::getSiteLinks( $this->definitions ); } /** * Builds the personal tools menu item group. * * ... by adding the Watchlist, Settings, and Log{in,out} menu items in the given order. * * @param bool $showMobileOptions Show MobileOptions instead of Preferences * @return Group * @throws FatalError * @throws MWException */ private function getPersonalTools( $showMobileOptions ): Group { $group = new Group( 'p-personal' ); $this->definitions->insertAuthMenuItem( $group ); if ( $this->user->isRegistered() ) { $this->definitions->insertWatchlistMenuItem( $group ); $this->definitions->insertContributionsMenuItem( $group ); $showMobileOptions ? // Identical logic as BuilderUtil::getConfigurationTools $this->definitions->insertMobileOptionsItem( $group ) : $this->definitions->insertPreferencesItem( $group ); $this->definitions->insertLogoutMenuItem( $group ); } // Allow other extensions to add or override tools Hooks::run( 'MobileMenu', [ 'personal', &$group ] ); return $group; } }