Event management and registration 

Extension key

sf_event_mgt

Package name

derhansen/sf_event_mgt

Version

main

Language

en

Author

Torben Hansen & Contributors

License

This document is published under the Open Publication License.

Rendered

Sat, 14 Feb 2026 10:15:12 +0000


This extension implements an event management an registration system based on Extbase & Fluid and uses the latest technologies provided by TYPO3 CMS.


Introduction to the event management system.

Learn how to create event, speaker and location records. Additionally learn how to use the backend module and live search.

This section covers installation and setup of the extension as well as a detailled overview of available configuration options.

Learn how to extend the main extension without modifying existing code.

A collection of frequently asked questions.

Breaking changes, changelog, known problems and how to migrate from ext:seminars.

There are various ways to get support.

Various extensions improve ext:sf_event_mgt with additional features.

What does it do? 

Event management and registration is an extension for TYPO3 CMS to manage events and registrations.

Summary of features

  • Easy usage for editors
  • Registration can be activated for each event individually
  • Configurable additional fields in the registration form
  • Optional registration waitlist with move up feature when a confirmed registration is cancelled
  • Optional double or tripple opt-in for event registration
  • Optional double or tripple opt-out for event cancellation
  • Attachments in registration emails to participant and/or admin
  • iCal attachment in emails to participant
  • Configurable validity of double opt-in links
  • Cancellation configurable for each event
  • Prefill of registration fields for logged in frontend users
  • Frontend plugin to show event registrations for logged in frontend users
  • Backend administration module to manage events and registrations
  • CSV export for all registrations of an event
  • Notification module with configurable email templates to notify event participants
  • Extendable with own fields through own extension
  • Configurable template layouts for the listview
  • Configurable category menu
  • Search view for events
  • Create multiple registrations at once by a single user
  • Optionally, check the email address of registrations for uniqueness per event
  • Configurable and extendable spam checks (included honeypot, amount of links, challenge/response)
  • Optional Spam-Protection with hCaptcha and reCAPTCHA
  • Optional and configurable Rate Limit for the registration form
  • Download of iCal file for events
  • Add event to online calendar (Google, Outlook, Office 365 and Yahoo)
  • Uses TYPO3 system categories to structure events by category
  • Price options (e.g. for early bird prices)
  • Payment processing after successful registration
  • Configurable payment methods
  • Show events using the "Insert Record" Content Element
  • Flag event images for either listview, detail view or both
  • Calendar view with the possibility to navigate to the next / previous month and week
  • Console command to delete registrations of expired registrations
  • Automatic cache invalidation when an event has been changed in the backend
  • Automatic page cache lifetime calculation based on several event properties
  • A lot of PSR-14 Events to extend the extension with own functionality

Background

  • Based on Extbase and Fluid
  • Covered with many unit and functional tests
  • Actively maintained

Screenshots 

Event details

Event details

Backend administration module

Backend administration module

Individual email notifications

Send configurable email notifications to event participants

Event calendar view

Show all events for a month in a calendarview

Demo website for sf_event_mgt and addons 

A demo website to demonstrate features for sf_event_mgt and addons: 👉 https://sf-event-mgt-demo.derhansen.com/

This site showcases a fully working installation of the extension with realistic sample data. It’s a great way to see how events and registrations are presented in the frontend.

Screenshot of demo website

What You Can Explore 

Frontend Features 

  • List of upcoming events
  • Event detail page
  • Event Registration form
  • Event calendar
  • Event search page

Commercial Addons 

Updates and support 

The source code of this extension is hosted on GitHub. Please report bugs or change requests in the GitHub issue tracker

Updates will be published directly on TER and Packagist.

Free public support 

Free public support is available on the #ext-sf_event_mgt <https://typo3.slack.com/messages/ext-sf_event_mgt/> TYPO3 Slack Channel.

Please also check the FAQ section of this documentation. New articles are added on a regular basis.

Say thanks 

If you like this extension and want to say thanks, feel free to drop me an email or sponsor the development of the extension. Please also consider to support the TYPO3 community by sponsoring events, code sprints or by becoming a TYPO3 association member.

Thanks from me to: 

  • Georg Ringer for his extension "news", from where I adapted some concepts and code I use in this extension
  • Alexander Kellner for his extension "powermail", from where I adapted some concepts and code I use in this extension
  • Thies Kracht who developed the CSV export
  • Phat Hoang and Oleksandr Bachynskyi from Pixelant AB for their ideas and contributions
  • Phat Hoang from Pixelant AB for the reCAPTCHA implementation
  • Jean-François Sillen from Wikafi S.P.R.L for sponsoring the sys_category refactoring
  • Jean-François Sillen from Wikafi S.P.R.L for sponsoring the price option feature
  • W52 MarketingKommunikation GmbH for sponsoring the waitlist, user registrations frontend plugin and email attachments
  • New Communication GmbH & Co. KG for sponsoring and ideas
  • Tymoteusz Motylewski for implementing event speakers and other contributions
  • Gerd Müller from Vogt-Schild Druck AG for sponsoring organisator filtering
  • Alexander Grein from Mediaessenz for implementing the default storage Pid feature
  • Bernhard Sirlinger for adding the automatic RealURL config
  • Marc Bastian Heinrichs for adding Cache Tags in list and detail view and for implementing the checkPidOfEventRecord setting
  • Rune Piper for several code cleanups and Pull Requests
  • Haisam Zehrawi from SeminarPool GmbH for sponsoring refactoring in the CSV export
  • Stefano Kowalke for several Pull Requests
  • Manuel Munz for adding additional registration fields
  • Christoph Lehmann for several Pull Requests
  • Christoph Lehmann from networkteam GmbH for sponsoring the backport of user generated content in custom notifications.
  • Der PARITÄTISCHE Wohlfahrtsverband Hamburg e.V. for sponsoring the GDPR clean command
  • mediaconcept GmbH for sponsoring the metadata feature for events

Records 

Event records to be shown by the different plugins. Allows to configure various relations, media items and registration features.

Categories can be used to filter and sort events or to provide additional information.

Location records contain address and geocoding data an can be assigned to an event.

Organisator records contain organisator details an can be assigned to an event.

Speaker records contain speaker details an can be assigned to an event.

Learn how to create event, speaker and location records. Additionally learn how to use the backend module and live search.

A registration field is an additional field which will be shown in the registration form. Different field types are available.

A registration field value contains the field value of each registration field a user submitted during registration.

A price option can be added to an event record to allow the user to select a price during the registration process.

Events 

Events are the main record of this extension. An event contains several fields, which can be used to describe the event in detail.

General 

The general tab is used to add general information about the event like a title, start- and enddate and a description.

Event general tab

Field:

Description:

Title

Title of the event.

Top event

If checked, the event is considered as a top event

Startdate

Date and time, when the event starts.

Enddate

Date and time, when the event ends.

Teaser

The teaser for the event.

Description

The description for the event.

Additional 

The additional tab contains additional fields for the event like price, location, organiser, link and program/schedule.

Event additional tab

Field:

Description:

Price

A price for the event.

Tax Rate

The tax rate in percent for the price.

Currency

The currency for the price.

Price options

If the event has multiple prices of which the user must choose of while registering, you can define one or multiple price options. The following fields are availabe for price options.

  • Title
  • Desciption
  • Price
  • Date until the price is valid (selected date is included)

The event management will automatically output the current price if the {event.currentPrice} getter is used.

Special getters:

  • {event.activePriceOptions} - returns all valid price options
  • {event.priceOptions} - returns all price options. Use {priceOption.isValid} to decide, if the price option is selectable or not.

If an event has price options defined and registration is enabled, the user must chose one of the available price options in the registration process.

See Price option chapter for more details.

Link

A link (e.g. external link) for the event.

Program

The program/schedule for the event.

Custom text

A custom RTE text field. The field can e.g. be used to show, that event registration has ended.

Relations 

The relations tab contains fields which holds relations locations, organisators and related events.

Event related tab

Field:

Description:

Location

The location of the event choosen from the location records created.

Room

Optional field for the room, where the event happens.

Organisator

The organisator of the event choosen from the organisator records created.

Speaker

One or multiple speaker of the event.

Related events

One or more related events

Media 

The media tab contains fields which holds media-data for the event.

Event media tab

Field:

Description:

Image

One or more images. Each image can be configured to be shown either in the listview, the detailview or both.

Files

One or more files.

YouTube embed code

A YouTube embed code

Additional images

One or more additional images (e.g. images from the event).

Categories 

You can assign one or multiple categories to an event.

Event category tab

Field:

Description:

Category

One or multiple categories for the event

Registration Options 

For each event, it is possible to enable registration and to limit the amount of free places, so only a limited amount of people can participate to the event. It is also possible to allow the user to create multiple registrations at once, if the field "Max. simultaneous registrations per user" is set to a value greater than 1.

Event record (Tab: registration options)

Field:

Description:

Enable registration

Option to enable registration for the event. If enabled, users can register for participation to the event.

Allow registration until end date and time

If set, it is possible to register to an event until the event end date and time is reached.

Note, that this option has no effect, if the registration deadline is earlier than the event end date and time.

Registration start date

If set, registration is only possible after the given date.

Registration deadline

If set, registration is only possible until the given date.

Enable cancellation

Option to enable cancellation of registrations for the event. If enabled, users can cancel their registration to the event.

Cancellation deadline

If set, cancellation is only possible until the given date.

Enable automatic confirmation of event registrations

If set, new registrations for the event will automatically be confirmed regardless of the global setting settings.registration.autoConfirmation

Max. participants

The amount af max. participants. If the value is zero, there is no limitation.

Max. simultaneous registrations per user

The amount of registrations the participant can create with one single registration. If this field contains a value greater than 1, a dropdown box can be shown in the registration view where the user can select how many registrations should be created.

Enable waitlist

Option to enable a waitlist for the event, if the max. amount of registrations is reached.

Enable unique email check for registration

If set, email adresses of registrations are checked for uniqueness for the event.

Enable Payment

If checked, a user registering for an event can select available payment options.

Restrict available payment methods

If checked, the available payment methods for the event can be restricted

Selected payment methods

Selected payment methods, if "Restrict available payment methods" is checked. Custom payment methods can be added. For documentation, please refer to the Payment section in the developers manual.

Notify admin

When enabled, the administrator will receive an email for new event registrations (create/confirm)

Notify organisator

When enabled, the organisator will receive an email for new event registrations (create/confirm). The email sent will use the same template as the admin email.

Registrations 

Contains all registrations for the event. Only visible, when registration is enabled.

Event record (Tab: registrations)

Field:

Description:

Registrations

A list of participants registered to the event.

Registrations on the waitlist

A list of participants registered to the waitlist of the event. This option is only visible, when the waitlist feature is enabled for the event.

Metadata 

Contains fields related to meta tags

Event record (Tab: metadata)

Field:

Description:

Keywords

One or multiple keywords used to output the meta tag "keywords"

Description

A description used to output the meta tag "description"

Alternative title

An alternative title which either can be used as meta tag "title" or which is is used to override the page title.

Categories 

You can create categories to structure event records in the frontend (e.g. show events which belong to one or more categories)

Since the extension uses TYPO3 system categories, you create new categories by choosing "System records" -> "Category"

Locations 

Locations can be assigned to an event.

Event location record

Field:

Description:

Title

Title of the location.

Address

Address of the location

Zip

Zip of the location

City

City of the location

Country

Country of the location

Description

Description (RTE field) of the location.

Link

Link to location or link to a map (e.g. OpenStreetMap)

Latitude

Latitude of the location.

Longitude

Longitude of the location.

Organisator 

The organisator can be assigned to an event.

Event organisator record

Field:

Description:

Name

Name of the organisator.

E-Mail

E-Mail of the organisator

E-Mail signature

E-Mail signature of the organisator (can e.g. be used in email templates)

Phone

Phone of the organisator

Image

Image of the organisator

Speaker 

One or multiple speakers can be assigned to an event.

Event speaker record

Field:

Description:

Name

Name of the speaker

Job title

Job title of the speaker

Description

Description of the speaker

Image

Image of the speaker

Registrations 

If the registration option is enabled for an event, participants can register to the event. A registration contains the data the participant entered during the registration process and also some administration fields like "confirmed" or "paid".

Default fields in the registration form are:

  • Gender
  • Title
  • Firstname
  • Lastname
  • Company
  • Address
  • Zip
  • City
  • Country
  • Phone
  • E-Mail
  • Date of birth
  • Notes
  • Accept terms and conditions

Additionally, the following fields are only shown under certain conditions:

  • Amount of registrations (if Max. simultaneous registrations per user > 1)
  • Price option (only if event has price options)
  • Payment method (only if event has enabled payment)

If you need additional field in the registration form, you can add individual fields on event basis. For more information, see Registration field

Registration record

General 

The general tab contains personal data about the participant, who registered to the event

Field:

Description:

Gender

Gender of the participant

Title

Title of the participant

Firstname

Firstname of participant

Lastname

Lastname of participant

Company

Company of participant

Address

Address of participant

Zip

Zip of the participant

City

City of the participant

Country

Country of the participant

Phone

Phone of the participant

E-mail

E-mail of the participant

Date of birth

Date of birth of the participant

Accepted terms and conditions

Indicates, that the user has confirmed the terms and conditions (if field is used in template)

Notes

Notes from the participant

Registration date

The date the registration was created. This field can be edited in the backend, so you can control which registration will move up from the waitlist for the default waitlist move up process.

Additional 

The additional tab contains additional data about the registration

Field:

Description:

Frontend user

If there was a valid frontend user session at registration time, a relation to the frontend user record is saved in this field

Confirmation until

Administration field. Date/time until the registration must be confirmed. Hides automatically, when the registration has been confirmed.

Confirmed

Administration field. Will be set automatically, when the user confirms the registration.

No email notifications

It this field is set to true, the participant will not receive notifications sent by the backend module.

Amount of registrations

Read-only field which shows the number of registrations the participant has created. Only shown, if participant has created more than one registration

Parent registration

Read-only field which shows the parent registration. Only shown, if the registration depends on another registration (multiple registrations created by the same participant)

Registration waitlist

If checked, the registration is on the waitlist

Registration field values 

The registration fields tab contains all submitted registration field values.

Field:

Description:

Registration field values

List of registration field values

Payment 

The payment tab contains information about payment of the registration

Field:

Description:

Paid

Administration field used to set if the user has paid for the event

Price (when registered)

The price of the registration when the user registered to the event. This is either the field "price" from the event record or the price of the selected price option, if the event has price options.

Price Option

The price option the user selected on registration

Payment method

Selected payment method on registration

Payment reference

This field can be used by a payment extension for sf_event_mgt to store a payment reference

Registration field 

If the registration option is enabled for an event, you can use registration fields to add additional fields to the default registration form.

Registration fields

Field:

Description:

Title

Title of the field. Will be rendered as field label in the frontend

Type

Type of the registration field

Possible values:

  • Textfield (input)
  • Radiobutton
  • Checkbox
  • Textarea
  • Text
  • Divider
  • Date, Datetime or Time

Options

Options for the type "Radiobutton" and "Checkbox".

Example:

  • Option 1|value1
  • Option 2|value2

Required

If checked, field must be filled out in frontend

Placeholder

Placeholder for the field

Default value

The default value of the field

Date input mode

