.. container:: .. figure:: Resources/Public/Icons/Extension.svg :alt: Extension icon Extension icon .. rubric:: TYPO3 extension ``form_consent`` :name: typo3-extension-form_consent |Coverage| |Tests| |CGL| |Latest Stable Version| |License| :package: `Packagist `__ \| :hatched_chick: `TYPO3 extension repository `__ \| :floppy_disk: `Repository `__ \| :bug: `Issue tracker `__ An extension for TYPO3 CMS that adds double opt-in functionality to EXT:form. It allows the dynamic adaptation of the entire double opt-in process using various events. In addition, the extension integrates seamlessly into TYPO3, for example to delete expired consents in compliance with the GDPR. :rocket: Features ----------------- - Custom ``Consent`` form finisher for EXT:form - Stores all submitted form data as JSON in database - System-dependent hash-based validation system (using TYPO3’s HMAC functionality) - Plugin to approve or dismiss a consent - Several events for better customization - Scheduler garbage collection task for expired consents - Dashboard widget for approved, non-approved and dismissed consents - Compatible with TYPO3 10.4 LTS and 11.5 LTS :fire: Installation ------------------- .. code:: bash composer require eliashaeussler/typo3-form-consent :zap: Usage ----------- A new finisher ``Consent`` is available in the backend form editor. It saves all submitted form data in the database and sends a corresponding mail to either approve or dismiss a given consent. A plugin is required for approval or dismiss of the consent. The associated page containing the plugin must then be specified in the finisher settings. :open_file_folder: Configuration -------------------------------- Only the TypoScript setup under ``EXT:form_consent/Configuration/TypoScript`` needs to be included and the required database changes need to be made. TypoScript ~~~~~~~~~~ The following TypoScript constants are available: +---------------------------+----------------+------------+-----------+ | TypoScript constant | Description | Required | Default | +===========================+================+============+===========+ | **``plugin.tx_formconsent | Default | :x: | ``0`` | | .persistence.storagePid`` | storage PID | | | | ** | for new | | | | | consents | | | +---------------------------+----------------+------------+-----------+ | **``plugin.tx_formconsent | Path to | :x: | – | | .view.templateRootPath``* | template root | | | | * | for consent | | | | | mail and | | | | | validation | | | | | plugin | | | +---------------------------+----------------+------------+-----------+ | **``plugin.tx_formconsent | Path to | :x: | – | | .view.partialRootPath``** | template | | | | | partials for | | | | | consent mail | | | | | and validation | | | | | plugin | | | +---------------------------+----------------+------------+-----------+ | **``plugin.tx_formconsent | Path to | :x: | – | | .view.layoutRootPath``** | template | | | | | layouts for | | | | | consent mail | | | | | and validation | | | | | plugin | | | +---------------------------+----------------+------------+-----------+ Finisher options ~~~~~~~~~~~~~~~~ The following options are available to the ``Consent`` finisher: +-----------------------+------------------+-------------+------------+ | Finisher option | Description | Required | Default | +=======================+==================+=============+============+ | **``subject``** | Mail subject | :x: | ``Approve | | | | | your conse | | | | | nt`` | +-----------------------+------------------+-------------+------------+ | **``recipientAddress` | Recipient e-mail | :white_chec | – | | `** | address | k_mark: | | +-----------------------+------------------+-------------+------------+ | **``recipientName``** | Recipient name | :x: | – | +-----------------------+------------------+-------------+------------+ | **``senderAddress``** | Sender e-mail | :x: | *System | | | address | | default | | | | | sender | | | | | e-mail | | | | | address* | +-----------------------+------------------+-------------+------------+ | **``senderName``** | Sender name | :x: | *System | | | | | default | | | | | sender | | | | | name* | +-----------------------+------------------+-------------+------------+ | **``approvalPeriod``* | Approval period | :white_chec | ``86400`` | | * | | k_mark: | (1 day), | | | | | ``0`` = | | | | | unlimited | +-----------------------+------------------+-------------+------------+ | **``showDismissLink`` | Show dismiss | :x: | ``false`` | | ** | link in consent | | | | | mail | | | +-----------------------+------------------+-------------+------------+ | **``confirmationPid`` | Confirmation | :white_chec | – | | ** | page (contains | k_mark: | | | | plugin) | | | +-----------------------+------------------+-------------+------------+ | **``storagePid``** | Storage page | :x: | ``plugin.t | | | | | x_formcons | | | | | ent.persis | | | | | tence.stor | | | | | agePid`` | +-----------------------+------------------+-------------+------------+ | **``templateRootPaths | Additional paths | :x: | – | | ``** | to template root | | | +-----------------------+------------------+-------------+------------+ | **``partialRootPaths` | Additional paths | :x: | – | | `** | to template | | | | | partials | | | +-----------------------+------------------+-------------+------------+ | **``layoutRootPaths`` | Additional paths | :x: | – | | ** | to template | | | | | layouts | | | +-----------------------+------------------+-------------+------------+ **Note:** Template paths that are configured via form finisher options are only applied to the appropriate form. They are merged with the default template paths configured via TypoScript. :gem: Credits ------------- Icons made by `Google `__ from `www.flaticon.com `__. :star: License -------------- This project is licensed under `GNU General Public License 2.0 (or later) `__. .. |Coverage| image:: https://sonarcloud.io/api/project_badges/measure?project=eliashaeussler_typo3-form-consent&metric=coverage :target: https://sonarcloud.io/dashboard?id=eliashaeussler_typo3-form-consent .. |Tests| image:: https://github.com/eliashaeussler/typo3-form-consent/actions/workflows/tests.yaml/badge.svg :target: https://github.com/eliashaeussler/typo3-form-consent/actions/workflows/tests.yaml .. |CGL| image:: https://github.com/eliashaeussler/typo3-form-consent/actions/workflows/cgl.yaml/badge.svg :target: https://github.com/eliashaeussler/typo3-form-consent/actions/workflows/cgl.yaml .. |Latest Stable Version| image:: http://poser.pugx.org/eliashaeussler/typo3-form-consent/v :target: https://packagist.org/packages/eliashaeussler/typo3-form-consent .. |License| image:: http://poser.pugx.org/eliashaeussler/typo3-form-consent/license :target: LICENSE.md