After having installed this extension (and the required extensions) through 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).
Choose a login box extension and a front-end user registration extension, install and configure them. On my site, I use newloginbox and sr_feuser_register, but you may want to use others. You can leave out the front-end user registration extension if you don't want front-end users to be able to create their own accounts.
If you use the extension sr_feuser_register, make sure that the salutation modes of that extension and the seminars extension are the same so that your users get a consistent experience.
Make sure that you make the following fields required, or this extension won't work properly: name, email, username
If you like, you can install the extension erotea_date2cal to add a nice calendar widget to date and time fields on the back end (e.g. the start date and time of a seminar).
This extension uses two different HTML templates:
template path | contents | TS setup variable |
seminars.tmpl | automatic e-mails | plugin.tx_seminars.templateFile (not in flexforms) |
pi1/seminars_pi1.tmpl | front-end output | plugin.tx_seminars_pi1.templateFile (also in flexforms) |
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 *.tmpl 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 template, you can also use the flexforms of the plug-in for setting the location.
Change the template to your liking.
First, include the Seminars 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.
These are the variables you absolutely need to set to get this extension up and running:
plugin.tx_seminars.attendancesPID
plugin.tx_seminars_pi1.baseURL
plugin.tx_seminars_pi1.registerPID
plugin.tx_seminars_pi1.listPID
plugin.tx_seminars_pi1.loginPID
Note that the notification e-mail to the organizer and the list view show the headings even for empty fields, while the single view and the notification e-mail to the participant remove the headings for some seminar properties (not all, just where it makes sense).
You can set up to two different prices for each event: a “standard price” and a “special” price, e.g. for students and people on the job. In the single view, the standard price always gets displayed (even if it is 0), while the special price only gets displayed if it is not 0.
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 e-mails 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 view:
plugin.tx_seminars_pi1._LOCAL_LANG.language.label_price_regular
plugin.tx_seminars_pi1._LOCAL_LANG.language.label_price_special
For the e-mails to the attendees:
plugin.tx_seminars._LOCAL_LANG.language.label_price_regular
plugin.tx_seminars._LOCAL_LANG.language.label_price_special
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.
You can change most of the localized strings that are used on the front end and for the e-mails. (The localized strings for the back end and the input form labels for the online registration currently cannot be changed.)
When you want to change some strings, please don't change locallang.xml or pi1/locallang.xml 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.xml or pi1/locallang.xml.
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.xml) or
plugin.tx_seminars_pi1._LOCAL_LANG.language.key (for strings from pi1/locallang.xml)
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 your 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.
When looking to the source of the HTML output of this extension, you will see that there are some parts of the output (for example table cells) marked to belong to a certain class. But not every part has as 'class=”xyz”'—we have only those classes that are actually used in the CSS file so that the HTML code stays lean. If needed, you can add classes to these parts by adding them to your TypoScript setup (in the template):
By default, the organizer field in the ListView has no class added to keep the HTML-Output as clean as possible. It looks like this:
[...]<td>[name of the organizer]<td>[...]
If you add the following line to your setup,
plugin.tx_seminars_pi1.class_listorganizers = organizers
the output shows us the following:
[...]<td class="tx-seminars-pi1-organizers">[name of the organizer]</td>[...]
So the resulting class name will be tx-seminars-pi1 and the value from the corresponding TS rule appended. Please not that the last part of the name in the TS setup (“class_listorganizers”) needs to match the string in the HTML template (“###CLASS_LISTORGANIZERS###”). The only difference lies in the capitalization and the “###”.
Then you can add a rule like this to your CSS file:
.tx-seminars-pi1-organizers { ...;}
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 canceled
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 stylesheet 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:
.tx-seminars-pi1-vacancies-available .tx-seminars-pi1-square {background-color: #00a500;
color: inherit;
}
.tx-seminars-pi1-vacancies-2 .tx-seminars-pi1-square, .tx-seminars-pi1-vacancies-1 .tx-seminars-pi1-square {background-color: #ffff3c;
color: inherit;
}
.tx-seminars-pi1-vacancies-0 .tx-seminars-pi1-square, .tx-seminars-pi1-cancelled .tx-seminars-pi1-square {background-color: #c30000;
color: inherit;
}
In addition to the website_users_folder, you need to create one or more system folders that will contain records of the following types:
speakers (not required, but recommended)
seminar sites (not required, but recommended)
seminar registrations (required if you intend to manage registrations)
seminars (required)
organizers (required if you want to use the online registration feature)
payment methods (only if you intend to manage different payment methods)
Technically, it is possible store these records on regular pages instead of on system folders—they just help in keeping everything sorted. In addition, you can put records of more than one type on the same page or even scatter records of the same type on several pages.
This needs a little planning as you should consider the following:
which user groups need to be able to read or modify which records
which is a logical way for your organization to organize the records
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).
Example: In my case, we have a handful of organizing teams. They shouldn't be able to modify each other's seminar records, but all of them should be able to manage speakers (some speakers work for more than one team), seminar sites(the sites are used by all teams) and registrations (we share one office and accept manual registrations for other teams' seminars). There are two seminar lists on the page: One list containing seminars by all organizers, and one list containing seminars by one particular organizer.
So we've set it up like this:
the system folder website_users_folder
one common system folder that contains several subfolders, so we have subfolders for:
payment methods
organizers
seminar sites
speakers
seminars from organizer 1
current semester
previous semester
seminars from organizer 2
current semester
previous semester
seminars from organizer 3
current semester
previous semester
registrations (attendances) for seminars by all organizers
current semester
previous semester
All in all, our folder hierarchy currently looks like this:
Please note that this is just an example. Your mileage may vary greatly.
The user groups who should be able to manage seminars should have:
the module Web > Seminars 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)
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, fax, email, zip code, city, inactive; address: fax, mobile
the front-end users system folder in their DB mounts
If users should be able register manually, then build up a front-end user system for your site. Remember which group corresponds to “confirmed front-end users”.If you wish to utilize the additional fields for the table front-end users, you'll need to set up sr_feuser_register for this. In that extension's documentation, you'll find a tutorial about how to add fields to the registration form.In static/tx_srfeuserregister_pi1_tmpl.tmpl, there is a modified template where all new seminar fields for registration are included. The fields to the INVITE and PREVIEW sections have not been added in the template yet.
Add a page that will contain the seminar manager (the list view and the details view – they're one and the same module).
Add a “Seminar Manager”-plug-in content element to that page and set the type to “Event List”. Set the content element's start pages to the page or pages that contain (or will contain) the seminar records. This element will show the seminar list and the detailed seminar view. 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 on for the organizers on separate pages, and add only the corresponding pages as starting pages for the plug-in.
Add a subpage to that page that will be the registration page.
To the registration page, add a text content element. Set the content element access to “hide at login”. Write something like this into the element and set the link to the front-end user login page:“Please <link login-page>log in first</link> before registering for a seminar.”If you like, you can also add a link to the front-end user registration page (to spare the user one click).
Add a second “Seminar Manager”-plug-in content element. Set the type to “Event Registration”. Set the content element's start pages to the page or pages that contain (or will contain) the seminar records. Set the access to confirmed_users_group.
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 timeframe” to “all events” (you'll probably want to do this).
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.
Enable the seats field for the notification e-mail to the organizers by adding seats to plugin.tx_seminars.showAttendanceFieldsInNotificationMail.
Enable the seats field in the online registration form by adding seats to plugin.tx_seminars_pi1.showRegistrationFields. Please note that this value defines the order of the form fields on the front end.
If the field seats is not filled in (ie. 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 e-mail to the user. This will be implemented in a later version of this extension.
This feature allows front-end users who have signed up for an event to see who has signed up for that event as well, eg. for forming car pools or for coordination before the event takes place. In addition, this allows so-called VIPs (eg. speakers or organizers for 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 use both 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 attendee's 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 VIPs
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.
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.
Set up a “my VIP events” page. This page will list exactly those events for which that particular FE user is set as a VIP.
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 VIP 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 VIPs)”.
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 VIPs):”, 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 VIPs):”. Please note that in case a FE user is both an attendee and a VIP for an event, the link to the registration list for VIPs will take precedence.