-
Notifications
You must be signed in to change notification settings - Fork 0
/
Hooks.php
144 lines (128 loc) · 3.95 KB
/
Hooks.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<?php
/**
* Hooks for QuickSurveys extension
*
* @file
* @ingroup Extensions
*/
namespace QuickSurveys;
use ConfigFactory;
use OutputPage;
use ResourceLoader;
use Skin;
class Hooks {
/**
* Register QUnit tests.
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderTestModules
*
* @param array &$modules
* @param ResourceLoader &$rl
* @return bool
*/
public static function onResourceLoaderTestModules( &$modules, &$rl ) {
$boilerplate = [
'localBasePath' => __DIR__ . '/../tests/qunit/',
'remoteExtPath' => 'QuickSurveys/tests/qunit',
'targets' => [ 'desktop', 'mobile' ],
];
$modules['qunit']['ext.quicksurveys.lib.tests'] = $boilerplate + [
'templates' => [
'vector-1.html' => 'ext.quicksurveys.lib/templates/vector-1.html',
'vector-2.html' => 'ext.quicksurveys.lib/templates/vector-2.html',
'vector-3.html' => 'ext.quicksurveys.lib/templates/vector-3.html',
'vector-4.html' => 'ext.quicksurveys.lib/templates/vector-4.html',
'minerva-1.html' => 'ext.quicksurveys.lib/templates/minerva-1.html',
'minerva-2.html' => 'ext.quicksurveys.lib/templates/minerva-2.html',
'minerva-3.html' => 'ext.quicksurveys.lib/templates/minerva-3.html',
'minerva-4.html' => 'ext.quicksurveys.lib/templates/minerva-4.html',
],
'scripts' => [
'ext.quicksurveys.lib/lib.test.js',
],
'dependencies' => [
'ext.quicksurveys.lib',
],
];
$modules['qunit']['ext.quicksurveys.views.tests'] = $boilerplate + [
'scripts' => [
'ext.quicksurveys.views/views.test.js',
],
'dependencies' => [
'ext.quicksurveys.views',
],
];
return true;
}
/**
* ResourceLoaderGetConfigVars hook handler for registering enabled surveys
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderGetConfigVars
*
* @param array &$vars
* @return bool
*/
public static function onResourceLoaderGetConfigVars( &$vars ) {
global $wgQuickSurveysRequireHttps;
$surveys = self::getEnabledSurveys();
$vars['wgQuickSurveysRequireHttps'] = $wgQuickSurveysRequireHttps;
$vars['wgEnabledQuickSurveys'] = array_map( function ( Survey $survey ) {
return $survey->toArray();
}, $surveys );
return true;
}
/**
* Init QuickSurveys in BeforePageDisplay hook on existing pages in the main namespace
*
* @see https://www.mediawiki.org/wiki/Manual:Hooks/BeforePageDisplay
*
* @param OutputPage &$out
* @param Skin &$sk
* @return bool
*/
public static function onBeforePageDisplay( OutputPage &$out, Skin &$sk ) {
$title = $out->getTitle();
if ( $title->inNamespace( NS_MAIN ) && $title->exists() ) {
$out->addModules( 'ext.quicksurveys.init' );
}
return true;
}
/**
* ResourceLoaderRegisterModules hook handler
*
* Registers needed modules for enabled surveys
*
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderRegisterModules
*
* @param ResourceLoader &$resourceLoader The ResourceLoader object
* @return bool Always true
*/
public static function onResourceLoaderRegisterModules( ResourceLoader &$resourceLoader ) {
$enabledSurveys = self::getEnabledSurveys();
foreach ( $enabledSurveys as $survey ) {
$moduleName = $survey->getResourceLoaderModuleName();
$module = [
$moduleName => [
'messages' => $survey->getMessages(),
'targets' => [ 'desktop', 'mobile' ],
],
];
$resourceLoader->register( $module );
}
return true;
}
/**
* Helper method for getting enabled quick surveys
*
* @return Survey[] Enabled survey configuration array
*/
private static function getEnabledSurveys() {
$config = ConfigFactory::getDefaultInstance()->makeConfig( 'quicksurveys' );
$configuredSurveys = $config->has( 'QuickSurveysConfig' )
? $config->get( 'QuickSurveysConfig' )
: [];
$surveys = array_map( '\\QuickSurveys\\SurveyFactory::factory', $configuredSurveys );
$enabledSurveys = array_filter( $surveys, function ( Survey $survey ) {
return $survey->isEnabled();
} );
return array_values( $enabledSurveys );
}
}