Completed
Push — master ( a5b09f...24d151 )
by Jeroen De
04:21 queued 03:05
created

SemanticWatchlist::checkRequirements()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 10
rs 9.4285
cc 3
eloc 5
nc 3
nop 0
1
<?php
2
3
namespace SWL;
4
5
/**
6
 * @codeCoverageIgnore
7
 */
8
class SemanticWatchlist {
9
10
	/**
11
	 * @since 1.2
12
	 *
13
	 * @note It is expected that this function is loaded before LocalSettings.php
14
	 * to ensure that settings and global functions are available by the time
15
	 * the extension is activated.
16
	 */
17
	public static function load() {
18
		// Load DefaultSettings
19
		require_once __DIR__ . '/../DefaultSettings.php';
20
21
		if ( defined( 'SWL_VERSION' ) ) {
22
			// Do not initialize more than once.
23
			return 1;
24
		}
25
26
		define( 'SWL_VERSION', '1.2.0-alpha' );
27
28
		/**
29
		 * In case extension.json is being used, the succeeding steps are
30
		 * expected to be handled by the ExtensionRegistry aka extension.json
31
		 * ...
32
		 *
33
		 * 	"callback": "SemanticWatchlist::initExtension",
34
		 * 	"ExtensionFunctions": [
35
		 * 		"SemanticWatchlist::onExtensionFunction"
36
		 * 	],
37
		 */
38
		self::initExtension();
39
40
		$GLOBALS['wgExtensionFunctions'][] = function() {
41
			SemanticWatchlist::onExtensionFunction();
42
		};
43
	}
44
45
	/**
46
	 * @since 1.2
47
	 */
48
	public static function initExtension() {
49
		// Register the extension
50
		$GLOBALS['wgExtensionCredits']['semantic'][] = array(
51
			'path' => __FILE__,
52
			'name' => 'Semantic Watchlist',
53
			'version' => SWL_VERSION,
54
			'author' => array(
55
				'[https://www.mediawiki.org/wiki/User:Jeroen_De_Dauw Jeroen De Dauw] for [http://www.wikiworks.com/ WikiWorks]',
56
				'...'
57
			),
58
			'url' => 'https://www.mediawiki.org/wiki/Extension:Semantic_Watchlist',
59
			'descriptionmsg' => 'semanticwatchlist-desc',
60
			'license-name'   => 'GPL-3.0+'
61
		);
62
63
		$GLOBALS['egSwlSqlDatabaseSchemaPath'] = __DIR__ . '/../src/swl-table-schema.sql';
64
65
		// Register message files
66
		$GLOBALS['wgMessagesDirs']['SemanticWatchlist'] = __DIR__ . '/../i18n';
67
		$GLOBALS['wgExtensionMessagesFiles']['SemanticWatchlistAlias'] = __DIR__ . '/../SemanticWatchlist.i18n.alias.php';
68
69
		$GLOBALS['egSWLScriptPath'] = $GLOBALS['wgExtensionAssetsPath'] === false ? $GLOBALS['wgScriptPath'] . '/extensions/SemanticWatchlist' : $GLOBALS['wgExtensionAssetsPath'] . '/SemanticWatchlist';
70
71
		// wgSpecialPages
72
		$GLOBALS['wgSpecialPages']['SemanticWatchlist'] = 'SpecialSemanticWatchlist';
73
		$GLOBALS['wgSpecialPageGroups']['SemanticWatchlist'] = 'changes';
74
75
		$GLOBALS['wgSpecialPages']['WatchlistConditions'] = 'SpecialWatchlistConditions';
76
		$GLOBALS['wgSpecialPageGroups']['WatchlistConditions'] = 'changes';
77
78
		// wgAPIModules
79
		$GLOBALS['wgAPIModules']['addswlgroup'] = 'ApiAddWatchlistGroup';
80
		$GLOBALS['wgAPIModules']['deleteswlgroup'] = 'ApiDeleteWatchlistGroup';
81
		$GLOBALS['wgAPIModules']['editswlgroup'] = 'ApiEditWatchlistGroup';
82
		$GLOBALS['wgAPIListModules']['semanticwatchlist'] = 'ApiQuerySemanticWatchlist';
83
84
		// wgAvailableRights
85
		$GLOBALS['wgAvailableRights'][] = 'semanticwatch';
86
		$GLOBALS['wgAvailableRights'][] = 'semanticwatchgroups';
87
88
		$moduleTemplate = array(
89
			'localBasePath' => __DIR__ . '/..',
90
			'remoteBasePath' => $GLOBALS['egSWLScriptPath']
91
		);
92
93
		$GLOBALS['wgResourceModules']['ext.swl.watchlist'] = $moduleTemplate + array(
94
				'styles' => array( 'specials/ext.swl.watchlist.css' ),
95
				'scripts' => array(),
96
				'dependencies' => array(),
97
				'messages' => array()
98
			);
99
100
		$GLOBALS['wgResourceModules']['ext.swl.watchlistconditions'] = $moduleTemplate + array(
101
				'styles' => array( 'specials/ext.swl.watchlistconditions.css' ),
102
				'scripts' => array(
103
					'specials/jquery.watchlistcondition.js',
104
					'specials/ext.swl.watchlistconditions.js'
105
				),
106
				'dependencies' => array(),
107
				'messages' => array(
108
					'swl-group-name',
109
					'swl-group-legend',
110
					'swl-group-properties',
111
					'swl-properties-list',
112
					'swl-group-remove-property',
113
					'swl-group-add-property',
114
					'swl-group-page-selection',
115
					'swl-group-save',
116
					'swl-group-saved',
117
					'swl-group-saving',
118
					'swl-group-remove',
119
					'swl-group-category',
120
					'swl-group-namespace',
121
					'swl-group-concept',
122
					'swl-group-confirm-remove',
123
					'swl-custom-legend',
124
					'swl-custom-remove-property',
125
					'swl-custom-text-add',
126
					'swl-custom-input',
127
				)
128
			);
129
	}
130
131
	/**
132
	 * @since 1.2
133
	 */
134
	public static function onExtensionFunction() {
135
136
		// Check requirements after LocalSetting.php has been processed, thid has
137
		// be done here to ensure SMW is loaded in case
138
		// wfLoadExtension( 'SemanticMediaWiki' ) is used
139
		self::checkRequirements();
140
141
		$configuration = array(
142
			'egSWLEnableTopLink'         => $GLOBALS['egSWLEnableTopLink'],
143
			'egSWLEnableEmailNotify'     => $GLOBALS['egSWLEnableEmailNotify'],
144
			'egSwlSqlDatabaseSchemaPath' => $GLOBALS['egSwlSqlDatabaseSchemaPath']
145
		);
146
147
		$hookRegistry = new HookRegistry(
148
			$configuration
149
		);
150
151
		$hookRegistry->register( $GLOBALS['wgHooks'] );
152
	}
153
154
	private static function checkRequirements() {
155
156
		if ( version_compare( $GLOBALS[ 'wgVersion' ], '1.27', 'lt' ) ) {
157
			die( '<b>Error:</b> This version of <a href="https://github.com/SemanticMediaWiki/SemanticWatchlist/">Semantic Watchlist</a> is only compatible with MediaWiki 1.23 or above. You need to upgrade MediaWiki first.' );
0 ignored issues
show
Coding Style Compatibility introduced by
The method checkRequirements() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
158
		}
159
160
		if ( !defined( 'SMW_VERSION' ) ) {
161
			die( '<b>Error:</b> <a href="https://github.com/SemanticMediaWiki/SemanticWatchlist/">Semantic Watchlist</a> requires the <a href="https://github.com/SemanticMediaWiki/SemanticMediaWiki/">Semantic MediaWiki</a> extension, please enable or install the extension first.' );
0 ignored issues
show
Coding Style Compatibility introduced by
The method checkRequirements() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
162
		}
163
	}
164
165
	/**
166
	 * @since 1.2
167
	 *
168
	 * @return string|null
169
	 */
170
	public static function getVersion() {
171
		return SWL_VERSION;
172
	}
173
174
}
175