summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php')
-rw-r--r--www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php60
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;
+ }
+}