Skip to content

Commit 5b1138f

Browse files
[FEATURE] Required viewer parameter (kitodo#1751)
Co-authored-by: Sebastian Meyer <sebastian.meyer@opencultureconsulting.com>
1 parent 8565db0 commit 5b1138f

File tree

6 files changed

+66
-12
lines changed

6 files changed

+66
-12
lines changed

Classes/Controller/Embedded3dViewerController.php

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,16 @@ public function mainAction(): ResponseInterface
3939
return $this->htmlResponse();
4040
}
4141

42+
// when using the component
4243
if (!empty($this->settings['document'])) {
4344
$this->assignModelFromDocument($this->getDocumentByUrl($this->settings['document']));
44-
} else {
45-
$this->loadDocument();
46-
if (!$this->isDocMissingOrEmpty()) {
47-
$this->assignModelFromDocument($this->document->getCurrentDocument());
48-
}
45+
return $this->htmlResponse();
46+
}
47+
48+
$this->loadDocument();
49+
50+
if (!$this->isDocMissingOrEmpty()) {
51+
$this->assignModelFromDocument($this->document->getCurrentDocument());
4952
}
5053

5154
return $this->htmlResponse();
@@ -81,6 +84,15 @@ public function buildEmbedded3dViewerUrl(string $model = ''): string
8184
if (!empty($viewer)) {
8285
$embedded3dViewerUrl .= '&viewer=' . $viewer;
8386
}
87+
88+
if (!empty($this->requestData['viewerParam'])) {
89+
$embedded3dViewerUrl .= '&' . http_build_query(['viewerParam' => $this->requestData['viewerParam']]);
90+
}
91+
92+
if (!empty($this->settings['queryString'])) {
93+
$embedded3dViewerUrl .= '&' . $this->settings['queryString'];
94+
}
95+
8496
return $embedded3dViewerUrl;
8597
}
8698

Classes/Middleware/Embedded3dViewer.php

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,19 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
123123
return $this->warningResponse('Viewer "' . $viewer . '" does not support the model format "' . $modelFormat . '"', $request);
124124
}
125125

126-
$html = $this->getViewerHtml($config, $viewerConfigPath, $viewerFolder, $parameters['model'], $modelInfo);
126+
if (isset($config["requiredParameters"]) && is_array($config["requiredParameters"]) && !empty($config["requiredParameters"])) {
127+
if (empty($parameters["viewerParam"])) {
128+
return $this->warningResponse('The required viewer parameters do not exist', $request);
129+
}
130+
131+
foreach ($config["requiredParameters"] as $key) {
132+
if (!array_key_exists($key, $parameters["viewerParam"])) {
133+
return $this->warningResponse('Required viewer parameter "' . $key . '" does not exist', $request);
134+
}
135+
}
136+
}
137+
138+
$html = $this->getViewerHtml($config, $viewerConfigPath, $viewerFolder, $parameters, $modelInfo);
127139
return new HtmlResponse($html);
128140
}
129141

@@ -193,15 +205,20 @@ private function getViewerByExtensionConfiguration(string $modelFormat): string
193205
/**
194206
* @param string $viewerUrl
195207
* @param string $html
196-
* @param string $modelUrl
208+
* @param array $parameters
197209
* @param array $modelInfo
198210
* @return string
199211
*/
200-
public function replacePlaceholders(string $viewerUrl, string $html, $modelUrl, array $modelInfo): string
212+
public function replacePlaceholders(string $viewerUrl, string $html, array $parameters, array $modelInfo): string
201213
{
202214
$html = str_replace("{{viewerPath}}", $viewerUrl, $html);
203-
$html = str_replace("{{modelUrl}}", $modelUrl, $html);
215+
$html = str_replace("{{modelUrl}}", $parameters['model'], $html);
204216
$html = str_replace("{{modelPath}}", $modelInfo["dirname"], $html);
217+
if (!empty($parameters["viewerParam"])) {
218+
foreach ($parameters["viewerParam"] as $key => $value) {
219+
$html = str_replace("{{viewerParam." . $key . "}}", $value, $html);
220+
}
221+
}
205222
return str_replace("{{modelResource}}", $modelInfo["basename"], $html);
206223
}
207224

