Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 19 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
Hooks | |
0.00% |
0 / 19 |
|
0.00% |
0 / 3 |
30 | |
0.00% |
0 / 1 |
getSurveyConfig | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
onBeforePageDisplay | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
6 | |||
onResourceLoaderRegisterModules | |
0.00% |
0 / 10 |
|
0.00% |
0 / 1 |
6 |
1 | <?php |
2 | /** |
3 | * Hooks for QuickSurveys extension |
4 | * |
5 | * @file |
6 | * @ingroup Extensions |
7 | */ |
8 | |
9 | namespace QuickSurveys; |
10 | |
11 | use MediaWiki\Config\Config; |
12 | use MediaWiki\Hook\BeforePageDisplayHook; |
13 | use MediaWiki\MediaWikiServices; |
14 | use MediaWiki\Output\OutputPage; |
15 | use MediaWiki\ResourceLoader as RL; |
16 | use MediaWiki\ResourceLoader\Hook\ResourceLoaderRegisterModulesHook; |
17 | use MediaWiki\ResourceLoader\ResourceLoader; |
18 | use Skin; |
19 | |
20 | class Hooks implements |
21 | BeforePageDisplayHook, |
22 | ResourceLoaderRegisterModulesHook |
23 | { |
24 | |
25 | /** |
26 | * Get data about the enabled surveys to be exported to the ext.quicksurveys.lib module |
27 | * via a virtual file. |
28 | * |
29 | * @param RL\Context $context |
30 | * @param Config $conf |
31 | * @return array[] |
32 | */ |
33 | public static function getSurveyConfig( RL\Context $context, Config $conf ) { |
34 | $surveys = MediaWikiServices::getInstance()->getService( 'QuickSurveys.EnabledSurveys' ); |
35 | |
36 | return array_map( static function ( Survey $survey ) { |
37 | return $survey->toArray(); |
38 | }, $surveys ); |
39 | } |
40 | |
41 | /** |
42 | * Init QuickSurveys in BeforePageDisplay hook on existing pages in the main namespace |
43 | * |
44 | * @see https://www.mediawiki.org/wiki/Manual:Hooks/BeforePageDisplay |
45 | * |
46 | * @param OutputPage $out |
47 | * @param Skin $skin |
48 | */ |
49 | public function onBeforePageDisplay( $out, $skin ): void { |
50 | $title = $out->getTitle(); |
51 | $action = $out->getActionName(); |
52 | $surveys = MediaWikiServices::getInstance()->getService( 'QuickSurveys.EnabledSurveys' ); |
53 | |
54 | if ( ( new SurveyContextFilter( $surveys ) )->isAnySurveyAvailable( $title, $action ) ) { |
55 | // TODO: It's annoying that we parse survey config a second time, inside this indirected |
56 | // call. Ideally we could construct the ResourceLoader data module right here. |
57 | $out->addModules( 'ext.quicksurveys.init' ); |
58 | } |
59 | } |
60 | |
61 | /** |
62 | * ResourceLoaderRegisterModules hook handler |
63 | * |
64 | * Registers needed modules for enabled surveys |
65 | * |
66 | * @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderRegisterModules |
67 | * |
68 | * @param ResourceLoader $resourceLoader |
69 | */ |
70 | public function onResourceLoaderRegisterModules( ResourceLoader $resourceLoader ): void { |
71 | $surveys = MediaWikiServices::getInstance()->getService( 'QuickSurveys.EnabledSurveys' ); |
72 | |
73 | foreach ( $surveys as $survey ) { |
74 | $moduleName = $survey->getResourceLoaderModuleName(); |
75 | $module = [ |
76 | $moduleName => [ |
77 | 'dependencies' => [ 'ext.quicksurveys.lib.vue' ], |
78 | 'messages' => $survey->getMessages(), |
79 | ], |
80 | ]; |
81 | |
82 | $resourceLoader->register( $module ); |
83 | } |
84 | } |
85 | } |