ext: seminar manager - la · pdf file• the code follows the typo3 coding guidelines...

20

Click here to load reader

Upload: vuongkhanh

Post on 05-Feb-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

EXT: Seminar ManagerExtension Key: seminars

Copyright 2005, [email protected], <[email protected]>

This document is published under the Open Content License

available from http://www.opencontent.org/opl.shtml

The content of this document is related to TYPO3

- a GNU/GPL CMS/Framework available from www.typo3.com

Table of ContentsEXT: Seminar Manager............................... 1

Introduction.................................................................... 1What does it do?........................................................ 1Key features............................................................... 1Screenshots................................................................2Live example.............................................................. 2Credits........................................................................ 2Sponsorship................................................................2Keep up-to-date..........................................................3

Users manual..................................................................3Entering seminars and connected records.................3Managing registrations............................................... 5Linking to single seminar records...............................7Configuration.............................................................. 7Reference................................................................. 11

Development Workflow............................................... 13Who works on further development?....................... 13The developers mailing list.......................................13Changing or customizing the extension................... 13Getting the extension from CVS...............................14Workflow description................................................ 14Code review checklist...............................................14Release checklist..................................................... 14Used tools.................................................................15

Helping out................................................................... 15Buy some work......................................................... 15Do-it-yourself............................................................ 15

Known problems.......................................................... 15To-Do list.......................................................................17Changelog.....................................................................17

IntroductionWhat 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• searchable front end plug-in with list view and detailed single view of upcoming events

• online registration for front end users, including automatic confirmation e-mail and live update of available seats

• back end module for managing seminars, speakers, organizers, seminar sites, payment methods and registrations

• completely templatized front end output

• the front end output is mostly valid XHTML (this will be completely valid by version 0.5.0)

• visual design is done using only CSS

• mostly accessible front end output (the accessibility will be checked by W3C WAI, section 508 and BITV for version 0.5.0)

• currently full German and English localization

EXT: Seminar Manager - 1

Page 2: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

• the code follows the Typo3 coding guidelines

• the front end plug-in can be configured via TypoScript and Flexforms

ScreenshotsThis is a front end list a seminars. Note the color-coded number of vacancies in the last column.

This is the top of a front end detailed view for a seminar:

Live exampleFor a live example, visit the Career Service Bonn, section Workshops (in German).

CreditsThanks go to the following persons for contributing code or doing code reviews:

● Christoph Taubmann

● Mathias Uhl

● Alexander Maringer

● Mario Rimann

SponsorshipDevelopment of this extension has been funded by the following organizations:

● Kompetenzzentrum IT am Staatlichen Schulamt für den Landkreis Offenbach und die Stadt Offenbach am Main

● webspiration - webdesign, edv & internetservices

EXT: Seminar Manager - 2

Page 3: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

● m|r|o|net

Keep up-to-dateWe've installed an announcements mailing list to which everyone can subscribe for free. All announcements like new versions or security issues will be sent to all members of this list.

Please subscribe at the subscription page. You can also browse through the list archive.

Users manualEntering seminars and connected recordsYou 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 organizersAt the beginning, you can should 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

– e-mail 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 e-mails when someone registers for a workshop, will not be shown on the front end

– footer text that will be put at the end of the confirmation e-mails when someone registers for a workshop, will not be shown on the front end (this field is not required, but it is highly recommended to fill it in with some nice words to the users who have just signed up for one of your events)

Please note that version prior to 0.4.0 of this extension hadn't marked the field email as required. If you have organizer records from that version, please check that all organizer records have a valid e-mail address set. If there is no e-mail address, online registration will fail with an error 500.

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 e-mail on registration)

Entering and managing speakersOn 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

– fax number

EXT: Seminar Manager - 3

Page 4: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

– e-mail address

Entering and managing seminar sitesThe following fields are public and will be displayed on the front end:

– title (required)

– address (you can use HTML in this field)

– 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 seminarsYou 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.

You can enter the following data for a seminar, which will be used for the front end:

– 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

– description (you can use HTML in this field)

