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