Only visible when the selected field type is "Date/Time".

Selects the date input mode: either 'date' (default), 'datetime' or 'time'

Please note: The default template just uses HTML5 input types. You might want to extend that to use a JavaScript datetimepicker instead.

Prefill with frontend user data

Field will be prefilled with value of selected frontend user data.

Registration field value 

If the registration option is enabled for an event and registration fields are configured for an event, the field values of each registration field are saved as a registration field value

Registration field values

Field:

Description:

Value

The data, the user entered in the registration form for the field

Value datatype

Datatype of the registration field value

Field

Relation to the registration field

Price Option 

Price options can be used to define multiple prices of which the user must choose one during the registration process. The selected price option is saved to the user registration and the price on registration is saved to a dedicated field.

If an event has price options defined and registration is enabled, the user must chose one of the available price options in the registration process.

Price options can be limited to one or multiple frontend user groups and can be used with the TYPO3 start/stop fields in order to show/hide a price option on a specific date.

When a registration is saved, the price option and the price option price is saved to a dedicated field of the registration record.

Price options

Field:

Description:

Title

Title of the price option.

Description

Description of the price option.

Price

The price of the price option

Tax Rate

The tax rate in percent for the price.

Date until the price is valid (includes selected date)

A date, until the price option is considered as valid and selectable in the registration process.

Backend functionality 

Use this module to create or edit event records, locations, organisators or speakers.

Learn how to use the live search.

Backend module 

Open the the backend module "Events" from the TYPO3 backend menu and next select a sysfolder containing your events.

To filter in the list of events, use the 3 search-fields title, startdate and enddate.

Available actions 

The backend module contains 5 actions in the upper left.

Actions of the backend module
  • The first 4 actions creates new items (event, location, organisator, speaker)
  • The last action does the same as the cronjob, it hides/removes expired registrations

CSV export 

With the backend module, you can export a list of participants for events, which are enabled with the registration option. If the list of fields exported does'nt fit your needs, you can adjust the fields in the module TypoScript settings as described in the configuration section of this extension.

Sending custom notification 

For events which are enabled with the registration option, you can also send custom email notification to the participants of the event. Press the "+" icon to get to the view, where you can select the custom notification template.

Actions of the backend module

If you want to create a custom notification, you just need to add some TypoScript and a Fluid template for the new custom notification. Please refer to the manual in the administration section of this extension.

For Administrators 

Installation 

  1. Install this extension

    • Composer mode: composer require derhansen/sf_event_mgt
    • Classic mode: Install the extension with the extension manager
  2. Configuration

    • Include the static TypoScript configuration Event management and registration (sf_event_mgt) in your TypoScript template
    • Configure extension TypoScript settings depending on your needs.
  3. Create initial content

Extension settings 

Some general settings can be configured in the Extension Configuration.

  1. Go to Admin Tools > Settings > Extension Configuration
  2. Choose sf_event_mgt

Records 

Slug behaviour slugBehaviour 

slugBehaviour

slugBehaviour
Type

string, keyword

Default

unique

Choose one of the following slug behaviours:

uniqueInSite
The same slug can be used for news in different sites. Use this setting only if no event records are shared between sites.
unique
The same news title in different sites will lead to different slug names.

E-Mail 

Use FluidEmail for email notifications useFluidEmail 

useFluidEmail

useFluidEmail
Type

bool

Default
If active, all notifications generated by the extension will be sent using

FluidEmail.

Note, that the body content of the email is rendered using the internal FluidRenderingService and then send using the TYPO3 system email layout. So if you want to change the email content, the templates in Resources/Private/Notification/ must be overwritten.

Payment 

Enable payment method 'invoice' enableInvoice 

enableInvoice

enableInvoice
Type

bool

Default

1

Enable payment method 'invoice'

Enable payment method 'transfer' enableTransfer 

enableTransfer

enableTransfer
Type

bool

Default

1

Enable payment method 'transfer'

Backend 

Hide registrations in event record by limit hideInlineRegistrations 

hideInlineRegistrations

hideInlineRegistrations
Type

bool

Default

Enable feature to hide registrations when editing an event in the backend

Hide registrations in event record by limit hideInlineRegistrationsLimit 

hideInlineRegistrationsLimit

hideInlineRegistrationsLimit
Type

int

Default

500

Max amount of registrations to display before event registrations will be hidden when editing an event.

List view, Detail view, Registration view, Calendar view, Search view 

Since some plugins use the same settings, this section covers the settings for the following plugins:

  • List view
  • Detail view
  • Registration view
  • Calendar view
  • Search view

Nearly all important settings can be made through the plugins, which override the settings made with TypoScript.

Tab settings 

Display Mode 

displayMode

displayMode
Type

string

Default

all

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

With this setting, the plugin can be configured to show all events, only future or only past events.

Available options:

  • all
  • future
  • current_future
  • past
  • time_restriction

Show a Single Event Record 

singleEvent

singleEvent
Type

int

Default
Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Detail, Registration

The detail view will show the configured event record if no event is passed to the detail or registration action by parameter. Can be used to display a single event on a page without the need to link to the detail or registration page from a list view.

Allow preview of hidden event records 

previewEvent

previewEvent
Type

int

Default
Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Detail

If set, hidden event records are displayed. Be aware to secure the page (e.g. set page visibility to "hidden") as this page could be called by anyone using any event record uid to see its content.

Sort By 

orderField

orderField
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

Defines which field should be used for sorting events in the frontend.

Sorting Direction 

orderDirection

orderDirection
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

Defines the sorting direction for orderField.

Possible values:

  • (empty value)
  • asc
  • desc

Top Event Restriction 

topEventRestriction

topEventRestriction
Type

int

Default
Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

With this setting, the plugin can be configured to show only top event events, to except top events, or to ignore the top event restriction.

Available options:

  • 0 (None - ignore top event restriction)
  • 1 (Except top events)
  • 2 (Only top events)

Max Records Displayed 

queryLimit

queryLimit
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

The maximum number of records shown.

Category Mode 

categoryConjunction

categoryConjunction
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

This setting defines how categories are taken into account when selecting events.

The following options are available:

  • Ignore category selection
  • Show events with selected categories (OR)
  • Show events with selected categories (AND)
  • Do NOT show events with selected categories (NOTOR)
  • Do NOT show events with selected categories (NOTAND)

Category 

category

category
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

Restrict events to be shown by one or more categories.

Include Subcategory 

includeSubcategories

includeSubcategories
Type

int

Default
Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

Includes subcategories of the selected category.

Location 

location

location
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

Restrict events to be shown by one location.

Organisator 

organisator

organisator
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

Restrict events to be shown by one organiser.

Speaker 

speaker

speaker
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

Restrict events to be shown by one speaker.

Record Storage Page 

storagePage

storagePage
Type

int or list of ints

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar, Registration, Detail

One or more sysfolders where events are stored.

Recursive 

recursive

recursive
Type

int

Default
Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar, Registration, Detail

Recursion level for record storage page.

Comma Separated List of Field Names, Which Are Required 

registration.requiredFields

registration.requiredFields
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

List of field names that are mandatory for registration. The fields firstname, lastname, and email are always required and cannot be overridden.

The following additional fields are available:

  • title
  • company
  • address
  • zip
  • city
  • country
  • phone
  • gender
  • dateOfBirth
  • notes
  • accepttc

Note that all fields are checked if they are empty or not. If the field "accepttc" (or any other boolean field) is included in the list of required fields, it is checked if the field value is true.

Tab additional 

Detail Page 

detailPid

detailPid
Type
int
Default
0
Path
plugin.tx_sfeventmgt.settings
Scope
Plugin, TypoScript Setup
Plugin
List, Search, Calendar, Registration, Detail

Page where the plugin is configured to show event details.

List Page 

listPid

listPid
Type

int

Default
Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar, Registration, Detail

Page where the list view for events is shown. Only available when the plugin is configured to show event details.

Registration Page 

registrationPid

registrationPid
Type
int
Default
0
Path
plugin.tx_sfeventmgt.settings
Scope
Plugin, TypoScript Setup
Plugin
List, Search, Calendar, Registration, Detail

Page where the plugin is configured to show event registration.

Payment Page 

paymentPid

paymentPid
Type
int
Default
0
Path
plugin.tx_sfeventmgt.settings
Scope
Plugin, TypoScript Setup
Plugin
List, Search, Calendar, Registration, Detail

Page where the plugin is configured to handle payments for registration.

Restrict Foreign Records to Storage Page 

restrictForeignRecordsToStoragePage

restrictForeignRecordsToStoragePage
Type

int

Default
Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

Categories, locations, and organizers will only be loaded from the configured storage page (recursive).

Disable Override Demand 

disableOverrideDemand

disableOverrideDemand
Type

int

Default
Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

If set, the settings of the plugin can't be overridden by arguments in the URL.

Tab template 

Template Layout 

templateLayout

templateLayout
Type
string
Default
(none)
Path
plugin.tx_sfeventmgt.settings
Scope
Plugin, TypoScript Setup
Plugin
List, Search, Calendar, Registration, Detail

With this setting, the plugin can be configured to show different template layouts.

  • Template layouts can be configured with Page TSConfig.
  • Template layout can be used/set by TypoScript (settings.templateLayout)

Tab notification 

Notification Configuration 

notification.senderEmail

notification.senderEmail
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Email address of emails sent to the user. This should be the email address of the site admin or a general information email address. The user will see this email address as sender.

notification.senderName

notification.senderName
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Name of the sender.

notification.replyToEmail

notification.replyToEmail
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Reply-to email address of emails sent to the user. Default: empty

notification.adminEmail

notification.adminEmail
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

E-Mail address(es) of website admin(s) who receive new/confirmed registrations. Multiple E-Mail addresses must be separated with a comma.

notification.registrationNew.userSubject

notification.registrationNew.userSubject
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Subject of email sent to the user when a new registration is created.

notification.registrationWaitlistNew.userSubject

notification.registrationWaitlistNew.userSubject
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Subject of email sent to the user when a new registration on the waitlist is created.

notification.registrationNew.adminSubject

notification.registrationNew.adminSubject
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Subject of email sent to the admin when a new registration is created.

notification.registrationWaitlistNew.adminSubject

notification.registrationWaitlistNew.adminSubject
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Subject of email sent to the admin when a new registration on the waitlist is created.

notification.registrationConfirmed.userSubject

notification.registrationConfirmed.userSubject
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Subject of email sent to the user when a registration has been confirmed.

notification.registrationWaitlistConfirmed.userSubject

notification.registrationWaitlistConfirmed.userSubject
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Subject of email sent to the user when a registration on the waitlist has been confirmed.

notification.registrationConfirmed.adminSubject

notification.registrationConfirmed.adminSubject
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Subject of email sent to the admin when a registration has been confirmed.

notification.registrationWaitlistConfirmed.adminSubject

notification.registrationWaitlistConfirmed.adminSubject
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Subject of email sent to the admin when a registration on the waitlist has been confirmed.

notification.registrationCancelled.userSubject

notification.registrationCancelled.userSubject
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Subject of email sent to the user when a registration has been cancelled.

notification.registrationCancelled.adminSubject

notification.registrationCancelled.adminSubject
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

Registration

Subject of email sent to the admin when a registration has been cancelled.

Tab category menu 

Categories Configuration 

categoryMenu.categories

categoryMenu.categories
Type

list of strings

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

A subset of categories that will be shown in the category menu. If empty, all categories will be shown.

categoryMenu.includeSubcategories

categoryMenu.includeSubcategories
Type

int

Default
Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

Includes subcategories of selected categories in the category menu.

categoryMenu.orderField

categoryMenu.orderField
Type

string

Default

title

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

Order field for the category menu (internally limited to "title", "uid", and "sorting").

categoryMenu.orderDirection

categoryMenu.orderDirection
Type

string

Default

asc

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Plugin

List, Search, Calendar

Order direction for the category menu.

Frontend user registrations 

The plugin is both used to output a list- and a detail view.

Nearly all important settings can be made through the plugin, which override the settings made with TypoScript. All plugin settings can also be configured with TypoScript (use plugin.tx_sfeventmgt.settings. with the keys shown below).

Tab settings 

Display mode 

userRegistration.displayMode

userRegistration.displayMode
Type

string

Default

all

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

With this setting, the plugin can be configured to show registrations for all events, only future or only past events.

Available options:

  • all
  • future
  • current_future
  • past
  • time_restriction

Sort by 

userRegistration.orderField

userRegistration.orderField
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Defines which field should be used for sorting events in the frontend.

Possible values:

  • event.title
  • event.startdate
  • event.enddate

Sorting direction 

userRegistration.orderDirection

userRegistration.orderDirection
Type

string

Default

(none)

Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Defines the sorting direction for orderField.

Possible values:

  • (none)
  • asc
  • desc

Registration pid 

registrationPid

registrationPid
Type
int
Default
0
Path
plugin.tx_sfeventmgt.settings
Scope
Plugin, TypoScript Setup

Page where the event plugin is configured to show event registration.

Record storage page 

userRegistration.storagePage

userRegistration.storagePage
Type

int or list of ints

Default
Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

One or more sysfolders where events and registrations are stored.

Recursive 

userRegistration.recursive

userRegistration.recursive
Type

int

Default
Path

plugin.tx_sfeventmgt.settings

Scope

Plugin, TypoScript Setup

Recursion level for record storage page.

Tab additional 

Detail Page 

detailPid

detailPid
Type
int
Default
0
Path
plugin.tx_sfeventmgt.settings
Scope
Plugin, TypoScript Setup

Page where the plugin is configured to show event details.

Registration Page 

registrationPid

registrationPid
Type
int
Default
0
Path
plugin.tx_sfeventmgt.settings
Scope
Plugin, TypoScript Setup

Page where the plugin is configured to show event registration.

Payment Page 

paymentPid

paymentPid
Type
int
Default
0
Path
plugin.tx_sfeventmgt.settings
Scope
Plugin, TypoScript Setup

Page where the plugin is configured to handle payments for registration.

Payment 

The Plugin Events and event-registration - Payment plugin should be placed on a separate TYPO3 page. You must reference the Events and event-registration plugin settings to the TYPO3 page UID if you want to use the payment plugin.

TypoScript reference 

More TypoScript settings are available on the List view, Detail view, Registration view, Calendar view, Search view page. Also make sure to check the included setup.typoscript file for available/default TypoScript settings.

plugin.tx_sfeventmgt 

view.templateRootPath 

view.templateRootPath

view.templateRootPath
Type

string

Default

Extbase default

Path to the templates. The default setting is EXT:sf_event_mgt/Resources/Private/Templates/

view.partialRootPath 

view.partialRootPath

view.partialRootPath
Type

string

Default

Extbase default

Path to the partials. The default setting is EXT:sf_event_mgt/Resources/Private/Partials/

view.layoutRootPath 

view.layoutRootPath

view.layoutRootPath
Type

string

Default

Extbase default

Path to the layouts. The default setting is EXT:sf_event_mgt/Resources/Private/Layouts/

settings.calendar.firstDayOfWeek 

settings.calendar.firstDayOfWeek

settings.calendar.firstDayOfWeek
Type

int

Default

1

First day of week 0 (Sunday) bis 6 (Saturday). The default value "1" is set to Monday.

settings.calendar.includeEventsForEveryDayOfAllCalendarWeeks 