– 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 (required)

– last seminar day and the closing time in the format hh:mm dd-mm-yyyy (required)

– 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.

– 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)

– speaker(s), select one or more speakers from the database (not required)

– default price, without the currency name

– special price (will only get displayed if it is not 0), without the currency name

– allowed payment methods for this seminar (they will be listed in the details page and in the confirmation e-mail to the attendee, so you must set at least the allowed payment methods if you want to have them to be mentioned via e-mail to the attendees)

– organizer(s), select one or more organizers from the database (required). Please note that version prior to 0.4.1 of this extension hadn't marked the field organizer as required. If you have seminar records from that version, please check that all seminar records have one or more organizers set. If there is no organizer, online registration will fail with an error 500.

– whether registration is required, checked 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 (for seminars that require registration, you must in this field)

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, add a little note to the seminar description.

If you don't know the seminar hours yet, enter 00:00 as starting and closing time. If the event is open-ended, use the actual starting time as ending time, too.

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 (at the moment, they are not updated automatically when manually

EXT: Seminar Manager - 4

Page 5: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

entering or deleting a registration; go to Web > Seminars > Update statistics to manually all of them xxx):

– 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

Canceling eventsIn 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.

Managing registrationsWhen a logged-in front end user registers for a seminar, the following happens:

1. It is checked whether it still is possible to register for that seminar and the user still hasn't registered for that seminar yet.

2. The user can enter some information about their attendance, e.g. special interests or previous knowledge about the seminar subject. This can be configured via plugin.tx_seminars_pi1.showRegistrationFields.

3. An attendance record is entered into the database (into the page configured via plugin.tx_seminars.attendancesPID), 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.

4. A thank-you e-mail is sent to the front end user using the first organizer of that seminar record as From: address and that organizer's e-mail footer.

5. A notification e-mail is sent to that seminar's organizers (all of them, not just the first), using the attendee's e-mail address as From: address.

6. A thank-you message is displayed to the user.

Displaying the seminar and registration statistics and detailsYou can find your seminars using Web > Lists in the folder where you've created them. To just learn the number of registered participants and whether the seminar has enough attendees or is already full, you can use the info button or just the set fields function to have those fields listed:

Some computed boolean values (whether the seminar has enough attendees or whether it is full) are displayed as numbers: “1” means “yes” and “” (blank) means “no”.

For getting a list of participants for a seminar, full-blown back end report functions are planned for later versions of this extension. (If you need this feature, you can pay for the author's time so that this feature becomes reality.) For the moment, you have three ways of using slim versions of the report function:

1. In Web > Seminars > Show event details, you can get a list of the participant names and e-mail addresses for each seminar in the selected page, ready for copy and paste into your e-mail client. There are three lists for each seminar: All participants, those who have paid and those who haven't (in case you want to send them a reminder):

EXT: Seminar Manager - 5

Page 6: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

2. In Web > Seminars > Update statistics: Here you can display the raw numbers as well as the registrations (including the name, login name and UID of the front end users who have signed up for your seminars):

3. In Web > Lists, you can enter the folder where the attendances have been stored automatically (specified using plugin.tx_seminars.attendancesPID) and select the column you'd like to see using the set fields function. (You'll probably want to sort by the seminar ID.) Please note that in the list view relations to other database tables (seminar sites, organizers, speakers, payment methods) get displayed as numbers instead of as their titles. In future versions of this extension, this will look nicer.If you want to view the details for a registration record (eg. what the user has entered into the registration form), you can use the edit function for each record. This will also be a lot more comfortable in later versions of this extension.

EXT: Seminar Manager - 6

Page 7: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

Changing, deleting and entering registrationsYou can edit, delete and enter registration records using Web > Lists. If you have manually added or deleted a registration record, you need to update the seminar statistics using Web > Seminars > Update statistics so that the seminar statistics on the front end and back end are consistent again.

Entering paymentsYou 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'tIf you want to record who has attended a seminar and who hasn't (eg. for certificates), you can edit the corresponding registration record and fill in this field:

