teufels / tt3-greetingcard
[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
Type:typo3-cms-extension
pkg:composer/teufels/tt3-greetingcard
Requires
- php: ^8.4 || ^8.5
- eliashaeussler/typo3-form-consent: ^4.2
- teufels/form-element-linked-text: ^4.0
- typo3/cms-core: ^14.3
- typo3/cms-extbase: ^14.3
- typo3/cms-fluid: ^14.3
- typo3/cms-form: ^14.3
- typo3/cms-frontend: ^14.3
Requires (Dev)
None
Suggests
- typo3/cms-scheduler: ^14.3 - needed for the automatic deletion of the double opt-in records (data retention)
Provides
None
Conflicts
None
Replaces
None
README
[ ṯ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
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
composer req teufels/tt3-greetingcardand set up the extension (typo3 extension:setup).- Add the site set
teufels/tt3-greetingcardto the dependencies of your site (or site package set). - 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).
- 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).
- 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.
- finisher "Consent": select the confirmation page (
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
- Submit: the sender receives the opt-in mail (only a link, no card data). A page "please confirm" is shown.
- 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. - 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 is45, of the finishers100). - Mail and confirmation texts:
Resources/Private/Language/locallang.xlf. - Texts of the confirmation page of
form_consentare set viaplugin.tx_formconsent._LOCAL_LANGin the site set. They apply to all forms usingform_consenton 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,0usesretentionDays. 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