From d3fa91f2daf3c0e0ebc3e0cb6bb43319a0f34393 Mon Sep 17 00:00:00 2001 From: Elizabeth Danzberger Date: Thu, 7 Nov 2024 10:47:39 -0500 Subject: [PATCH] feat: add `startPresentation` parameter to initial state Signed-off-by: Elizabeth Danzberger --- lib/Listener/BeforeTemplateRenderedListener.php | 7 +++++++ lib/Service/InitialStateService.php | 4 ++++ src/helpers/url.js | 3 ++- src/view/Office.vue | 2 ++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/Listener/BeforeTemplateRenderedListener.php b/lib/Listener/BeforeTemplateRenderedListener.php index ca20eb9d7a..9c512bff6a 100644 --- a/lib/Listener/BeforeTemplateRenderedListener.php +++ b/lib/Listener/BeforeTemplateRenderedListener.php @@ -8,14 +8,18 @@ namespace OCA\Richdocuments\Listener; use OCA\Richdocuments\Service\CapabilitiesService; +use OCA\Richdocuments\Service\InitialStateService; use OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; +use OCP\IRequest; /** @template-implements IEventListener */ class BeforeTemplateRenderedListener implements IEventListener { public function __construct( private CapabilitiesService $capabilitiesService, + private InitialStateService $initialStateService, + private IRequest $request, ) { } @@ -28,5 +32,8 @@ public function handle(Event $event): void { $event->getResponse()->addHeader('Cross-Origin-Opener-Policy', 'same-origin'); $event->getResponse()->addHeader('Cross-Origin-Embedder-Policy', 'require-corp'); } + + $startPresentation = $this->request->getParam('startPresentation') === 'true'; + $this->initialStateService->providePresentation($startPresentation); } } diff --git a/lib/Service/InitialStateService.php b/lib/Service/InitialStateService.php index 72fab2fe97..cf20af01e7 100644 --- a/lib/Service/InitialStateService.php +++ b/lib/Service/InitialStateService.php @@ -60,6 +60,10 @@ public function provideDocument(Wopi $wopi, array $params): void { $this->provideOptions(); } + public function providePresentation(bool $startPresentation = false): void { + $this->initialState->provideInitialState('startPresentation', $startPresentation); + } + public function provideAdminSettings(): void { $this->initialState->provideInitialState('adminSettings', [ 'templatesAvailable' => $this->capabilitiesService->hasTemplateSource(), diff --git a/src/helpers/url.js b/src/helpers/url.js index 98529ec28a..b8b654b5bf 100644 --- a/src/helpers/url.js +++ b/src/helpers/url.js @@ -29,7 +29,7 @@ const getWopiSrc = (fileId) => { return wopiurl } -const getWopiUrl = ({ fileId, title, readOnly, closeButton, revisionHistory, target = undefined }) => { +const getWopiUrl = ({ fileId, title, readOnly, closeButton, revisionHistory, target = undefined, startPresentation = false }) => { // Only set the revision history parameter if the versions app is enabled revisionHistory = revisionHistory && window?.oc_appswebroots?.files_versions @@ -45,6 +45,7 @@ const getWopiUrl = ({ fileId, title, readOnly, closeButton, revisionHistory, tar + (revisionHistory ? '&revisionhistory=1' : '') + (readOnly ? '&permission=readonly' : '') + (target ? '&target=' + encodeURIComponent(target) : '') + + (startPresentation ? '&startPresentation=1' : '') } const getDocumentUrlFromTemplate = (templateId, fileName, fileDir, fillWithTemplate) => { diff --git a/src/view/Office.vue b/src/view/Office.vue index 992972fdc2..1fc07db18c 100644 --- a/src/view/Office.vue +++ b/src/view/Office.vue @@ -317,6 +317,7 @@ export default { Config.update('urlsrc', data.urlSrc) Config.update('wopi_callback_url', loadState('richdocuments', 'wopi_callback_url', '')) + Config.update('startPresentation', loadState('richdocuments', 'startPresentation', false)) const forceReadOnly = this.isEmbedded && !this.hasWidgetEditingEnabled @@ -327,6 +328,7 @@ export default { readOnly: forceReadOnly || version > 0, revisionHistory: !this.isPublic, closeButton: !Config.get('hideCloseButton') && !this.isEmbedded, + startPresentation: Config.get('startPresentation'), }) this.$set(this.formData, 'action', action) this.$set(this.formData, 'accessToken', data.token)