diff options
Diffstat (limited to 'www/wiki/extensions/ModernTimeline/src/ResultFacade/ResultSimplifier.php')
-rw-r--r-- | www/wiki/extensions/ModernTimeline/src/ResultFacade/ResultSimplifier.php | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/www/wiki/extensions/ModernTimeline/src/ResultFacade/ResultSimplifier.php b/www/wiki/extensions/ModernTimeline/src/ResultFacade/ResultSimplifier.php new file mode 100644 index 00000000..1c58345a --- /dev/null +++ b/www/wiki/extensions/ModernTimeline/src/ResultFacade/ResultSimplifier.php @@ -0,0 +1,57 @@ +<?php + +declare( strict_types = 1 ); + +namespace ModernTimeline\ResultFacade; + +use SMW\DIWikiPage; +use SMW\Query\PrintRequest; +use SMWQueryResult; + +class ResultSimplifier { + + public function newSubjectCollection( SMWQueryResult $result ): SubjectCollection { + $subjects = []; + + foreach ( $result->getResults() as $diWikiPage ) { + $subjects[] = $this->newSubject( $diWikiPage, $result->getPrintRequests(), $result ); + } + + return new SubjectCollection( $subjects ); + } + + /** + * @param DIWikiPage $resultPage + * @param PrintRequest[] $printRequests + * @param SMWQueryResult $result + * @return Subject + */ + private function newSubject( DIWikiPage $resultPage, array $printRequests, SMWQueryResult $result ): Subject { + $propertyValueCollections = []; + + foreach ( $printRequests as $printRequest ) { + $dataItems = $this->newResultArray( $resultPage, $printRequest, $result )->getContent(); + + $propertyValueCollections[] = new PropertyValueCollection( + $printRequest, + $dataItems === false ? [] : $dataItems + ); + } + + return new Subject( $resultPage, $propertyValueCollections ); + } + + /** + * Compat with SMW 3.0 + * In 3.1+ do: ResultArray::factory( $resultPage, $printRequest, $result ) + */ + private function newResultArray( DIWikiPage $resultPage, PrintRequest $printRequest, SMWQueryResult $result ): \SMWResultArray { + return new \SMWResultArray( + $resultPage, + $printRequest, + $result->getStore(), + method_exists( $result, 'getFieldItemFinder' ) ? $result->getFieldItemFinder() : null + ); + } + +} |