settings.calendar.includeEventsForEveryDayOfAllCalendarWeeks

settings.calendar.includeEventsForEveryDayOfAllCalendarWeeks
Type

int

Default

1

If set, the calendar will show events for all days of all shown weeks of the calendar and not only events for the current month.

settings.calendar.showWeekNumber 

settings.calendar.showWeekNumber

settings.calendar.showWeekNumber
Type

int

Default

1

Defines if the calendar should show week numbers or not.

settings.detail.checkPidOfEventRecord 

settings.detail.checkPidOfEventRecord

settings.detail.checkPidOfEventRecord
Type

int

Default

If set, the detail view checks the incoming event record against the defined starting point(s). If those don’t match, the event record won’t be displayed.

settings.detail.imageWidth 

settings.detail.imageWidth

settings.detail.imageWidth
Type

int

Default

200

Default width of images in detail view

settings.detail.imageHeight 

settings.detail.imageHeight

settings.detail.imageHeight
Type

int

Default

(none)

Default height of images in detail view

settings.detail.isShortcut 

settings.detail.isShortcut

settings.detail.isShortcut
Type

int

Default

This setting should be set to "1" if the event should be fetched from the Content Object data. This option should only be set to "1", if events are displayed using the "Insert Record" content element

settings.registration.checkPidOfEventRecord 

settings.registration.checkPidOfEventRecord

settings.registration.checkPidOfEventRecord
Type

int

Default

If set, the registration view checks the incoming event record against the defined starting point(s). If those don’t match, the registration to the event is not possible.

settings.registration.autoConfirmation 

settings.registration.autoConfirmation

settings.registration.autoConfirmation
Type

int

Default

If set to 1, new registration will automatically be confirmed by redirecting the user to the confirmRegistration-Action.

settings.registration.deleteExpiredRegistrations 

settings.registration.deleteExpiredRegistrations

settings.registration.deleteExpiredRegistrations
Type

int

Default

If set to 1, expired registrations will be deleted by the action in the backend module. If this setting is set to false, expired registrations will just be set to hidden

Note, this setting has no effect for the cleanup CLI command.

settings.registration.formatDateOfBirth 

settings.registration.formatDateOfBirth

settings.registration.formatDateOfBirth
Type

string

Default

d.m.Y

Date format of field dateOfBirth

settings.registration.requiredFields 

settings.registration.requiredFields

settings.registration.requiredFields
Type

string

Default

empty

List of required fields in registration. The fields firstname, lastname and email are always required and cannot be overridden.

The following additional fields are available:

  • title
  • company
  • address
  • zip
  • city
  • country
  • phone
  • gender
  • dateOfBirth
  • notes
  • accepttc
  • captcha

Note, that all fields are just checked, if they are empty or not. If the field "accepttc" (or any other boolean field) is included in the list of required fields, it is checked if the field value is true.

settings.registration.linkTermsAndConditions 

settings.registration.linkTermsAndConditions

settings.registration.linkTermsAndConditions
Type

string

Default

empty

A page or an external URL that can be used in the registration template to show "Terms & Conditions"

settings.registration.prefillFields.{fieldname} 

settings.registration.prefillFields.{fieldname}

settings.registration.prefillFields.{fieldname}
Type

string

Key/value mapping for prefilling fields from fe_users table. The key-field is the fieldname in sf_event_mgt and the value-field is the fieldname in fe_users.

Default
 
  • firstname = first_name
  • lastname = last_name
  • address = address
  • zip = zip
  • city = city
  • country = country
  • email = email
  • phone = telephone

settings.registration.rateLimit.enabled 

settings.registration.rateLimit.enabled

settings.registration.rateLimit.enabled
Type

int

Default

If set to 1, the registration form will have a reate limit enabled.

settings.registration.rateLimit.limit 

settings.registration.rateLimit.limit

settings.registration.rateLimit.limit
Type

int

Default

5

Amount of successful registrations allowed in the configured timeframe, before new successful registration attempts are rate limited.

settings.registration.rateLimit.interval 

settings.registration.rateLimit.interval

settings.registration.rateLimit.interval
Type

string

Default

15 minutes

Defines the interval for which the configured limit applies.

settings.registration.rateLimit.handling 

settings.registration.rateLimit.handling

settings.registration.rateLimit.handling
Type

string

Default

flashMessage

Defines how to handle a possible rate limit. Valid values are:

  • flashMessage: Add a flash message to the message queue and forwards back to previous action.
  • httpResponse429: Returns a 429 HTTP response with a message.

The message is defined in rateLimiter.exceeded localization key.

Note: If you use the setting flashMessage, you must output <f:flashMessages /> in your registration template.

settings.waitlist.moveUp.keepMainRegistrationDependency 

settings.waitlist.moveUp.keepMainRegistrationDependency

settings.waitlist.moveUp.keepMainRegistrationDependency
Type

int

Default

If set to 1, a registration will keep the dependency to the main registration if the registration has been submitted using the simultaneous registration process. Note, that it is recommended to set this value to false (0), since cancellation of the main registration will also cancel moved up "child" registrations.

settings.confirmation.linkValidity 

settings.confirmation.linkValidity

settings.confirmation.linkValidity
Type

int

Default

3600

Validity of confirmation link in seconds

settings.confirmation.additionalVerificationStep 

settings.confirmation.additionalVerificationStep

settings.confirmation.additionalVerificationStep
Type

bool

Default

false

Defines, if the confirmation of a registration requires an additional manual verification step by the user. If active, confirmation links in emails will refer to a page, where the user has to confirm the registration by clicking a link.

settings.cancellation.additionalVerificationStep 

settings.cancellation.additionalVerificationStep

settings.cancellation.additionalVerificationStep
Type

bool

Default

false

Defines, if the cancellation of a registration requires an additional manual verification step by the user. If active, cancellation links in emails will refer to a page, where the user has to confirm the cancellation by clicking a link.

settings.notification.senderEmail 

settings.notification.senderEmail

settings.notification.senderEmail
Type
string
Default
empty

E-mail address for emails sent to user

settings.notification.senderName 

settings.notification.senderName

settings.notification.senderName
Type
string
Default
empty

Sender name for emails sent to user

settings.notification.replyToEmail 

settings.notification.replyToEmail

settings.notification.replyToEmail
Type

string

Default

empty

Reply-to email address of emails sent to the user

settings.notification.senderSignature 

settings.notification.senderSignature

settings.notification.senderSignature
Type
string
Default
empty

Signature shown in emails sent to user

settings.notification.adminEmail 

settings.notification.adminEmail

settings.notification.adminEmail
Type

string

Default

empty

Admin E-mail address

settings.notification.registrationDataAsSenderForAdminEmails 

settings.notification.registrationDataAsSenderForAdminEmails

settings.notification.registrationDataAsSenderForAdminEmails
Type

int

Default

false

If set, admin emails will be sent by the email-address and sender name (firstname and lastname) set in the registration

settings.notification.disabled 

settings.notification.disabled

settings.notification.disabled
Type

int

Default

false

If set, the email notification feature is completely disabled. This includes user and admin emails as well as user notifications from the backend.

Note, that the functionality of sending Notifications in the backend module is also disabled when this option is set to "true"

settings.notification.registrationNew.userSubject 

settings.notification.registrationNew.userSubject

settings.notification.registrationNew.userSubject
Type

string

Default

Your event registration

User-Subject for new registration

settings.notification.registrationNew.adminSubject 

settings.notification.registrationNew.adminSubject

settings.notification.registrationNew.adminSubject
Type

string

Default

New unconfirmed event registration

Admin-Subject for new registration

settings.notification.registrationNew.attachments 

settings.notification.registrationNew.attachments

settings.notification.registrationNew.attachments
Type

string

Default

empty

Attachment configuration for new unconfirmed event registrations. See E-Mail attachments

settings.notification.registrationWaitlistNew.userSubject 

settings.notification.registrationWaitlistNew.userSubject

settings.notification.registrationWaitlistNew.userSubject
Type

string

Default

Your event registration on the waitlist

User-Subject for new registration on the waitlist

settings.notification.registrationWaitlistNew.adminSubject 

settings.notification.registrationWaitlistNew.adminSubject

settings.notification.registrationWaitlistNew.adminSubject
Type

string

Default

New unconfirmed event registration on the waitlist

Admin-Subject for new registration on the waitlist

settings.notification.registrationWaitlistNew.attachments 

settings.notification.registrationWaitlistNew.attachments

settings.notification.registrationWaitlistNew.attachments
Type

string

Default

empty

Attachment configuration for new unconfirmed event registrations on the waitlist. See E-Mail attachments

settings.notification.registrationConfirmed.userSubject 

settings.notification.registrationConfirmed.userSubject

settings.notification.registrationConfirmed.userSubject
Type

string

Default

Event registration successful

User-Subject for confirmed registration

settings.notification.registrationConfirmed.adminSubject 

settings.notification.registrationConfirmed.adminSubject

settings.notification.registrationConfirmed.adminSubject
Type

string

Default

Event registration confirmed

Admin-Subject for confirmed registration

settings.notification.registrationConfirmed.attachments 

settings.notification.registrationConfirmed.attachments

settings.notification.registrationConfirmed.attachments
Type

string

Default

empty

Attachment configuration for confirmed event registrations. See E-Mail attachments

settings.notification.registrationWaitlistConfirmed.userSubject 

settings.notification.registrationWaitlistConfirmed.userSubject

settings.notification.registrationWaitlistConfirmed.userSubject
Type

string

Default

Event registration on the waitlist successful

User-Subject for confirmed registration on the waitlist

settings.notification.registrationWaitlistConfirmed.adminSubject 

settings.notification.registrationWaitlistConfirmed.adminSubject

settings.notification.registrationWaitlistConfirmed.adminSubject
Type

string

Default

Event registration on the waitlist confirmed

Admin-Subject for confirmed registration on the waitlist

settings.notification.registrationWaitlistConfirmed.attachments 

settings.notification.registrationWaitlistConfirmed.attachments

settings.notification.registrationWaitlistConfirmed.attachments
Type

string

Default

empty

Attachment configuration for confirmed event registrations on the waitlist. See E-Mail attachments

settings.notification.registrationCancelled.userSubject 

settings.notification.registrationCancelled.userSubject

settings.notification.registrationCancelled.userSubject
Type

string

Default

Event registration cancelled successful

User-Subject for cancelled registration

settings.notification.registrationCancelled.adminSubject 

settings.notification.registrationCancelled.adminSubject

settings.notification.registrationCancelled.adminSubject
Type

string

Default

Event registration cancelled

Admin-Subject for cancelled registration

settings.search.dateFormat 

settings.search.dateFormat

settings.search.dateFormat
Type
string
Default
Y-m-d

Date format for date fields in the search view

settings.search.fields 

settings.search.fields

settings.search.fields
Type
string
Default
title, teaser

Fields to be included in a query for the search view

settings.search.adjustTime 

settings.search.adjustTime

settings.search.adjustTime
Type

int

Default

true

When the setting settings.search.dateFormat is set to a date only, it is recommended to set this option to true. The time for a given startdate will be set to 00:00:00 and the time for a given enddate will be set to 23:59:59, so all events for the given dates will be found by a search.

settings.pagination.enablePagination 

settings.pagination.enablePagination

settings.pagination.enablePagination
Type
int
Default
false

If true, the list view outputs required variables to render a pagination.

settings.pagination.itemsPerPage 

settings.pagination.itemsPerPage

settings.pagination.itemsPerPage
Type
int
Default
10

Amount of items per paginated page.

settings.pagination.maxNumPages 

settings.pagination.maxNumPages

settings.pagination.maxNumPages
Type
int
Default
10

Maximum number of pages to show in the pagination.

settings.event.errorHandling 

settings.event.errorHandling

settings.event.errorHandling
Type

string

Default

showStandaloneTemplate,EXT:sf_event_mgt/Resources/Private/Templates/Event/EventNotFound.html,404

If an event for the detail and registration view is not found (e.g. is hidden or deleted), you can configure, if the plugin should redirect to the list view, show a 404 error or render the view (default) without the event data.

Possible values:

  • redirectToListView
  • pageNotFoundHandler
  • showStandaloneTemplate

The "showStandaloneTemplate" option requires a Template and optional an HTTP status code.

Example: showStandaloneTemplate,EXT:sf_event_mgt/Resources/Private/Templates/Event/EventNotFound.html,404

Note: For TYPO3 9.5, this setting has only effect when the event is not passed through GET parameters to the action (e.g. event set in plugin). For all other scenarios, the TYPO3 "sites" error handling steps in.

module.tx_sfeventmgt 

settings.csvExport.fields 

settings.csvExport.fields

settings.csvExport.fields
Type

string

Default

uid, gender, firstname, lastname, title, company, email, address, zip, city, country, registration_fields

Comma-separated list of fields to include in CSV export. Please note, that you must write the property names of the fields to export (e.g. firstname, lastname, dateOfBirth, event.title)

In order to export the values of registration fields, use "registration_fields" as fieldname. Note, that it is only possible to export all registration fields at once.

settings.csvExport.showFlashMessageForInsufficientAccessRights 

settings.csvExport.showFlashMessageForInsufficientAccessRights

settings.csvExport.showFlashMessageForInsufficientAccessRights
Type

int

Default

true

If switched on, a warning message is shown in the backend module, when a backend user does not have read/write access rights to the temp-folder of the default storage.

settings.csvExport.fieldDelimiter 

settings.csvExport.fieldDelimiter

settings.csvExport.fieldDelimiter
Type

string

Default

,

Comma-separated list delimiter

settings.csvExport.fieldQuoteCharacter 

settings.csvExport.fieldQuoteCharacter

settings.csvExport.fieldQuoteCharacter
Type

string

Default

"

Comma-separated list quote character

settings.csvExport.prependBOM 

settings.csvExport.prependBOM

settings.csvExport.prependBOM
Type

int

Default

Prepend UTF-8 BOM to export. Switch this setting on if you have problems when opening the exported CSV file with Microsoft Excel

settings.list.itemsPerPage 

settings.list.itemsPerPage

settings.list.itemsPerPage
Type

int

Default

10

Number of items to show per page in the backend module

settings.search.dateFormat 

settings.search.dateFormat

settings.search.dateFormat
Type
string
Default
d.m.Y H:i

Date format for search fields in the backend module

settings.search.fields 

settings.search.fields

settings.search.fields
Type
string
Default
title, teaser

Fields to be included in a query from the backend module

settings.notification.senderEmail 

settings.notification.senderEmail

settings.notification.senderEmail
Type
string
Default
(none)

E-mail address for emails sent to user

settings.notification.senderName 

settings.notification.senderName

settings.notification.senderName
Type
string
Default
(none)

Sender name for emails sent to user

settings.notification.senderSignature 

settings.notification.senderSignature

settings.notification.senderSignature
Type
string
Default
(none)

Signature shown in emails sent to user

settings.notification.customNotifications.{templatename} 

settings.notification.customNotifications.{templatename}

settings.notification.customNotifications.{templatename}
Type

string

Name of custom notification template. Custom notifications can be sent to all registered participants of an event in the administration module.

Example for default custom notification

Custom notifications

Each custom notification must include a title, a template, and a subject

Please refer to the default custom notification for a setup example.

Default

thanksForParticipation

settings.enabledActions.notify 

