feat: MailJet newsletter subscription via MyE&P API endpoint

This commit is contained in:
Björn Fromme
2026-04-30 14:25:57 +02:00
parent 9d0ffda491
commit 98e7451118
9 changed files with 441 additions and 102 deletions
@@ -85,6 +85,9 @@
<trans-unit id="tx_eptheme.message.contactForm.firstName.1221560718">
<target>Bitte angeben</target>
</trans-unit>
<trans-unit id="tx_eptheme.message.contactForm.lastName.1221560718">
<target>Bitte angeben</target>
</trans-unit>
<trans-unit id="tx_eptheme.message.contactForm.email.1221560718">
<target>Bitte angeben</target>
</trans-unit>
@@ -92,7 +95,14 @@
<target>Bitte angeben</target>
</trans-unit>
<trans-unit id="tx_eptheme.message.contactForm.email.1221559976">
<target>Ungültige E-Mail Adresse</target>
<target>Bitte gib eine gültige E-Mail Adresse an</target>
</trans-unit>
<trans-unit id="tx_eptheme.message.newsletter.listIds.1347992400">
<target>Bitte wähle mindestens einen Newsletter</target>
</trans-unit>
<trans-unit id="tx_eptheme.message.newsletter.consent.1361959228">
<target>Bitte stimme den Datenschutzbestimmungen zu</target>
</trans-unit>
<trans-unit id="label.whatsapp_instructions">
@@ -0,0 +1,91 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
<f:layout name="Default"/>
<f:section name="Main">
<a id="newsletter-form" class="anchor"></a>
<div class="container">
<f:form method="post" action="subscriptionFormSubmit" name="subscriptionRequest" section="newsletter-form" object="{subscriptionRequest}">
<div class="grid lg:grid-cols-2 lg:gap-x-8 items-start">
<div>
<h3>
Meine Daten
</h3>
<f:render section="Field" arguments="{property: 'firstName', label: 'Vorname'}"/>
<f:render section="Field" arguments="{property: 'lastName', label: 'Nachname'}"/>
<f:render section="Field" arguments="{property: 'email', label: 'E-Mail'}"/>
<div class="mb-4">
<f:form.validationResults for="subscriptionRequest.consent">
<label class="inline-flex items-center">
<f:form.checkbox property="consent" value="1" class="form-checkbox{f:if(condition: validationResults.errors.0, then: ' form-checkbox--has-error')}"/>
<span class="block ml-2">Ich akzeptiere die <f:link.typolink parameter="{settings.dataProtectionPageUid}" class="underline" target="_blank">Datenschutzbestimmungen</f:link.typolink>*</span>
</label>
<f:if condition="{validationResults.flattenedErrors}">
<div class="text-red-500 mt-2" role="alert">
<f:for each="{validationResults.errors}" as="error">
{f:translate(key: 'tx_eptheme.message.newsletter.consent.{error.code}', extensionName: 'ep_theme')}
<br />
</f:for>
</div>
</f:if>
</f:form.validationResults>
</div>
<div class="hidden lg:block">
<button type="submit" class="button bg-button">
Anmelden
</button>
</div>
</div>
<div>
<div>
<h3>
Ich möchte folgende Newsletter erhalten
</h3>
<f:form.validationResults for="subscriptionRequest.listIds">
<f:for each="{lists}" as="list">
<label for="list-{list.id}" class="flex items-center">
<f:form.checkbox property="listIds" multiple="1" value="{list.id}" class="form-checkbox"/>
<span class="block ml-2">{list.label}</span>
</label>
</f:for>
<f:if condition="{validationResults.flattenedErrors}">
<div class="text-red-500 mt-2" role="alert">
<f:for each="{validationResults.errors}" as="error">
{f:translate(key: 'tx_eptheme.message.newsletter.listIds.{error.code}', extensionName: 'ep_theme')}
<br />
</f:for>
</div>
</f:if>
</f:form.validationResults>
</div>
</div>
<div class="lg:hidden mt-4">
<button type="submit" class="button bg-button">
Anmelden
</button>
</div>
</div>
</f:form>
</div>
</f:section>
<f:section name="Field">
<f:form.validationResults for="subscriptionRequest.{property}">
<f:variable name="hasErrors" value="{validationResults.errors.0}"/>
<label class="block mb-4">
<span class="{f:if(condition: hasErrors, then: 'text-red-500', else: 'text-zinc-700')}">{label}*</span>
<f:form.textfield property="{property}" class="form-field {f:if(condition: hasErrors, then: 'form-field--has-error')}"/>
<f:if condition="{validationResults.flattenedErrors}">
<div class="text-red-500 mt-2" role="alert">
<f:for each="{validationResults.errors}" as="error">
{f:translate(key: 'tx_eptheme.message.contactForm.{property}.{error.code}', extensionName: 'ep_theme')}
<br />
</f:for>
</div>
</f:if>
</label>
</f:form.validationResults>
</f:section>
</html>
@@ -0,0 +1,23 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
<f:layout name="Default"/>
<f:section name="Main">
<div class="container">
<div class="bg-ep-primary-light text-white p-4">
<h2>
Vielen Dank für dein Interesse
</h2>
<p>
Deine Anmeldung muss noch bestätigt werden. Bitte nutze den Link aus der Bestätigungs-E-Mail, die in
Kürze bei dir eintreffen sollte.
</p>
<p class="text-sm">
Sieh am besten auch im Spam-Ordner nach.
</p>
</div>
</div>
</f:section>
</html>