Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 84
n/a
0 / 0
CRAP
n/a
0 / 0
1<?php
2
3/**
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 * http://www.gnu.org/copyleft/gpl.html
18 *
19 * @file
20 */
21
22use MediaWiki\Config\ServiceOptions;
23use MediaWiki\MediaWikiServices;
24use MediaWiki\Minerva\LanguagesHelper;
25use MediaWiki\Minerva\Menu\Definitions;
26use MediaWiki\Minerva\Menu\PageActions as PageActionsMenu;
27use MediaWiki\Minerva\Permissions\IMinervaPagePermissions;
28use MediaWiki\Minerva\Permissions\MinervaPagePermissions;
29use MediaWiki\Minerva\SkinOptions;
30use MediaWiki\Minerva\Skins\SkinMinerva;
31use MediaWiki\Minerva\Skins\SkinUserPageHelper;
32use MediaWiki\SpecialPage\SpecialPage;
33
34return [
35    'Minerva.Menu.Definitions' => static function ( MediaWikiServices $services ): Definitions {
36        return new Definitions(
37            $services->getSpecialPageFactory()
38        );
39    },
40    'Minerva.Menu.PageActionsDirector' =>
41        static function ( MediaWikiServices $services ): PageActionsMenu\PageActionsDirector {
42            /**
43             * @var SkinOptions $skinOptions
44             * @var SkinMinerva $skin
45             * @var SkinUserPageHelper $userPageHelper
46             */
47            $skinOptions = $services->getService( 'Minerva.SkinOptions' );
48            // FIXME: RequestContext should not be accessed in service container.
49            $context = RequestContext::getMain();
50            $title = $context->getTitle();
51            if ( !$title ) {
52                $title = SpecialPage::getTitleFor( 'Badtitle' );
53            }
54            $user = $context->getUser();
55            $userPageHelper = $services->getService( 'Minerva.SkinUserPageHelper' )
56                ->setContext( $context )
57                ->setTitle( $title->inNamespace( NS_USER_TALK ) ?
58                    $context->getSkin()->getRelevantTitle()->getSubjectPage() :
59                    $title
60                );
61            $languagesHelper = $services->getService( 'Minerva.LanguagesHelper' );
62
63            $permissions = $services->getService( 'Minerva.Permissions' )
64                ->setContext( $context );
65
66            $watchlistManager = $services->getWatchlistManager();
67
68            $toolbarBuilder = new PageActionsMenu\ToolbarBuilder(
69                $title,
70                $user,
71                $context,
72                $permissions,
73                $skinOptions,
74                $userPageHelper,
75                $languagesHelper,
76                new ServiceOptions( PageActionsMenu\ToolbarBuilder::CONSTRUCTOR_OPTIONS,
77                    $services->getMainConfig() ),
78                $watchlistManager
79            );
80            if ( $skinOptions->get( SkinOptions::TOOLBAR_SUBMENU ) ) {
81                $overflowBuilder = $userPageHelper->isUserPage() ?
82                    new PageActionsMenu\UserNamespaceOverflowBuilder(
83                        $title,
84                        $context,
85                        $permissions,
86                        $languagesHelper
87                    ) :
88                    new PageActionsMenu\DefaultOverflowBuilder(
89                        $title,
90                        $context,
91                        $permissions
92                    );
93            } else {
94                $overflowBuilder = new PageActionsMenu\EmptyOverflowBuilder();
95            }
96
97            return new PageActionsMenu\PageActionsDirector(
98                $toolbarBuilder,
99                $overflowBuilder,
100                $context
101            );
102        },
103    'Minerva.SkinUserPageHelper' => static function ( MediaWikiServices $services ): SkinUserPageHelper {
104        return new SkinUserPageHelper(
105            $services->getUserFactory(),
106            $services->getUserNameUtils()
107        );
108    },
109    'Minerva.LanguagesHelper' => static function ( MediaWikiServices $services ): LanguagesHelper {
110        return new LanguagesHelper(
111            $services->getLanguageConverterFactory()
112        );
113    },
114    'Minerva.SkinOptions' => static function ( MediaWikiServices $services ): SkinOptions {
115        return new SkinOptions(
116            $services->getHookContainer(),
117            $services->getService( 'Minerva.SkinUserPageHelper' )
118        );
119    },
120    'Minerva.Permissions' => static function ( MediaWikiServices $services ): IMinervaPagePermissions {
121        return new MinervaPagePermissions(
122            $services->getService( 'Minerva.SkinOptions' ),
123            $services->getService( 'Minerva.LanguagesHelper' ),
124            $services->getPermissionManager(),
125            $services->getContentHandlerFactory(),
126            $services->getUserFactory(),
127            $services->getWatchlistManager()
128        );
129    }
130];