-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDataItemParserFunction.php
65 lines (54 loc) · 1.26 KB
/
DataItemParserFunction.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
<?php
/**
* Parser function implementation for fetching a data item and rendering it.
*
* @file
* @ingroup Extensions
*
* @author Daniel Kinzler
* @license GNU General Public Licence 3.0 or later
*/
class DataItemParserFunction {
/**
* @var DataItemLoader
*/
protected $loader;
/**
* @var DataItemFormatter
*/
protected $formatter;
public function __construct( DataItemLoader $loader, DataItemFormatter $formatter ) {
$this->loader = $loader;
$this->formatter = $formatter;
}
/**
* Handles the #dataitem parser function.
*
* @see https://www.mediawiki.org/wiki/Manual:Parser_functions
*
* @param Parser $parser
*
* @return array
*/
public function evaluate( Parser $parser ) {
$args = func_get_args();
array_shift( $args );
$parser->getOutput()->addModules( array( 'ext.Enricher.box' ) );
if ( isset( $args[0]) ) {
$id = $args[0];
try {
//TODO: apply caching
$item = $this->loader->loadItem( $id );
$wikitext = $this->formatter->formatItem( $item );
} catch ( DataItemLoaderException $ex ) {
$wikitext = HTML::element( 'div', array( 'class' => 'error' ), $ex->getMessage() );
}
} else {
$wikitext = 'Missing item ID!'; //TODO: i18n
}
return array(
$wikitext,
'noparse' => false
);
}
}