Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 23 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 1 |
MobileFrontendHandlers | |
0.00% |
0 / 23 |
|
0.00% |
0 / 6 |
380 | |
0.00% |
0 / 1 |
shouldShowStoriesOnSkin | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
shouldShowStoriesForAction | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
6 | |||
shouldShowStoriesForUser | |
0.00% |
0 / 9 |
|
0.00% |
0 / 1 |
56 | |||
shouldShowStoriesOnPage | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
12 | |||
shouldShowStories | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
20 | |||
onBeforePageDisplayMobile | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
6 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\Wikistories\Hooks; |
4 | |
5 | use ExtensionRegistry; |
6 | use IContextSource; |
7 | use MediaWiki\Config\Config; |
8 | use MediaWiki\Extension\BetaFeatures\BetaFeatures; |
9 | use MediaWiki\Extension\Wikistories\Hooks; |
10 | use MediaWiki\MediaWikiServices; |
11 | use MediaWiki\Output\OutputPage; |
12 | use MediaWiki\Title\Title; |
13 | use MediaWiki\User\Options\UserOptionsLookup; |
14 | use MediaWiki\User\User; |
15 | use MobileFrontend\Hooks\BeforePageDisplayMobileHook; |
16 | use Skin; |
17 | |
18 | class MobileFrontendHandlers implements BeforePageDisplayMobileHook { |
19 | |
20 | /** |
21 | * @param Skin $skin |
22 | * @return bool |
23 | */ |
24 | private static function shouldShowStoriesOnSkin( Skin $skin ) { |
25 | return $skin->getSkinName() === 'minerva'; |
26 | } |
27 | |
28 | /** |
29 | * @param IContextSource $context |
30 | * @return bool |
31 | */ |
32 | private static function shouldShowStoriesForAction( IContextSource $context ) { |
33 | return $context->getActionName() === 'view' && |
34 | $context->getRequest()->getText( 'diff' ) === ''; |
35 | } |
36 | |
37 | /** |
38 | * @param User $user |
39 | * @param Config $config |
40 | * @return bool |
41 | */ |
42 | private static function shouldShowStoriesForUser( User $user, Config $config ): bool { |
43 | if ( Hooks::isBetaDiscoveryMode( $config ) ) { |
44 | return $user->isNamed() |
45 | && ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' ) |
46 | && BetaFeatures::isFeatureEnabled( $user, BetaFeaturesHandlers::WIKISTORIES_BETA_FEATURE ); |
47 | } elseif ( Hooks::isPublicDiscoveryMode( $config ) ) { |
48 | /** @var UserOptionsLookup $userOptionsLookup */ |
49 | $userOptionsLookup = MediaWikiServices::getInstance()->getUserOptionsLookup(); |
50 | return ( $user->isAnon() || $user->isTemp() ) |
51 | || (bool)$userOptionsLookup->getOption( $user, Hooks::WIKISTORIES_PREF_SHOW_DISCOVERY, true ); |
52 | } else { |
53 | // unknown discovery mode |
54 | return false; |
55 | } |
56 | } |
57 | |
58 | /** |
59 | * @param Title $title |
60 | * @return bool |
61 | */ |
62 | private static function shouldShowStoriesOnPage( Title $title ): bool { |
63 | return !$title->isMainPage() |
64 | && $title->inNamespace( NS_MAIN ) |
65 | && $title->exists(); |
66 | } |
67 | |
68 | /** |
69 | * @param User $user |
70 | * @param Title $title |
71 | * @param Skin $skin |
72 | * @param IContextSource $context |
73 | * @return bool |
74 | */ |
75 | private static function shouldShowStories( User $user, Title $title, Skin $skin, IContextSource $context ): bool { |
76 | return self::shouldShowStoriesForUser( $user, $context->getConfig() ) |
77 | && self::shouldShowStoriesOnSkin( $skin ) |
78 | && self::shouldShowStoriesOnPage( $title ) |
79 | && self::shouldShowStoriesForAction( $context ); |
80 | } |
81 | |
82 | /** |
83 | * @param OutputPage &$out |
84 | * @param Skin &$skin |
85 | */ |
86 | public function onBeforePageDisplayMobile( OutputPage &$out, Skin &$skin ) { |
87 | $title = $out->getTitle(); |
88 | if ( self::shouldShowStories( $out->getUser(), $title, $out->getSkin(), $out->getContext() ) ) { |
89 | $out->addModules( [ 'ext.wikistories.discover' ] ); |
90 | $out->addModuleStyles( 'ext.wikistories.discover.styles' ); |
91 | } |
92 | } |
93 | } |