A TYPO3-12LTS-compatible version of this extension is available via an
early-acces program.
Staying informed about the extension
If you would like to stay informed about this extension (including compatibility
with newer TYPO3 versions), you can subscribe to the
author's newsletter.
What does it do?
This extension allows you to create and manage a list of seminars,
workshops, lectures, theater performances and other events as an
overview or as detailed descriptions. In addition, it allows front-end
users to register for these events.
Particularly, you can manage speakers, seminar sites and organizers
and use them for the seminars. You can get an overview of how many
people have registered for which seminar.
Key features
event topic records for events that occur more than once
searchable front-end plug-in with list view and detailed single view
of upcoming events
selector widget to filter the list of events in the list view
online registration and unregistration for front-end users, including
automatic confirmation email and live update of available seats
early bird prices are possible
categories and target groups for events
dependencies between topics, e.g. users need to be registered for
“communication” and “speaking” before they can register for
“facilitation”
“my events” list for logged-in front-end users, showing for which
events they have signed up
front-end list of registrations for an event (visible to participants
and editors)
back-end module for managing event and registrations
front-end editing of event records
publishing workflow for events entered in the front end
files can be attached to each event
CSV export of events and registrations of an event
the front-end output is mostly valid XHTML
visual design is done using only CSS
mostly accessible front-end output, works with the
sb\_accessiblecontent extension (for version 0.8.0, the extension's
accessibility will be thoroughly checked for accordance with W3C WAI,
section 508 and BITV guidelines)
currently full German, English, Dutch, Danish, Italian, French and
Russian localization, including a switch between formal and informal
language (e.g.,“Sie”/”Du” in German)
the front-end plug-in can be configured via TypoScript and Flexforms
automatic configuration check that quickly leads to a working
configuration
the code follows the TYPO3 coding guidelines
the extension is actively developed
is tested with Firefox, Safari and IE7 and 8 (if you need IE6
compatibility, this might require additional work on our side)
Screenshots
|img-1| Illustration 1: This is a front-end list a seminars. Note
the color-coded number of vacancies in the last column.
|img-2| Illustration 2: This is the top of a front-end detailed view
for a seminar.
|img-3| Illustration 3: This is the “my events” list for a logged-in
front-end user.
|img-4| Illustration 4: This is the “my editor events” list where FE
users that have been granted access may view the list of registrations
for an event (this is useful e.g., for the organizers or the
speakers).
|img-5| Illustration 5: This is the automatic configuration check
(here: on the details page) having something to complain about.
Seeing this extension in action
Give it a try!
If you would like to test the extension yourself, there is a
DDEV-based TYPO3 distribution
with this extension installed and some test records ready to go.
It is highly recommended to have your TYPO3 installation in composer mode.
Without Composer mode, some functionality of the extension will not be
available (e.g., inlining CSS in emails, and the CSV export (starting with
seminars 5.2.0)).
If you want visitors to be able to register for your events without a FE login,
using the onetimeaccount extension is recommended for this purpose.
Upgrading from seminars 4.x to 5.x
Upgrading in multiple steps
As this extension follow semantic versioning, seminars 5.0 has all the breaking
changes. So it is recommended you do the upgrade in the following order.
Also, clearing all caches after each step is recommended.
1. Drop removed content elements
Some content elements have been removed in seminars 5.0.
If you are using the event countdown, delete those content elements.
If you are using the event headline plugin, delete those content elements.
Upgrade to seminars 4.4
Upgrade to seminars 4.4 and run the upgrade wizards (just to be sure).
3. Set new configuration values
If you would like to use the informal salutation mode in the frontend, set
plugin.tx_seminars.settings.salutation = informal in the
TypoScript constants (or conveniently in the constants editor).
If you are using a different currency than Euro (or you would like to tweak
the currency format), edit plugin.tx_seminars.settings.currency
in the TypoScript constants (or conveniently in the constants editor).
4. Switch to the rewritten FE editor
Starting with seminars 4.2, using the new FE editor is recommended.
(The legacy FE editor was removed in seminars 5.0.)
On the FE editor page, switch the seminars plugin to a general plugin
and set the type to "Front-end editor for events". Configure it to your
needs using the settings in the FlexForms.
Switch to the rewritten registration form
Starting with seminars 4.3, using the new registration form is recommended.
(The legacy registration form was removed in seminars 5.0.)
If you are using the "onetimeaccount" extension on the login page, switch
the plugin type to "One-time FE account creator without autologin".
(This step is optional, but recommended.)
On the registration page, switch the seminars plugin to a general plugin
and set the type to "Registration form for events". Configure it to your
needs using the settings in the FlexForms.
Delete the thank-you page that was be display after someone has registered
for an event. (This is now part of the registration form plugin.)
Switch to the rewritten backend module
Starting with seminars 4.4, using the new backend module form is recommended.
(The legacy backend module form was removed in seminars 5.0.)
Edit your backend user or user group permissions, grant the users/groups
permissions for the new backend module, and drop their permissions for the
old backend module.
7. Update the configuration
Enable the automatic configuration check in the extension settings.
Click through all your seminars-related content elements, watch for
configuration check warnings, and fix them.
Disable the automatic configuration check in the extension settings again.
Upgrade to seminars 5.x
Upgrade to seminars 5.x.
Uninstall the mkforms and rn_base extensions (if you are not using
Composer mode).
Apply all DB updates.
Run the upgrade wizards.
Enable the slug fields for your editors
Enable the seminars "URL segment" (slug) field for your editors.
(Otherwise, you might get exceptions in the frontend if an event does
not have a slug and your are using
nice URLs for the single view.)
Regarding flexforms and TS setup
After having installed this extension (and the required extensions)
via the extension manager, a few more steps are necessary to get the
extension up and running:
IMPORTANT: All non-empty changes at the flexforms of the plug-in
overwrite the settings of the corresponding TS setup. Empty data in
the flexforms don't overwrite non-empty data from the TS setup, so if
you want to overwrite non-empty values with empty values, you can
enter a space or a comma (depending on the field).
Setting up a login page
Some of this extension's features require a FE user to be logged in, for example
the event registration, the event management in the FE or access to the attendee
lists. If you are not using any of these feature, you can skip this chapter.
Selecting which login plugins to use
There are two possible scenarios for the login page:
You have (recurring) visitors that log in to your site in order to register
for events, to unregister again, or to manage events.
In this case, you will need regular login form using the felogin
extension that comes with the TYPO3 Core.
Make sure to enable the "Redirect defined by GET/POST parameters" in the
login plugin settings.
You want people to register for your events, but you do not want bother them
with having to create an account. In this case, you will need the
onetimeaccount extension.
If you want to cover both scenarios, you can also use both plugins (on the same
page.)
Allowing users to create an account with a double-opt-in process before they can
log in is not, supported, though. (In that case, the redirect parameter to
the registration page in the link to the login page will get lost.)
Selecting which onetimeaccount plugin to use
The onetimeaccount extension comes with two plugins:
One-time FE account creator with autologin
Do not use this version anymore. (It was needed for the legacy seminars
registration form that got removed in seminars 5.0.
One-time FE account creator without autologin
Use this version with the the rewritten seminars registration form that
was introduced in seminars 4.3.0.
Set up the plug-in
Include the Seminars static template in your site template under
“Include static (from extensions).”.
Then configure the plug-in in your TS template setup or the plug-in
flexforms. The properties are listed in the reference.
Please note than when using flexforms, you need to set the
corresponding values at all relevant instances of the plug-in: It
doesn't do to specify the fields for the online registration in the
seminar list front-end plug-in—you need to set these fields in the
online registration front-end plug-in.
You can use this TypoScript setup template for setting all required
values for a basic setup:
plugin.tx_seminars {
# PID of the sysfolder where event registrations (attendances) will be stored
attendancesPID =
}
# localizations for strings in emails and some FE parts go here (the example is for German)
plugin.tx_seminars._LOCAL_LANG.de {
}
plugin.tx_seminars_pi1 {
# PID of the sysfolder that contains all the event records (e.g., the starting point)
pages =
# PID of the FE page that contains the event list
listPID =
# PID of the FE page that contains the single view
detailPID =
# PID of the FE page that contains the "my events" list
myEventsPID =
# PID of the FE page that contains the seminar registration plug-in
registerPID =
# PID of the FE page that contains the login form or onetimeaccount
loginPID =
}
# localizations for FE-only parts go here (the example is for German)
plugin.tx_seminars_pi1._LOCAL_LANG.de {
}
# here you can change stuff like the number of items per page etc.
plugin.tx_seminars_pi1.listView {
}
Copied!
Note that the notification email to the organizer and the list view
show the headings even for empty fields, while the single view and the
notification email to the participant remove the headings for some
seminar properties (not all, just where it makes sense).
Creating system folders
In addition to the website\_users\_folder , you need to create some
system folders for storing records needed by this extension.
If you don’t have many events and you can keep the overview even if
the event dates and the registrations are on one page each, you can
create a minimal SysFolder structure like this:
|img-6| Illustration 6: SysFolder structure for minimum
requirements
If you have only one page with one list view for the events, you can
have all current event records in one system folder:
|img-7| Illustration 7: All current events in one folder
If it is okay for to have the registrations for all organizers arrive
in one system folder or if you have only one organizer, you only need
one folder for the registrations:
|img-8| Illustration 8: Registrations for all organizers in one
folder
The following system folder structure is proposed for a full-blown installation with lots of events and different organizers that manage their registrations independently:|img-9| Illustration 9: Full blown installation
If you create these folders outside of the site root page with the
template, you still need to create a template for them and “include
static (from extensions)” in that template, or else the back-end
module will not be able to use the extension's default configuration
(e.g., the date and time format, so that date won't get displayed in
the back-end module).
Setting access rights
The user groups who should be able to manage seminars should have:
the module Web > Events in their module list
write access to the following tables (may be split into several
groups): Seminars, Speakers, Registrations, Seminar Sites, Organizers,
Payment Methods
allowed excludefields: Seminars: hide, Seminars: start, Seminars: stop
( only set this for users who really need it and know the difference
between start/stop for FE display and start/stop of the seminar
hours )
other needed excludefields from the event records
the corresponding system folders in their DB mounts
If you want to enter registrations manually for participants who don't
have a front-end user account yet, or if you want to be able to edit
the front-end user data, you need to set the following access rights
as well:
write access to the following tables (may be split into several
groups): front-end users, addresses
allowed excludefields: front-end user: name, address, phone
email, zip code, city, inactive; address: mobile
the front-end users system folder in their DB mounts
Adding front-end pages
If your site does not use the online registration feature, you have to
explicitly disable that feature.
Your page structure can then look like this:
|img-10| Illustration 10: Page structure for a setup without
online registration
Usually, you’ll want to use this extension with the online
registration feature. For this, the minimal page structure will look
like this:
|img-11| Illustration 11: Page structure for a minimal setup with
online registration
For a full-blown registration with several list views, two archive
pages, the “my events page” (where a user can see the events to which
they have signed up), registrations lists for participants and s and
front-end editing, the page structure would look like this (usually,
you only need some of these pages):
|img-12| Illustration 12: Page structure for a full-blown setup
If you want users to be able register manually, then build up a front-
end user system for your site. Remember which group corresponds to
“confirmed front-end users.”
Add a page (which we called “ *Events (list view)* ” in the
illustrations) that will contain the list view.
Add a page (“ *Details (not in menu)* ”) that will contain the
detail view.
Add a “Seminar Manager”-plug-in content element to both of these pages
(from step 2 and 3) and set the corresponding types to “Event
List”/”Event single view”. Set the content element's ”Starting Point”
to the SysFolder that contains (or will contain) the seminar records
(what we called “ *Event Data ” in Illustrations 1-4). The
element on “ **Events (list view)* ” will show the seminar list and
the detailed seminar view will be shown on “ Details (not in
menu).”** Usually, this content element doesn't have any access
restrictions.If you would like to show only the seminars from certain
organizers, put the seminar records for the organizers on separate
pages, and add only the corresponding pages as starting pages for the
plug-in.
Add a page (which we called “ *Registration (not in menu)* ” in
the illustrations) that will be the registration page. Important: The
Seminar Manager creates links to this page (for example from the list-
and detailed view and as a redirect parameter after login) – this will
fail if this page is access restricted. Don't hide this page and don't
apply user restrictions to the page itself! A good way is to mark the
page as “hide in menu,” but the page must be accessible for all
visitors, independent of their login status (logged in or not).
New registration form that got introduced in seminars 4.3:
Add a plug-in content element and set the type to "Registration form for
events". Configure it to your needs using the settings in the FlexForms.
Add another page that will contain the “my events” list (if you want
to use that feature). Set the page access to “show at any login.”
Add a “Seminar Manager”-plug-in content element to that page and set
the type to “My Events.” Set the content element's start pages to the
page or pages that contain (or will contain) the seminar records. This
element then works like the “Event List” content type, but it will
only show those events to which the currently logged-in front-end user
has signed up. If you want this list to show all events instead of
current and upcoming, set “Only show events from this time-frame” to
“all events” (you'll probably want to do this).
Enabling unregistration
To enable users to unregister themselves from events (using the “my
events” page), you need two things:
Unregistration deadline: You either can set individual
unregistration deadlines in the events for which unregistration should
be possible, or you can set a global deadline for all events using
plugin.tx_seminars.unregistrationDeadlineDaysBeforeBeginDate.
Waiting list: By default, unregistration is only possible if an
event is full and has some people on its waiting list. If you want to
enable unregistration if the waiting list is empty (or if there is no
waiting list), you can use
plugin.tx_seminars.allowUnregistrationWithEmptyWaitingList = 1.
Setting up a list of categories
The category list shows all categories for which there are events in
the selected system folders and in the selected time-frame. If your
events are not assigned to any categories, the category list will be
empty.
The category names are linked to the list view, filtered by that
category (in other words: only events from the selected category are
displayed).
This tutorial assumes that you already have set up a list view of your
events.
Add a front-end page.
Add a “Seminar Manager”-plug-in content element to this page and set
the type to “Category List.”
Select the page that contains the list view (this page will be used
for creating the links).
Optional: Select the system folders (and recursion depth) that contain
the events for which you would like to list the categories. If you
select nothing, events from all system folders will be taken into
account.
Optional: Select the time-frame from which you the events should be
selected. If you select nothing, current and upcoming event will be
taken into account.
Save and close.
Setting up the front-end registration lists
This feature allows front-end users who have signed up for an event to
see who has signed up for that event as well, e.g., for forming car
pools or for coordination before the event takes place. In addition,
this allows so-called editors (e.g., speakers or organizers of that
event) to see that list as well. Both features are disabled by
default. When using this feature, make sure that this complies with
your privacy policy!
Both lists are set up separately. Even if you useboth lists, they need
to be set up separately.
You can enter a list of FE user field names that will be displayed in
the registration lists using the TS setup variable
plugin.tx_seminars_pi1.showFeUserFieldsInRegistrationsList. The
default is to only display the attendees' names.
Setting up the front-end registration lists for attendees
Please note that there is no fine-grained access rights system: Either
you allow all attendees to view the registration lists for all events
for which they have signed up, or you don't.
If there is no “my events” page yet, create one. This page will show
all events for which a FE user has signed up.
Add a new page.
Set the page access to “show at any login.”
Add a new content element “General Plugin.”
Set the element's plug-in type to “Seminar Manager,” set it to display
the “my events” list and set the element's starting point to your
SysFolder(s) with the event records. You'll probably want to also set
the time-frame for this list to “all events” instead of the default
value “current and upcoming events.”
Now add a second page for the registration lists (preferably a sub
page of the “my events” page), set it to not appear in the menu and
set the page access to “show at any login.”
Add a new content element “General Plugin.”
Set the element's plug-in type to “Seminar Manager” and set it to
display the “list of registrations (for attendees).”
Now return to the page with the “my events” list and edit that content
element again.
Under “Page that contains the list of registrations (for attendees):”,
select the page you've just created.
If you would like the registration lists to be linked from the normal
list view, edit the seminar list and also select the page with the
registrations list under “Page that contains the list of registrations
(for attendees):”.
Setting up the front-end registration lists for managers
Please note that this feature has a rather fine-grained access right
system: For each event, you can specify which FE users should be
allowed to view the registration lists of that particular event.
Create a “editors” FE-user group.
Edit the events for which some FE users should be allowed to view the
registration lists. Add those FE users in the section“Front-end users
that are allowed to see the list of registrations” of the
corresponding event records. For example, you could allow the speakers
or the organizers to see the registrations list. In addition, add the
corresponding FE users to the FE user group “editors.”
Set up a “my editable events” page. This page will list exactly those
events for which that particular FE user is set as an editor.
Add a new page.
Set the page access to “editors.”
Add a new content element “General Plugin.”
Set the element's plug-in type to “Seminar Manager,” set it to display
the “my editable events” list and set the element's starting point to
your SysFolder(s) with the event records. You'll probably want to also
set the time-frame for this list to “all events” instead of the
default value “current and upcoming events.”
Now add a second page for the registration lists (preferably a sub
page of the “my events” page), set it to not appear in the menu and
set the page access to “editors.”
Add a new content element “General Plugin.”
Set the element's plug-in type to “Seminar Manager” and set it to
display the “list of registrations (for editors).”
Now return to the page with the “my events” list and edit that content
element again.
Under “Page that contains the list of registrations (for editors):”,
select the page you've just created.
If you would like the registration lists to be linked from the normal
list view, edit the seminar list and also select the page with the
registrations list under “Page that contains the list of registrations
(for editors):”. Please note that in case a FE user is both an
attendee and an editor for an event, the link to the registration list
for editors will take precedence.
Setting up the Scheduler task
Warning
The CSV export currently will be empty if the b13/bolt package is
installed.
This extension offers a Scheduler Task to trigger actions. It can be configured to
send reminders to the events' organizers
if a confirmed event is about to begin, or
if the speakers' cancelation deadline of a neither confirmed nor
canceled event has just passed.
The reminders are emails with a localized text and the list of
registrations appended as CSV.
To setup the CLI, do the following:
Set up the Scheduler as described in the manual of the Scheduler extension.
Choose/create a FE page where to do some TS setup configuration for
the Scheduler task and configure the following:
Set the option “ sendCancelationDeadlineReminder ” to 1 to enable
the cancellation deadline reminder.
For the option “ sendEventTakesPlaceReminderDaysBeforeBeginDate ”,
set the number of days before an upcoming event, when to send a
reminder to the organizers. Setting zero will disable this reminder
about an event taking place.
In order to customize the appended CSV, the options “
filenameForRegistrationsCsv ”, “ fieldsFromFeUserForEmailCsv ”, “
fieldsFromAttendanceForEmailCsv ” and “
showAttendancesOnRegistrationQueueInEmailCsv ” are relevant. Please
consider the corresponding section about CSV-File Attachmentfor more
details.
Add a seminars Scheduler task and provide UID of the page with the configuration.
CSV-File Attachment
The mails send via Scheduler can contain a CSV file with the registrations
to the event the mail is sent for. To customize the contents of the
CSV file use the following options:
“ fieldsFromAttendanceForEmailCsv ” and “
fieldsFromFeUserForEmailCsv ” customize the fields which are
exported in the CSV file. Please note that the CSV files always
contains the columns for the data from the registration records first
and then data from the corresponding FE user record.
“ filenameForRegistrationsCsv ” determines the name of the attached
CSV file.
“ showAttendancesOnRegistrationQueueInEmailCsv ” determines whether
registrations on the waiting list, should also be exported via CSV.
Daily digest of new registrations
The Scheduler task also can send a (usually daily) digest of new registration.
This functionality can be enabled and configured via TypoScript setup in the
namespace plugin.tx_seminars.registrationDigestEmail.
The emails will use the language that has been set as default language for the
Scheduler back-end user.
Testing the configuration
This extension has an automatic configuration checking feature which
will check pretty much all configuration settings of this extension
for sanity. If it has found anything that needs to be fixed, it will
display a big red box with a message. This message will contain
information about the following things:
what that particular setting is about,
which values are allowed, and
which values are incorrect.
To make sure that your configuration is correct, please log in as a
front-end user and visit all of your pages that contain the Seminar
Manager plugin-in. In the back end, please visit the back-end module.
The configuration check slightly decreases the performance of this
extension. When your configuration is finished and approved by the
checking feature, you can disable the feature in the extension
manager.
Note: This feature still is pretty new and edgy. If you think that
a particular warning message isn't correct (or you think that a a
particular check is missing), please take a minute and file a bug in
the bug tracker.
Note: Do not change the HTML templates directly in the extension
directory as then your changes will be overwritten when you upgrade
the extension to a new version. Make a copy and modify the copy
instead:
Copy the corresponding template file to a convenient directory,
e.g.,to fileadmin/template/.
Set the corresponding TS setup variable to the path of your new
template. For the pi1 templates, you can also use the flexforms of the
plug-in for setting the location.
Change the template to your liking.
Configuring prices
Configuring the currency
If you are using a different currency than Euro (or you would like to tweak
the currency format), edit plugin.tx_seminars.settings.currency
in the TypoScript constants (or conveniently in the constants editor).
More price configuration options
You can set up to four different prices for each event: a “standard
price” and a “special” price, e.g., for students and people in full
employment (each of them can also be saved as an early bird price). In
addition. In the registration form, the user can select the price to
pay.
Events for free: In the single view, the standard price always
gets displayed (even if it is 0.00), while the special price only gets
displayed if it is not 0.00. This means that if you need to enter a
price that is 0.00 (e.g., as a special discount), you need to enter
this as the standard price and enter the non-zero price as the special
price even if the non-free price technically is the standard price.
The early bird prices will only have an effect if you also define an
early bird deadline (until when these prices are valid). If no early
bird price is set or the deadline has already passed by, these prices
won't be visible in the front end.
If you have only one price per seminar, you can configure the list
view to not display the special price column (look in the reference
for details). In addition, you might want to set some of the following
options to just display “price” instead of “standard price”:
For the front-end view:
plugin.tx_seminars_pi1.generalPriceInList
plugin.tx_seminars_pi1.generalPriceInSingle
For the emails to the attendees:
plugin.tx_seminars.generalPriceInMail
If you have two prices for some or all seminars, you can change the
default labels “regular price” and “special price,” e.g., to “Adults”
and “Children.” You can change them using these variables:
For the front-end list view and detail view:
plugin.tx_seminars_pi1._LOCAL_LANG. language
.label_price_regular / price_regular_early /
/ price_special / price_special_early
For the emails to the attendees and the drop-down box in the
registration form:
plugin.tx_seminars._LOCAL_LANG. language .label_price_regular /
price_regular_early / price_special /
price_special_early
Replace “ language ” with your two-letter language code if you use a
language other than English, e.g., “de” for German. Use “default” as
language code for English.
Localization
Changing the salutation mode (formal to informal)
If you would like to use the informal salutation mode in the frontend, set
plugin.tx_seminars.settings.salutation = informal in the
TypoScript constants (or conveniently in the constants editor).
Changing the localized strings
You can change most of the localized strings that are used on the
front end and for the emails. (The localized strings for the back end
cannot be changed.)
When you want to change some strings, please don't change
locallang.xlf directly as these changes would get
overwritten on the next update. Instead, do it like this:
Find out the language code of the language for which you'd like to
change a string. The language code for English is “default” and the
language code for German is “de.” All other languages have two-letter
codes as well.
Find out whether the string which you'd like to change is in
locallang.xlf or FrontEnd/locallang.xlf.
Find out the array key for that corresponding string.
In your TS setup, set the following (replacing language with your
language code and key with the corresponding array key):
plugin.tx_seminars._LOCAL_LANG. language.key (for strings from
locallang.xlf) or
plugin.tx_seminars_pi1._LOCAL_LANG. language.key (for strings
from FrontEnd/locallang.xlf)
Adding links to the terms & conditions page
On the second registration page, you can have up to two “terms &
conditions” checkboxes. If you would like the checkbox labels to link
to the page containing the terms & conditions (or if you would like to
open that page as a pop-up), you can use some HTML for the checkbox
label. For example, this will add a link to the first terms &
conditions checkbox for a German site:
plugin.tx_seminars_pi1._LOCAL_LANG.de.label_terms = <a
href="/index.php?id=1106&type=11" onclick="popup(this.href);
return false">Die Allgemeinen Geschäftsbedingungen</a> habe ich
gelesen und erkenne sie hiermit an.
You can do the same for the label\_terms\_2 label.
Configuring CSS
The extension provides its own basic set of CSS styles (which work
best with a white background and if you're already using a CSS-based
design and css_styled_content). These stylesheets usually get
included automatically. However, if you have set
disableAllHeaderCode = 1 and want to use the provided stylesheet ,
you need to include the stylesheet
typo3conf/ext/seminars/pi1/seminars\_pi1.css manually into your page
header.
Classes for table rows
The TR elements of the list view already have a few classes
automatically set:
listrow-odd for every other row, starting with the second row
tx-seminars-pi1-canceled for canceled events
tx-seminars-pi1-owner if the logged-in FE user had entered this event
record
Configuring the colored square for the number of vacancies
In the list view, the color of the squares in the vacancies column is
configured using CSS. The table cell for the vacancies has three CSS
classes:
tx-seminars-pi1-vacancies
tx-seminars-pi1-vacancies-x with x being replaced by the exact number
of vacancies (which may be 0)
tx-seminars-pi1-vacancies-available if there is at least one vacancy
tx-seminars-pi1-vacancies-cancelled if the event has been cancelled
tx-seminars-pi1-deadline-over if the registration deadline for that
event has passed
The square itself also has a CSS class:
tx-seminars-pi1-square
This allows you to configure the color of the square in detail,
depending on the number of vacancies. The default style sheet uses:
green for more at least three vacancies
yellow for one or two vacancies
red for “no vacancies” and for canceled seminars
The corresponding part of the default CSS file looks like this. You
can do this likewise in your own style sheet:
In the default configuration, this extension allows each user to
register only one seat per event. This can be changed if you need
users to register more than one seat per registration (e.g., when you
use this extension for a theater, or you would like companies to
register all their attendees in one go).
Please note that this doesn't enable users to register multiple
times—it just allows them to enter the number of seats for their
registration.
This is what needs to be changed:
For the back-end user group managing the registrations, enable the
excludefield Attendances: number of seats . If you would like the
attendee to also enter the names of the other attendees, please also
add Names of the attendees.
Enable the seats field for the notification email to the organizers
by adding seats to
plugin.tx\_seminars.showAttendanceFieldsInNotificationMail . If you
would like the attendee to also enter the names of the other
attendess, please also add attendees\_names .
If the field seats is not filled in (i.e., the registration is for 0
seats), the registration is counted as 1 seat.
Please note the the number of seats currently is not included in the
automated email to the user. This will be implemented in a later
version of this extension.
Setting up front-end editing
Only do this if you really trust your users to only enter serious
events and no fun or test records.
Setting up the front-end editing with the new plugin
Note
This is the new front-end editor that was introduced in seminars 4.2.0.
Important
I plan to remove this feature in seminars 6 as nobody seems to be using
front-end editing of events nowadays. If you are using it, please let me
know in order for me to keep this feature.
If you have not done so already, create a front-end user group for your
editors.
If you have not done so already, create a folder for the front-end-created
events. (You can also use the general events folder if you do not want to
store the front-end-created events separately.)
Create a front-end page and limit access to the front-end user group
you created in step 1. This is very important.
On the page you've just created, create a plugin and set its type to
Front-end editor for events.
In the plugin flexform, set the the folder for in which the
front-end-created events should be stored.
That's it - you're done!
Setting up the default managers feature
You can assign managers (front-end users) to each single event. These
editors are allowed to see all registrations for the events where
he/she is manually added as an editor.
If you want to allow a group of editors to see the registrations of
all events, you can add all those editors to a group. Just add the UID
of that group to the TS configuration
plugin.tx\_seminars\_pi1.defaultEventVipsFeGroupID .
After clearing the cache, all members of that group will see all
events on their “my editor events” page, and will be able to see the
registrations list of all those events.
You can also set the group's uid in the flexform configuration or the
plugin. But you will need to set it for each plug-in(on every page).
It's easier to set it via TypoScript setup on a global page.
Preselection in the list view URL
If you are linking to the list view from other pages, you can
preselect stuff in the URL (by using the variables from the list view
filter form):
&tx_seminars_pi1[place][]=1
&tx_seminars_pi1[event_type][]=3
&tx_seminars_pi1[category]=1
&tx_seminars_pi1[country][]=DE etc. (the uppercase ISO 3166 alpha2 code)
&tx_seminars_pi1[city][]=Berlin
&tx_seminars_pi1[language][]=EN (the uppercase ISO 639 alpha2 code)
You can not only preselect categories, but also specify search phrases
directly in the URL. To do so, just add this to the URL of the page
that contains the seminars list view:
&tx_seminars_pi1[sword]=searchphrase
Copied!
If you want to use whitespaces make sure you replace them with %20,
e.g.:
It's not necessary to have a search field on the list view activated.
So you can specify search phrases in the URL to filter your results
without offering the opportunity to specify other search phrases.
If you want to specify search phrases for a page by default without
specifying parameters in the URL, just enter this to your Typoscript
Setup:
If anyone opens this page, only trainings that match your search will
be displayed.
SEO
Routing configuration
Nice URLs for the single view
Attention
Please enable the seminars "URL segment" (slug) field for your editors.
Otherwise, you might get exceptions in the frontend if an event does
not have a slug.
First run the upgrade wizards to generate the slugs for all event records.
(You can change them later to suit your needs.)
If you already have route enhancers configured, add the EventSingleView
enhancer next to your other router enhancers.
The limitToPages setting is optional, but required for better performance.
The given page UID(s) should be the page(s) on which the seminars single view
content element is located.
If you already have route enhancers configured, add the EventRegistration
enhancer next to your other router enhancers.
The limitToPages setting is optional, but required for better performance.
The given page UID(s) should be the page(s) on which the registration form
content element is located.
Automatic page titles for the single view
Add this to your TypoScript setup:
config.pageTitleProviders {
eventTitle {
provider = OliverKlee\Seminars\Seo\SingleViewPageTitleProvider
before = record
}
}
Copied!
Exclude the single view page without an event URL from getting indexed
Edit the page properties of your single view page(s).
Navigate to the "SEO" tab.
Disable "Index this page".
Then add this code to your TypoScript setup:
# Re-enable indexing for event single view pages, but not for the (empty)# detail page without any event UID parameter[traverse(request.getQueryParams(), 'tx_seminars_pi1/showUid') > 0]
page.meta {
robots = index,follow
robots.replace = 1
}
[global]
Copied!
PSR-14 event to change the generated slug for an event
You can use the PSR-14 event
\OliverKlee\Seminars\Seo\Event\AfterSlugGeneratedEvent to change the slug
for an event before it gets written to the database.
This is the default event record type when you create an event record.
You can change the record type to “topic” or “date.”
a
|img-14|
b
topic for multiple events
c
This event record type represents a topic for a series of events. It
contains the basic data, for example the title and the description.
After you have created a topic record, you can start entering date
records for it.
a
|img-15|
b
date
c
This event record type represents a date for a series of events (a
topic).
a
|img-16|
b
registration
c
These records get created when someone signs up for an event (or for
the waiting list). Technically, they are the connection between an
event and a person (represented by a front-end user).
a
|img-17|
b
organizer
c
These records contain the sender for the thank-you email sent to the
attendees upon registration. In addition, registration notifications
are sent to this email address.
a
|img-18|
b
payment method
c
Payment methods are available for selection in the event registration.
a
|img-19|
b
speaker
c
Speakers get listed in the list view and the single view, but they
don’t receive any emails.
a
|img-20|
b
target group
c
Target groups of events are merely displayed, but don’t limit the
registration in any way.
Examples: Adults, teenagers, single parents, sociologists.
a
|img-21|
b
time slow
c
Time slots are created within event records. They are used to
represent a scenario like an event taking place on Friday from 14-18
o’clock and on Saturday from 10-14 o’clock.
a
|img-22|
b
place
c
Places (event sites) are displayed in the list view and the single
view.
a
|img-23|
b
skill
c
These records are skills which can be associated with the speakers.
Currently, the skills are not displayed in the front-end yet (missing
feature).
a
|img-24|
b
lodging option
c
Lodging options are available for selection on the registration page.
a
|img-25|
b
food option
c
Food options are available for selection on the registration page.
a
|img-26|
b
event type
c
Each event can be associated with exactly one event type, for example
workshop, evening class, talk or discussion group. The event type is
displayed in the list view and the single view.
a
|img-27|
b
checkbox for the registration page
c
These are options available on the registration page.
a
|img-28|
b
category
c
Each event can be associated with several categories, for example
theory seminars or examination preparation courses.
The back-end module “Events”
This module provides easy-to-use access on event records, organizers,
speakers and registrations.
Important: Only the records of the currently selected sysfolder get
displayed. This means that you need to select different sysfolders
if your records are located in several sysfolders (for examples you
registrations might be places somewhere different than your event
records).
Records that are created via this back-end module are saved in the
currently selected sysfolder, too.
Tab: Events
|img-29| Abbildung 13: Tab "Events" in the back-end module “Events”
Column/GUI element
Column/GUI element
Meaning
Meaning
Column/GUI element
|img-30| Create new record
Meaning
creates a new event record in the selected sysfolder
Column/GUI element
|img-31| download as CSV
Meaning
downloads all events as CSV file which can be opened e.g. in Excel
Column/GUI element
|img-13| |img-15| |img-14|
Meaning
Record type:
a
|img-13|
b
Single event
a
|img-14|
b
Topic for multiple events
a
|img-15|
b
Date (for a topic)
Column/GUI element
accreditation number
Meaning
manually assigned number for an event (can also be empty)
Column/GUI element
title
Meaning
the event’s title
Column/GUI element
date
Meaning
the event’s date
Column/GUI element
|img-32|
Meaning
edit an event
Column/GUI element
|img-33|
Meaning
delete an event
Column/GUI element
|img-34|
Meaning
temporarily hide an event
Column/GUI element
act.
Meaning
|img-35| the current number of registrations; the CSV button creates
the registration as a CSV download which can be opened e.g. in Excel
Column/GUI element
queue
Meaning
the number of registrations on the waiting list (if the event has a
waiting list)
Column/GUI element
min.
Meaning
how many registrations are needed for the event to take place
Column/GUI element
max.
Meaning
how many seats there are for this event in total
Column/GUI element
enough
Meaning
whether the event has enough registrations to take place
Column/GUI element
full
Meaning
whether the event is fully-booked
Column/GUI element
status
Meaning
canceled, confirmed or planned (neutral)
Column/GUI element
Button “cancel”
Meaning
cancels the event and send and email to all registered participants
(using an email form)
Column/GUI element
Button “confirm”
Meaning
marks the event as confirmed and send and email to all registered
participants (using an email form)
Canceling an event
If an event needs to be canceled, you can cancel it by clicking on the
“Cancel” button. This also sends an email to all registered
participants:
|img-36| Abbildung 14: canceling an event
In the email form, there already is a default text which you can edit
before sending the email. The placeholder %s will automatically
be replaced with the participant’s name.
A canceled event still will be visible in front end, but is clearly
recognizable as canceled (so that you don’t get tons of “Where can I
find information about the event on the web site?” request after
canceling it ;-) ). Registration for canceled events is not possible.
Marking an event as confirmed
When you feel sure that an event is certain to take place (if enough
participants have signed up and you’ve got the speakers’ okay), you
can mark an event as confirmed by using the “Confirm” button. This
also sends an email to the registered participants:
|img-37| Abbildung 15: marking an event as confirmed
Signing up for a confirmed event still is possible (as long as there
are any vacancies); only the text in the confirmation email is a bit
different.
Tab: Registrations
|img-38| Abbildung 16: Tab "Registrations" in the back-end module
“Events”
In this tab, all registration records of the currently selected
sysfolder are displayed (i.e., of all events).
The first list Regular registrations contains those registrations
that are not on the waiting list.
Tab: Speakers
|img-39| Abbildung 17: Tab "Speakers" in the back-end module
“Events”
In this tab, all speaker records of the currently selected
sysfolder are displayed (i.e., of all events).
Tab: Organizers
In this tab, all organizer records of the currently selected
sysfolder are displayed (i.e., of all events).
Entering seminars and related records
You must set one organizer for each seminar. In addition, you can set
one or more speakers and one or more seminar sites (real places this
time) for a seminar. If you want to enter a seminar with an organizer,
speakers or seminar sites that haven't been entered into the database
yet, it's a good idea to enter those first before entering the
seminar.
Entering and managing organizers
At the beginning, you should enter some basic records. Usually, the
users who organize and manage the seminars don't need to alter these
records any more, so it would be a good idea to store them in a system
folder which most back-end users cannot write to.
Add one or more organizer records to the page that will hold the
organizer records.
An organizer record will hold the basic information about the person
(or the team) who organizes a seminar. Note that the organizer doesn't
need to be the same as the speaker (and usually isn't the same).
Instead, the organizer is the person who reserves the seminar site,
collects the fee, manages the registrations and so on.
An organizer record contains the following fields:
name (required), will be shown on the front end
homepage URL including the http://, will be shown on the front end
email address (required, must be valid), notifications of new
registrations will be sent to this address, this address will be used
as From: address for the confirmation emails when someone registers
for a workshop, will not be shown on the front end
footer text that will be put at the end of all emails sent by this
organizer
a sys folder where registration records for events should be stored
for which this organizer is listed first (leave this empty to use the
default folder set via TS setup)
If you intend to manage payments and you would like to records which
method of payment has been used, you can enter records for those. They
include the following fields:
title (required)
detailed description (will be included in the confirmation email on
registration)
Entering and managing speakers
On the system folder that should contain the speaker records, you can
create speaker records.
The following fields are public and will be displayed on the front
end:
name (required)
the speaker's organization or company
homepage URL, including the http://
description (you can use HTML in this field)
The following fields are for your internal purposes only and don't get
displayed on the front end:
internal notes
address
private phone number
work phone number
mobile phone number
email address
Speakers can be listed in event record in four different roles: As
speakers, partners, tutors or leaders. Only the first role will be
visible in the list view whereas all roles are visible in the single
view. Apart from that, the only difference is under which heading the
speakers will be listed.
Entering and managing event types
On the same system folder that contains the speakers and organizers,
you can create event types. At the moment, an event type record
consists of only a title field. You can assign none or exactly one
event type to an event record. If you assign no event type to an
event, the default event type from TS setup will be used.
The field is hidden in the list view by default.
Entering and managing categories
On the same system folder that contains the speakers and organizers,
you can create categories. At the moment, a category record consists
of a title field and an icon field. You can assign none or multiple
categories to an event record.
Entering and managing target groups
On the same system folder that contains the speakers and organizers,
you can create target groups. At the moment, a target group record
consists of only a title field. You can assign none or multiple target
groups to an event record.
Entering and managing seminar sites
The following fields are public and will be displayed on the front
end:
title (required)
address (you can use HTML in this field)
country (from pre-filled list)
homepage URL, including the http://
directions (you can use HTML in this field)
The field “internal notes” is only for your internal use and doesn't
get displayed on the front end.
Note that in a seminar record, you can add a room number in addition
to the general seminar site(s).
Entering and managing seminars
You can add the seminar records to the page(s) that should contain
these records. Note that you have to add those pages as the DB
starting point when adding a Seminar Manager content elements or the
seminars won't get listed.
Note: If you have events that occur more than once, it is highly
recommended to enter one event topic and then just enter event date
records, selecting the already entered topic record. You'll save a lot
of typing (or copying and pasting) that way.
You can enter the following data for a seminar, which will be used for
the front end:
record type: single event (= complete event record), only a topic or a
date for a topic
hide the seminar (default: disabled)
when to display the seminar in the front end (don't confuse this with
the hours when the seminars take place, only enable this
excludefield for users who are not apt to get these fields mixed )
title (required) (don't use HTML in this field)
subtitle
image (only available for record types single event and topic)
categories
teaser text (you can use some HTML in this field)
description (you can use HTML in this field)
event type
language
separate details page (using this field will in effect disable
online registration for this event)
accreditation number according to the Akkreditierungsverordnung Hessen
(excludefield)
number of credit points (excludefield)
first seminar day and the beginning time in the format hh:mm dd-mm-
yyyy, semi-required (events without a start day technically are
considered to be sometime in the future)
last seminar day and the closing time in the format hh:mm dd-mm-yyyy
(if you have an open-ended event, just leave this field empty)
registration deadline in the format hh:mm dd-mm-yyyy (Set this date if
users shouldn't be allowed to register for this event after this
date/time. If not set, the seminar starting time will be the deadline
instead.) Please enter a date/time smaller than the starting time.
early bird deadline in the format hh:mm dd-mm-yyyy (Set this date if
users should be able to get a better price before this deadline. If
not set, no early bird prices will be used at all!). Please enter a
date/time smaller than the starting time.
License expiry: how long a registration will be valid for event
dependencies
the site(s) where the seminar takes place, select one or more sites
from the database (not required), when the seminar takes place on
different sites, add to the description which site will be used on
which day
room number (if the seminar site has more than one room or the room is
hard to find)
additional informations about time and place(s) (not required, no HTML
allowed)
speaker(s), select one or more speakers from the database (not
required)
partner(s) (which are in fact relations to speaker records), the same
as speakers, but they will be displayed under a different heading
tutor(s) (which are in fact relations to speaker records), the same as
speakers, but they will be displayed under a different heading
leader(s) (which are in fact relations to speaker records), the same
as speakers, but they will be displayed under a different heading
default price, without the currency name
default price (early bird), without the currency name
special price (will only get displayed if it is not 0.00), without the
currency name
special price (early bird, will only get displayed if it is not 0.00),
without the currency name
additional information about the event, payment workflow etc. can be
entered in this RTE enabled field (you can use HTML here)
any checkbox options to show in the registration form (you can select
any previously entered checkbox records here)
whether the “traveling terms” (the second “terms” checkbox) should be
displayed in the registration form
allowed payment methods for this seminar (they will be listed in
the details page and in the confirmation email to the attendee, so
you must set at least the allowed payment methods if you want to
have them to be mentioned via email to the attendees )
organizer(s) , select one or more organizers from the database
(required).
whether it is possible for FE user to register more than once for this
event (this is off by default)
how many registration are necessary for the seminar to be full enough
to take place
the maximal number of registrations before the seminar is completely
full
lodging options that will be available for selection in the
registration form
topics that are required for registering for this event (only for
topic records)
topics for which this topic is required (only for topic records)
Note that the beginning and end date/time include both the date of the
first and last day as well as the seminar times. If the seminar times
are different on some days, please add a little overview in the
“additional times and places” field. (For a later version of this
extension, it is planned to have allow for different time slots on
different days.)
If you don't know the seminar hours yet, enter 00:00 as starting and
closing time. If the event is open-ended, just leave the end date/time
field empty.
In addition, you can put internal notes into the seminar record. The
internal notes don't get published on the front end.
The following fields are automatically calculated (and get updated
each time a seminar record is saved):
current number of registrations, including unpaid registrations
whether the seminar already has enough registrations to take place
whether the seminar is full
The following fields can be searched using the search box in the list
view:
title
subtitle
description
accreditation number
Teaser text: This field will only be displayed in the list view
and usually is hidden. It is intended to be used with a user-tailored
HTML template for the list view where a teaser text fits in better.
Entering registration (attendance) records
Each registration to an event creates an attendance record. These
records are used internally and not directly shown in the front end.
The only fields you need to manually change in an attendance record
are the payment date and whether the person has really attended. All
other fields should not be changed manually! This will change in
the future! We plan to implement some functions in the new back-end
module that assist the organizer.
title
user
seminar
price
total price
datepaid
method_of_payment
Bank data:
account_number
bank_code
bank_name
account_owner
Billing address:
name
address
zip
city
country
telephone
email
been_there
interests
expectations
background_knowledge
selected lodging options
accommodation (text)
food
known_from
notes
seats
attendees_names
kids
lodgings
Using lodging and food options
You can create “lodging options” and “food options” records that will
be available in the registration form. After you have created these
records, you can select them in the event records; the corresponding
options then will be displayed in the registration for for this event
and get saved in the registration record.
Canceling events
In case the speaker is ill or there are not enough registrations, you
can mark an event as canceled by checking “Has been canceled” in the
seminar record. This will mark the event as canceled in the front end
(the default style in the list view is stricken through plus a message
in the single view). You still need to manually notify and refund the
attendees who have registered so far.
Assigning event numbers
There are two common ways for assigning numbers to your event:
If you just want to have automatically assigned, unique, numeric
numbers for your events, you can use the UID field of the event
record.
If you would like to assign the numbers yourself or you need to have
non-numeric event IDs, you can use the “accreditation number” field
and change the front-end and email labels accordingly (see the
corresponding section in this manual about how to do this). In this
case, you need to make sure yourself that the IDs are unique.
Managing registrations
Registration for an event is possible until the registration deadline.
If the event has no such deadline, registration is possible until the
start of the event.
When a logged-in front-end user registers for a seminar, the following
happens:
It is checked whether it still is possible to register for that
seminar and the user still hasn't registered for that seminar yet.
Note: If you need to allow the same front-end user to register for
the same event multiple times, you can allow this in the event record.
In addition, the user can select a price, food options and other
options. The total price then is calculated from the selected price
and the number of seats.
An attendance record is entered into the database (into the page
configured via plugin.tx\_seminars.attendancesPID or, if the first
organizer for that event has a system folder for registrations
configured, in that page), making the connection between this front-
end user and the corresponding seminar. The statistics for that
seminar are immediately updated in the back end and front end,
preventing overbooked seminars.
A thank-you email is sent to the front-end user using the first
organizer of that seminar record as From: address and that organizer's
email footer. The thank-you email also has a disclaimer if the event
is planned and not confirmed yet. The disclaimer, says that the user
will be informed if this event will be confirmed.
A notification email is sent to that seminar's organizers (all of
them, not just the first), using the attendee's email address as
From: address.
Additional notification emails are sent if the event reaches the
minimum limit of registrations to be held, or if the event gets fully
booked. These notifications go to all organizers of this event, the
first organizer's email address is used as sender.These mails will
only be sent, if they are activated in the TypoScript setup. By
default, the mails will be sent.
The user will be redirected to the thank-you page.
The booked event will be visible on the “my events” page.
From the “my events” page the user has the possibility to unregister
from an event. When a user unregisters the corresponding attendances
record will be marked as hidden.
Displaying the seminar and registration statistics and details
In the **back-end module “Events”, you can
list and edit events
export events as CSV
display the registrations for an event
export the registrations for an event as CSV
send an email to the attendees of an event
CSV export of events
At the top in the event list in the back-end module Events , you’ll
find a button labelled "Download as CSV file" that will save the data of all
events on the current page as CSV.
CSV export of registrations
At the top in the registration list for an event in the back-end module
Events, you’ll find a button labelled "Download as CSV file" that will save
the data of all registrations of the selected event as CSV, also
including data from the registered FE user. Please note that the CSV file
contains the columns for the data from the registration records first and then
data from the corresponding FE user record.
The columns used for the export of
registrations is determined by the two configuration
variables fieldsFromFeUserForCsv and fieldsFromAttendanceForCsv.
If you want to export the registrations on the waiting queue, you have to set
showAttendancesOnRegistrationQueueInCSV to true.
The CSV export can be configured via TS Setup in plugin.tx_seminars
for the page where the event records are located. Please see the
reference for details.
CSV export of registrations is only available if:
the event has at least one registration, and
the logged-in BE user has read access to the events table and the
registrations table, and
the logged-in BE user has read access to all pages where the
registrations for that particular event are stored
Changing registrations
You can edit registration records using Web >
List as well as the back-end module Events.
Unregistering from an event
Front-end users can unregister themselves from an event using the “my
events” view if they are logged in and all of the following conditions
are met:
The event has an unregistration deadline set (or a global
unregistration deadline has been set), and the deadline has not passed
yet.
There are registrations on the waiting list, or the extension is
configured to allow unregistration even if the waiting list is empty.
Entering payments
You can also use this extension to record payments from participants
for their seminar. If you have received a payment (be in in cash, bank
transfer, credit card or whatever), edit the corresponding
registration record and fill in the following fields:
Has paid: Note that this field will go away soon. Instead, if
someone has paid will be deducted by whether a payment date has been
entered. So make sure to set a payment date for all attendances that
have been paid.
Date of payment (if this field is set, an attendance is considered
as paid, so always enter the date when you enter a payment)
Method of payment (optional, use it if you like to track this)
Tracking who has attended a seminar and who hasn't
If you want to record who has attended a seminar and who hasn't (e.g.,
for certificates), you can edit the corresponding registration record
and fill in this field:
Has attended
Linking to single seminar records
If you would like to link to the detailed description for a seminar
(from other seminar descriptions or from any other page), you can use
this format:
<URL of seminar listing page>?tx_seminars_pi1[showUid]=<UID of the
seminar>
For example, if the URL of the seminar listing page is
http://www.casebo.de/casebo-workshops.html and you would like to the
seminar with the UID 27, the complete URL to that seminar would be
this:
(In the links from the list view, the URLs contain an addition
ampersand after the question mark, but that can be ignored.)
Roles related to event records
Organizers can be listed on the event list view and the single
view. Each event must have at least one organizer. The organizers
receive an email when someone signs up for an event (or when someone
unregisters). The first organizer is used as the sender for the
emails to the attendees. So each organizer must have a valid email
address.
Attendees are the front-end users who are signed up for an event.
They van view the events for which they are registered in the “my
events” view. The attendees’ contact data is stored in the front-end
user record, not in the registration records. The extension may be
configured so that attendees can my the list of registrations for
their events in the front end.
Speakers are the persons speaking at an event. There can be
several speakers for an event (and even none). The speakers are listed
on the event list view and the event single view. The speakers
currently are not used for any email related activities; so they do
not need to have an email address. If speakers should be able to view
the registration lists for their events, their corresponding front-end
user needs to be set as event manager for their events.
Tutors, partners, tutors and leaders are just speakers that are
listed under a different heading.
Owners are the front-end users who have created an event record in
the front end. They can view their created events in the “my entered
events” view.
Event managers/VIPs are special front-end users who are allowed to
view the list of registrations for an event from their “my managed
events” list. The extension can be configured so that all users from e
a certain front-end user group are considered to be event managers for
all events. In addition, it can be configured so that event managers
may edit event records in the front end.
Reference
There are two sections in TS setup that contain setting for this
extension: plugin.tx_seminars and plugin.tx_seminars_pi1.
Setup common for front-end plug-in and back-end module in plugin.tx_seminars
You can configure the plug-in using your TS template setup in the form
plugin.tx_seminars. property = value. The values in this table can
only be configured using your TypoScript setup, but not via flexforms.
Property
Property:
Data type
Data type:
Description
Description:
Default
Default:
Property
enableRegistration
Data type
boolean
Description
Set this to 0 if you don't use the registration feature for this site
and would like to disable the configuration check for this.
switch whether to use formal/informal language for some shared code
(in emails, some labels and some error messages).Allowed values
are:formal | informal
Default
formal
Property
hideFieldsInThankYouMail
Data type
string
Description
comma-separated list of section names that shouldn't be displayed in
the thank-you email to the user
allowed values are in: hello, title, uid, ticket_id, price, seats, to
tal_price,attendees_names,lodgings,accommodation,foods,food,checkbox
es, kids, accreditation_number, credit_points, date, time, place,
room,paymentmethod, billing_address,interests,url,
footer,planned_disclaimer,unregistration_notice
whether to use the label “Price” for the standard price (instead of
“standard price”) in email to the participant
Default
Property
hideFieldsInNotificationMail
Data type
string
Description
Comma-separated list of section names from the registration that
shouldn't be displayed in the notification email to the organizers.
These fields are the big blocks in that email, and some are further
divided.
Allowed values are in:
summary: the attendee's name, the event title and the event date
seminardata: date from the seminar record, configurable via
showSeminarFieldsInNotificationMail
feuserdata: data from the front-end user record, configurable via
showFeUserFieldsInNotificationMail
attendancedata: data from the attendance record, configurable via
showAttendanceFieldsInNotificationMail
Default
Property
showSeminarFieldsInNotificationMail
Data type
string
Description
comma-separated list of field names from seminars that should be
mentioned in the notification email to the organizers (in the
“seminardata” section)allowed values are in: uid, event_type, title,
subtitle, titleanddate, date, time, accreditation_number,
credit_points, room, place, speakers, price_regular,
price_regular_early, price_special, price_special_early,
attendees,allows_multiple_registrations,attendees_min,
attendees_max, vacancies, enough_attendees, is_full, notes
comma-separated list of field names from fe_users that should be
mentioned in the notification email to the organizers (in the
“feuserdata” section)allowed values are all column names from
fe_users.
Default
username,name,email,address,zip,city,telephone
Property
showAttendanceFieldsInNotificationMail
Data type
string
Description
comma-separated list of field names from attendances that should be
mentioned in the notification email to the organizers (in the
“attendancedata” section)allowed values are in: uid, interests,
expectations, background_knowledge, lodgings, accommodation, foods,
food, known_from, notes, checkboxes, price, seats, total_price,
attendees_names, kids, method_of_payment, gender, name, address,
zip, city, country, telephone, email
Whether to send the additional notification emails to the organizers
or not. Additional notification mails are sent if for example an event
gets full.
Default
1 (= active)
Property
sendNotification
Data type
boolean
Description
Whether to send a notification to the organizers if a user has
registered.
Default
1 (= active)
Property
sendNotificationOnUnregistration
Data type
boolean
Description
Whether to send a notification to the organizers if a user has
unregistered.
Default
1 (= active)
Property
sendNotificationOnRegistrationForQueue
Data type
boolean
Description
Whether to send a notification to the organizers if someone registered
for the queue.
Default
1 (= active)
Property
sendNotificationOnQueueUpdate
Data type
boolean
Description
Whether to send a notification to the organizers if the queue has been
updated.
Default
1 (= active)
Property
sendConfirmation
Data type
boolean
Description
Whether to send a confirmation to the user after the user has
registered.
Default
1 (= active)
Property
sendConfirmationOnUnregistration
Data type
boolean
Description
Whether to send a confirmation to the user if the user has
unregistered.
Default
1 (= active)
Property
sendConfirmationOnRegistrationForQueue
Data type
boolean
Description
Whether to send a confirmation to the user if the user has registered
for the queue.
Default
1 (= active)
Property
sendConfirmationOnQueueUpdate
Data type
boolean
Description
Whether to send a confirmation to the user if the queue has been
updated.
Default
1 (= active)
Property
addRegistrationCsvToOrganizerReminderMail
Data type
boolean
Description
Whether to add the CSV file of the registrations when sending the
reminder email to the organizers.
Default
0 (=inactive)
Property
timeFormat
Data type
string
Description
the time format (in strftime format),
@deprecated #2342 will be removed in seminars 6.0
Default
%H:%M
Property
dateFormatYMD
Data type
string
Description
the strftime format code for the full date (change this to your
local date format), @deprecated #2342 will be removed in seminars 6.0
Default
%d.%m.%Y
Property
currency
Data type
string
Description
ISO 4217 alpha 3 code of the currency to be used, must be valid
Default
EUR
Property
unregistrationDeadlineDaysBeforeBeginDate
Data type
integer
Description
Number of days before the start of an event until unregistration is
possible. (If you want to disable this feature just leave the value
empty.)
Default
Property
allowRegistrationForStartedEvents
Data type
boolean
Description
whether registration should be possible even if an event has already
started
Default
0
Property
allowRegistrationForEventsWithoutDate
Data type
Boolean
Description
Whether registration for events without a date is possible
Default
0
Property
allowUnregistrationWithEmptyWaitingList
Data type
Boolean
Description
Whether unregistration is possible even when there are no
registrations on the waiting list yet.
Default
0
Property
showVacanciesThreshold
Data type
integer
Description
If there are at least this many vacancies, “enough” (localized) is
displayed instead of the exact number.
Set this to a number higher than the highest number of vacancies if
you want the exact number to be always displayed.
Default
10
Property
filenameForRegistrationsCsv
Data type
string
Description
the filename proposed for CSV export of registration lists
Default
registrations.csv
Property
fieldsFromEventsForCsv
Data type
string
Description
comma-separated list of field names from tx_seminars_seminars that
will be used for CSV exportAllowed values are in:uid, tstamp, crdate,
title, subtitle, teaser, description, event_type,
accreditation_number, credit_points, date, time,
deadline_registration, deadline_early_bird, place, room, lodgings,
foods, speakers, partners, tutors, leaders, price_regular,
price_regular_early, price_special,
price_special_early, additional_information,
payment_methods, organizers, attendees_min, attendees_max,
attendees, vacancies, enough_attendees, is_full, cancelled
whether to show attendances on the registration queue in the CLI CSV
export or not
Default
0
Eigenschaft
addExcelSpecificSeparatorLineToCsv
Datentyp
boolean
Beschreibung
whether to add the Excel-specific "sep=;" line to the CSV
Standardwert
0
Property
sendCancelationDeadlineReminder
Data type
boolean
Description
whether to send a cancellation deadline reminder to the organizers
Default
0
Property
sendEventTakesPlaceReminderDaysBeforeBeginDate
Data type
integer
Description
how many days before an events' begin date the organizers should be
reminded about this event via email, zero disables the reminder
Default
0
Property
attendancesPID
Data type
page_id
Description
PID of the sysfolder where event registrations (attendances) will be
stored
Default
None
[tsref:plugin.tx_seminars]
Setup for the Seminar Manager front-end plug-in in plugin.tx_seminars_pi1
You can configure the plug-in using flexforms of the front-end plug-in
(for most values) or your TS template setup in the form
plugin.tx_seminars_pi1. property = value.
If your want to set a value for all instances of the plug-in in one
place, use the TS template setup. If you use flexforms, make sure to
set the values at all relevant instances of the plug-in: It doesn't do
to specify the fields for the online registration in the seminar list
front-end plug-in—you need to set these fields in the online
registration front-end plug-in.
Note: If you set any non-empty value in the flexforms, this will
override the corresponding value from TS Setup.
Property
Property:
Data type
Data type:
Description
Description:
Default
Default:
Property
enableRegistration
Data type
boolean
Description
Set this to 0 if you don't use the registration feature for this site
and would like to disable the configuration check for this.
Default
1
Property
what_to_display
Data type
string
Description
The kind of front-end plug-in to display. Allowed values are in:
seminar\_list, single\_view, topic\_list,my\_events,
my\_vip\_events, seminar\_registration, list\_registrations,
list\_vip\_registrations, edit\_event, my\_entered\_events,
category\_list, event\_headline This must be set using flexforms.
Default
seminar_list
Property
templateFile
Data type
string
Description
location of the HTML template for the FE plugin
Default
EXT:seminars/pi1/seminars_pi1.tmpl
Property
salutation
Data type
string
Description
Switch whether to use formal/informal language on the front
end.Allowed values are:formal | informal
Default
formal
Property
showSingleEvent
Data type
integer
Description
The UID of an event record. If an event is selected, the plug-inalways
shows the single view of this event and not the list.
This must be set using flexforms.
Default
Property
timeframeInList
Data type
string
Description
the time-frame from which events should be displayed in the list view.
Select one of these keywords:all, past, pastAndCurrent, current,
currentAndUpcoming, upcoming, deadlineNotOver, today
Default
currentAndUpcoming
Property
hideColumns
Data type
string
Description
comma-separated list of column names that shouldn't be displayed in
the list view, e.g. organizers,price\_special
The order of the elements in this list has no influence on the
output.Allowed values are in: category, title,subtitle,uid,
event_type, language, accreditation_number, credit_points, teaser,
speakers, date, time, expiry, place, city, country, seats,
price_regular, price_special, total_price, organizers,
target_groups, attached_files, vacancies, status_registration,
registration, list_registrations, status, edit, imagePlease note that
some columns will only be shown if a front-end user currently is
logged in.
comma-separated list of field names that shouldn't be displayed in the
detail view, e.g. organizers,price\_special
The order of the elements in this list has no influence on the
output.Allowed values are in: event_type, title, subtitle, language,
description, accreditation_number, credit_points, category, date,
uid, time, place, room, expiry, speakers, partners, tutors, leaders, p
rice_regular,price_special,additional_information,
target_groups, attached_files,
paymentmethods, target_groups, organizers, vacancies,
deadline_registration, otherdates, eventsnextday, registration, back,
image, requirements, dependencies
Default
credit_points,eventsnextday
Property
hideSearchForm
Data type
boolean
Description
whether to show the search form in the list view
Default
0
Property
displaySearchFormFields
Data type
string
Description
comma-separated list of search options which should be shown in the
search widget. If no field is displayed the search widget will be
hidden. Allowed values are in: event_type, language, country, city,
place, full_text_search, date, age, organizer, price, categories
Default
Property
limitListViewToCategories
Data type
string
Description
comma-separated list of category UIDs to filter the list view for,
leave empty to have no such filter
Default
Property
limitListViewToPlaces
Data type
string
Description
comma-separated list of place UIDs to filter the list view for, leave
empty to have no such filter
Default
Property
limitListViewToOrganizers
Data type
string
Description
comma-separated list of organizer UIDs to filter the list view for,
leave empty to have no such filter
Default
Property
showOnlyEventsWithVacancies
Data type
boolean
Description
whether to show only events with vacancies on in the list view
Default
0
Property
seminarImageListViewHeight
Data type
integer
Description
the maximum height of the image of a seminar in the list view
Default
43
Property
seminarImageListViewWidth
Data type
integer
Description
the maximum width of the image of a seminar in the list view
Default
70
Property
hidePageBrowser
Data type
boolean
Description
whether to show the page browser in the list view
Default
0
Property
hideCanceledEvents
Data type
boolean
Description
whether to show canceled events in the list view
Default
0
Property
sortListViewByCategory
Data type
boolean
Description
whether the list view should always be sorted by category (before
applying the normal sorting)
Default
0
Property
categoriesInListView
Data type
string
Description
whether to show only the category title, only the category icon or
both. Allowed values are: icon, text, both
Default
both
Property
generalPriceInList
Data type
boolean
Description
whether to use the label “Price” as column header for the standard
price (instead of “Standard price”)
Default
0
Property
generalPriceInSingle
Data type
boolean
Description
whether to use the label “Price” as heading for the standard price
(instead of “Standard price”) in the detailed view and on the
registration page
Default
0
Property
omitDateIfSameAsPrevious
Data type
boolean
Description
whether to omit the date in the list view if it is the same as the
previous item's (useful if you often have several events at the same
date), @deprecated #1788 will be removed in seminars 5.0
Default
0
Property
accessToFrontEndRegistrationLists
Data type
string
Description
who is allowed to view the list of registrations on the front end;
allowed values are: attendees_and_managers, login, world
Default
attendees_and_managers
Property
showSpeakerDetails
Data type
boolean
Description
whether to show detailed information of the speakers in the single view;
if disabled, only the names will be shown
Default
1
Property
showSiteDetails
Data type
boolean
Description
whether to show detailed information of the locations in the single
viewif disabled, only the name of the locations will be shown
Default
1
Property
limitFileDownloadToAttendees
Data type
boolean
Description
whether file downloads are limited to attendees only
Default
1
Property
showFeUserFieldsInRegistrationsList
Data type
string
Description
comma-separated list of FEuser fields to show in the list of
registrations for an event
Default
name
Property
showRegistrationFieldsInRegistrationList
Data type
string
Description
comma-separated list of registration fields to show in the list of
registrations for an event
Default
None
Property
enableSortingLinksInListView
Data type
boolean
Description
whether to add sorting links to the headers in the list view
Default
1
Property
linkToSingleView
Data type
string
Description
when to link to the single view: always, never, onlyForNonEmptyDescription
Default
always
Property
speakerImageWidth
Data type
integer
Description
width of the speaker image in the event single view
Default
150
Property
speakerImageHeight
Data type
integer
Description
height of the speaker image in the event single view
Default
150
Property
pages
Data type
integer
Description
PID of the sysfolder that contains all the event records (e.g. the
starting point)
Default
None
Property
recursive
Data type
integer
Description
level of recursion that should be used when accessing the
startingpoint
Default
None
Property
listPID
Data type
page_id
Description
PID of the FE page that contains the event list
Default
None
Property
detailPID
Data type
page_id
Description
PID of the FE page that contains the single view
Default
None
Property
myEventsPID
Data type
page_id
Description
PID of the FE page that contains the "my events" list
Default
None
Property
registerPID
Data type
page_id
Description
PID of the FE page that contains the seminar registration plug-in
Default
None
Property
loginPID
Data type
page_id
Description
PID of the FE page that contains the login form or onetimeaccount
Default
None
Property
registrationsListPID
Data type
page_id
Description
PID of the page that contains the registrations list for participants
Default
None
Property
registrationsVipListPID
Data type
page_id
Description
PID of the page that contains the registrations list for editors
Default
None
Property
defaultEventVipsFeGroupID
Data type
integer
Description
UID of the FE user group that is allowed to see the registrations of
all events
Default
None
Property
seminarImageSingleViewWidth
Data type
integer
Description
the maximum width of the image of a seminar in the single view
Default
260
Property
seminarImageSingleViewHeight
Data type
integer
Description
the maximum height of the image of a seminar in the single view
Default
160
[tsref:plugin.tx_seminars_pi1]
Setup for the list view
For the list view, there are some additional configuration option that
can only be set using the TS setup in the form
plugin.tx_seminars_pi1.listView. property = value. Those values
can not be set via Flexforms.
Property
Property:
Data type
Data type:
Description
Description:
Default
Default:
Property
orderBy
Data type
string
Description
The default sort order in list view. Allowed values are:category,
title, uid, event_type, accreditation_number, credit_points,
speakers, date, time, place, price_regular, price_special,
organizers, vacancies
Default
date
Property
descFlag
Data type
boolean
Description
whether to show the list view ordered in ascending (=0) or descending
order (=1)
Default
0
Property
results_at_a_time
Data type
integer
Description
The number of events that shall be displayed per page
Default
20
Property
maxPages
Data type
integer
Description
the number of neighboring pages to list in the page browser
Default
5
[tsref:plugin.tx_seminars_pi1.listView]
Setup for the registration digest email
These configuration options can only be set via TypoScript setup
within the plugin.tx_seminars.registrationDigestEmail namespace,
not via flexforms.
These settings only affect the seminars Scheduler task.
Property
Property:
Data type
Data type:
Description
Description:
Default
Default:
Property
enable
Data type
boolean
Description
whether to send out the emails when the seminars Scheduler task is executed
The PSR-14 event
\OliverKlee\Seminars\Seo\Event\AfterSlugGeneratedEvent
gets triggered after a slug has been generated or updated for an event record,
and before the slug gets written to the database.
Listeners may overwrite the slug if desired.
Example
Registration of the event listener in the extension's Services.yaml:
EXT:my_extension/Configuration/Services.yaml
services:# Place here the default dependency injection configurationMyVendor\MyExtension\EventListener\Seo\SlugGeneratorEventListener:tags:-name:event.listeneridentifier:'generateEventSlugsWithUid'
seminars is undergoing a major rewriting to keep up with modern TYPO3 programming
techniques. We try to keep changes as small as possible. Please inform yourself about changes
by reading CHANGELOG.md, the DocBlocks of interfaces you implement and this
chapter of the documentation before updating to a new seminars major version.
Hooks for the single view
There is a hook into the single view. It is executed just before the template
gets rendered to HTML. You may set custom markers or change existing values for
markers. See also Classes/Frontend/DefaultController.php for available
properties and methods.
Register your class that implements
\OliverKlee\Seminars\Hooks\Interfaces\SeminarSingleView
like this in ext_localconf.php of your extension:
useOliverKlee\Seminars\Hooks\Interfaces\SeminarSingleView;
classTx_Seminarspaypal_Hooks_SingleViewimplementsSeminarSingleView{
/**
* Modifies the seminar details view.
*
* This function will be called for all types of seminars (single events, topics, and dates).
*
* @param DefaultController $controller the calling controller
*/publicfunctionmodifySingleView(DefaultController $controller): void{
// Your code here
}
}
Copied!
Hooks for the list view
There are 4 hooks into the list view(s). First hook is called just before the
seminar bag (the seminars to show in the list) or the registration bag (the
seminars a user is registered for) is build. It is always called, even when
there will be an empty list.
The other hooks are called during seminar list table creation:
just before the table header is rendered to HTML
just before a table row for a certain seminar or registration is rendered to HTML
in case of a my_event list: right after the row hook mentioned above
just before the table footer is rendered to HTML
In these hooks you may set custom markers or change existing values for markers. See also
Classes/Frontend/DefaultController.php for available properties and methods.
The hook to the seminar or registration bag building process allows for changing
the seminars/registrations shown in the list. You may add more filters or remove
existing ones. See also Classes/BagBuilder/AbstractBagBuilder.php,
Classes/BagBuilder/EventBagBuilder.php and Classes/BagBuilder/Registration.php
for available properties and methods.
There are 7 types of lists your implementation must handle:
topic list (topic_list)
seminar list (seminar_list)
my seminars (my_events)
my VIP seminars (my_vip_events)
events next day (events_next_day)
other dates (other_dates)
The last two list types (events next day and other dates) are part of the single
view, but handled as fully rendered seminar lists (including bag building).
Register your class that implements
\OliverKlee\Seminars\Hooks\Interfaces\SeminarListView
like this in ext_localconf.php of your extension:
useOliverKlee\Seminars\Hooks\Interfaces\SeminarListView;
classTx_Seminarspaypal_Hooks_ListViewimplementsSeminarListView{
/**
* Modifies the list view seminar bag builder (the item collection for a seminar list).
*
* Add or alter limitations for the selection of seminars to be shown in the
* list.
*
* @see AbstractBagBuilder::getWhereClausePart()
* @see AbstractBagBuilder::setWhereClausePart()
*
* This function will be called for these types of seminar lists: "topics", "seminars",
* "my vip seminars", "my entered events", "events next day", "other dates".
*
* @param DefaultController $controller the calling controller
* @param EventBagBuilder $builder the bag builder
* @param string $whatToDisplay the flavor of list view: 'seminar_list', 'topic_list',
* 'my_vip_events', 'events_next_day' or 'other_dates'
*/publicfunctionmodifyEventBagBuilder(
DefaultController $controller,
EventBagBuilder $builder,
string $whatToDisplay
): void{
// Your code here
}
/**
* Modifies the list view registration bag builder (the item collection for a "my events" list).
*
* Add or alter limitations for the selection of seminars to be shown in the
* list.
*
* @see AbstractBagBuilder::getWhereClausePart()
* @see AbstractBagBuilder::setWhereClausePart()
*
* This function will be called for "my events" lists only.
*
* @param DefaultController $controller the calling controller
* @param RegistrationBagBuilder $builder the bag builder
* @param string $whatToDisplay the flavor of list view ('my_events' only?)
*/publicfunctionmodifyRegistrationBagBuilder(
DefaultController $controller,
RegistrationBagBuilder $builder,
string $whatToDisplay
): void{
// Your code here
}
/**
* Modifies the list view header row in a seminar list.
*
* This function will be called for all types of seminar lists ("topics",
* "seminars", "my seminars", "my vip seminars", "my entered events",
* "events next day", "other dates").
*
* @param DefaultController $controller the calling controller
*/publicfunctionmodifyListHeader(DefaultController $controller): void{
// Your code here
}
/**
* Modifies a list row in a seminar list.
*
* This function will be called for all types of seminar lists ("topics",
* "seminars", "my seminars", "my vip seminars", "my entered events",
* "events next day", "other dates").
*
* @param DefaultController $controller the calling controller
*/publicfunctionmodifyListRow(DefaultController $controller): void{
// Your code here
}
/**
* Modifies a list view row in a "my seminars" list.
*
* This function will be called for "my seminars" , "my vip seminars",
* "my entered events" lists only.
*
* @param DefaultController $controller the calling controller
*/publicfunctionmodifyMyEventsListRow(DefaultController $controller): void{
// Your code here
}
/**
* Modifies the list view footer in a seminars list.
*
* This function will be called for all types of seminar lists ("topics",
* "seminars", "my seminars", "my vip seminars", "my entered events",
* "events next day", "other dates").
*
* @param DefaultController $controller the calling controller
*/publicfunctionmodifyListFooter(DefaultController $controller): void{
// Your code here
}
}
Copied!
Hooks for the selector widget
There is a hook into the selector widget of the list view. If the selector widget
is activated, the hook is executed just before the template gets rendered to HTML.
You may set custom markers or change existing values for markers. See also
Classes/Frontend/SelectorWidget.php for available properties and methods.
Register your class that implements
\OliverKlee\Seminars\Hooks\Interfaces\SeminarSelectorWidget
like this in ext_localconf.php of your extension:
useOliverKlee\Seminars\Hooks\Interfaces\SeminarSelectorWidget;
classTx_Seminarspaypal_Hooks_EventSelectorWidgetimplementsSeminarSelectorWidget{
/**
* Modifies the seminar widget, just before the subpart is fetched.
*
* This function will be called for all types of seminar lists, if `displaySearchFormFields` is configured for it.
*
* @param SelectorWidget $selectorWidget
* @param EventBag $seminarBag the seminars used to create the selector widget
*/publicfunctionmodifySelectorWidget(
SelectorWidget $selectorWidget,
EventBag $seminarBag
): void{
// Your code here
}
}
Copied!
Hooks for the registration notification emails
There are the following hooks into the registration notification emails:
just before the attendee notification template is rendered to plain text
just before the attendee notification template is rendered to HTML
just before the attendee notification is sent
just before the organizer notification is sent
just before the additional organizer notifications are sent
You may set custom markers or change existing values for markers in the template hooks.
See also Classes/Model/Registration.php for available properties and methods.
The plain text hook is always called, because a HTML email always contains a plain text version, too.
The HTML hook is called only if emails are sent as HTML.
With the other hooks you may modify the complete MailMessage object (e.g. sender or receiver addresses,
subject line or the complete body). See also sysext/core/Classes/Mail/MailMessage.php for
available properties and methods.
Register your class that implements
\OliverKlee\Seminars\Hooks\Interfaces\RegistrationEmail
like this in ext_localconf.php of your extension:
useOliverKlee\Seminars\Hooks\Interfaces\RegistrationEmail;
classTx_Seminarspaypal_Hooks_RegistrationEmailimplementsRegistrationEmail{
/**
* Modifies the attendee "Thank you" email just before it is sent.
*
* You may modify the recipient or the sender as well as the subject and the body of the email.
*
* @param string $emailReason Possible values:
* - confirmation
* - confirmationOnUnregistration
* - confirmationOnRegistrationForQueue
* - confirmationOnQueueUpdate
*/publicfunctionmodifyAttendeeEmail(
MailMessage $email,
Registration $registration,
string $emailReason
): void{
// Your code here
}
/**
* Modifies the attendee "Thank you" email body just before the subpart is rendered to plain text.
*
* This method is called for every confirmation email, even if HTML emails are configured.
* The body of a HTML email always contains a plain text version, too.
*
* You may modify or set marker values in the template.
*
* @param Registration $registration
* @param string $emailReason Possible values:
* - confirmation
* - confirmationOnUnregistration
* - confirmationOnRegistrationForQueue
* - confirmationOnQueueUpdate
*/publicfunctionmodifyAttendeeEmailBodyPlainText(
Template $emailTemplate,
Registration $registration,
string $emailReason
): void{
// Your code here
}
/**
* Modifies the attendee "Thank you" email body just before the subpart is rendered to HTML.
*
* This method is called only, if HTML emails are configured for confirmation emails.
*
* You may modify or set marker values in the template.
*
* @param Registration $registration
* @param string $emailReason Possible values:
* - confirmation
* - confirmationOnUnregistration
* - confirmationOnRegistrationForQueue
* - confirmationOnQueueUpdate
*/publicfunctionmodifyAttendeeEmailBodyHtml(
Template $emailTemplate,
Registration $registration,
string $emailReason
): void{
// Your code here
}
/**
* Modifies the organizer notification email just before it is sent.
*
* You may modify the recipient or the sender as well as the subject and the body of the email.
*
* @param string $emailReason Possible values:
* - notification
* - notificationOnUnregistration
* - notificationOnRegistrationForQueue
* - notificationOnQueueUpdate
*/publicfunctionmodifyOrganizerEmail(
MailMessage $email,
Registration $registration,
string $emailReason
): void{
// Your code here
}
/**
* Modifies the organizer additional notification email just before it is sent.
*
* You may modify the recipient or the sender as well as the subject and the body of the email.
*
* @param string $emailReason Possible values:
* - 'EnoughRegistrations' if the event has enough attendances
* - 'IsFull' if the event is fully booked
* see RegistrationManager::getReasonForNotification()
*/publicfunctionmodifyAdditionalEmail(
MailMessage $email,
Registration $registration,
string $emailReason
): void{
// Your code here
}
}
Copied!
Hooks for the salutation in all emails to the attendees
It is also possible to extend the salutation used in the emails with
the following hook:
modifySalutation for tx_seminars_EmailSaluation which is called just
before the salutation is returned by getSalutation
To use this hook, you need to create a class with a method named
modifySalutation. The method in your class should expect two
parameters. The first one is a reference to an array with the following
structure:
The second parameter is an user object FrontEndUser.
Your class then needs to be included and registered like in this
example:
// register my hook objects
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['seminars']['modifyEmailSalutation'][] = \MyVendor\MyExt\Hooks\ModifySalutationHook::class;
Copied!
Hooks for the date and time span creation
There are hooks into the date and time span creation of the seminars. If at any place a date or time span
is required, these hooks are called to allow modification of the date or time span assembling. See also
Classes/OldModel/AbstractTimeSpan.php for details about the default methods.
Register your class that implements
\OliverKlee\Seminars\Hooks\Interfaces\DateTimeSpan
like this in ext_localconf.php of your extension:
useOliverKlee\Seminars\Hooks\Interfaces\DateTimeSpan;
classTx_Seminarspaypal_Hooks_DateTimeSpanimplementsDateTimeSpan{
/**
* Modifies the date span string.
*
* This allows modifying the assembly of start and end date to the date span.
* E.g., for Hungarian: '01.-03.01.2019' -> '2019.01.01.-03.'.
*
* The date format for the date parts are configured in TypoScript (`dateFormatYMD` etc.).
* Get them from `$dateTimeSpan->getConfValueString('dateFormatYMD')` etc. The event
* dates are also retrievable:
* `$beginDateTime = $dateTimeSpan->getBeginDateAsTimestamp();`
* `$endDateTime = $dateTimeSpan->getEndDateAsTimestamp();`
*
* @param string $dateSpan the date span produced by `AbstractTimeSpan::getDate()`
* @param AbstractTimeSpan $dateTimeSpan the date provider
* @param string $dash the glue used by `AbstractTimeSpan::getDate()` (may be HTML encoded)
*
* @return string the modified date span to use
*/publicfunctionmodifyDateSpan(
string $dateSpan,
AbstractTimeSpan $dateTimeSpan,
string $dash
): string{
// Your code here
}
/**
* Modifies the time span string.
*
* This allows modifying the assembly of start and end time to the time span.
* E.g., for Hungarian: '9:00-10:30' -> '9:00tol 10:30ban'.
*
* The time format for the time parts is configured in TypoScript (`timeFormat`).
* Get it from `$dateTimeSpan->getConfValueString('timeFormat')`. The event
* times are also retrievable:
* `$beginDateTime = $dateTimeSpan->getBeginDateAsTimestamp();`
* `$endDateTime = $dateTimeSpan->getEndDateAsTimestamp();`
*
* @param string $timeSpan the time span produced by `AbstractTimeSpan::getTime()`
* @param AbstractTimeSpan $dateTimeSpan the date provider
* @param string $dash the glue used by `AbstractTimeSpan::getTime()` (may be HTML encoded)
*
* @return string the modified time span to use
*/publicfunctionmodifyTimeSpan(
string $timeSpan,
AbstractTimeSpan $dateTimeSpan,
string $dash
): string{
// Your code here
}
}
Copied!
Hooks for the emails sent from the back-end module
The hook classes need to be registered and written like this:
classBackEndModuleHookimplementsBackEndModule{
/**
* Modifies the general email sent via the back-end module.
*
* Note: This hook does not get called yet. It is just here so the interface
* is finalized.
*
* @param Registration $registration
* the registration to which the email refers
*/publicfunctionmodifyGeneralEmail(Registration $registration, MailMessage $email): void{…}
Copied!
Hooks for the CSV generation of registration lists
There is a hook into the CSV generation of registration lists to modify the generated CSV text.
Register your class that implements
\OliverKlee\Seminars\Hooks\Interfaces\RegistrationListCsv
like this in ext_localconf.php of your extension:
useOliverKlee\Seminars\Hooks\Interfaces\RegistrationListCsv;
classTx_Seminarspaypal_Hooks_RegistrationListCsvimplementsRegistrationListCsv{
/**
* Modifies the rendered CSV string.
*
* This allows modifying the complete CSV text right before it is delivered.
*
* @param string $csv the CSV text produced by `AbstractRegistrationListView::render()`
* @param AbstractRegistrationListView $registrationList the CSV data provider
*
* @return string the modified CSV text to use
*/publicfunctionmodifyCsv(string $csv, AbstractRegistrationListView $registrationList): string{
// Your code here
}
}
Copied!
Hooks for the data sanitization on TCE validation
There is a hook into the data handler to additionaly manipulate seminars FlexForm data during
TCE validation (just before storing the data). You may apply additional constraints and dynamically
adjust values (e.g. registration deadline = begin date - 14 days).
TCE validation is a TYPO3-defined process. seminars gets the form values from the content element's
FlexForm and stores required changes of the values into the database.
Register your class that implements
\OliverKlee\Seminars\Hooks\Interfaces\DataSanitization
like this in ext_localconf.php of your extension:
useOliverKlee\Seminars\Hooks\Interfaces\DataSanitization;
classTx_Seminarspaypal_Hooks_DataSanitizationimplementsDataSanitization{
/**
* Sanitizes event data values.
*
* The TCE form event values need to be sanitized when storing them into the
* database. Check the values with additional constraints and provide the modified
* values to use back in a returned array.
*
* @param int $uid
* @param mixed[] $data the events data as stored in database
*
* @return mixed[] the data to change, [] for no changes
*/publicfunctionsanitizeEventData(int $uid, array $data): array{
// Your code here
}
}
Copied!
Known problems
The seminar hours are displayed without a unit, e.g. “17:00” instead
of “17:00 h”.
All registrations (paid and unpaid) are counted for the seminar
statistics.
In some cases, the list view in the front-end plug-in may be empty. Do
this:
Check that all seminars lie within the configured time window for the
list view (the default is current and upcoming events). Events without
a begin date/time always appear as an upcoming event.
All non-empty changes at the flexforms of the plug-in overwrite the
settings of the corresponding TS setup. Empty data in the flexforms
don't overwrite non-empty data from the TS setup.
The search in the list view covers pretty most of what is visible in
the single view except for the payment methods (this is intended).
The inlining of CSS in HTML emails is available in Composer-mode only
as this feature makes use of a third-party library.
The CSV export currently will be empty if the b13/bolt package is
installed.
The scheduler tasks currently cannot read their configuration if the
b13/bolt package is installed.
Reference to the headline
Copy and freely share the link
This link target has no permanent anchor assigned.The link below can be used, but is prone to change if the page gets moved.