summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/src/Query/ResultPrinters/ListResultPrinter/ValueTextsBuilder.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/Query/ResultPrinters/ListResultPrinter/ValueTextsBuilder.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/src/Query/ResultPrinters/ListResultPrinter/ValueTextsBuilder.php127
1 files changed, 127 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/Query/ResultPrinters/ListResultPrinter/ValueTextsBuilder.php b/www/wiki/extensions/SemanticMediaWiki/src/Query/ResultPrinters/ListResultPrinter/ValueTextsBuilder.php
new file mode 100644
index 00000000..f328772d
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/src/Query/ResultPrinters/ListResultPrinter/ValueTextsBuilder.php
@@ -0,0 +1,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';
+ }
+
+} \ No newline at end of file