@@ -225,11 +242,11 @@ public function renderDefaultViewer($model): HtmlResponse
225242
* @param array $config
226243
* @param string $viewerConfigPath
227244
* @param Folder $viewerFolder
228-
* @param string $modelUrl
245+
* @param array $parameters
229246
* @param array $modelInfo
230247
* @return string
231248
*/
232-
public function getViewerHtml(array $config, string $viewerConfigPath, Folder $viewerFolder, string $modelUrl, array $modelInfo): string
249+
public function getViewerHtml(array $config, string $viewerConfigPath, Folder $viewerFolder, array $parameters, array $modelInfo): string
233250
{
234251
$htmlFile = "index.html";
235252
if (isset($config["base"]) && !empty($config["base"])) {
@@ -242,6 +259,6 @@ public function getViewerHtml(array $config, string $viewerConfigPath, Folder $v
242259
}
243260

244261
$html = $viewerFolder->getFile($htmlFile)->getContents();
245-
return $this->replacePlaceholders($viewerUrl, $html, $modelUrl, $modelInfo);
262+
return $this->replacePlaceholders($viewerUrl, $html, $parameters, $modelInfo);
246263
}
247264
}

Configuration/FlexForms/Embedded3dViewer.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@
4242
<eval>trim</eval>
4343
</config>
4444
</settings.viewer>
45+
<settings.queryString>
46+
<exclude>1</exclude>
47+
<label>LLL:EXT:dlf/Resources/Private/Language/locallang_be.xlf:plugins.embedded3dviewer.flexform.queryString</label>
48+
<config>
49+
<type>input</type>
50+
<eval>trim</eval>
51+
</config>
52+
</settings.queryString>
4553
</el>
4654
</ROOT>
4755
</sDEF>

Documentation/Developers/Embedded3DViewer.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ To configure the 3D viewer for Kitodo.Presentation, a ``dlf-3d-viewer.yml`` file
7171
- :field: supportedModelFormats (required)
7272
:description: Specify single or multiple supported model formats of the viewer.
7373

74+
- :field: requiredParameters
75+
:description: Specify single or multiple required parameters of the viewer. (Viewer parameters are passed in URL using the array ``viewerParam`` e.g. ``viewerParam[parameterName]=parameterValue``)
76+
77+
7478
Example
7579
^^^^^^^^^^^^^^^^^^^^^^^^^
7680

@@ -82,6 +86,9 @@ Example
8286
supportedModelFormats:
8387
- glf
8488
- ply
89+
requiredParameter:
90+
- foo
91+
- bar
8592
8693
Placeholders
8794
-------
@@ -106,3 +113,6 @@ Placeholders can be used within the file which is define under the ``base`` key
106113
- :field: modelResource
107114
:description: Resource part of the ``modelUrl`` with the filename to be loaded from the endpoint. For example, if your resource is hosted at "https://example.com/my-model.glb", the value would be "my-model.glb".
108115

116+
- :field: viewerParam.``parameterName``
117+
:description: Value of URL parameter ``viewerParam[parameterName]`` (Please define the parameter as requiredParameter in ``dlf-3d-viewer.yml`` file)
118+

Resources/Private/Language/de.locallang_be.xlf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,10 @@
610610
<trans-unit id="plugins.embedded3dviewer.flexform.viewer">
611611
<source><![CDATA[Name of viewer]]></source>
612612
</trans-unit>
613+
<trans-unit id="plugins.embedded3dviewer.flexform.queryString">
614+
<source><![CDATA[Query string added to embedded viewer URL]]></source>
615+
<target><![CDATA[Query-String zur eingebetteten Viewer-URL hinzugefügt]]></target>
616+
</trans-unit>
613617
<trans-unit id="plugins.annotation.title" approved="yes">
614618
<source><![CDATA[Kitodo: Annotations]]></source>
615619
<target><![CDATA[Kitodo: Annotationen]]></target>

Resources/Private/Language/locallang_be.xlf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,9 @@
485485
<trans-unit id="plugins.embedded3dviewer.flexform.viewer">
486486
<source><![CDATA[Name of viewer]]></source>
487487
</trans-unit>
488+
<trans-unit id="plugins.embedded3dviewer.flexform.queryString">
489+
<source><![CDATA[Query string added to embedded viewer URL]]></source>
490+
</trans-unit>
488491
<trans-unit id="plugins.annotation.title">
489492
<source><![CDATA[Kitodo: Annotations]]></source>
490493
</trans-unit>

0 commit comments

Comments
 (0)