summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/ResultItem.php
blob: ab5c57ba105786ac8bee19129912797d4518a0f0 (plain)
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
<?php

namespace SRF\Filtered;

use SMWDataValue;
use SMWDIGeoCoord;
use SMWDIWikiPage;
use SMWErrorValue;
use SMWResultArray;

/**
 * File holding the SRF_Filtered_Item class
 *
 * @author Stephan Gambke
 * @file
 * @ingroup SemanticResultFormats
 */

/**
 * The SRF_Filtered_Item class.
 *
 * @ingroup SemanticResultFormats
 */
class ResultItem {

	private $mResultArray;
	private $mItemData = [];
	private $mQueryPrinter;

	/**
	 * @param SMWResultArray[] $resultArray
	 * @param Filtered $queryPrinter
	 */
	public function __construct( array $resultArray, Filtered &$queryPrinter ) {
		$this->mResultArray = $resultArray;
		$this->mQueryPrinter = $queryPrinter;
	}

	public function setData( $viewOrFilterId, $data ) {
		if ( $data === null ) {
			$this->unsetData( $viewOrFilterId );
		} else {
			$this->mItemData[$viewOrFilterId] = $data;
		}
	}

	public function unsetData( $viewOrFilterId ) {
		unset( $this->mItemData[$viewOrFilterId] );
	}

	public function getData( $viewOrFilterId ) {
		return $this->mItemData[$viewOrFilterId];
	}

	/**
	 * @return SMWResultArray[]
	 */
	public function getValue() {
		return $this->mResultArray;
	}

	public function getArrayRepresentation() {

		$printouts = [];
		$isFirstColumn = true;

		foreach ( $this->mResultArray as $field ) {

			$printRequest = $field->getPrintRequest();

			$values = []; // contains plain text
			$formatted = []; // may contain links
			$sorted = []; // uses DEFAULTSORT when available

			$field->reset();

			while ( ( $dataValue = $field->getNextDataValue() ) instanceof SMWDataValue ) {

				$dataItem = $dataValue->getDataItem();

				if ( $dataItem instanceof SMWDIGeoCoord ) {
					$values[] = [ 'lat' => $dataItem->getLatitude(), 'lng' => $dataItem->getLongitude() ];
					$sorted[] = $dataItem->getSortKey();
				} elseif ( $dataItem instanceof SMWDIWikiPage ) {
					$values[] = $dataValue->getShortWikiText();
					$sorted[] = $dataItem->getSortKey();
				} else {
					$values[] = $dataValue->getShortWikiText();
					$sorted[] = $dataValue->getShortWikiText();
				}

				if ( $dataValue instanceof SMWErrorValue ) {
					$formatted[] = $dataItem->getSerialization();
				} else {
					$formatted[] = $dataValue->getShortHTMLText( $this->mQueryPrinter->getLinker( $isFirstColumn ) );
				}
			}

			$printouts[$this->mQueryPrinter->uniqid( $printRequest->getHash() )] = [
				'values' => $values,
				'formatted values' => $formatted,
				'sort values' => $sorted,
			];

			$isFirstColumn = false;
		}

		return [
			'printouts' => $printouts,
			'data' => $this->mItemData,
		];
	}
}