settings.enabledActions.notify

settings.enabledActions.notify
Type

int

Default

1

If set to "1", the Notify-Action / Icon is shown for events with registration enabled.

settings.enabledActions.export 

settings.enabledActions.export

settings.enabledActions.export
Type

int

Default

1

If set to "1", the Export-Action / Icon is shown for events with registration enabled.

settings.disableButtons.newEvent 

settings.disableButtons.newEvent

settings.disableButtons.newEvent
Type

int

Default

If set to "1", the "Create new event" button is disabled in the administration module.

settings.disableButtons.newLocation 

settings.disableButtons.newLocation

settings.disableButtons.newLocation
Type

int

Default

If set to "1", the "Create new location" button is disabled in the administration module.

settings.disableButtons.newOrganisator 

settings.disableButtons.newOrganisator

settings.disableButtons.newOrganisator
Type

int

Default

If set to "1", the "Create new organisator" button is disabled in the administration module.

settings.disableButtons.newSpeaker 

settings.disableButtons.newSpeaker

settings.disableButtons.newSpeaker
Type

int

Default

If set to "1", the "Create new speaker" button is disabled in the administration module.

settings.disableButtons.handleExpiredRegistrations 

settings.disableButtons.handleExpiredRegistrations

settings.disableButtons.handleExpiredRegistrations
Type

int

Default

If set to "1", the "Hide/delete expired registrations" button is disabled in the administration module.

settings.defaultSorting.orderField 

settings.defaultSorting.orderField

settings.defaultSorting.orderField
Type

string

Default

title

Defines the default field to be used for sorting. When not explicitly specified, the sorting will be based on the "title" field.

settings.defaultSorting.orderDirection 

settings.defaultSorting.orderDirection

settings.defaultSorting.orderDirection
Type

string

Default

asc

Specifies the default order direction. The default value "asc" stands for ascending order. Can be set to "desc" for descending order.

settings.pagination.enablePagination 

settings.pagination.enablePagination

settings.pagination.enablePagination
Type
int
Default
1

Determines whether pagination is enabled (1) or disabled (0). When set to "1", pagination is used to divide content into separate pages.

settings.pagination.itemsPerPage 

settings.pagination.itemsPerPage

settings.pagination.itemsPerPage
Type
int
Default
10

Specifies the number of items to display on each page when pagination is enabled. The default setting is 10 items per page.

settings.pagination.maxNumPages 

settings.pagination.maxNumPages

settings.pagination.maxNumPages
Type
int
Default
10

Sets the maximum number of pages to display in the pagination control. The default is set to 10 pages.

Page TSConfig 

The following Page TSConfig can be used with the extension.

templateLayout 

templateLayout

templateLayout
Type
array

With this setting, the plugin can be configured to show different template layouts. Template layouts can be configured as shown below:

tx_sfeventmgt.templateLayouts {
  1 = 2 column layout
  2 = Event-Slider
}
Copied!

Template layout can be used/set by TypoScript (settings.templateLayout)

module.defaultPid.tx_sfeventmgt_domain_model_event 

module.defaultPid.tx_sfeventmgt_domain_model_event

module.defaultPid.tx_sfeventmgt_domain_model_event
Type

int

This setting allows setting the default storage pid of new events generated over the backend module. To set the default storage pid for new event records, for example, to a sysfolder with the pid 20, use:

tx_sfeventmgt.module.defaultPid.tx_sfeventmgt_domain_model_event = 20
Copied!

Route Enhancers 

The following example shows a basic configuration for routes of sf_event_mgt.

Configuration:

routeEnhancers:
  EventListPlugin:
    type: Extbase
    limitToPages: [21]
    extension: SfEventMgt
    plugin: Pieventlist
    routes:
      -
        routePath: /
        _controller: 'Event::list'
      -
        routePath: '/location/{location_title}'
        _controller: 'Event::list'
        _arguments:
          location_title: overwriteDemand/location
      -
        routePath: '/speaker/{speaker_name}'
        _controller: 'Event::list'
        _arguments:
          speaker_name: overwriteDemand/speaker
      -
        routePath: '/organisator/{organisator_name}'
        _controller: 'Event::list'
        _arguments:
          organisator_name: overwriteDemand/organisator
      -
        routePath: '/category/{category_title}'
        _controller: 'Event::list'
        _arguments:
          'category_title': 'overwriteDemand/category'
    defaultController: 'Event::list'
    aspects:
      location_title:
        type: PersistedAliasMapper
        tableName: tx_sfeventmgt_domain_model_location
        routeFieldName: slug
      speaker_name:
        type: PersistedAliasMapper
        tableName: tx_sfeventmgt_domain_model_speaker
        routeFieldName: slug
      organisator_name:
        type: PersistedAliasMapper
        tableName: tx_sfeventmgt_domain_model_organisator
        routeFieldName: slug
      category_title:
        type: PersistedAliasMapper
        tableName: 'sys_category'
        routeFieldName: 'slug'
  EventDetailPlugin:
    type: Extbase
    limitToPages: [22]
    extension: SfEventMgt
    plugin: Pieventdetail
    routes:
      -
        routePath: '/{event_title}'
        _controller: 'Event::detail'
        _arguments:
          event_title: event
      -
        routePath: '/{event_title}/ical'
        _controller: 'Event::icalDownload'
        _arguments:
          event_title: event
    defaultController: 'Event::detail'
    aspects:
      event_title:
        type: PersistedAliasMapper
        tableName: tx_sfeventmgt_domain_model_event
        routeFieldName: slug
  EventRegistrationPlugin:
    type: Extbase
    limitToPages: [23]
    extension: SfEventMgt
    plugin: Pieventregistration
    routes:
      -
        routePath: '/{event_title}'
        _controller: 'Event::registration'
        _arguments:
          event_title: event
      -
        routePath: '/save-registration/{event_title}'
        _controller: 'Event::saveRegistration'
        _arguments:
          event_title: event
      -
        routePath: '/save-registration-result/{eventuid}/{reguid}/{result}/{hmac}'
        _controller: 'Event::saveRegistrationResult'
        _arguments:
          eventuid: eventuid
          reguid: reguid
          result: result
          hmac: hmac
      -
        routePath: '/confirm-registration/{reguid}/{hmac}'
        _controller: 'Event::confirmRegistration'
        _arguments:
          reguid: reguid
          hmac: hmac
      -
        routePath: '/verify-confirm-registration/{reguid}/{hmac}'
        _controller: 'Event::verifyConfirmRegistration'
        _arguments:
          reguid: reguid
          hmac: hmac
      -
        routePath: '/cancel-registration/{reguid}/{hmac}'
        _controller: 'Event::cancelRegistration'
        _arguments:
          reguid: reguid
          hmac: hmac
      -
        routePath: '/verify-cancel-registration/{reguid}/{hmac}'
        _controller: 'Event::verifyCancelRegistration'
        _arguments:
          reguid: reguid
          hmac: hmac
    defaultController: 'Event::registration'
    requirements:
      eventuid: \d+
      reguid: \d+
      result: '[0-9]'
      hmac: '^[a-zA-Z0-9]{40}$'
    aspects:
      eventuid:
        type: PersistedAliasMapper
        tableName: tx_sfeventmgt_domain_model_event
        routeFieldName: uid
      reguid:
        type: PersistedAliasMapper
        tableName: tx_sfeventmgt_domain_model_registration
        routeFieldName: uid
      event_title:
        type: PersistedAliasMapper
        tableName: tx_sfeventmgt_domain_model_event
        routeFieldName: slug
  EventCalendarPlugin:
    type: Extbase
    limitToPages: [59]
    extension: SfEventMgt
    plugin: Pieventcalendar
    routes:
      -
        routePath: /
        _controller: 'Event::calendar'
      -
        routePath: '/{year}/month/{month}'
        _controller: 'Event::calendar'
        _arguments:
          'month': 'overwriteDemand/month'
          'year': 'overwriteDemand/year'
        requirements:
          month: '\d+'
          year: '\d+'
      -
        routePath: '/{year}/week/{week}'
        _controller: 'Event::calendar'
        _arguments:
          'week': 'overwriteDemand/week'
          'year': 'overwriteDemand/year'
        requirements:
          week: '\d+'
          year: '\d+'
    defaultController: 'Event::calendar'
    aspects:
      month:
        type: StaticRangeMapper
        start: '1'
        end: '12'
      week:
        type: StaticRangeMapper
        start: '1'
        end: '53'
      year:
        type: StaticRangeMapper
        start: '2000'
        end: '2030'
Copied!

Note, that some requirements are too loose (e.g. eventuid, reguid) and can not be simplified, so therefore a cHash parameter will be added to the route automatically.

The extension also extends sys_category with a slug field the same way as ext:news does. Please note, that the overwriteDemand/category argument is a string, which can contain multiple category UIDs. When you use the overwriteDemand for categories with only one category, the example configuration above will work. If you pass multiple, comma separated category UIDs to the overwriteDemand/category argument, you have to implement you own routing aspect.

Site settings 

sf_event_mgt

sf_event_mgt
Label
Event Management

sf_event_mgt.templates

sf_event_mgt.templates
Label
Templates

sf_event_mgt.view.templateRootPath

sf_event_mgt.view.templateRootPath
Type
string
Label
Path of custom Fluid Templates for the extension
Category
Event Management > Templates

sf_event_mgt.view.partialRootPath

sf_event_mgt.view.partialRootPath
Type
string
Label
Path of custom Fluid Partials for the extension
Category
Event Management > Templates

sf_event_mgt.view.layoutRootPath

sf_event_mgt.view.layoutRootPath
Type
string
Label
Path of custom Fluid Layouts for the extension
Category
Event Management > Templates

sf_event_mgt.settings

sf_event_mgt.settings
Label
Settings

sf_event_mgt.notification.senderEmail

sf_event_mgt.notification.senderEmail
Type
string
Label
Sender email address
Category
Event Management > Settings

Email address for emails sent by the extension

sf_event_mgt.notification.senderName

sf_event_mgt.notification.senderName
Type
string
Label
Sender name
Category
Event Management > Settings

Name of the sender for emails sent by the extension

sf_event_mgt.notification.replyToEmail

sf_event_mgt.notification.replyToEmail
Type
string
Label
Reply-to email address
Category
Event Management > Settings

If defined, all outgoing emails to the user will include the given reply-to email address

sf_event_mgt.notification.adminEmail

sf_event_mgt.notification.adminEmail
Type
string
Label
Admin email address
Category
Event Management > Settings

Email address of the website/event administrator

Changing paths of the template for frontend plugins 

Please do never change templates directly in the Ressources folder of the extensions, since your changes will get overwritten by extension updates.

The easiest way to override templates is to set the following constants:

  • plugin.tx_sfeventmgt.view.templateRootPath
  • plugin.tx_sfeventmgt.view.partialRootPath
  • plugin.tx_sfeventmgt.view.layoutRootPath

Those values will automatically be added after the default paths configuration of the extension. If you prefer to configure the path-values using TypoScript setup, please refer to the example below (note the plural of the path-name):

plugin.tx_sfeventmgt {
  view {
    templateRootPaths {
      2 = EXT:sitepackage/Resources/Private/Extensions/SfEventMgt/Templates/
    }
    partialRootPaths {
      2 = EXT:sitepackage/Resources/Private/Extensions/SfEventMgt/Partials/
    }
    layoutRootPaths {
      2 = EXT:sitepackage/Resources/Private/Extensions/SfEventMgt/Layouts/
    }
  }
}
Copied!

Doing so, you can just override single files from the original templates.

Changing paths of the template for backend module 

Since TYPO3 12.4 the override functionality for backend templates has been reworked. Instead of invoking TypoScript to retrieve template paths, it is now required to use TSConfig:

templates.derhansen/sf_event_mgt.20 = derhansen/sf_event_mgt_extend_demo:Resources/Private
Copied!

Details see changelog entry

Using template layouts for listview 

Different template layouts can be configured in Page TSConfig.:

tx_sfeventmgt.templateLayouts {
  1 = 2 column layout
  2 = Event-Slider
}
Copied!

This TypoScript above defines 2 new template layouts, which will appear in the template layout selectbox in the plugin settings like shown below.

Different template layouts

The choosen template layout can be used in the fluid templates as shown below.:

<f:if condition="{settings.templateLayout} == 1">
  <f:render partial="List/Event-Slider" arguments="{eventItem: event, settings:settings}"/>
</f:if>
Copied!

Template objects 

The following objects are available in the different views.

Please have a look at the templates included with the extension, since they show many of the properties of the given objects and how to use them.

Plugin: Events and event-registration 

List view 

Object:

Description:

{events}

An object holding all events that matched the configured demand in the plugin settings

{categories}

All configured categories for the category menu (see plugin.tx_sfeventmgt.settings.categoryMenu in the List view, Detail view, Registration view, Calendar view, Search view)

{locations}

All available locations

{organisators}

All available organisators

{speakers}

All available speakers

{eventDemand}

The eventDemand object

{overwriteDemand}

The overwriteDemand object

{contentObjectData}

The current content object of the plugin

{pageData}

The current page data

Detail view 

Object:

Description:

{event}

An object holding the given event

{contentObjectData}

The current content object of the plugin

{pageData}

The current page data

Registration view 

Object:

Description:

{event}

An object holding the given event

{contentObjectData}

The current content object of the plugin

{pageData}

The current page data

Calendar view 

Object:

Description:

{events}

An array holding all events for the current calendar month

{weeks}

An array holding all events grouped by week (represented by the week number as key) and day.

{categories}

All configured categories for the category menu (see plugin.tx_sfeventmgt.settings.categoryMenu in the List view, Detail view, Registration view, Calendar view, Search view)

{locations}

All available locations

{organisators}

All available organisators

{speakers}

All available speakers

{eventDemand}

The eventDemand object

{overwriteDemand}

The overwriteDemand object

{currentPageId}

The PID of the current page

{firstDayOfMonth}

DateTime object with the first day of the current month

{previousMonthConfig}

Array with date, month and year of the previous month

{nextMonthConfig}

Array with date, month and year of the next month

{weekConfig}

Array holding the year and weeknumber for the current, previous and next week. This variable must be used to create a calendar view by week.

{contentObjectData}

The current content object of the plugin

{pageData}

The current page data

Search view 

Object:

Description:

{events}

An object holding all events that matched the configured demand in the plugin settings and the given searchdemand

{categories}

All available categories

{locations}

All available locations

{organisators}

All available organisators

{speakers}

All available speakers

{searchDemand}

The searchDemand object

{overwriteDemand}

The overwriteDemand object

{contentObjectData}

The current content object data

{pageData}

The current page data

Notification views 

The following objects can be used in notification views

Object:

Description:

{event}

An object holding the given event

{registration}

An object holding the given registration

{settings}

An array of extension settings

{hmac}

HMAC for the registration UID

{reghmac}

Appended HMAC for the registration UID

E-Mail subjects 

The following objects can be used in email subjects for event registration and custom notifications

Object:

Description:

{event}

An object holding the event for a registration

{registration}

An object holding the registration

Registration message views 

Registration message views are cancelRegistration, confirmRegistration and saveRegistrationResult

Object:

Description:

{event}

An object holding the given event

{registration}

An object holding the given registration

{failed}

If the status is failed

{titleKey}

