diff options
Diffstat (limited to 'www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php')
-rw-r--r-- | www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php b/www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php new file mode 100644 index 00000000..09c821d5 --- /dev/null +++ b/www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php @@ -0,0 +1,60 @@ +<?php + +declare( strict_types = 1 ); + +namespace ModernTimeline\SlidePresenter; + +use ModernTimeline\ResultFacade\PropertyValueCollection; +use ModernTimeline\ResultFacade\Subject; +use SMW\DataValueFactory; + +class TemplateSlidePresenter implements SlidePresenter { + + private $templateName; + + public function __construct( string $templateName ) { + $this->templateName = $templateName; + } + + public function getText( Subject $subject ): string { + $parser = $this->getParser(); + + return $parser->recursiveTagParseFully( + ( new TemplateSlidePresenter( $this->templateName ) )->getTemplateText( $subject ) + ); + } + + private function getParser(): \Parser { + return $GLOBALS['wgParser']; + } + + public function getTemplateText( Subject $subject ): string { + return '{{' . implode( '|', $this->getTemplateSegments( $subject ) ) . '}}'; + } + + private function getTemplateSegments( Subject $subject ): array { + return array_merge( + [ + $this->templateName, + $this->parameter( 'title', $subject->getWikiPage()->getTitle()->getFullText() ) + ], + array_map( + function( PropertyValueCollection $pvc ) { + return $this->parameter( + $pvc->getPrintRequest()->getText( null ) ?? '', + $pvc->getDataItems() === [] ? '' : $this->dataItemToText( $pvc->getDataItems()[0] ) + ); + }, + $subject->getPropertyValueCollections() + ) + ); + } + + private function dataItemToText( \SMWDataItem $dataItem ): string { + return DataValueFactory::getInstance()->newDataValueByItem( $dataItem )->getLongHTMLText(); + } + + private function parameter( string $name, string $value ): string { + return $name . '=' . $value; + } +} |