● Has attended

Changing a registration from one event to anotherPlease don't do this. This might mess up the statistics.

Instead, delete the old registration and have the participant sign up for the other event.

Linking to single seminar recordsIf 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:

http://www.casebo.de/casebo-workshops.html?tx_seminars_pi1[showUid]=27

(In the links from the list view, the URLs contain an addition ampersand after the question mark, but that can be ignored.)

ConfigurationAfter 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 plugin 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).

EXT: Seminar Manager - 7

Page 8: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

Get a front end user login (any possibly registration) runningChoose 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

Making date and time fields nicerIf 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).

Copying the templateIf you want to change some of the templates (and only then), copy the corresponding *.tmpl file to a convenient directory, e.g. to fileadmin/template/. In the flexforms of the plugin or in your TS setup code, set the corresponding variable to the path to your new template. Then change the template to your liking.

Configure the pluginFirst, include the Seminars template in your site template under “Include static (from extensions)”.

Then configure the plugin in your TS template setup or the plugin 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).

Configuring pricesYou 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

EXT: Seminar Manager - 8

Page 9: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

“default” as language code for English.

Changing the localized front end stringYou 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.php or pi1/locallang.php directly as these changes would get overwritten on the next update. Instead, do it like this:

1. 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.

2. Find out whether the string which you'd like to change is in locallang.php or pi1/locallang.php.

3. Find out the array key for that corresponding string.

4. 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.php) or

• plugin.tx_seminars_pi1._LOCAL_LANG.language.key (for strings from pi1/locallang.php)

Configuring CSSThe 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.

Creating system foldersIn 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

EXT: Seminar Manager - 9

Page 10: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

– 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.

Setting access rightsThe 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

Adding pages to the front end1. 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.

2. Add a page that will contain the seminar manager (the list view and the details view – they're one and the same module).

3. Add a “Seminar Manager”-plugin content element to that page and set the type to “Seminar Manager”. 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

EXT: Seminar Manager - 10

Page 11: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

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 plugin.

4. Add a subpage to that page that will be the registration page.

5. To the registration page, add a text content element. Set the 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).

6. Add a second “Seminar Manager”-plugin content element. Set the type to “Seminar 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.

Setting up the “multiple seats” featureIn 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:

1. For the back end user group managing the registrations, enable the excludefield Attendances: number of seats.

2. Enable the seats field for the notification e-mail to the organizers by adding seats to plugin.tx_seminars.showAttendanceFieldsInNotificationMail.

3. 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.

Reference

Setup common for front end plug in and back end moduleYou can configure the plugin 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: Data type: Description: Default:templateFile string File name of the HTML template for e-mail and the

back endEXT:seminars/seminars.tmpl

hideFieldsInThankYouMail string comma-separated list of field names that shouldn't be displayed in the thank-you e-mail to the userallowed values are in: hello, title, accreditation_number, credit_points, date, time, place, room, price_regular, price_special, paymentmethods, url, footer

credit_points

generalPriceInMail boolean whether to use the label “Price” for the standard price (instead of “standard price”) in e-mail to the participant

EXT: Seminar Manager - 11

Page 12: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

Property: Data type: Description: Default:hideFieldsInNotificationMail string Comma-separated list of field names from the

registration that shouldn't be displayed in the notification e-mail to the organizers. These fields are the big blocks in that e-mail, and some are further divided.Allowed values are in:

• hello: a short message that someone has signed up

• 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

showSeminarFieldsInNotificationMail string comma-separated list of field names from seminars that should be mentioned in the notification e-mail to the organizers (in the “seminardata” block)allowed values are in: uid, type, title, subtitle, titleanddate, date, time, room, place, speakers, price_regular, price_special, attendees, vacancies, enough_attendees, is_full

title,date,place,price_regular,price_special,attendees,vacancies,enough_attendees,is_full

showFeUserFieldsInNotificationMail string comma-separated list of field names from fe_users that should be mentioned in the notification e-mail to the organizers (in the “feuserdata” block)allowed values are all column names from fe_users.