The key of the title to use in <f:translate> viewHelper

{messageKey}

The key of the message to use in <f:translate> viewHelper

{result}

The integer value of the {messageKey} variable

iCalendar view 

The iCalendar view is used to render an iCal file which can be downloaded by the user for the given event. Please note, that the iCalendar view is a simple textfile. If you choose to extend the view, be sure that new fields are compliant with RFC 5545 https://tools.ietf.org/html/rfc5545

Object:

Description:

{event}

An object holding the given event

Plugin: Events and event-registration - FE user registrations 

List view 

Object:

Description:

{registrations}

An object holding all registrations that matched the configured demand in the plugin settings

Special Getters 

Some domain objects contain special getters which are used in templates to avoid complex fluid conditions.

Event 

The Event-Object has the following special getters

Getter:

Description:

{event.registrationPossible}

Returns, if registration for the event is possible. This getter respects if registration is enabled, if max. participants is configured/reached, if registration deadline is configured/reached and if registration deadline / event startdate is reached.

{event.freePlaces}

Returns the amount of free places for an event

{event.activePriceOptions}

Returns all active price options sorted by date ASC

{event.currentPrice}

Returns the current price of the event respecting possible price options

{event.cancellationPossible}

Returns, if cancellation for registrations of the event is possible

{event.registrationFieldsUids}

Returns an array with registration field uids

{event.registrations}

Special getter to return the amount of registrations that are saved to default language

{event.registrationsWaitlist}

Special getter to return the amount of waitlist registrations that are saved to default language

{event.endsSameDay}

Returns if the event ends on the same day

{event.images}

Returns the same ans {event.image}

{event.listViewImages}

Returns all images from {event.image} that are configured to be shown in list view

{event.firstListViewImage}

Returns the first image from {event.image} which is configured to be shown in list view

{event.detailViewImages}

Returns all images from {event.image} that are configured to be shown in detail view

{event.firstDetailViewImage}

Returns the first image from {event.image} which is configured to be shown in detail view

Viewhelpers 

The following viewhelpers can be used in you templates.

PrefillViewHelper 

This viewhelper prefills fields in the registration form with values from fe_users.

Name:

Type:

Description:

Default value:

fieldname

String

The fieldname which should be prefilled

 

prefillSettings

Array

Array of fieldname mappings to fe_users

Example:

prefillFields {
  firstname = first_name
  lastname = last_name
  customfields = custom_field_feuser
}
Copied!

Empty array

Uri.PageViewhelper 

This viewhelper does generates a link to the given page with the given arguments.

This viewhelper can be used in email templates for custom notifications, when you want to link to a given page in you TYPO3 website.

Example 1:

<e:uri.page pageUid="22" additionalParams="{tx_sfeventmgt_pieventdetail:{event: registration.event.uid, action: 'detail', controller: 'Event'}}" />
Copied!

Example 2:

<a href="{e:uri.page(
    pageUid: 123,
    additionalParams: '{tx_sfeventmgt_pieventregistration: {pluginName:\'Pieventregistration\',extensionName:\'sfeventmgt\',action:\'cancelRegistration\',controller:\'Event\',reguid: registration.uid, hmac: hmac}}',
    absolute: 1,
)}" class="button">Remove registration</a>
Copied!

Uri.OnlineCalendar 

This viewhelper renders a link which will add the given event to an online calendar of either Google, Outlook, Office 365 or Yahoo.

Available types:

  • google
  • outlook
  • office365
  • yahoo

Example:

<e:uri.onlineCalendar type="google" event="{event}" />

Copied!

Event.SimultaneousRegistrationsViewHelper 

This viewhelper renders an array of possible simultaneous registration for the given event. The viewhelper respects the max. amount of simultaneous registrations per user and also respects the amount of remaining participants for the event.

The index of the array returned starts with 1, so the resulting array can be used directly in the f:form.select viewhelper.

Example:

<f:form.select id="amountOfRegistrations" property="amountOfRegistrations" options="{e:event.simultaneousRegistrations(event: '{event}')}" />

Copied!

Format.ICalendarDateViewHelper 

Formats the given DateTime object according to rfc5545, so it can be used in the iCalendar view

Format.ICalendarDescriptionViewHelper 

Formats the given string according to rfc5545, so it can be used in the iCalendar view

Registration.Hmac 

Must be used, when the plugin Frontend user registrations is used and it should be possible for users to cancel registrations (if configured in event). See usage in UserRegistration templates.

Registration.IsRequiredField 

Can be used to show content, if a field or registration field is configured as required. See usage in Registration template and registration field partials.

Example:

<e:registration.isRequiredField settings="{settings}" fieldname="lastname">
    <span class="event-required">*</span>
</e:registration.isRequiredField>
Copied!

Validation.ErrorClass 

Can be used to show a string, when a given field or registration field has validation errors See usage in Registration template and registration field partials.

Example:

<e:validation.errorClass fieldname="email" class="my-custom-class" />
Copied!

Title 

Use this viewhelper to set the page title and indexed search title on event-detail and -registration pages.

Example:

<e:title pageTitle="{event.title}" indexedDocTitle="A custom title for indexed search"/>
Copied!

Category.Count 

Can be used to get the amount of events per category.

Example:

<e:category.count categoryUid="{category.uid}" />
Copied!

MetaTag 

Use this viewhelper to add various meta tags related to the event. The default template for the event detail view uses this viewhelper to output the meta tags "keyword", "description" and "og:title".

Example:

<e:metaTag name="keywords" content="{event.metaKeywords}" />
Copied!

Filtering the listview 

In the List view, Detail view, Registration view, Calendar view, Search view you can define criterias for the listview, so it e.g. only shows the events of a special category or for a special location. Nearly all settings affecting the demand of the shown events can be overwritten by a URL parameter called overwriteDemand.

Below follows some examples for the overwriteDemand setting:

Filter by category 

The following code snippet shows a list of links which restrict the category to be shown to the given category:

<f:for each="{categories}" as="category">
    <f:if condition="{overwriteDemand.category} == {category.uid}">
        <f:then>
            <f:link.action action="list" controller="Event" arguments="{overwriteDemand:{category: category}}" class="active">{category.title}</f:link.action>
        </f:then>
        <f:else>
            <f:link.action action="list" controller="Event" arguments="{overwriteDemand:{category: category}}">{category.title}</f:link.action>
        </f:else>
    </f:if>
</f:for>
Copied!

As all links are generated using the f:link.action viewHelper, they are fully cached.

Filter by special location properties 

It is possible to filter events by the location city and country. Using the overwriteDemand parameter is as following:

<f:link.action action="list" controller="Event" arguments="{overwriteDemand:{locationCity: 'Hamburg'}}">Show all events in Hamburg</f:link.action>

<f:link.action action="list" controller="Event" arguments="{overwriteDemand:{locationCountry: 'Germany'}}">Show all events in Germany</f:link.action>
Copied!

Filter by year, month and/or day 

It is possible to filter events by a specific year, month or day. Using the overwriteDemand parameter is as following:

<f:link.action action="list" controller="Event" arguments="{overwriteDemand:{year: '2017'}}">All events in 2017</f:link.action>

<f:link.action action="list" controller="Event" arguments="{overwriteDemand:{year: '2017', month: '10'}}">All events in october of the year 2017</f:link.action>

<f:link.action action="list" controller="Event" arguments="{overwriteDemand:{year: '2017', month: '10', day: '1'}}">All events on the 1st of october 2017</f:link.action>
Copied!

The filtering also respects events, which are in between the given filter criteria. If you for example set the filter option to filter events for the 2st of october 2017, then also an event will be shown, that start at the 1st of october and ends at the 3rd of october.

CLI Commands 

Cleanup expired registrations 

Only needed if you use registrations for events

If a new participant registers to an event, the participant must confirm the registration in a given timeframe (default 1 hour from registration time). If the participant does not confirms the registration in the given timeframe, the booked place for the event should be made available again for other participants.

In order to remove/hide expired registrations, a CLI command is available to remove/hide expired registrations.

Example with --delete option:

./typo3/sysext/core/bin/typo3 sf_event_mgt:cleanup:expired --delete
Copied!

Output:

Cleanup expired command

It is recommended to setup a scheduler task to execute the CLI command periodically.

GDPR cleanup for registrations 

Local data privacy policies may require, that you only save personal user data when needed. In order to remove personal user data of registrations including saved registration field data for expired events, a CLI command is available.

Arguments

  • days - Amount of days reduced from todays date for expired event selection.

Options

  • softDelete - If set, registration will not be deleted hard, but only flagged as deleted
  • ignoreEventRestriction - If set, simply all available registrations will be selected and deleted. Use with care!

Example:

./typo3/sysext/core/bin/typo3 sf_event_mgt:cleanup:gdpr 10
Copied!

Output

Cleanup GDPR command

It is recommended to setup a scheduler task to execute the CLI command periodically.

Custom notifications 

If you use the registration option for events, you have to possibility to send custom notifications to participants of the event. In order to do so, use the admin module to open the "Notify participants" view.

Actions of the backend module

Create an own notification 

To create an own notification, you first need to create a HTML template that will be used as the notification body. The template must be located in the following path:

Templates/Notification/User/Custom/
Copied!

In this example, I create the file MyNotification.html

You can use the following objects in your template:

  • {registration}
  • {event}
  • {settings}
  • {hmac}
  • {reghmac}
  • {customNotification}

After you created the notification template, you have to configure the new notification in the TypoScript settings of the admin module.:

module.tx_sfeventmgt {
  settings {
    notification {
      customNotifications {
        myNotification {
          title = A title for the notification
          template = MyNotification.html
          subject = A subject for the email
        }
      }
    }
  }
}
Copied!

After configuring the new notification to the TypoScript settings, you can use it to notifiy participants of the event.

Selecting the recipients of custom notifications 

If you want to send a custom notification only to a selected group of recipients (e.g. those who actually have paid for the event), you can use the "constraints" setting to limit the recipients.:

module.tx_sfeventmgt {
  settings {
    notification {
      customNotifications {
        myNotification {
          title = A title for the notification
          template = MyNotification.html
          subject = A subject for the email
          constraints {
            paid.equals = 1
          }
        }
      }
    }
  }
}
Copied!

Using the example above, only those participants will receive an email where the field "paid" equals with "1".

You can use the following conditions

  • equals
  • lessThan
  • lessThanOrEqual
  • greaterThan
  • greaterThanOrEqual

You may also combine the conditions like shown below:

module.tx_sfeventmgt {
  settings {
    notification {
      customNotifications {
        myNotification {
          title = A title for the notification
          template = MyNotification.html
          subject = A subject for the email
          constraints {
            paid.equals = 1
            confirmed.equals = 1
          }
        }
      }
    }
  }
}
Copied!

Note, that combined conditions are always combined with a logical AND statement, so custom notifications with the example settings from above will be sent to all participants, who have paid and confirmed to the event.

Also note, that the usage of conditions like shown above are rudimentary and does not cover all scenarios.

E-Mail attachments 

If the registration option is enabled for an event, participants can register to the event. The extension allows you to send emails to the participant in order to notify him, that he has registered or confirmed his registration.

The extension supports to add attachments to the following type of emails:

  • New event registration
  • New event registration on the waitlist
  • Confirmed event registration
  • Confirmed event registration on the waitlist
  • Custom notifications sent from backend (only recipient group user)

Configuring email attachments 

Attachments must be configured in TypoScript and it is possible to add attachments globally to all emails of a specific type or individual per event. Due to readability, the default TypoScript setup does not include an example configuration for email attachments.

Possible attachment configurations 

Attachment configuration can be added to the following TypoScript settings:

  • plugin.tx_sfeventmgt.settings.notification.registrationNew
  • plugin.tx_sfeventmgt.settings.notification.registrationWaitlistNew
  • plugin.tx_sfeventmgt.settings.notification.registrationConfirmed
  • plugin.tx_sfeventmgt.settings.notification.registrationWaitlistConfirmed
  • plugin.tx_sfeventmgt.settings.notification.customNotifications.your-template-name

Note, that you also need to configure the recipient group ( user or admin).

Properties for attachment configuration 

Property:

Data type:

Description:

Default:

fromFiles

array

Array of files located on the web storage.

empty

fromEventProperty

array

Array of property names of the event, which contains one or multiple files to be attached to the email

empty

fromRegistrationProperty

array

Array of property names of the registration, which contains one or multiple files to be attached to the email

empty

Example for new event registrations: 

plugin.tx_sfeventmgt {
  settings {
    notification {
      registrationNew {
        attachments {
          user {
            fromFiles {
              1 = fileadmin/terms-and-conditions.pdf
            }
            fromEventProperty {
              1 = files
              2 = image
            }
            fromRegistrationProperty {
              1 = registrationFiles
            }
          }
          admin {
            fromFiles {}
            fromEventProperty {}
            fromRegistrationProperty {}
          }
        }
      }
    }
  }
}
Copied!

The example above configures the attachments for emails to the user (the participant) when a new registration is created.

The fromFiles setting configures the file fileadmin/terms-and-conditions.pdf to be added to the email. If the file does not exist, it will not be added.

The fromEventProperty setting configures to add all files from the event properties files and image. Those properties are of the type \TYPO3\CMS\Extbase\Persistence\ObjectStorage and may contain fileReferences. It is also possible to use properties of the type \TYPO3\CMS\Extbase\Domain\Model\FileReference

The configuration ot the fromRegistrationProperty setting is similar to the fromEventProperty setting. In the example above, the property registrationFiles will be used. Note, that the registration model of the extension does not contain any default fields that can be used as attachments, so you have to add your own if you need them.

iCal attachment 

Configuration of an iCal attachment is similar to the configuration of attachments (see above). The only difference is, that the iCal attachment is only supported for the recipient group user

Properties for attachment configuration 

Property:

Data type:

Description:

Default:

iCalFile

boolean

If set, a iCal file for the event will be attached to the user email

empty

Example for new event registrations: 

plugin.tx_sfeventmgt {
  settings {
    notification {
      registrationNew {
        attachments {
          user {
            iCalFile = 1
          }
        }
      }
    }
  }
}
Copied!

In the example above, emails for new user registrations will include an iCal file for the event.

Email attachments using PSR-14 Events 

If the TypoScript configuration settings for email attachments do not fulfill your requirements, you can use the ModifyUserMessageAttachmentsEvent Event to add custom attachments using PHP (see PSR-14 Events)

RSS feed 

This section describes how you add a RSS feed for the list of events. The implementation of the RSS feed in sf_event_mgt is similar to the RSS feed implementation in the news extension from Georg Ringer. Many parts of the RSS feed documentation are taken from his extension with small modifications to fit sf_event_mgt.

The template for the RSS feed can be found in the file Resources/Private/Templates/Event/List.xml To configure sf_event_mgt to use this template, simply set the format of the output als shown below:

plugin.tx_sfeventmgt.settings.list.format = xml
Copied!

RSS feeds by using a plugin 

If you want to use the sf_event_mgt plugin to configure the settings of your RSS feed, then just configure the event plugin as if you are creating a list view (set startin point, categories, detail page, ...)

Next, add a new TypoScript template to the page and insert the following TypoScript to the setup section

page = PAGE
page.10 < styles.content.get

