This bundles replaces the contao build in recurrence handling with a more powerful implementation. Technically, it uses rrule-based recurrence definitions.
- allow advanced recurring rule like nth weekday of the month or weekday selection
- Migration command for existing recurring events
- Support for import event from
cgoit/contao-calendar-ical-bundle
- PHP
^8.4 - Contao
^5.6
Install via Composer:
composer require koertho/contao-advanced-repeating-events-bundleThen update the database schema in the Contao install tool or via console.
In the backend, you'll find a new field for activating recurrences replacing the old field. After activating it, you'll see the recurrence widget.
In frontend, you can use the normal event list module, but the bundles reader module for output.
If you already use Contao's legacy recurring event fields, you can migrate them to RRULE format:
php vendor/bin/contao-console are:migrate-recurrencesOptions:
--dry-runshows what would be written without changing data--overwrite-existingreplaces already stored RRULE values--limit=50restricts how many records are processed
Example:
php vendor/bin/contao-console are:migrate-recurrences --dry-runIf cgoit/contao-calendar-ical-bundle is installed, imported RRULE values are copied into the advanced recurrence fields automatically.
You can use the RecurrenceCalculator to calculate the occurrences of an event.
use Koertho\AdvancedRepeatingEventsBundle\Recurrence\RecurrenceCalculatorFactory;
function (RecurrenceCalculatorFactory $factory) {
$calculator = $factory->createForEvent($event);
$occurrences = $calculator->listOccurrencesInRange(rangeStart: new \DateTime('2024-01-01'), rangeEnd: new \DateTime('2024-12-31'), limit: 12, excludeOriginal: false);
// Returns an array of start and end dates like [['start' => 1711922400, 'end' => 1711926000], ...]
$next = $calculator->resolveCurrentOrUpcomingOccurrence();
// Returns the next occurrence as array with start and end timestamps like ['start' => 1711922400, 'end' => 1711926000]
$description = $calculator->toText();
}- The recurrence logic is based on
simshaun/recurr. - Parts of this extension are created with AI