username,name,email,address,zip,city,telephone,tx_seminars_phone_mobile,date_of_birth

showAttendanceFieldsInNotificationMail string comma-separated list of field names from attendances that should be mentioned in the notification e-mail to the organizers (in the “attendancedata” block)allowed values are in: interests, expectations, background_knowledge, known_from, notes, seats

interests,expectations,background_knowledge,known_from,notes

timeFormat string the time format (in strftime format) %H:%M

dateFormatY string the strftime format code to extract the year from a date string(usually this shouldn't be changed)

%Y

dateFormatM string the strftime format code to extract the month from a date string(usually this shouldn't be changed)

%m.

dateFormatD string the strftime format code to extract the day of month from a date string(usually this shouldn't be changed)

%d.

dateFormatYMD string the strftime format code for the full date(change this to your local date format)

%d.%m.%Y

dateFormatYM string the strftime format code for the year and month(change this to your local date format)

%m.%Y

dateFormatMD string the strftime format code for the month and day of month(change this to your local date format)

%d.%m.

abbreviateDateRanges boolean whether date ranges should be shortened when possible, for example11.10.2005-13.10.2005 becomes 11.-13.10.2005

1

currency string ISO3 code of the currency to be used (XXX not used yet)(taken from the static_info_tables extension)

EUR

attendancesPID page_id PID of the page (or system folder) where seminar registrations (attendances) are stored

None

salutation string switch whether to use formal/informal language on the front end for some shared code: formal | informal

formal

EXT: Seminar Manager - 12

Page 13: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

Property: Data type: Description: Default:eventType string The event type for all events that is displayed on

the seminar details page.Please note that this configuration value will go away once it is possible to manage more than one event type.

Workshop

[tsref:plugin.tx_seminars]

Setup for the Seminar Manager front end pluginYou can configure the plugin using flexforms of the front end plugin 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 plugin 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.

If you set any non-empty value in the flexforms, this will overwrite the TS template setup setting.

Property: Data type: Description: Default:baseURL string Base URL of your Typo3 site (including the protocol and the

trailing slash), e.g. http://www.mytypo3site.net/

what_to_display select The kind of front end plugin to display. Allowed values are in: seminar_list, seminar_registrationThis must be set using flexforms.

seminar_list

templateFile string File name of the HTML template EXT:seminars/pi1/seminars_pi1.tmpl

cssFile string location of the CSS file (set as empty to not include the file) typo3conf/ext/seminars/pi1/seminars_pi1.css

salutation string switch whether to use formal/informal language on the front end:formal | informal

formal

timeframeInList timeframeInList

the timeframe from which event should be displayed in the list view. Select one of these keywords:all, past, pastAndCurrent, current, currentAndUpcoming, upcoming, deadlineNotOver

currentAndUpcoming

showRegistrationFields string comma-separated list of tx_seminars_attendances DB fields to show for the online registration (must not be empty).The order of the values is relevant as it allows to specify the order of the form elements on the front end. Allowed values are in: interests, expectations, background_knowledge, known_from, seats, notes

interests,expectations,background_knowledge,known_from,notes

hideColumns string comma-separated list of column names that shouldn't be displayed in the list view, e.g. organizers,price_specialallowed values are in: title, organizers, date, price_regular, price_special, vacancies, registrationPlease note that the registration column will only be shown if a front end user currently is logged in.

accreditation_number,credit_points,price_special

hideFields string comma-separated list of field names that shouldn't be displayed in the detailed view, e.g. organizers,price_specialallowed values are in: title, subtitle, organizers, description, speakers, date, time, place, room, registration, price_regular, price_special, paymentmethods, vacancies, back

credit_points

generalPriceInList boolean whether to use the label “Price” as column header for the standard price (instead of “Standard price”)

generalPriceInSingle boolean 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

loginPID page_id PID of the page that contains the login form None

listPID page_id PID of the page that contains the seminar list None

registerPID page_id PID of the page that contains the seminar registration plugin None[tsref:plugin.tx_seminars_pi1]

Development WorkflowWho works on further development?At the moment (November 2005) there are two persons involved in the active development of this extension. We're looking for others to help us on working on this extension. If you'd like to contribute, please read the section “Helping out” in this

EXT: Seminar Manager - 13

Page 14: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

document.

Oliver KleeThe inventor of this extension who is the chief developer. Oliver keeps track of the roadmap, the global direction of the extension and provides the most new functionality and bug fixes.

Mario RimannJoined the team in October 2005 and is involved in planning the new backend, writing documentation and provide bugfixes.

The developers mailing listWe've set up a mailing list used for discussions in the development team. If you are interested in joining the team, please contact Oliver.

You will have to subscribe to the mailing list by yourself on the subscription page. Please note that every subscription to this list needs to get approved manually by one of the list administrators.

Changing or customizing the extensionIf you want to change the extension itself, it is highly recommended to contact the developers and contribute your changes back to the project. This has several advantages:

• You can still get further updates of the extension without having to apply your changes again.

• The extension developers can help you integrate your code better with the other parts of the extension.

• Other users of the extension can benefit from your contributions.

Getting the extension from CVSTo always have the latest and greatest version of this extension for development, please get the files from the SourceForge.net CVS. These are the access parameters as entered in Eclipse:

Connection type extssh

User your SF.net user name (or “anonymous” if you use anonymous CVS)

Password your SF.net password (or nothing if you use anonymous CVS)

Host cvs.sf.net

Repository Path /cvsroot/typo3xdev

Module name tx_seminars

Workflow descriptionThe development process looks roughly like the process on Mozilla.org and aims at creating high-quality code and facilitating learning from other coders.

1. Look in the Known Problems and To-Do list sections of this documentation for things to do (or use your own ideas). Please always use the latest code and documentation from CVS for this as someone else might already have completed that task.

2. File a bug report in the Typo3 bug tracker and write which task you intend to tackle.

3. Write the necessary code and test it locally. Make sure it works and doesn't generate any warnings or errors.

4. Create a patch and attach it to the bug report. Write that this patch is ready for review.

5. Contact someone from the development team to give your patch a peer review. If the reviewer wants to have something changed, change that (or persuade the reviewer why it shouldn't be changed). Repeat this step until the reviewer is content with the patch.

6. Contact Oliver for check-in approval.

7. If you have the approval, you can update and commit to CVS. In the check-in comment, write the number of the bug report, what the patch changes and who has reviewed your patch. It is also possible that the reviewer checks the code in.Example: 0001840: Create an extension icon, r/a=Oliver

8. Close the bug report.

Notice: To assign a bug to yourself, you need an account on the bug tracker. Oliver will add you as a developer for this extension if you ask him. To commit files to the CVS, you need a SourceForge.net account to get write access (please e-mail your username to Oliver so he can arrange things). If other members of the development team will check your patches in, you also can use anonymous CVS to get the latest sources.

Please don't change the Manual in CVS (as CVS doesn't allow for changes in binary files). Instead, send your changes to Oliver who will integrate it and upload a new version.

Code review checklistThe reviewer should check for and comment on the following things:

EXT: Seminar Manager - 14

Page 15: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

• Does the code conform to the Typo3 Coding Guidelines?

• Is the code free of typos and other bugs?

• Is the code easy to read and understand?

• Are variable, method and class names well-chosen and do they facilitate understanding the code?

• Does the code architecture go in the right direction?

• Is the documentation complete and helpful?

• Is the coding style good and consistent? Is the code not overly complex? Are the methods short enough (not longer than one or two screens)?

• Are there no trailing spaces or trailing tabs?

• Is there no code duplication?

Release checklistThe following points are checked before a new version is released. This workflow is started as soon as all open to-do items for the upcoming version are done. Responsible for this is the chief developer (Oliver Klee).

• Remove completed tasks from the “Known Problems” part of this manual.

• Check the ExtensionManager if there are no warnings

• Delete the milestone from todo.txt

• Delete completed or obsolete to-do items from todo.txt

• Generate a new ext_emconf.php (updating the MD5 hashes for all files)

• Upload the extension to the TER

• In the TER, update the manual TOC and the status notepad

• Check in the actual ext_emconf.php to the CVS (comment: new version)

• Tag the actual state of the files in the CVS as a new version (This means to mark all files in the actual state to belong together as one version.)

• Inform the persons that are known users of this extension and persons that were in contact with the development team (concerning this extension)

• Spread the official announcement to the announce-mailinglist and to some newsgroups.

• Do a party :-)

• As soon as the next entry from todo.txt is done, create a new entry for the the next version in the section “Changelog” in this document.

Used toolsWe use (mostly) the following Tools to work on this extension:

• Eclipse with PhpEclipse (editor and CVS client)

• Browsers: Firefox (Oliver) and Opera (Mario)

• Mantis (the system behind the bug tracker)

• Sourceforge.net (CVS)

Helping outFor this extension, there are still many unimplemented feature ideas. Help is very welcome! There are several ways in which you can help:

Buy some workBesides the described possibilities, you can also pay the author's time to fix a certain bug, implement a certain feature for you or generally dedicate more time to this extension. The overall development speed depends on funding.

Do-it-yourselfIf you want to provide a patch for just a single bug or feature, the simplest way is to e-mail a tested patch to Oliver (see below).

If you want to help with more than one bug or feature, you're very welcome to join the extension development team. Please create yourself an account each for the Typo3 bug tracker.

EXT: Seminar Manager - 15

Page 16: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

Before you begin to create some piece of code for this extension, please

• Read the development workflow as described above

• Get yourself the actual files from the CVS repository (always work on the latest version of the files!)

• Maybe it wouldn't be wrong to contact Oliver before working - just for cross-checking

Then do your work and check the following points:

• Make sure your code works on your local installation (test it!)

• Create a patch and send it to a member of the development team for this extension to give it a peer review.

• As soon as the review process is finished, we'll take care of integrating your code to the CVS.

Known problems– Many feature ideas still are unimplemented. Feel free to provide code or pay for the author's time.

– Statistics (vacancies etc.) are not automatically updated if a seminar record or an attendance record is manually changed, added or deleted in the back end. Click on Web > Seminars > Update statistics to manually update the statistics after adding or deleting a participant.

– The seminar hours display without a unit, e.g. “17:00” instead of “17:00 h”.

– The back end module (Web > Seminars > Update Statistics) still is pretty unfinished and not completely localized.

– All registrations (paid and unpaid) are counted for the seminar statistics. This will be configurable in later versions of this extension.

– If some records are incomplete, an Error 500 may occur when a user tries to sign up online. Do this:

– Check that all organizer records have an e-mail address set.

– Check that all seminar records have at least one organizer set.

– Check that all front end users have an e-mail address set (you can use the extension dubletfinder for this). While you're at it, also check that the e-mail address is a required field for front end user registration.

– 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).

– Check in the front end plug-in that is set to seminar list that you have selected the folder containing the seminar records as a starting point.

– The link to the seminar details page in the confirmation e-mails may be incorrect (missing the http:// or the slash between domain name and path). Do this:

– Check that in your TypoScript of the flexforms setup, the value of plugin.tx_seminars_pi1.baseURL is a full URL including http:// and the trailing slash, e.g. http://www.casebo.de/.

– The attendance records will be put in the very root page (the globe) if you don't specify plugin.tx_seminars.attendancesPID in you TS setup. Do this:

– Specify plugin.tx_seminars.attendancesPID in you TS setup.

– It doesn't work to have the seminar manager and the online registration on the same page (you will get an error message in the registration plug-in). Do this:

– Put them on separate pages and set plugin.tx_seminars_pi1.listPID and plugin.tx_seminars_pi1.registerPID.

– Links to the login page won't work if you haven't set plugin.tx_seminars_pi1.loginPID. Do this:

– Set plugin.tx_seminars_pi1.loginPID.

– The extension's default setup won't be used in the back end module (which leads to the date not getting displayed) if you have your system folders with the seminars outside your site root with the template. Do this:

– Create a template for your system folders and “include static (from extensions)”.

– All non-empty changes at the flexforms of the plugin 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).

– It is not known how to change the labels for the input boxes for the online registration. It will be documented how to do this in the next release.

– For some RTE configurations, bullet lists don't render correctly on the front end, but show this instead: <typolist type="1">...</typolist>

EXT: Seminar Manager - 16

Page 17: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

A configuration like the following has solved the problem for a user:RTE.config.tt_content.bodytext.proc.overruleMode = ts_cssRTE >RTE.default { mainStyle_font = Verdana, Arial, sans-serif mainStyle_size = 11px mainStyle_color = black showButtons =cut,copy,paste,formatblock,bold,italic,underline,left,center,right,orderedlist,unorderedlist,outdent,indent,link,table,image,emoticon,line,user defaultLinkTarget = dontConvBRtoParagraph = 1 proc.overruleMode = ts_css proc.preserveTables = 1 proc.dontConvBRtoParagraph = 1 proc.entryHTMLparser_db = 1 proc.entryHTMLparser_db { htmlSpecialChars = -1 allowTags =table,tr,td,p,div,img,hr,a,br,blockquote,pre,b,strong,i,em,u,li,ul,ol,span,h1,h2,h3,h4,h5,h6,dl,dt,dd,font allowTagsOutside =table,tr,td,p,div,img,hr,a,br,blockquote,pre,b,strong,i.em,u,li,ul,ol,span,h1,h2,h3,h4,h5,h6,dl,dt,dd,font allowTagsInTypolists =table,tr,td,p,div,img,hr,a,br,pre,b,strong,i,em,u,li,ul,ol,span,h1,h2,h3,h4,h5,h6,dl,dt,dd,font }}RTE.classes {P { name= normal text value = font-family:Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color:#000000; margin:0.25em 0.5em;line-height:150%;}config.admPanel = 1

To-Do list(moved to todo.txt)

Changelog0.4.2

• Now an unlimited number of speakers is allowed per seminar.

• Added a registration deadline functionality.

• Improved the manual.

• Lots of code cleanup and refactoring.

• The configuration of generalPriceInList and generalPriceInSingle now is possible with flexforms as well.

• Fixed: The complete second sheet in the flexforms was non-functional.

• Added an extension icon.

• Now the extension default configuration is done using static templates. Please include the Seminars template in your site template under “Include static (from extensions)”.

• Now Web > Seminars shows the seminars from the selected page, not from all pages.

• Now Web > Seminars > Update Statistics also shows the seminar dates next to the seminar title.

• Now Web > Seminars > Show event details displays a list of participant names and their e-mail addresses, ready for copy and paste into an e-mail client.

• Shortened some long DB labels.

• Now Web > Seminars > Update statistics is only available if the logged-in user actually has write access to the selected page's content.

EXT: Seminar Manager - 17

Page 18: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

• On online registration, users can now specify how many seats they would like to register. This feature is switched off by default.

• It now is configurable which seminars to display in the list view: past, current, upcoming, open for registration, or any sensible combination of those.

0.4.1

• Improved the manual.

• Increased the maximum allowed price from 1000 to 9999.

• In the list view, now the whole table cell containing the seminar title is a clickable link instead of just the text.

• Removed excess spaces from within HTML tags.

• Added tbody tag to the list view table (the thead was already there).

• Changed the MySQL data types of some fields so that

• more fields can be edited using PhpMyAdmin

• fields for which negative values don't make sense now are unsigned

• Added back end and front end support for the field special price in the seminar record. Note that all templates have changes in the part thats that contain prices: price now has been renamed to price_regular, and price_special has been added. If you use your own templates, you need to modify them accordingly, or the output will be broken.

• Changed the hard-coded currency EUR to use the value set in the configuration instead.

• Added the fields accreditation_number and credit_points. Both of them are hidden by default on the front end, the back and and in the e-mails.

• Some code cleanup.

• Fixed bug that caused the wrong number of paid attendances display on the back end (in Update statistics). Thanks to Mario Rimann for the patch.

• In the seminar records, made the organizer entry required as it is needed for automated e-mail when a user signs up for an event.

• Note that the field "has paid" in the attendance records 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.

• The upper boundary for the minimum and maximum number of attendees per event has been increased from 100 to 999.

0.4.0

• Lots of code cleanup.

• In Web > Seminars > Update statistics, now the attendee's user name and UID get displayed as well. Thanks to Martin Kurz for the suggestion.

• If you copy and paste a seminar record, the copy will be marked as hidden by default (so that it doesn't appear on the front end).

• Improved and extended the manual.

• All semantically required fields now actually are set as required in the back end so that it no longer is possible to leave a required field empty (eg. an organizer's e-mail address).

• Removed the back end UI for fields that are not supported in this version yet: special price (seminars) and picture (speakers)

• Fixed wrong upload path for templates and CSS files in flexforms. Thanks to Rolf Casanova for reporting that bug.

• Cleaned up and slimmed down the RTE in the back end.

• Integrated the salutationswitcher extension so that that extension doesn't need to be installed any more.

• Canceled seminars now are marked in the list view: The text is lined through and the square always is red (regardless of the number of vacancies).

• Fixed: The notification e-mail to the organizer contains the statistics of before they are updated with the new registration.

• Invalid seminar IDs in the URL are now better handled in the detailed view and the registration form: with an error message and a HTTP status of 404 (so that search engines don't index the invalid URLs).

• Fixed the CSS so that content directly below the registration form starts at the very left.

EXT: Seminar Manager - 18

Page 19: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

• If no user is logged in, a link to the login form is now provided.

• If there are no events for the list view, now a message gets displayed instead of an empty list.

• The error messages in the “online registration” part of the detailed view and the registration form are now organized more intuitively: The user doesn't to log in any more to see if a seminar UID in the URL is valid or if a seminar has been canceled.

• In the list view, there is now a column with direct links to the registration page. This column only is displayed if a front end user currently is logged in.

0.3.2

• Added feature “online registration”: registration form, automatic entry into the DB, update of statistics, e-mail to participant and to organizers.

• For the front end plug in, the starting pages are now set using flexforms. You need to set the starting pages when you upgrade to this version.

• This extension now provides some basic CSS styles.

• It now is possible to configure the event type for all events using plugin.tx_seminars.eventType.

• Provided basic template for sr_feuser_register.

• The date and time formats now are configurable.

• The former 3 front end plugins were merged to one with flexforms selection.

• Configuration now partially uses flexforms.

• Removed dependencies on sr_feuser_register and newloginbox.

• Lots of code cleanup.

• Made the database accesses safer.

• Fixed: In the details view, the seminar title was always a link.

• Cleaned up and fixed the HTML output in the seminar details page.

• The links to the detailed seminar view now are much shorter.

• Improved the manual.

0.3.1

• Fixed: The room number didn't get displayed in the front end.

• Changed the list view so that seminars that already have started still get displayed.

0.3.0

• switched HTML output to templates

• added switch for formal/informal language (the German “Du/Sie”)

• made it configurable which columns to show in the list view

• made it configurable which fields to show in the detailed view

• translated “No results found” to German

• renamed fe_users database field tx_seminars_registration_number to tx_seminars_matriculation_number

0.2.1

• added first code for online registration (not hooked up yet)

• improved documentation

• back end: added “save and add new item” button for all data types

• made content items USER_INT object (thus disabling caching of this extension's content elements) as the number of vacancies is highly volatile

0.2.0

• updated documentation: added screenshots and more todo items.

0.0.4

• first public upload

0.0.1

EXT: Seminar Manager - 19

Page 20: EXT: Seminar Manager - La · PDF file• the code follows the Typo3 coding guidelines • the front end plug-in can be configured via TypoScript and Flexforms Screenshots This is a

• initial upload

• managing seminars, sites, speakers and organizers already works

EXT: Seminar Manager - 20