config {
   disableAllHeaderCode = 1
   xhtml_cleaning = none
   admPanel = 0

   metaCharset = utf-8
   additionalHeaders = Content-Type:application/rss+xml;charset=utf-8
   additionalHeaders.10.header = Content-Type:application/rss+xml;charset=utf-8
   disablePrefixComment = 1
}

# set the format
plugin.tx_sfeventmgt.settings.list.format = xml

# delete content wrap
tt_content.stdWrap >
tt_content.stdWrap.editPanel = 0
Copied!

Important If the sf_event_mgt plugin is located in different column than default (0), you need to extend the TypoScript as following:

page.10.select.where = colPos=1
Copied!

RSS feed configuration 

Don't forget to configure the RSS feed properly as the sample template won't fulfill your needs completely. Please look up the constants and change the mentioned settings.

plugin.tx_sfeventmgt {
    rss.channel {
        title = Feed title
        description =
        link = http://domain.tld/
        language = en-gb
        copyright = TYPO3 Event management and registration
        category =
        generator = TYPO3 EXT:sf_event_mgt
    }
}
Copied!

Spam Prevention 

The registration form of the extension may be target of spam bots, which submit the form with various data. Besides the fact, that this may require manual work to delete all spam submissions from the database, it may even be a bigger problem for events with a fixed amount of free places, when spam bots registrations block valid user registrations.

The extension offers possibilities to reduce the amount of spam in the registration form to a minumum:

Configurable and extendable spam check 

It is possible to configure spam checks which are executed on form submission. A configurable max spam score is used to determine, if a form submission is considered as spam or not. Each spam check can increase the total spam score by a configurable amount.

Configuration 

The configuration is (hopefully) self explaining.

The spam check can be enabled or disabled using Typoscript.:

plugin.tx_sfeventmgt.settings.registration {
  spamCheck {
    enabled = 1
    maxSpamScore = 10
    checks {
      honeypot {
        enabled = 0
        name = Honeypot field check
        class = DERHANSEN\SfEventMgt\SpamChecks\HoneypotSpamCheck
        increaseScore = 10
          configuration {
            renderAsHiddenField = 0
          }
        }
    }
  }
}
Copied!

To enable the spam check, plugin.tx_sfeventmgt.settings.registration.spamCheck.enabled = 1 must be set. Next, each spam check must be activated and configured to your needs.

The honeypot spam check 

This check adds a field (either invisible input field or a hidden form field) to the registration form. If the field is filled out, it is very likely that the form submission is spam. Therefore you should configure a high increaseScore, so the spam check as a whole already is considered as failed when this check fails.

Example template:

<f:if condition="{spamSettings.checks.honeypot.configuration.renderAsHiddenField} == 1">
  <f:then>
      <f:form.hidden property="hp{event.uid}" additionalAttributes="{autocomplete: 'hp{event.uid}'}" />
  </f:then>
  <f:else>
      <f:form.textfield property="hp{event.uid}" additionalAttributes="{autocomplete: 'hp{event.uid}', aria-hidden: 'true'}" tabindex="-1" style="display:none !important" />
  </f:else>
</f:if>
Copied!

If this spam check is configured and the field is not submitted (missing in POST parameters), the check is also considered as failed.

The challenge/response spam check 

This check adds a hidden input field to the registration form. The check expect a specific value to be submitted in the hidden input field. If this value is not present, the check is considered failed.

The spam check has the following configuration options:

challengeResponse {
  enabled = 0
  name = Challenge/Response check (JavaScript required) using ROT13 encryption/obfuscation
  class = DERHANSEN\SfEventMgt\SpamChecks\ChallengeResponseSpamCheck
  increaseScore = 10
  configuration {
    prefix = SfEventMgt
    postfix = TYPO3
  }
}
Copied!

The spam check calculates a challenge consisting of the configured pre- and postfix and a hmac which includes the uid of the event. This challenge is added as data-attribute to the hidden form field.

The check expects the challenge to be returned ROT13 encrypted/encoded. There is a plain vanilla JavaScript script in Resources/Public/JavaScript/cr-spamcheck.js that does the job for you, if you use the included partial for the spam checks of the extension. The required JavaScript file is automatically included, when the challengeResponse check is activated.

Creating a custom spam check 

It is also possible to create custom spam checks. To do so, just add an own configuration array to the checks array and implement your check as a class that extends \DERHANSEN\SfEventMgt\SpamChecks\AbstractSpamCheck

Please refer to the existing spam checks in the extension for details.

Configurable captcha field 

The extension support 2 captcha Services:

Configuration 

Both hCaptcha and Google reCAPTCHA require API credentials, so the captcha can be check against an API. The API credentials must be added as TypoScript constants (see example below).

TypoScript Constants:

plugin.tx_sfeventmgt {
  settings {
    registration {
      captcha {
        enabled = 0
        type = hCaptcha
        hCaptcha {
          publicKey =
          privateKey =
        }
        reCaptcha {
          siteKey =
          secretKey =
        }
      }
    }
  }
}
Copied!

TypoScript Setup:

plugin.tx_sfeventmgt {
  settings {
    registration {
      requiredFields = captcha
    }
  }
}
Copied!

In order to use one of the captcha services, the following must be fullfilled:

  • Obtain API keys for either hCaptcha or Google reCAPTCHA service
  • Enable the captcha check in TypoScript constant plugin.tx_sfeventmgt.settings.registration.captcha.enabled = 1
  • Set the type of captcha service you use in TypoScript constant plugin.tx_sfeventmgt.settings.registration.captcha.type = 1
  • Add the API credentials to TypoScript constants in the associated section for the captcha service

Seo Sitemap 

With TYPO3 9.5+ it is possible to generate a XML sitemap for extensions using the SEO extension included in the TYPO3 core.

The example below shows a XML Sitemap configuration for sf_event_mgt:

plugin.tx_seo.config {
  xmlSitemap {
    sitemaps {
      events {
        provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
        config {
          table = tx_sfeventmgt_domain_model_event
          sortField = tstamp
          lastModifiedField = tstamp
          pid = <event-record-pid>
          recursive = 1
          url {
            pageId = <detail-pid>
            fieldToParameterMap {
              uid = tx_sfeventmgt_pieventdetail[event]
            }
            additionalGetParameters {
              tx_sfeventmgt_pieventdetail {
                controller = Event
                action = detail
              }
            }
          }
        }
      }
    }
  }
}
Copied!

Note, that you must replace <event-record-pid> and <detail-pid> with your own values.

Language menu on event detail pages 

If a language menu is rendered on a detail page and the languages are configured to use a strict mode, the following snippet helps you to setup a proper menu. If no translation exists, the property available is set to false - just as if the current page is not translated.

10 = TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor
10 {
   as = languageMenu
   addQueryString = 1
}

11 = DERHANSEN\SfEventMgt\DataProcessing\DisableLanguageMenuProcessor
# comma separated list of language menu names
11.menus = languageMenu
Copied!

Default waitlist move up process 

The extension contains a built in waitlist feature to allow your users to register on a waitlist for events, where all places are taken. It is possible to automatically move up user from the waitlist either by the built in logic in the extension or by implementing a custom logic using the PSR-14 event WaitlistMoveUpEvent

How does the waitlist move up process work? 

The default automatic move up process is active, when the following conditions are met for the event:

  • "Enable cancellation" is activated
  • "Enable waitlist" is activated
  • "Automatic waitlist move up" is activated

As soon as the event is fully booked, new registration will be added to the waitlist of the event. When a registered user cancels the registration, registrations will move up from the waitlist.

Note, that the following conditions decide, if a registration will move up:

  • The registration must be confirmed
  • The registration must have a valid date in the field "Registration date"
  • The registration with the earliest "Registration date" will move up first

As soon as a registration moved up from the waitlist, the user will recieve an email, that the registration moved up.

Things to keep in mind when using the default move up process 

  • The default move up process does not execute, when registrations are removed from the event because the confirmation deadline exceeded
  • When the simultaneous registration process is used, registrations are treated separately by the default move up process. This can result in, that the main registration will be moved up, but additional may not.
  • When the simultaneous registration process is used, the dependency to the main registration will automatically be removed. This is recommended, since the cancellation of the main registration will result in the cancellation of all "connected" registrations. The TypoScript setting settings.waitlist.moveUp.keepMainRegistrationDependency can be used to keep the dependency to the main registration.
  • When the simultaneous registration process is used, moved up registrations will automatically be enabled for notification.
  • If a payment process is activated for the event, the AfterRegistrationMovedFromWaitlist event must manuelly be implemented in order to send an email with payment information (e.g. payment link) to the user who moved up.

Customizing the move up process 

If the default move up process does not fulfill your needs, you can use the PSR-14 event WaitlistMoveUpEvent to create a custom move up logic. Please refer to the code of the default move up process to see how a custom logic can be implemented.

If you implement a custom move up logic and to not want the default move up process to be executed, make sure so set $processDefaultMoveUp to false in your event listener.

LinkHandler 

LinkHandler is the synonym for making it possible for editors to create links to custom records.

Configuration for the backend 

PageTsConfig is used to configure the link browser in the backend.

TCEMAIN.linkHandler {
    tx_event {
        handler = TYPO3\CMS\Recordlist\LinkHandler\RecordLinkHandler
        label = Events
        configuration {
            table = tx_sfeventmgt_domain_model_event
            # Default storage pid
            storagePid = 26
            # Hide the page tree by setting it to 1
            hidePageTree = 0
        }

        scanAfter = page
    }
}
Copied!

Configuration for the frontend 

The links are now stored in the database with the syntax <a href="t3://record?identifier=tx_event&uid=123">A link</a>. By using TypoScript, the link is transformed into an actual link.

config.recordLinks {
    tx_event {
        typolink {
            parameter = 29
            additionalParams.data = field:uid
            additionalParams.wrap = &tx_sfeventmgt_pieventdetail[action]=detail&tx_sfeventmgt_pieventdetail[controller]=Event&tx_sfeventmgt_pieventdetail[event]=|
        }
    }
}
Copied!

PSR-14 Events 

The extensions contains many PSR-14 events which make it possible to extend the extension with own functionality. You can for example add own variables to all views or extend email notifications by own needs.

Please note, that there is no documentation for each PSR-14 event in detail, so you have to check each event individually for supported properties. Generally I tried to make the events as self explaining as possible.

If you are new to PSR-14 events, please refer to the official TYPO3 documentation about PSR-14 events and Event Listeners.

https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/Hooks/EventDispatcher/Index.html

The following PSR-14 events are available:

Event Controller 

  • ModifyListViewVariablesEvent
  • ModifyCalendarViewVariablesEvent
  • ModifyDetailViewVariablesEvent
  • ModifyRegistrationViewVariablesEvent
  • ModifyCreateDependingRegistrationsEvent
  • ModifyConfirmRegistrationViewVariablesEvent
  • ModifyCancelRegistrationViewVariablesEvent
  • ModifySearchViewVariablesEvent
  • AfterRegistrationSavedEvent
  • AfterRegistrationConfirmedEvent
  • AfterRegistrationCancelledEvent
  • EventPidCheckFailedEvent
  • WaitlistMoveUpEvent
  • ProcessRedirectToPaymentEvent
  • ProcessCancelDependingRegistrationsEvent

Payment Controller 

  • ProcessPaymentInitializeEvent
  • ModifyPaymentRedirectResponseEvent
  • ProcessPaymentSuccessEvent
  • ProcessPaymentFailureEvent
  • ProcessPaymentCancelEvent
  • ProcessPaymentNotifyEvent
  • ProceedWithPaymentActionEvent

Administration Controller 

  • InitAdministrationModuleTemplateEvent
  • ModifyAdministrationIndexNotifyViewVariablesEvent
  • ModifyAdministrationListViewVariablesEvent

Event Repository 

  • ModifyEventQueryConstraintsEvent

Notification Service 

  • ModifyUserMessageSenderEvent
  • ModifyUserMessageAttachmentsEvent
  • AfterUserMessageSentEvent
  • ModifyAdminMessageSenderEvent
  • AfterAdminMessageSentEvent
  • ModifyCustomNotificationLogEvent

Registration Service 

  • ModifyCheckRegistrationSuccessEvent
  • AfterRegistrationMovedFromWaitlist
  • ModifyRegistrationPriceEvent

Export Service 

  • ModifyDownloadRegistrationCsvEvent

Registration Validator 

  • ModifyRegistrationValidatorResultEvent

Payment 

The extension supports custom payment methods, which can be added by creating an own extension that adds a new payment method and implement Event Listeners for the PSR-14 Events for the different payment actions. It is required, that the payment is processed by an external payment provider (e.g. Paypal payment page). Please refer to the General workflow image shown below.

It is also required, that each Event Listener uses a Fluid standalone view to render the output that will be shown in the desired payment action in sf_event_mgt

This section describes how to create your own payment solution for sf_event_mgt which makes use of the provided payment actions.

I will assume, that the new payment method is called mypaymentmethod and the extension key for the new payment method is sf_event_mgt_mypaymentmethod

General workflow 

Payment workflow

Depending on the selected payment method, the user is redirected to the payment providers payment page.

As a reference, please check this demo extension: https://github.com/derhansen/sf_event_mgt_payment_demo

1. Blank extension 

First of all you need a blank TYPO3 extension with at least an ext_emconf.php and an ext_localconf.php file.

2. Registration of payment method 

Add the following content to the file ext_localconf.php:

// Register payment provider
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['sf_event_mgt']['paymentMethods']['mypaymentmethod'] = [
    'class' => 'DERHANSEN\\SfEventMgtMypaymentmethod\\Payment\\Mypaymentmethod',
    'extkey' => 'sf_event_mgt_mypaymentmethod'
];
Copied!

3. Implement Event Listeners 

Depending on the requirements of the payment method, you should implement an Event Listener for available PSR-14 Events. You should at least implement handling of redirect, success, failure and cancel actions.

The code below shows how to implement your payment method to the redirectAction PSR-14 Event of sf_event_mgt:

// Configuration/Services.yaml
services:
  Vendor\Extension\EventListener\YourListener:
    tags:
      - name: event.listener
        identifier: 'yourListener'
        event: DERHANSEN\SfEventMgt\Event\ProcessPaymentInitializeEvent
Copied!

After you registered your event listener, you can add code for your Event Listener to initialize the payment:

<?php
namespace Vendor\Extension\EventListener;

use DERHANSEN\SfEventMgt\Event\ModifyDetailViewVariablesEvent;

class YourListener
{
    public function __invoke(ModifyDetailViewVariablesEvent $modifyDetailViewVariablesEvent): void {
       // Implement your code (e.g. add variables)
       $variables = $modifyDetailViewVariablesEvent->getVariables();
       $variables['newVariable'] = 'Just testing';
       $modifyDetailViewVariablesEvent->setVariables($variables);
    }
}
Copied!

The setters in all events allow you to control the behavior of the payment process in the main extension.

4. Add payment class 

Please refer to the class AbstractPayment in sf_event_mgt for possible settings. You payment class must extend AbstractPayment and you should override/set the local $enable properties in order to enable the actions in sf_event_mgt

Please also refer to the PaymentController in sf_event_mgt to see all available PSR-14 Events.

In this example I create the class \DERHANSEN\SfEventMgtMypaymentmethod\Payment\Mypaymentmethod and add the following method.:

/**
 * Adds required HTML (for redirection) to the given values-array
 *
 * @param array $values
 * @param bool $updateRegistration
 * @param \DERHANSEN\SfEventMgt\Domain\Model\Registration $registration
 * @param ActionController $pObj
 * @return void
 */
public function renderRedirectView(&$values, &$updateRegistration, $registration, $pObj)
{
    $pluginSettings = $this->getPluginSettings();

    $view = GeneralUtility::makeInstance(StandaloneView::class);
    $view->setFormat('html');
    $view->setLayoutRootPaths($pluginSettings['view']['layoutRootPaths']);
    $view->setPartialRootPaths($pluginSettings['view']['partialRootPaths']);
    $view->setTemplateRootPaths($pluginSettings['view']['templateRootPaths']);

    // @todo - e.g. call payment providers API to initialize payment
    //
    // Make sure to multiply the price with the given amount of depending registrations
    //
    // Depending on the payment provider you may receive a redirection URL or a token
    // which can be passed to the standalone view.

    $view->assignMultiple([
        'settings' => $pluginSettings['settings'],
    ]);
    $values['html'] = $view->render();
}
Copied!

Replace the @todo section with your own code. The returned view should include some text and at least the link for the redirection. In order process automatic redirection, the view could include a JavaScript redirect to the payment providers payment page.

5. Implement methods 

Step 4 already showed how to implement one action. Feel free to implement other required actions (at least success, failure and cancel to your need.

Each PSR-14 Event enables you to update the given registration. Just set the properties of the $registration object and set $updateRegistration to true.

It is also possible to remove a registrations, if payment failed or was cancelled. Please see the corresponding PSr-14 Events for possible options.

7. Security conciderations 

Make sure that your rendered Fluid standlone views do not contain sensitive data or possibilities for Cross Site Scripting (XSS) ( values['html'] is rendered with f:format.raw).

FAQ 

The event detail page shows a 404 error 

This problem can occur in TYPO3 versions greater than 9.5.17 or 10.4.2 when the TYPO3 website has multiple sites that use a shared folder for events. If this is the case, you must configure unique slug handling in the extension settings slugBehaviour.

Why do you not include a nice CSS stylesheet? 

Because you normally customize templates/stylesheets to your needs. Therefore the extension just comes with a rudementary CSS stylesheet available in EXT:Resources/Public/Css/events_default.css which must be included manually like shown below:

page.includeCSS {
        events = EXT:sf_event_mgt/Resources/Public/Css/events_default.css
}
Copied!

Is it possible to extend events/registrations with own fields? 

Yes, since version 3.0 of the extension, you can add additional Registration field on event basis.

You can also extend sf_event_mgt with own fields (e.g. new fields for Event). I have created a demo extension, which shows how to add new fields to the event and registration domain model.

Demo Extension: https://github.com/derhansen/sf_event_mgt_extend_demo

The extension contains a short manual (README.md) how to add your own fields to existing domain models.

How do I export registered participants to a CSV file? 

Please use the CSV export action as described in Backend module section.

How do I create a custom email notification? 

A detailed description can be found in the Custom notifications section.

How do I disable specific email notifications? 

Email notifications will not be sent if the subject is empty. Since the extension provides default subjects, you need to delete them as shown below:

plugin.tx_sfeventmgt {
  settings {
    notification {
      registrationNew {
 adminSubject >
      }
    }
  }
}
Copied!

In this example, admin notifications for new registrations are disabled. Please refer to section TypoScript reference for available options.

Remember that you can also overwrite subjects in the plugin. Make sure that the corresponding subject of a notification is also empty in the plugin.

Can I add the HMAC or an appended HMAC of the registration UID to emails? 

Yes, you can use the following objects in you email templates

  • {hmac} = HMAC of uid
  • {reghmac} = appended uid+HMAC

Is it possible to filter by categories in the listview 

Yes, filtering of events by a category is possible if you pass the category to the overwriteDemand setting of the listview.:

<f:link.action action="list" controller="Event" arguments="{overwriteDemand:{category: category}}">{category.title}</f:link.action>
Copied!

This only works, if you create links with f:link.action as shown above. If you want to display the categories in a select-box, then I suggest you create a CSS only select box (e.g. UL menu)

When does {event.registrationPossible} return TRUE 

For each event, the attribute registrationPossible returns TRUE or FALSE, if registration for the event is possible. TRUE is returned, when all conditions below are fulfilled:

  • Registration option is activated for the event
  • Max participants is not reached (if max. participants > 0) or max participants is not reached and waitlist is enabled
  • Date set at registration deadline is not reached
  • Startdate of event is not reached
  • Startdate of registration is reached (if set)

Why does the extension not support recurring events? 

The user registration is one of the main features of the extension and it requires, that every event is unique in order to save registrations for a particular event. This makes it impossible to only have one event record, that has multiple recurrences.

Since there is no smart way to add recurring events to the extension without making it more complex and harder to maintain, this feature will not make it into the extension.

How can I disable double opt-in for event registration? 

You can enable autoConfirmation for new registrations as described in the TypoScript reference section. With autoConfirmation enabled, new registrations will automatically be confirmed and the user will not receive a confirmation email.

How does the simultaneous registration process work? 

If the field "Max. simultaneous registrations per user" is set to a value greater than 1 for the given event, a user is able to create multiple registrations at once. If the user in the registration view chooses to create more than one registration, there will be created the given amount of registrations in the backend for the user. All fields (e.g. firstname, lastname, email) will contain the same values.

The first registration saved is the "main registration", and all other registrations saved later will depend on the "main registration". All "dependent registrations" will automatically get the option "No email notifications" set to true, so custom notifications are only sent to the email address of the "main registration".

If automatic confirmation is turned off (default), the user has to confirm the registration by clicking a link in the confirmation email. When the user confirms the registration, all "dependent registrations" of the "main registration will automatically also be confirmed.

How can I set a default currency? 

You can set default values for many fields in TYPO3 by using TCAdefaults. To set a default value for the currency field, add the following to the Page TSConfig, which sets € as the default currency for new records:

TCAdefaults {
  tx_sfeventmgt_domain_model_event.currency = €
}
Copied!

How to make the field "Accept terms and conditions" mandatory 

The field "Accept terms and conditions" is part of the registration domain model, but it is not required during registration. To make the field required, add the field to the list of required field like shown below:

plugin.tx_sfeventmgt {
  settings {
    registration {
      requiredFields = accepttc
    }
  }
}
Copied!

How do I add my own custom translations 

You can override all language files with your own translations/labels. As an example, the following code overrides/extends the locallang_db.xlf and the locallang.xlf

Add this example code to a ext_localconf.php file (e.g. in a site package extension).:

$GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['de']['EXT:sf_event_mgt/Resources/Private/Language/locallang_db.xlf'][] = 'EXT:your_ext/Resources/Private/Language/de.custom_locallang_db.xlf';
$GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['de']['EXT:sf_event_mgt/Resources/Private/Language/locallang.xlf'][] = 'EXT:your_ext/Resources/Private/Language/de.custom_locallang.xlf';
Copied!

How can I use the overwriteDemand feature for the search view 

It is also possible to use the overwriteDemand feature for the search view in order to limit the events that the search result includes. If you for example wish to limit the search to a special category, you must pass the category UID as shown below (the value field contains the category UID).:

<f:form.textfield name="overwriteDemand[category]" value="1"/>
Copied!

How can I add pagination to the listview? 

Since version 6.0 of the extension, the list view uses the TYPO3 pagination API to provide necessary objects required.:

<f:for each="{pagination.paginator.paginatedItems}" as="event" iteration="iterator">
    <f:render partial="Event/ListItem" arguments="{_all}"/>
</f:for>
Copied!

How can I add pagination to the searchview? 

Native pagination is not supported for the searchview, since besides GET parameters also POST parameters need to be considered in order to render the pagination. Although it technically would be possible to implement this feature, it will not be includes in the extension as it is a suboptimal solution (search word as dynamic GET parameter). If you need a paginated search for events, it is recommended to use a search extension (e.g. ext:ke_search or ext:solr).

How does the payment process work 

For each event with registration enabled, you can also enable payment. If payment is enabled, you can output available payment methods for the event in the registration form. When a user registers for an event, he can select a payment method.

The extension comes with 2 default payment methods debit and transfer. Both payment methods do not include any further payment processing.

It is possible to extend the extension with own payment methods that include further payment processing (e.g. by an external payment provider).

For more information on how to add custom payment methods, see Payment section

The default payment methods are missing 

Open the extension settings in the extension manager and press the "Save" button.

Configured price options do not show up in frontend 

Make sure that the date for the price option is valid. Also make sure, that you use {event.currentPrice} in your Fluid template to output the current price.

How can I use the iCalDownload action in the Listview? 

With the following Fluid snippet, you can use the iCalDownload in the listview:

<f:link.action action="icalDownload" arguments="{event : event}" pageUid="{settings.detailPid}"><f:translate key="event.icalDownload" /></f:link.action>
Copied!

Note, that you have to set the pageUid to a page with the detail view plugin.

The category filter for the list view does not work 

The filtering also uses the overwriteDemand feature, which by default is disabled. Make sure you have unchecked the Disable overwrite demand setting in the plugin and also ensure that the category mode is not equal to Ignore category selection.

How do I show the event title as page title on the detail page? 

Either use the TYPO3 PageTitle API or you can use the title-ViewHelper of this extension.

How do I set the indexed search title for an event? 

Use the title-ViewHelper of this extension.

The Payment Plugin throws exception about missing default controller 

The page with the Payment Plugin shows the following error:

The default controller for extension "SfEventMgt" and plugin "Pipayment" can not be determined. Please check for TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin() in your ext_localconf.php
Copied!

Please delete the content element with the Payment Plugin and create a blank content element of type "Plugin" and next directly select the Payment Plugin from the plugins select box.

If the plugin originally was a plugin with Flexform settings and switchableControllerActions, those settings will remain in the database field pi_flexform and lead to the described error.

How can I move registrations on the waitlist automativally up, if a registered user cancels a registration? 

Since version 5.2.0 there is a simple and default waitlist move up process. Please refer to the documentation section about the Default waitlist move up process for further information.

If the default move up process does not fulfill your needs, you can use the PSR-14 Event WaitlistMoveUpEvent to implement your own move up logic.

Event registrations get confirmed by search engines 

Under certain conditions with extensions that create sitemaps it may happen, that a confirmation link of a registration email gets added to the sitemap and afterwards visited by a search engine crawler. This behavior has at least been seen when the extension metaseo has been used to create a sitemap.

In order to avoid the registration link from being added to the sitemap, the page with the registration plugin needs to be excluded from the sitemap, i.e. use "Exclude from sitemap" in the page settings or by other means (e.g. blacklist in EXT:metaseo).

Use https://github.com/derhansen/sf_event_mgt/issues/597 for further details/discussion.

Displaying events using the "Insert Record" content element 

If you display events using the "Insert Record" content element, you may want to use a different layout to display the event detail view. For this purpose, you can use {settings.detail.isShortcut} in the Detail.html Fluid Template to render a different layout.

How can I display JSON-LD data for events? 

If you want to to display JSON-LD data for events in the event detail view, you can add an own partial including the JSON-LD data you need. Since requirements of data in JSON-LD may vary per project, sf_event_mgt does not ship with a partial or ViewHelper to create such data.

Example Partial Code (will work until Fluid < 3.0):

<script type="application/ld+json">
   <f:format.raw>{</f:format.raw>
     "@context": "https://schema.org/",
     "@type": "Event",
     "name": "{event.title}",
     "startDate": "<f:format.date format="Y-m-d">{event.startdate}</f:format.date>",
     "location": <f:format.raw>{</f:format.raw>
       "@type": "Place",
       "name": "{event.location.title}",
       "address": <f:format.raw>{</f:format.raw>
         "@type": "PostalAddress",
         "streetAddress": "{event.location.address}",
         "addressLocality": "{event.location.city}",
         "postalCode": "{event.location.zip}",
         "addressCountry": "{event.location.country}"
         <f:format.raw>}</f:format.raw>
         <f:format.raw>}</f:format.raw>,
     "image": [
       <f:if condition="{event.image}">
       "<f:uri.image image="{event.image.0}" absolute="true"/>"
       </f:if>
      ],
     "description": "<f:format.raw>{event.description}</f:format.raw>",
     "endDate": "<f:format.date format="Y-m-d">{event.enddate}</f:format.date>",
     "offers": <f:format.raw>{</f:format.raw>
       "@type": "Offer",
       "url": "<f:uri.action action="registration" absolute="true" arguments="{event : event}" pageUid="{settings.registrationPid}"></f:uri.action>",
       "price": "{event.currentPrice}",
       "priceCurrency": "{event.currency}",
       "availability": "https://schema.org/InStock",
     <f:format.raw>}</f:format.raw>,
       "performer": <f:format.raw>{</f:format.raw>
         "@type": "PerformingGroup",
         "name": "{event.organisator.name}"
     <f:format.raw>}</f:format.raw>
  <f:format.raw>}</f:format.raw>
</script>
Copied!

Note: When using Fluid, always make sure to escape variables properly.

As an alternative, you could create an own ViewHelper which generates the required JSON-LD data.

Images for categories are not shown in the frontend? 

Categories in TYPO3 backend do not have an image by default. The TYPO3 extension ext:news by Georg Ringer adds additional fields (e.g. an image-field) to the category domain model.

If you want ext:sf_event_mgt to use the category domain model of ext:news, the category domain model of ext:sf_event_mgt needs to be overridden as shown below:

Add this to an extension (e.g. your sitepackage) in ext_localconf.php:

GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class)
    ->registerImplementation(
        \DERHANSEN\SfEventMgt\Domain\Model\Category::class,
        \GeorgRinger\News\Domain\Model\Category::class
    );
Copied!

After adding this snippet and clearing the cache, all categories in events do now use the category domain model of ext:news

Editing events is very slow having a huge amount of registrations. Can this be fixed? 

Short answer: No, not really. For TCA inline fields, TYPO3 will load all data before opening the records in the backend. So having an event with 1500 registrations will actually load all registrations before showing the edit form for the event in the TYPO3 backend. Note, that just disabling the field "registration" by TCA will not work, since TYPO3 will load the data anyway.

In order to make it at least possible to edit the event data, the extension makes it possible to hide all registration inline fields and prevent TYPO3 from loading all data when a configurable limit of registrations is reached per event.

Please refer to section Extension settings for available options.

How can I show and browse the event calendar by weeks? 

The calendar view is able to show events by week or by month. The default template contains the markup for the month view including links to browse to the previous and next month.

In order to show events by week, it is recommended to create a new template layout for the calendar view and next to use the fluid variable {weekConfig} to show events for the current week and to create previous and next week links. The default template includes an example, which is surrounded by <f:comment>

How can I preview event records while editing? 

It is possible to activate the View Button for event records.

Add the following page TSconfig to your root page. It is recommended to use a site package extension, see Official Tutorial: Site Package for this purpose.

TCEMAIN {
    preview {
        tx_sfeventmgt_domain_model_event {
            previewPageId = 91
            useDefaultLanguageRecord = 0
            fieldToParameterMap {
                uid = tx_sfeventmgt_pieventdetail[event_preview]
            }
            additionalGetParameters {
                tx_sfeventmgt_pieventdetail.controller = Event
                tx_sfeventmgt_pieventdetail.action = detail
            }
        }
    }
}
Copied!

