Search by

teufels / tt3-greetingcard

teufels

[teufels] Greetingcard - Greeting card service for the TYPO3 form framework with motif selection from a file storage folder and double opt-in.

Package info

bitbucket.org/teufels/tt3-greetingcard

Homepage

Type:typo3-cms-extension

pkg:composer/teufels/tt3-greetingcard

Statistics

Installs: 8

Dependents: 0

Suggesters: 0

1.0.2 2026-10-16 09:56 UTC

This package is auto-updated.

Last update: 2026-10-16 09:56:59 UTC


README

VENDOR PACKAGE KEY version

[ ṯeufels ] Greetingcard

This extension allows you to provide a greeting card service based on the TYPO3 form framework, featuring a predefined sender/recipient form, an optional motif selection from a file storage folder, double opt-in confirmation and delivery by email.

This version supports TYPO3

TYPO3 14 LTS

Composer support

composer req teufels/tt3-greetingcard

Links

URL
Repository:https://bitbucket.org/teufels/tt3-greetingcard/
Packagist:tbd
TER:tbd
Documentation:tbd

1. Features

  • Predefined, generic greeting card form (sender / recipient / message), extendable in the form editor
  • Form element "Greeting card motif": all images of a configurable file storage folder are offered (title, description and preview image with alt text), sorted by title; optional, "No motif" is preselected
  • Double opt-in via eliashaeussler/typo3-form-consent: the card is only delivered after the sender confirmed their e-mail address (link valid for 24 hours, no card data in the opt-in mail)
  • Delivery of the confirmed card by email, incl. title, description and download link of the motif
  • Privacy notice with link to the privacy policy (teufels/form-element-linked-text)

2. Installation

  1. composer req teufels/tt3-greetingcard and set up the extension (typo3 extension:setup).
  2. Add the site set teufels/tt3-greetingcard to the dependencies of your site (or site package set).
  3. Create the pages
    • a page with the form plugin,
    • a slim page (e.g. noindex) with the plugin "FormConsent / Consent" as confirmation page,
    • a storage folder for the opt-in records (site setting plugin.tx_formconsent.persistence.storagePid).
  4. Create a form from the template "Greeting card with double opt-in" in the module "Forms" (store it in the database or in your site package).
  5. In the form:
    • finisher "Consent": select the confirmation page (confirmationPid),
    • motif element: select the motif folder (motifFolder, e.g. 1:/greetingcard/motifs/),
    • privacy notice: select the privacy policy page,
    • recipient of the mail to the party that prints the cards: finisher "EmailToReceiver" in the form variant post-consent-approved. Finishers of variants are not offered by the form editor, change them in the form definition (.form.yaml) or in the database record.

3. Usage

3.1 Motifs

  • Upload the images (jpg, jpeg, png, webp) to the configured folder of a public file storage. The extension does not ship motifs.
  • The metadata of the file is displayed: title (fallback: file name), description and alt text. The motifs are sorted by title.
  • The motif is optional. To make it required, activate "Required" in the form editor, the choice "No motif" then disappears. Without any motif in the folder an optional element is not displayed.
  • After adding, replacing or removing motifs clear the page cache.

3.2 Flow

  1. Submit: the sender receives the opt-in mail (only a link, no card data). A page "please confirm" is shown.
  2. Link confirmed: the form is submitted again with the form variant post-consent-approved, the card is mailed to the recipient configured in the variant.
  3. The link can only be used once. The discard link is deactivated by default (showDismissLink: false), because mail scanners would open it.

If the motif was removed between submit and confirmation, the mail states that the motif is no longer available. A moved motif is still resolved.

3.3 Texts

  • Form labels and finisher subjects: Resources/Private/Language/Form/locallang_form*.xlf, overridable with a higher index in your site package (translation file index of the element is 45, of the finishers 100).
  • Mail and confirmation texts: Resources/Private/Language/locallang.xlf.
  • Texts of the confirmation page of form_consent are set via plugin.tx_formconsent._LOCAL_LANG in the site set. They apply to all forms using form_consent on the site.

3.4 Customization

Customer specific fields (e.g. location, ward, room) are added in the form editor or by overriding the form template in your site package. Templates can be overridden via the templateRootPaths of the finishers.

4. Data protection

The submitted data (names of sender and recipient, message, e-mail address) are stored in the opt-in record (table tx_formconsent_domain_model_consent), the data of a patient may be involved.

4.1 Data retention

The records are deleted by the core scheduler task "Table garbage collection" (table tx_formconsent_domain_model_consent), counted from creation and independent of the opt-in state (confirmed or not).

  • Create the task in the scheduler module (set "Number of days" to 0) and run it regularly (e.g. daily, the scheduler needs a cron job).
  • Retention period: extension configuration retentionDays (default 14). The task option "Number of days" overrides it, 0 uses retentionDays. The task cannot enforce a maximum, restrict the access to the scheduler module accordingly.
  • The extension replaces the registration of form_consent (expireField = valid_until): that would only delete expired, never confirmed requests and keep confirmed ones.

Note for other projects

14 days is the requirement of the data protection officer of the first customer, not a legal standard. Agree on the retention period and the privacy notice with the data protection officer of each project. Also consider other places where the data may remain (e.g. mail logs, form log).

5. Changelog

Read on Bitbucket Changelog.md

6. Dependencies

6.1 Requirements

  • "typo3/cms-form": "^14.3"
  • "eliashaeussler/typo3-form-consent": "^4.2"
  • "teufels/form-element-linked-text": "^4.0" (the partial must allow <br> if line breaks are used in the privacy notice)

6.2 Suggestion

  • "typo3/cms-scheduler": "^14.3" for the deletion of the opt-in records

This extension is provided by teufels GmbH © 2026