PHPackages                             jpmschuler/powermail-limits - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. jpmschuler/powermail-limits

ActiveTypo3-cms-extension[Validation &amp; Sanitization](/categories/validation)

jpmschuler/powermail-limits
===========================

TYPO3 EXT:powermail\_limits - Addition to EXT:powermail which allows limits for form submissions

v2.0.1(1y ago)39.5k↓30.4%4[1 issues](https://github.com/jpmschuler/TYPO3-powermail-limits/issues)GPL-2.0-or-laterPHPPHP ^8.0

Since May 4Pushed 9mo ago1 watchersCompare

[ Source](https://github.com/jpmschuler/TYPO3-powermail-limits)[ Packagist](https://packagist.org/packages/jpmschuler/powermail-limits)[ RSS](/packages/jpmschuler-powermail-limits/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (17)Versions (26)Used By (0)

[![TYPO3 extension powermail_limits](https://camo.githubusercontent.com/37d427ef35fe48d512e5b915d09ba037a6a09b290752895d70abdfb7eac2e8bf/68747470733a2f2f736869656c64732e696f2f656e64706f696e743f6c6162656c3d4558542675726c3d68747470733a2f2f7479706f332d6261646765732e6465762f62616467652f706f7765726d61696c5f6c696d6974732f657874656e73696f6e2f736869656c6473)](https://extensions.typo3.org/extension/powermail_limits)[![Latest TER version](https://camo.githubusercontent.com/bff1af3099f30bb40616869701b7c071f95866a9eca1882df82a21a3598e032e/68747470733a2f2f736869656c64732e696f2f656e64706f696e743f6c6162656c3d5445522675726c3d68747470733a2f2f7479706f332d6261646765732e6465762f62616467652f706f7765726d61696c5f6c696d6974732f76657273696f6e2f736869656c6473)](https://extensions.typo3.org/extension/powermail_limits)[![Latest Packagist version](https://camo.githubusercontent.com/96422920c3f892f9c6744ecf0b02a210d22e604d9de6f1617c0a6078d891f06c/68747470733a2f2f736869656c64732e696f2f7061636b61676973742f762f6a706d736368756c65722f706f7765726d61696c2d6c696d6974733f6c6162656c3d5061636b6167697374266c6f676f3d7061636b6167697374266c6f676f436f6c6f723d7768697465)](https://packagist.org/packages/jpmschuler/powermail-limits)[![Total downloads](https://camo.githubusercontent.com/b5dd75d88c7fd54b79876dabd112a1354475848f8f396d72d23c7716f160cc3d/68747470733a2f2f7479706f332d6261646765732e6465762f62616467652f706f7765726d61696c5f6c696d6974732f646f776e6c6f6164732f736869656c64732e737667)](https://camo.githubusercontent.com/b5dd75d88c7fd54b79876dabd112a1354475848f8f396d72d23c7716f160cc3d/68747470733a2f2f7479706f332d6261646765732e6465762f62616467652f706f7765726d61696c5f6c696d6974732f646f776e6c6f6164732f736869656c64732e737667)

[![Supported TYPO3 versions](https://camo.githubusercontent.com/4e5f1e567103309e9d459d90553c1300949716d72c2930d0fa8ad0cd6e47577a/68747470733a2f2f736869656c64732e696f2f656e64706f696e743f6c6162656c3d7479706f332675726c3d68747470733a2f2f7479706f332d6261646765732e6465762f62616467652f706f7765726d61696c2f7479706f332f736869656c6473)](https://camo.githubusercontent.com/4e5f1e567103309e9d459d90553c1300949716d72c2930d0fa8ad0cd6e47577a/68747470733a2f2f736869656c64732e696f2f656e64706f696e743f6c6162656c3d7479706f332675726c3d68747470733a2f2f7479706f332d6261646765732e6465762f62616467652f706f7765726d61696c2f7479706f332f736869656c6473)[![Current CI health](https://github.com/jpmschuler/TYPO3-powermail-limits/actions/workflows/ci.yml/badge.svg)](https://github.com/jpmschuler/TYPO3-powermail-limits/actions/workflows/ci.yml)

EXT:powermail\_limits
=====================

[](#extpowermail_limits)

This extension allows you to set a submission limit for a TYPO3 EXT:powermail form

Compatibility
=============

[](#compatibility)

v2.x of this Extension is compatible with 12LTS

- TYPO3: ^12
- PHP: ^8.0 (tested with 8.2)
- EXT:powermail ^12.4.0

v1.x of this Extension is compatible with 11LTS

- TYPO3: ^11
- PHP: ^7.4 || ^8.0
- EXT:powermail ^10

Installation
============

[](#installation)

`composer req jpmschuler/powermail-limits`

What it does
============

[](#what-it-does)

A form gets 3 new fields

- `has submission limit`: enable and enter a max submission limit in order to enable this extension for a form
- `has waiting list`: should the form be still available after submissions are full to create a waitlist
- `show allocation percentage`: should there be an indicator for how many slots are left

After enabling a submission limit the form will get a new first "page" (or fieldset) prepended with an infobox showing there is a limit, if that limit is reached and if a waiting list exists. If however no waiting list was configured and the limit is reached only the infobox is shown and the rest of the form fields and submit won't be rendered. In case the limit was reached an additional mail will be sent to the configured recipient (probably editor responsible for the form) in order to be able to take actions.

Using a DataProcessor a field is added to the answers (thus visible in `{powermail_all}`, indicating if it is a valid submission or a waiting list submission. In case of a submission after the limit is reached the mail subject gets a prefix and the mail body gets a prefix (depending on if waiting list or not). If there is an invalid submission (e.g. opened form early, others submitted and filled limit, than late submit that old form) without an waiting list the mail record is marked hidden.

For forms without a waiting list you can disable or delete mails in the backend to make slots free again. For forms with a waiting list the limit will be counted by all non-disabled mails. Thus, probably you don't want to disable duplicates after the first waiting list registration was done, until the form goes offline. Contacting the applicants to move them from waiting list to valid slot is not done via the extension, but deemed a manual process, done after the form was disabled e.g. based on a CSV export.

Labels and Overrides
====================

[](#labels-and-overrides)

All labels are currently locally managed and available in `en` and `de`. Thus, they can easily be overridden. The indictator is calculated in 10percent rounded-down steps, so e.g. if there are 87% of slots filled, the label for 80 is shown. This allows a bit of transparency without telling everybody that nobody registered for that 2000 participants event or without telling everybody you really had only 8 slots.

```
form.submissionspercentage.0: enough free slots
form.submissionspercentage.10: enough free slots
form.submissionspercentage.20: enough free slots
form.submissionspercentage.30: enough free slots
form.submissionspercentage.40: enough free slots
form.submissionspercentage.50: enough free slots
form.submissionspercentage.60: still slots available
form.submissionspercentage.70: still slots available
form.submissionspercentage.80: still slots available
form.submissionspercentage.90: Warning! Only a few slots available

```

ToDo
====

[](#todo)

- override backend module mail entry subject (currently the invalid and waitlist prefixes aren't saved)
- override answer page with visual warning prefix
- add backend powermail module deep link to limit reached mail

Preview
=======

[](#preview)

Infobox as first element in form
--------------------------------

[](#infobox-as-first-element-in-form)

[![image](./Resources/Private/Images/valid-form-0percentWithWait.png)](./Resources/Private/Images/valid-form-0percentWithWait.png)[![image](./Resources/Private/Images/valid-form-90percent.png)](./Resources/Private/Images/valid-form-90percent.png)[![image](./Resources/Private/Images/waitlist-form.png)](./Resources/Private/Images/waitlist-form.png)[![image](./Resources/Private/Images/invalid-form.png)](./Resources/Private/Images/invalid-form.png)

Dynamically added field about status
------------------------------------

[](#dynamically-added-field-about-status)

[![image](./Resources/Private/Images/valid-answer.png)](./Resources/Private/Images/valid-answer.png)[![image](./Resources/Private/Images/waitlist-answer.png)](./Resources/Private/Images/waitlist-answer.png)[![image](./Resources/Private/Images/invalid-answer.png)](./Resources/Private/Images/invalid-answer.png)

Dynamically added mail prefixes
-------------------------------

[](#dynamically-added-mail-prefixes)

[![image](./Resources/Private/Images/waitlist-mail.png)](./Resources/Private/Images/waitlist-mail.png)[![image](./Resources/Private/Images/invalid-mail.png)](./Resources/Private/Images/invalid-mail.png)

Additional mail if limit reached
--------------------------------

[](#additional-mail-if-limit-reached)

[![image](./Resources/Private/Images/limitfull-mail.png)](./Resources/Private/Images/limitfull-mail.png)

###  Health Score

39

—

LowBetter than 86% of packages

Maintenance41

Moderate activity, may be stable

Popularity30

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 98.4% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~22 days

Recently: every ~0 days

Total

23

Last Release

619d ago

Major Versions

v0.2.5 → v1.0.02023-08-08

v1.x-dev → v2.0.02024-09-06

PHP version history (3 changes)v0.1.3PHP ^7.4 || ^8.0 || ^8.1

v0.2.5PHP ^7.4 || ^8.0

v2.0.0PHP ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/8e1d74d0744fde576bd5c8a9e8080e838e96a0683af58b8d40843e80721a9677?d=identicon)[jpmschuler](/maintainers/jpmschuler)

---

Top Contributors

[![jpmschuler](https://avatars.githubusercontent.com/u/12411176?v=4)](https://github.com/jpmschuler "jpmschuler (60 commits)")[![baschte](https://avatars.githubusercontent.com/u/9203613?v=4)](https://github.com/baschte "baschte (1 commits)")

###  Code Quality

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/jpmschuler-powermail-limits/health.svg)

```
[![Health](https://phpackages.com/badges/jpmschuler-powermail-limits/health.svg)](https://phpackages.com/packages/jpmschuler-powermail-limits)
```

###  Alternatives

[fluidtypo3/vhs

This is a collection of ViewHelpers for performing rendering tasks that are not natively provided by TYPO3's Fluid templating engine.

1954.1M49](/packages/fluidtypo3-vhs)[typo3/testing-framework

The TYPO3 testing framework provides base classes for unit, functional and acceptance testing.

675.0M775](/packages/typo3-testing-framework)[fluidtypo3/flux

The flux package from FluidTYPO3

152982.2k20](/packages/fluidtypo3-flux)[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

96374.6k23](/packages/friendsoftypo3-content-blocks)[brotkrueml/schema

Embedding schema.org vocabulary - API and view helpers for schema.org markup

33584.6k13](/packages/brotkrueml-schema)[pagemachine/typo3-formlog

Form log for TYPO3

23225.3k6](/packages/pagemachine-typo3-formlog)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
