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
|
<?php
namespace SMW\ParserFunctions;
use ParamProcessor\ProcessingError;
use ParamProcessor\ProcessingResult;
use Parser;
use ParserHooks\HookDefinition;
use ParserHooks\HookHandler;
use SMWOutputs;
/**
* Class that provides the {{#info}} parser function
*
* @ingroup ParserFunction
*
* @author Markus Krötzsch
* @author Jeroen De Dauw
*/
class InfoParserFunction implements HookHandler {
/**
* @param Parser $parser
* @param ProcessingResult $result
*
* @return mixed
*/
public function handle( Parser $parser, ProcessingResult $result ) {
if ( $result->hasFatal() ) {
return $this->getOutputForErrors( $result->getErrors() );
}
$parameters = $result->getParameters();
if ( !isset( $parameters['message'] ) ) {
return '';
}
$message = $parser->mStripState ? $parser->mStripState->unstripBoth( $parameters[ 'message' ]->getValue() ) : $parameters[ 'message' ]->getValue();
if ( $message === '' ) {
return '';
}
/**
* Non-escaping is safe bacause a user's message is passed through parser, which will
* handle unsafe HTM elements.
*/
$result = smwfEncodeMessages(
[ $message ],
$parameters['icon']->getValue(),
' <!--br-->',
false // No escaping.
);
if ( !is_null( $parser->getTitle() ) && $parser->getTitle()->isSpecialPage() ) {
global $wgOut;
SMWOutputs::commitToOutputPage( $wgOut );
}
else {
SMWOutputs::commitToParser( $parser );
}
return $result;
}
/**
* @param ProcessingError[] $errors
* @return string
*/
private function getOutputForErrors( $errors ) {
// TODO: see https://github.com/SemanticMediaWiki/SemanticMediaWiki/issues/1485
return 'A fatal error occurred in the #info parser function';
}
public static function getHookDefinition() {
return new HookDefinition(
'info',
[
[
'name' => 'message',
'message' => 'smw-info-par-message',
],
[
'name' => 'icon',
'message' => 'smw-info-par-icon',
'default' => 'info',
'values' => [ 'info', 'warning', 'error', 'note' ],
],
],
[
'message',
'icon'
]
);
}
}
|