By using the given example, a link will be generated which leads to the page with the id 91.

If a event detail plugin is placed on this page, the event will be shown. If hidden events should be shown, make sure to activate the Allow preview of hidden event records setting in the detail plugin.

Registrations get confirmed and/or cancelled by Email Security Gateways 

Some Email Security Gateways or Antivirus/Anti-Malware Software may follow links in emails. This can lead to the situation, that event registrations get confirmed and/or cancelled automatically.

The TypoScript settings settings.confirmation.additionalVerificationStep and settings.cancellation.additionalVerificationStep can be activated to avoid this problem. When active, links in emails will refer to a page, where an confirmation- or cancellation-link has to be clicked manually by the user.

The registration form does not submit 

If the registration form does not submit, it is likely, that a validation error occured. It is recommended to check all validation errors by adding the following fluid code to the registration template.

<f:form.validationResults>
  <f:if condition="{validationResults.flattenedErrors}">
    <ul class="errors">
      <f:for each="{validationResults.flattenedErrors}" as="errors" key="propertyPath">
        <li>{propertyPath}
          <ul>
          <f:for each="{errors}" as="error">
            <li>{error.code}: {error}</li>
          </f:for>
          </ul>
        </li>
      </f:for>
    </ul>
  </f:if>
</f:form.validationResults>
Copied!

Breaking Changes 

8.5.0 

In this version, to PiEventPluginUpdater introduced in version 6.0.0 has been removed, because it is not compatible with TYPO3 13.4. User of the extension updating to version 8.x must ensure to update from at least version 6.0.0 or above.

Updating from version 5.x or below to version 8.x is not supported due to several changes in the TYPO3 plugin structure. Make sure to update to at least version 6.x of the extension before updating to version 8.x.

Additionally, the database type for price fields has changed. Make sure to apply database changes. Note, that due to field change from "double" to "numeric", rounding errors may accur in very rare scenarios, where the price contains many digits after the comma. This change is however optional, but it is recommended to apply it.

8.0.0 

This version contains several breaking changes. The most relevant changes are:

  • All plugins have been migrated to content elements. It is required to execute the included update wizard. Possible content element restrictions in backend layouts or container elements must be adapted manually.
  • All existing links sent via email to registered users (e.g. confirmation- or cancellation links) have become invalid.
  • A price option must now be submitted on registration, if at least one price options has been defined in the event record.
  • Default CSV export format has changed
  • PageViewHelper (optionally used in backend context for custom notifications) has now different arguments.

Make sure, you read the release notes with instructions at https://github.com/derhansen/sf_event_mgt/releases/tag/8.0.0

7.0.0 

This version contains some minor breaking changes. The most relevant is a change to the user registration plugin, where settings.detailPid and settings.registrationPid must manually be migrated.

Make sure, you read the release notes with instructions at https://github.com/derhansen/sf_event_mgt/releases/tag/7.0.0

6.0.0 

This version contains several breaking changes. Make sure, you read the release notes with instructions at https://github.com/derhansen/sf_event_mgt/releases/tag/6.0.0

It is at least required to execute the "Migrate plugins and settings" update wizard and to apply database migrations.

Note, that manual changes (at least to existing templates) is required. For further information please refer to the change log.

5.1.0 

This version contains a breaking change which might affect users who either extended the notification module with custom code (e.g. by xclass) or who use NotificationService::sendUserMessage() in own code.

Make sure, you read the release notes with instructions at https://github.com/derhansen/sf_event_mgt/releases/tag/5.1.0

5.0.0 

This version contains several breaking changes. Make sure, you read the release notes with instructions at https://github.com/derhansen/sf_event_mgt/releases/tag/5.0.0

4.1.0 

This version contains a breaking change which requires adoption in Fluid Templates, which is important for TYPO3 websites using multiple languages.

Make sure, you read the release notes with instructions at https://github.com/derhansen/sf_event_mgt/releases/tag/4.1.0

4.0.0 

This version contains several breaking changes. Make sure, you read the release notes with instructions at https://github.com/derhansen/sf_event_mgt/releases/tag/4.0.0

3.0.0 

Category mode 

If you have restricted the events in the plugin by category, you need to define the "category mode" by opening the plugin settings and configuring the category mode. The default value of the "category mode" is to ignore the category selection, so a category selection from a previous version of the extension would be ignored now!

Youtube embed field 

The Youtube embed field has been removed. If you want to add a Youtube video to an event, use the TYPO3 core functionality to add media items to the "files" field of an event.

2.0.0 

Flexform restructuring 

Due to restructuring of the Flexform settings of the event plugin, it is required to run the update script of the extension, so existing Flexform settings (e.g. listPid, detailPid, ...) will be migrated to the new structure. Please use the update script in the extension manager to process the migration as shown below.

Extension Update Icon

Please click on the update-icon to start the category migration.

Detail-page image-width and height 

The following TypoScript needs to be migrated manually.

Old:

plugin.tx_sfeventmgt.settings {
  eventDetails {
    imageWidth = 200
    imageHeight =
  }
}

Copied!

New:

plugin.tx_sfeventmgt.settings {
  detail {
    imageWidth = 200
    imageHeight =
  }
}
Copied!

Please also update your Fluid templates, if you use the variables that changed.

1.5.0 

The removal of the local category system requires the execution of a migration script, so existing categories will get migrated to sys_category entries. Please use the update script in the extension manager to process the migration as shown below.

Extension Update Icon

Please click on the update-icon to start the category migration.

1.2.0 

Due to the new cancellation-option for registrations, you need update all plugins, which are configured to display "Registration" in the "What to display" section. Just open the plugin for edit and select "Registration" in the "What to display"-selectbox.

Known Problems 

Other known problems are listed on GitHub at https://github.com/derhansen/sf_event_mgt

If you find a bug or have a feature request for this extension, please use the issuetracker on GitHub at https://github.com/derhansen/sf_event_mgt

Migration from EXT:seminars 

We migrated an instance from EXT:seminars v2.1 to EXT:sf_event_mgt v4.3

What's included? 

  • Events
  • Registrations
  • Categories
  • Locations (multiple => single)
  • Organizers (multiple => single)
  • Speaker

We also migrated event types and target groups. The sql queries are basically the same like the category queries. You will need two more category fields in tx_sfeventmgt_domain_model_event for them.

SQL queries 

We are starting with a fresh install of sf_event_mgt so we can use ids mostly 1 to 1.

/* Organizers */
INSERT INTO tx_sfeventmgt_domain_model_organisator (uid,pid,name,email,email_signature)
SELECT
    uid,
    pid,
    title,
    email,
    email_footer,
FROM
    tx_seminars_organizers
WHERE
    deleted = 0;

/* Locations */
INSERT INTO tx_sfeventmgt_domain_model_location (uid,pid,title,address,city,description)
SELECT
    uid,
    pid,
    title,
    address,
    city,
    directions
FROM
    tx_seminars_sites
WHERE
    deleted = 0;

/* Speakers */
INSERT INTO tx_sfeventmgt_domain_model_speaker (uid,pid,name,description)
SELECT
    uid,
    pid,
    title,
    description
FROM
    tx_seminars_speakers
WHERE
    deleted = 0;

/* Description of speakers */
UPDATE tx_sfeventmgt_domain_model_speaker
SET
    description = (
        SELECT
            CONCAT(
                IF (organization!='', CONCAT(organization, '<br>'), ''),
                IF (homepage!='', CONCAT('<a href="', homepage,'">', homepage, '</a><br>'), ''),
                IF (email !='', CONCAT('<a href="mailto:', email, '">', email, '</a><br>'), ''),
                description
            )
        FROM
            tx_seminars_speakers
        WHERE
            tx_sfeventmgt_domain_model_speaker.uid = tx_seminars_speakers.uid
    );

/* Events */
INSERT INTO tx_sfeventmgt_domain_model_event (
    uid,
    pid,
    hidden,
    title,
    teaser,
    description,
    startdate,
    enddate,
    registration_deadline,
    cancel_deadline,
    enable_cancel,
    location,
    room,
    speaker,
    price,
    enable_registration,
    unique_email_check,
    max_participants,
    registration,
    enable_autoconfirm,
    enable_waitlist,
    notify_organisator
)
SELECT
    uid,
    pid,
    hidden,
    title,
    teaser,
    CONCAT(
        IF (
            subtitle!='',
            CONCAT(
                '<h2>',
                subtitle,
                '</h2>'
            ),
            ''
        ),
        description,
        additional_information
    ),
    begin_date,
    end_date,
    deadline_registration,
    deadline_unregistration,
    1, /* Enable cancellation */
    place,
    room,
    speakers,
    price_regular,
    needs_registration,
    IF(
        allows_multiple_registrations = 1,
        '0',
        '1'
    ),
    attendees_max,
    registrations,
    1, /* auto confirm registration */
    queue_size,
    1 /* notify organisator on new registration */
FROM tx_seminars_seminars
WHERE
    deleted = 0 AND
    (end_date = 0 OR end_date >= UNIX_TIMESTAMP()); /* filter out past events */

/* Events <=> Locations */
UPDATE tx_sfeventmgt_domain_model_event
    SET location = (
        SELECT
            uid_foreign
        FROM
            tx_seminars_seminars_place_mm
        WHERE
            tx_sfeventmgt_domain_model_event.uid = tx_seminars_seminars_place_mm.uid_local
        LIMIT 1 /* seminars has multiple locations, this extension has only a single location */
    );

/* Events <=> Speaker */
INSERT INTO tx_sfeventmgt_event_speaker_mm (uid_local,uid_foreign,sorting)
SELECT
    uid_local,
    uid_foreign,
    sorting
FROM tx_seminars_seminars_speakers_mm
WHERE
    uid_local IN (SELECT uid FROM tx_sfeventmgt_domain_model_event);

/* Events <=> Organizers */
UPDATE tx_sfeventmgt_domain_model_event
    SET organisator = (
        SELECT
            uid
        FROM tx_seminars_organizers
        LEFT JOIN tx_seminars_seminars_organizers_mm
            ON
                tx_seminars_seminars_organizers_mm.uid_foreign = tx_seminars_organizers.uid
        WHERE
            tx_seminars_seminars_organizers_mm.uid_local = tx_sfeventmgt_domain_model_event.uid AND
            tx_seminars_organizers.deleted = 0
        ORDER BY
            sorting ASC
        LIMIT 1 /* seminars has multiple organizers, this extension only a single organizer */
    );

/* Categories */
INSERT INTO sys_category (uid,pid,title,parent)
SELECT
    uid + 10000, /* bigger than your highest category uid */
    pid,
    title,
    823  /* Parent category for our event categories */
FROM
     tx_seminars_categories
WHERE
     deleted = 0;

/* Events <=> Categories */
INSERT INTO sys_category_record_mm (uid_local,uid_foreign,tablenames,fieldname)
SELECT
    uid_foreign + 10000,
    uid_local,
    'tx_sfeventmgt_domain_model_event',
    'category'
FROM tx_seminars_seminars_categories_mm
WHERE
    tx_seminars_seminars_categories_mm.uid_local IN (SELECT uid FROM tx_sfeventmgt_domain_model_event);

/* Registrations */
INSERT INTO tx_sfeventmgt_domain_model_registration (
    uid,
    pid,
    hidden,
    tstamp,
    crdate,
    fe_user,
    `event`,
    waitlist,
    notes,
    firstname,
    lastname,
    email,
    confirmed,
    amount_of_registrations
)
SELECT
    uid,
    pid, /* Your need to make sure registrations the same pid as event records (Inline relation) */
    hidden,
    tstamp,
    crdate,
    `user`,
    seminar,
    registration_queue,
    CONCAT(
        IF (attendees_names!='', CONCAT('Weitere Namen:\n',attendees_names,'\n\n'), ''),
        IF (interests!='', CONCAT('Interessen:\n',interests,'\n\n'), ''),
        IF (expectations!='', CONCAT('Erwartungen:\n',expectations,'\n\n'), ''),
        IF (background_knowledge!='', CONCAT('Vorkenntnisse:\n',background_knowledge,'\n\n'), ''),
        IF (known_from!='', CONCAT('Wie haben Sie von dieser Veranstaltung erfahren?\n',known_from,'\n\n'), ''),
        IF (notes!='', CONCAT('Sonstiges:\n',notes,'\n\n'), '')
    ),
    fe_users.first_name,
    fe_users.last_name,
    fe_users.email,
    1,
    seats
FROM tx_seminars_attendances
LEFT JOIN fe_users
    ON fe_users.uid=tx_seminars_attendances.user
LEFT JOIN tx_seminars_seminars ON
    tx_seminars_seminars.uid = tx_seminars_attendances.seminar
WHERE
    tx_seminars_attendances.deleted = 0 AND
    tx_seminars_seminars.deleted = 0 AND
    tx_seminars_attendances.seminar IN (
        SELECT
            uid
        FROM
            tx_sfeventmgt_domain_model_event
    );
Copied!

Event management and registration - Multi Registration 

The TYPO3 extension sf_event_mgt_multireg is an additional extension for sf_event_mgt, which allows for the simultaneous registration of multiple individuals for an event. The extension also supports custom registration fields for each event, making it possible to collect detailed participant data. This extension builds upon the extensibility of sf_event_mgt and only requires a bit of JavaScript to show or hide additional fields.

Screenshot of sf_event_mgt_multireg

Features 

  • Allows to add multiple individuals in the registration form
  • Works with configured registration fields
  • First individual is the main registrant who must confirm the registration
  • Integrates smoothly with the sf_event_mgt extension
  • Requires minimal JavaScript for showing or hiding fields (vanilla JS version included)

Pricing 

  • 640,- € (excluding VAT)

The price is for the development of a custom version of sf_event_mgt_multireg with an extension key and a PHP namespace of your choice.

Please contact me by email at torben@derhansen.com for inquiry, questions and/or additional requirements.

Event management and registration - PayPal 

The TYPO3 extension sf_event_mgt_paypal is an additional extension for sf_event_mgt, which seamlessly integrates PayPal as payment method for event registrations.

Screenshot of sf_event_mgt_paypal used in event registration form

Features 

  • PayPal payment for event registrations
  • Support for Sandbox and Production environment
  • Uses official PayPal paypal-server-sdk
  • Saves payment reference after successful payment
  • Configurable behavior when registration is cancelled during payment

Pricing 

  • 360,- € (excluding VAT)

The price is for the development of a custom version of sf_event_mgt_paypal with an extension key and a PHP namespace of your choice.

Please contact me by email at torben@derhansen.com for inquiry, questions and/or additional requirements.

Event management and registration - Stripe 

The TYPO3 extension sf_event_mgt_stripe is an additional extension for sf_event_mgt, which seamlessly integrates Stripe as payment method for event registrations.

Screenshot of sf_event_mgt_stripe used in event registration form

Features 

  • Stripe payment for event registrations
  • Configurable Stripe API endpoints
  • Saves payment reference after successful payment
  • Stripe Webhook integration
  • Configurable behavior when registration is cancelled during payment

Pricing 

  • 360,- € (excluding VAT)

The price is for the development of a custom version of sf_event_mgt_stripe with an extension key and a PHP namespace of your choice.

Please contact me by email at torben@derhansen.com for inquiry, questions and/or additional requirements.