Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 19
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 / 19
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 / 10
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 MediaWiki\Config\Config;
12use MediaWiki\Hook\BeforePageDisplayHook;
13use MediaWiki\MediaWikiServices;
14use MediaWiki\Output\OutputPage;
15use MediaWiki\ResourceLoader as RL;
16use MediaWiki\ResourceLoader\Hook\ResourceLoaderRegisterModulesHook;
17use MediaWiki\ResourceLoader\ResourceLoader;
18use Skin;
19
20class 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}