title = $title; $this->messageLocalizer = $messageLocalizer; $this->permissions = $permissions; } public function getTitle(): Title { return $this->title; } 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' ); $override = $this->isAllowed( IMinervaPagePermissions::EDIT_OR_CREATE ) ? [ 'editfull' => [ 'icon' => 'edit', 'text' => $this->messageLocalizer->msg( 'minerva-page-actions-editfull' ), 'href' => $this->title->getLocalURL( [ 'action' => 'edit', 'section' => 'all' ] ), 'class' => 'edit-link', ], ] : []; // watch icon appears in page actions rather than here. $combinedMenu = array_merge( $toolbox, $override, $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 ) { $entry = $this->build( $key, $icon, $key, $combinedMenu ); if ( $entry ) { $group->insertEntry( $entry ); } } } 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 ): ?IMenuEntry { $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 )->trackClicks( $name ) : null; } }