messageLocalizer = $messageLocalizer; $this->permissions = $permissions; } public function getMessageLocalizer(): MessageLocalizer { return $this->messageLocalizer; } public function isAllowed( string $permission ): bool { return $this->permissions->isAllowed( $permission ); } /** * @inheritDoc */ public function getGroup( array $toolbox, array $actions ): Group { $group = new Group( 'p-tb' ); // watch icon appears in page actions rather than here. $combinedMenu = array_merge( $toolbox, $actions ); unset( $combinedMenu[ 'watch' ] ); unset( $combinedMenu[ 'unwatch' ] ); foreach ( $combinedMenu as $key => $definition ) { $icon = $definition['icon'] ?? null; // Only menu items with icons can be displayed here. if ( $icon ) { $group->insertEntry( $this->build( $key, $icon, $key, $combinedMenu ) ); } } return $group; } /** * Build the single menu entry * * @param string $name * @param string $icon WikimediaUI icon name. * @param string $toolboxIdx * @param array $toolbox An array of common toolbox items from the sidebar menu * @return IMenuEntry|null */ private function build( $name, $icon, $toolboxIdx, array $toolbox ) { $href = $toolbox[$toolboxIdx]['href'] ?? null; $originalMsg = $toolbox[$toolboxIdx]['text'] ?? $this->messageLocalizer->msg( $toolboxIdx )->text(); $entry = new SingleMenuEntry( 'page-actions-overflow-' . $name, $originalMsg, $href, $toolbox[$name]['class'] ?? false ); return $href ? $entry->setIcon( $icon, 'before' )->trackClicks( $name ) : null; } }