Completed
Push — master ( 598e28...b2a89a )
by mw
37:26 queued 36:17
created

HookRegistry::getHandlerFor()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
namespace SIL;
4
5
use Onoi\Cache\Cache;
6
use SMW\Store;
7
use SMW\ApplicationFactory;
8
use SMW\InMemoryPoolCache;
9
use SIL\Search\SearchResultModifier;
10
use SIL\Search\LanguageResultMatchFinder;
11
use SIL\Category\LanguageFilterCategoryPage;
12
use Hooks;
13
14
/**
15
 * @license GNU GPL v2+
16
 * @since 1.0
17
 *
18
 * @author mwjames
19
 */
20
class HookRegistry {
21
22
	/**
23
	 * @var array
24
	 */
25
	private $handlers = [];
26
27
	/**
28
	 * @since 1.0
29
	 *
30
	 * @param Store $store
31
	 * @param Cache $cache
32
	 * @param CacheKeyProvider $cacheKeyProvider
33
	 */
34 2
	public function __construct( Store $store, Cache $cache, CacheKeyProvider $cacheKeyProvider ) {
35 2
		$this->addCallbackHandlers( $store, $cache, $cacheKeyProvider );
36 2
	}
37
38
	/**
39
	 * @since  1.1
40
	 *
41
	 * @param string $name
42
	 *
43
	 * @return boolean
44
	 */
45 1
	public function isRegistered( $name ) {
46 1
		return Hooks::isRegistered( $name );
47
	}
48
49
	/**
50
	 * @since  1.1
51
	 *
52
	 * @param string $name
53
	 *
54
	 * @return Callable|false
55
	 */
56 1
	public function getHandlerFor( $name ) {
57 1
		return isset( $this->handlers[$name] ) ? $this->handlers[$name] : false;
58
	}
59
60
	/**
61
	 * @since  1.0
62
	 */
63 1
	public function register() {
64 1
		foreach ( $this->handlers as $name => $callback ) {
65 1
			Hooks::register( $name, $callback );
66
		}
67 1
	}
68
69
	/**
70
	 * @since  1.0
71
	 *
72
	 * @param array &$configuration
73
	 */
74 3
	public static function onBeforeConfigCompletion( &$config ) {
75
76 3
		if ( !isset( $config['smwgFulltextSearchPropertyExemptionList'] ) ) {
77
			return;
78
		}
79
80
		// Exclude those properties from indexing
81 3
		$config['smwgFulltextSearchPropertyExemptionList'] = array_merge(
82 3
			$config['smwgFulltextSearchPropertyExemptionList'],
83 3
			[ PropertyRegistry::SIL_IWL_LANG, PropertyRegistry::SIL_ILL_LANG ]
84
		);
85 3
	}
86
87 3
	private function addCallbackHandlers( $store, $cache, $cacheKeyProvider ) {
88
89 2
		$languageTargetLinksCache = new LanguageTargetLinksCache(
90 2
			$cache,
91 2
			$cacheKeyProvider
92
		);
93
94 2
		$interlanguageLinksLookup = new InterlanguageLinksLookup(
95 2
			$languageTargetLinksCache
96
		);
97
98 2
		$interlanguageLinksLookup->setStore( $store );
99
100
		/**
101
		 * @see https://github.com/SemanticMediaWiki/SemanticMediaWiki/blob/master/docs/technical/hooks.md
102
		 */
103 3
		$this->handlers['SMW::Property::initProperties'] = function ( $baseRegistry ) {
104
105 3
			$propertyRegistry = new PropertyRegistry();
106
107 3
			$propertyRegistry->register(
108 3
				$baseRegistry
109
			);
110
111 3
			return true;
112
		};
113
114
		/**
115
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ArticleFromTitle
116
		 */
117 3
		$this->handlers['ArticleFromTitle'] = function ( $title, &$page ) use( $interlanguageLinksLookup ) {
118
119 3
			$languageFilterCategoryPage = new LanguageFilterCategoryPage( $title );
120 3
			$languageFilterCategoryPage->isCategoryFilterByLanguage( $GLOBALS['silgEnabledCategoryFilterByLanguage'] );
121 3
			$languageFilterCategoryPage->modifyCategoryView( $page, $interlanguageLinksLookup );
122
123 3
			return true;
124
		};
125
126 2
		$this->registerInterlanguageParserHooks( $interlanguageLinksLookup );
127 2
	}
128
129 3
	private function registerInterlanguageParserHooks( InterlanguageLinksLookup $interlanguageLinksLookup ) {
130
131 2
		$pageContentLanguageOnTheFlyModifier = new PageContentLanguageOnTheFlyModifier(
132 2
			$interlanguageLinksLookup,
133 2
			InMemoryPoolCache::getInstance()->getPoolCacheFor( PageContentLanguageOnTheFlyModifier::POOLCACHE_ID )
0 ignored issues
show
Deprecated Code introduced by
The method SMW\InMemoryPoolCache::getPoolCacheFor() has been deprecated with message: since 2.5, use InMemoryPoolCache::getPoolCacheById

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
134
		);
135
136
		/**
137
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserFirstCallInit
138
		 */
139 1
		$this->handlers['ParserFirstCallInit'] = function ( &$parser ) use( $interlanguageLinksLookup, $pageContentLanguageOnTheFlyModifier ) {
140
141 1
			$parserFunctionFactory = new ParserFunctionFactory();
142
143 1
			list( $name, $definition, $flag ) = $parserFunctionFactory->newInterlanguageLinkParserFunctionDefinition(
144 1
				$interlanguageLinksLookup,
145 1
				$pageContentLanguageOnTheFlyModifier
146
			);
147
148 1
			$parser->setFunctionHook( $name, $definition, $flag );
149
150 1
			list( $name, $definition, $flag ) = $parserFunctionFactory->newInterlanguageListParserFunctionDefinition(
151 1
				$interlanguageLinksLookup
152
			);
153
154 1
			$parser->setFunctionHook( $name, $definition, $flag );
155
156 1
			list( $name, $definition, $flag ) = $parserFunctionFactory->newAnnotatedLanguageParserFunctionDefinition(
157 1
				$interlanguageLinksLookup
158
			);
159
160 1
			$parser->setFunctionHook( $name, $definition, $flag );
161
162 1
			return true;
163
		};
164
165
		/**
166
		 * https://www.mediawiki.org/wiki/Manual:Hooks/ArticleDelete
167
		 */
168 3
		$this->handlers['SMW::SQLStore::BeforeDeleteSubjectComplete'] = function ( $store, $title ) use ( $interlanguageLinksLookup ) {
169
170 3
			$interlanguageLinksLookup->setStore( $store );
171 3
			$interlanguageLinksLookup->resetLookupCacheBy( $title );
172
173 3
			return true;
174
		};
175
176
		/**
177
		 * https://www.mediawiki.org/wiki/Manual:Hooks/TitleMoveComplete
178
		 */
179 1
		$this->handlers['SMW::SQLStore::BeforeChangeTitleComplete'] = function ( $store, $oldTitle, $newTitle, $pageid, $redirid ) use ( $interlanguageLinksLookup ) {
180
181 1
			$interlanguageLinksLookup->setStore( $store );
182
183 1
			$interlanguageLinksLookup->resetLookupCacheBy( $oldTitle );
184 1
			$interlanguageLinksLookup->resetLookupCacheBy( $newTitle );
185
186 1
			return true;
187
		};
188
189
		/**
190
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ArticlePurge
191
		 */
192 1
		$this->handlers['ArticlePurge']= function ( &$wikiPage ) use ( $interlanguageLinksLookup ) {
193
194 1
			$interlanguageLinksLookup->resetLookupCacheBy(
195 1
				$wikiPage->getTitle()
196
			);
197
198 1
			return true;
199
		};
200
201
		/**
202
		 * https://www.mediawiki.org/wiki/Manual:Hooks/NewRevisionFromEditComplete
203
		 */
204 3
		$this->handlers['NewRevisionFromEditComplete'] = function ( $wikiPage ) use ( $interlanguageLinksLookup ) {
205
206 3
			$interlanguageLinksLookup->resetLookupCacheBy(
207 3
				$wikiPage->getTitle()
208
			);
209
210 3
			return true;
211
		};
212
213
		/**
214
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/SkinTemplateGetLanguageLink
215
		 */
216 1
		$this->handlers['SkinTemplateGetLanguageLink'] = function ( &$languageLink, $languageLinkTitle, $title ) {
217
218 1
			$siteLanguageLinkModifier = new SiteLanguageLinkModifier(
219 1
				$languageLinkTitle,
220 1
				$title
221
			);
222
223 1
			$siteLanguageLinkModifier->modifyLanguageLink( $languageLink );
224
225 1
			return true;
226
		};
227
228
		/**
229
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/PageContentLanguage
230
		 */
231 3
		$this->handlers['PageContentLanguage'] = function ( $title, &$pageLang ) use ( $pageContentLanguageOnTheFlyModifier ) {
232
233 3
			$pageLang = $pageContentLanguageOnTheFlyModifier->getPageContentLanguage(
234 3
				$title,
235 3
				$pageLang
236
			);
237
238 3
			return true;
239
		};
240
241
		/**
242
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserAfterTidy
243
		 */
244 3
		$this->handlers['ParserAfterTidy'] = function ( &$parser, &$text ) {
245
246 3
			$parserData = ApplicationFactory::getInstance()->newParserData(
247 3
				$parser->getTitle(),
248 3
				$parser->getOutput()
249
			);
250
251 3
			$languageLinkAnnotator = new LanguageLinkAnnotator(
252 3
				$parserData
253
			);
254
255 3
			$interwikiLanguageLinkFetcher = new InterwikiLanguageLinkFetcher(
256 3
				$languageLinkAnnotator
257
			);
258
259 3
			$interwikiLanguageLinkFetcher->fetchLanguagelinksFromParserOutput(
260 3
				$parser->getOutput()
261
			);
262
263 3
			return true;
264
		};
265
	}
266
267
268
}
269