From 91a6a26746e70585ee5abbd73520c1bb61c7bcf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Thu, 14 May 2026 17:27:10 +0200 Subject: [PATCH] Allow to show recently submitted pages, and create them from the page --- src/Controller/InfoProviderController.php | 15 +++++++++-- .../SubmittedPageStorage.php | 2 +- .../from_url/from_url.html.twig | 26 +++++++++++++++++++ translations/messages.en.xlf | 18 +++++++++++++ 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/Controller/InfoProviderController.php b/src/Controller/InfoProviderController.php index 817a6651..28c281d0 100644 --- a/src/Controller/InfoProviderController.php +++ b/src/Controller/InfoProviderController.php @@ -28,6 +28,7 @@ use App\Entity\Parts\Part; use App\Exceptions\OAuthReconnectRequiredException; use App\Form\InfoProviderSystem\FromURLFormType; use App\Form\InfoProviderSystem\PartSearchType; +use App\Services\InfoProviderSystem\SubmittedPageStorage; use App\Services\InfoProviderSystem\ExistingPartFinder; use App\Services\InfoProviderSystem\CreateFromUrlHelper; use App\Services\InfoProviderSystem\PartInfoRetriever; @@ -62,7 +63,8 @@ class InfoProviderController extends AbstractController private readonly PartInfoRetriever $infoRetriever, private readonly ExistingPartFinder $existingPartFinder, private readonly SettingsManagerInterface $settingsManager, - private readonly SettingsFormFactoryInterface $settingsFormFactory + private readonly SettingsFormFactoryInterface $settingsFormFactory, + private readonly SubmittedPageStorage $browserHtmlStorage, ) { @@ -221,7 +223,7 @@ class InfoProviderController extends AbstractController } #[Route('/from_url', name: 'info_providers_from_url')] - public function fromURL(Request $request, GenericWebProvider $provider, CreateFromUrlHelper $fromUrlHelper): Response + public function fromURL(Request $request, CreateFromUrlHelper $fromUrlHelper): Response { $this->denyAccessUnlessGranted('@info_providers.create_parts'); @@ -242,6 +244,12 @@ class InfoProviderController extends AbstractController $no_cache = $form->get('no_cache')->getData(); $skip_delegation = $form->get('skip_delegation')->getData(); + $submittedPageToken = $request->request->get('submitted_page_token', null); + if ($submittedPageToken !== null && $submittedPageToken !== '') { + $url = $this->browserHtmlStorage->retrieve($submittedPageToken)->url; + } + + try { //It's okay if we use the cached results here, as its just for convenience $searchResult = $this->infoRetriever->searchByKeyword( @@ -249,6 +257,7 @@ class InfoProviderController extends AbstractController providers: [$method], options: [ InfoProviderInterface::OPTION_SKIP_DELEGATION => $skip_delegation, + InfoProviderInterface::OPTION_SUBMITTED_PAGE_TOKEN => $submittedPageToken, ] ); @@ -262,6 +271,7 @@ class InfoProviderController extends AbstractController 'providerId' => $searchResult->provider_id, 'no_cache' => $no_cache ? 1 : null, 'skip_delegation' => $skip_delegation ? 1 : null, + 'submitted_page_token' => $submittedPageToken ?: null, ]); } } catch (ExceptionInterface $e) { @@ -272,6 +282,7 @@ class InfoProviderController extends AbstractController return $this->render('info_providers/from_url/from_url.html.twig', [ 'form' => $form, 'partDetail' => $partDetail, + 'recentBrowserPages' => $this->browserHtmlStorage->getRecentPages(), ]); } diff --git a/src/Services/InfoProviderSystem/SubmittedPageStorage.php b/src/Services/InfoProviderSystem/SubmittedPageStorage.php index f536531b..5e623f57 100644 --- a/src/Services/InfoProviderSystem/SubmittedPageStorage.php +++ b/src/Services/InfoProviderSystem/SubmittedPageStorage.php @@ -63,7 +63,7 @@ class SubmittedPageStorage $session->get(self::SESSION_KEY, []), static fn(string $u): bool => $u !== $page->token, )); - array_unshift($tokens, $page->url); + array_unshift($tokens, $page->token); $session->set(self::SESSION_KEY, array_slice($tokens, 0, self::MAX_RECENT)); return $page->token; diff --git a/templates/info_providers/from_url/from_url.html.twig b/templates/info_providers/from_url/from_url.html.twig index 49d4b116..2a7d1b1a 100644 --- a/templates/info_providers/from_url/from_url.html.twig +++ b/templates/info_providers/from_url/from_url.html.twig @@ -33,5 +33,31 @@ {{ form_row(form.submit) }} + + {% if recentBrowserPages is not empty %} +
+ +
+ +
+

{% trans %}browser_plugin.recent_pages.help{% endtrans %}

+
+ {% for page in recentBrowserPages %} + + {% endfor %} +
+
+
+ {% endif %} + {{ form_end(form) }} {% endblock %} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 0044edcc..3d07eb4d 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -13607,5 +13607,23 @@ Buerklin-API Authentication server: Host URL + + + browser_plugin.session_expired + The browser plugin session has expired. Please submit the page from your browser extension again. + + + + + browser_plugin.recent_pages.title + Recent browser submissions + + + + + browser_plugin.recent_pages.help + Pages recently submitted from your browser extension. Click to create a part using the captured HTML. + +