pageRenderer->addJsFile( 'EXT:vitec/Resources/Public/Javascript/og-image-preview.js' ); $moduleTemplate = $this->moduleTemplateFactory->create($request); $moduleTemplate->assignMultiple([ 'formData' => $this->getDefaultFormData(), 'savedImages' => $this->ogImageGeneratorService->getSavedImages(), 'presets' => $this->getPresets(), 'backgroundImages' => $this->ogImageGeneratorService->getBackgroundImages(), ]); return $moduleTemplate->renderResponse('OgImage/Index'); } /** * Handles form submission and generates the OG image. */ public function generateAction(ServerRequestInterface $request): ResponseInterface { $parsedBody = $request->getParsedBody(); $formData = $parsedBody['ogimage'] ?? []; [$success, $message, $filePath] = $this->ogImageGeneratorService->generate($formData); $severity = $success ? ContextualFeedbackSeverity::OK : ContextualFeedbackSeverity::ERROR; $flashMessage = GeneralUtility::makeInstance( FlashMessage::class, $message, $success ? 'OG Image created' : 'Generation failed', $severity, true ); $this->flashMessageService ->getMessageQueueByIdentifier() ->addMessage($flashMessage); $moduleUrl = (string)$this->uriBuilder->buildUriFromRoute('web_vitecogimage'); return new RedirectResponse($moduleUrl, 303); } /** * Returns a base64 PNG preview without saving to disk (AJAX). */ public function previewAction(ServerRequestInterface $request): ResponseInterface { $parsedBody = $request->getParsedBody(); $formData = $parsedBody['ogimage'] ?? []; [$success, $message, $dataUri] = $this->ogImageGeneratorService->generatePreview($formData); return new JsonResponse([ 'success' => $success, 'message' => $message, 'dataUri' => $dataUri, ]); } // ────────────────────────────────────────────────────────────────── // Helpers // ────────────────────────────────────────────────────────────────── private function getDefaultFormData(): array { return [ 'bg_type' => 'color', 'bg_color' => '#1a1a2e', 'bg_image' => '', 'overlay_opacity' => 40, 'title' => 'Your Page Title', 'title_color' => '#ffffff', 'title_size' => 64, 'subtitle' => 'A short description of your page', 'subtitle_color' => '#cccccc', 'subtitle_size' => 32, 'label_text' => 'VITEC', 'label_bg_color' => '#e63946', 'label_text_color' => '#ffffff', 'label_position' => 'top-left', 'logo_path' => '', 'output_format' => 'jpg', 'output_quality' => 90, ]; } private function getPresets(): array { return [ 'dark-blue' => [ 'label' => 'Dark Blue', 'bg_color' => '#1a1a2e', 'title_color' => '#ffffff', 'subtitle_color' => '#aaaacc', ], 'light' => [ 'label' => 'Clean Light', 'bg_color' => '#f8f9fa', 'title_color' => '#212529', 'subtitle_color' => '#6c757d', ], 'brand-red' => [ 'label' => 'VITEC Brand Red', 'bg_color' => '#1f1f1f', 'title_color' => '#ffffff', 'subtitle_color' => '#e63946', ], ]; } }