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
|
<?php
namespace SMW\Query\ResultPrinters\ListResultPrinter;
use Linker;
use SMWDataValue;
use SMWResultArray;
/**
* Class ValueTextsBuilder
*
* @license GNU GPL v2+
* @since 3.0
*
* @author Stephan Gambke
*/
class ValueTextsBuilder {
use ParameterDictionaryUser;
private $linker;
/**
* @param SMWResultArray $field
* @param int $column
*
* @return string
*/
public function getValuesText( SMWResultArray $field, $column = 0 ) {
$valueTexts = $this->getValueTexts( $field, $column );
return join( $this->get( 'valuesep' ), $valueTexts );
}
/**
* @param SMWResultArray $field
* @param int $column
*
* @return string[]
*/
private function getValueTexts( SMWResultArray $field, $column ) {
$valueTexts = [];
$field->reset();
while ( ( $dataValue = $field->getNextDataValue() ) !== false ) {
$valueTexts[] =
$this->get( 'value-open-tag' ) .
$this->getValueText( $dataValue, $column ) .
$this->get( 'value-close-tag' );
}
return $valueTexts;
}
/**
* @param SMWDataValue $value
* @param int $column
*
* @return string
*/
private function getValueText( SMWDataValue $value, $column = 0 ) {
$text = $value->getShortText( SMW_OUTPUT_WIKI, $this->getLinkerForColumn( $column ) );
return $this->sanitizeValueText( $text );
}
/**
* Depending on current linking settings, returns a linker object
* for making hyperlinks or NULL if no links should be created.
*
* @param int $columnNumber Column number
*
* @return \Linker|null
*/
private function getLinkerForColumn( $columnNumber ) {
if ( ( $columnNumber === 0 && $this->get( 'link-first' ) ) ||
( $columnNumber > 0 && $this->get( 'link-others' ) ) ) {
return $this->getLinker();
}
return null;
}
/**
* @return Linker
*/
protected function getLinker() {
return $this->linker;
}
/**
* @param Linker $linker
*/
public function setLinker( Linker $linker ) {
$this->linker = $linker;
}
/**
* @param $text
*
* @return string
*/
private function sanitizeValueText( $text ) {
if ( $this->isSimpleList() ) {
return $text;
}
return \Sanitizer::removeHTMLtags( $text, null, [], [], [ 'table', 'tr', 'th', 'td', 'dl', 'dd', 'ul', 'li', 'ol' ] );
}
/**
* @return bool
*/
private function isSimpleList() {
$format = $this->get( 'format' );
return $format !== 'ul' && $format !== 'ol';
}
}
|