Plugin Directory

Events Made Easy

Manage and display events, recurring events, locations and maps, widgets, RSVP, ICAL and RSS feeds, payment gateways support. SEO compatible.

1.6.20 (2016/07/28)

  • Bugfix in sending mails on first booking

1.6.19 (2016/07/28)

  • Added an option to disable the extra html paragraph tags around notes/excerpts
  • Bugfix for the payment buttons (not only paypal)
  • Fix a php warning for empty discounts, created because the price is now formatted to the locale in wordpress (and can thus not be an empty string, but needs to be a real floating point)

1.6.18 (2016/07/24)

  • You can now add/delete/edit discounts and discount groups in the backend
  • Bugfix: adding bookings in the backend was not working anymore
  • Small bugfix: the payment header/footer format settings were not always taken into account

1.6.17 (2016/07/21)

  • Allow calculated discount to be changed for bookings in the backend
  • Allow dynamic price calculation in the RSVP form (using #_DYNAMICPRICE and a setting to activate it if wanted; for multibooking this placeholder needs to be in the header or footer section)
  • Added booking placeholder #_TOTALDISCOUNT, so you can let people know how much discount they got in the end
  • The price shown (mails, tables, frontend) will now be formatted according to the locale in wordpress. The number of decimals is now an option you can set in the 'Other' section of the EME settings. In the input fields you still need to use the international notation though ...
  • In the template header/footer for multibooking events, you can now also use regular event placeholders. The first event in the multibooking list will be used as source. So you can now use #_LANG, #_CURRENCY, etc ...
  • Add function eme_wordpress_search, makes it easier to use in your theme's search.php
  • Add filter eme_calday_url_class_filter, so you can change the class for calendar day-urls yourself (e.g. for setting "noindex" or so, searchbots don't execute js so the class needs to be added via code)
  • Bugfix: when showing a single event, the external url was not always taken into account

1.6.16 (2016/07/13)

  • Feature: coupon codes can now be case insensitive (new coupon column 'strcase' added, 1: case sensitive, 0: case insensitive)
  • Small bugfix: discount groups couldn't be deleted, this has been fixed

1.6.15 (2016/07/12)

  • Feature: cleanup of unpayed bookings can be scheduled now, and should be working too ...
  • Feature: added discounts (coupon codes) with fixed discount or a percentage, expiration date, limit number of uses, allow different discounts to be entered, (discount groups) and CSV upload of coupons and groups. See the documentation for more.
  • Added placeholder #_RESPFIELD{xx}, with 'xx' being a db field property of a person (like person_id, lastname, firstname, email, phone; ... see events-manager.php, function eme_create_people_table)
  • Added placeholder #_LANG, so now you can use conditional tags, check the lang and then use your own text where you want it. Since conditional tags are possible just about anywhere, this allows for true multilanguage mails, subjects, screen messages etc ...
  • Added event placeholder #_NOEXCERPT, so you can show the rest of the event notes and not the excerpt itself. Together with the other 2 placeholders (#_EXCERPT and #_NOTES) this now gives you full control of what part of the notes you want to show.
  • Updated Mollie API to version 1.6.0
  • Added a setting to bring back the google api key for google maps, and added a separate Maps section in the options.
  • Change: the automatic cleanup of unpayed bookings now works for pending bookings only, so as not to interfere with approved bookings that don't need payment
  • Bugfix: when the difference in seconds was less than a day, recurrent events would happen on the same day even if they start on day 1 and end on day 2
  • Bugfix: when not using permalinks and using "?lang=" in the url, the rsvp submit wasn't working for events

1.6.14 (2016/05/26)

  • Remove deprecated function call get_current_user
  • Added filters to change the scope of the week/month/year filters to your liking: eme_week_scope_filter, eme_month_scope_filter, eme_year_scope_filter
  • Added placeholders #_EVENTFIELD{xx}, #_LOCATIONFIELD{xx}, #_BOOKINGFIELD{xx} and #_ATTENDFIELD{xx} with 'xx' being the name of a field for events, locations, bookings or attendees. This way you can show any info as stored in a respective field (in the db) in your format (can easily replace a number of existing placeholders: #_ATTENDFIRSTNAME, #_ATTENDADDRESS1, #_ATTENDADDRESS2, #_ATTENDCITY, #_ATTENDSTATE, #_ATTENDZIP, #_ATTENDCOUNTRY, #_ATTENDID, #_BOOKINGID, #_RESPFIRSTNAME, #_RESPADDRESS1, #_RESPADDRESS2, #_RESPCITY, #_RESPSTATE, #_RESPZIP, #_RESPCOUNTRY, and more for events and locations.
  • Allow the external url for event/location details to be used directly or not when clicking on event/location details (default: yes, the original behavior)
  • Feature: added option ignore_url to shortcode eme_location, so you can choose to ignore the external url for a single event when using this shortcode
  • Added an option to quote the timezone info in ICAL outputs, since some ICAL clients require that despite the RFC
  • Added new shortcode eme_categories, with optional parameters event_id, eventful, scope, template_id, template_id_header and template_id_footer The format understands placeholders with values like #_CATEGORYFIELD{xx}, with 'xx' being category_id, category_name, description or slug. Also #_CATEGORYURL, so you can create your own links to categories too.
  • Bugfix: fix a uninitialized variable error and also the CSV export in the "Send mail" EME admin page
  • Bugfix: for private events, the auto approval upon payment was not working
  • Bugfix: corrected placeholders #_EVENT_EXTERNAL_REF and #_LOCATION_EXTERNAL_REF

1.6.13 (2016/04/12)

  • Bugfix: event scope "this_year" was not working as expected
  • Bugfix: make sure regular event placeholders get correctly replaced when the option to add the booking id to the custom payment return page is set
  • Bugfix: the event author value was not retained when updating an event
  • Bugfix: when using autocomplete for adding people to an event, the selected lastname included the wp username too, resulting in a new record
  • Added event scope "next_year"
  • Added formfield type "date" (html5 form type), together with the possibility to provide a date pattern
  • Disable the possibility to convert an event to a recurrence if bookings exist for the event, otherwise those bookings would get deleted.
  • For filters/hooks: the booking variable now also contains the payment id, so the functions eme_get_booking_payment_id and eme_get_bookings_payment_id have been removed
  • Also store the ip per booking

1.6.12 (2016/02/26)

  • Better php session handling (and add an option to clean the session upon login/logout)
  • Add an option to select whether or not to immediately show a single event on a calendar day and not an event list if there's only 1 event on that day
  • Use phone number of person logged in (from profile) when showing the phone rsvp field
  • Make sure some chosen defaults for events don't interfere with disabling settings when creating/editing an event

1.6.11 (2016/02/12)

  • Added CSS classes for rsvp success/error/full messages when showing the booking form or the booking result
  • Add conditional tag #_IS_PAYED, which returs '1' if the booking is payed, 0 otherwise. Can be used in the custom payment return page (together with the option "Add booking id to return page info") to create your own text based on payment status
  • Bugfix: not all changes were stored when editing events

1.6.10 (2016/02/04)

  • Bugfix: events without location info were returning blank content when viewing the single event details

1.6.9 (2016/02/04)

  • Bugfix if you used the option to hide rsvp full events (the new sql statement from 1.6.7 was incomplete)

1.6.8 (2016/02/04)

  • Bugfix if you used the option show_recurrent_events_once in the eme_events shortcode (the new sql statement from 1.6.7 was incomplete)

1.6.7 (2016/02/03)

  • Performance improvement when showing the calender by reducing the number of sql statements made
  • Bugfix in the calendar: in some cases all events were selected in the database, resulting in memory problems if you had many events

1.6.6 (2016/01/31)

  • Feature: added braintree and stripe payment gateways
  • Feature: added filter eme_csv_column_filter, so you can change the csv columns to your liking (adding/removing columns ..) Has 3 arguments: csv line (an array with all columns), event (array with all event data), current line number

1.6.5 (2016/01/21)

  • Add the possibility to disable autocomplete for the registration form
  • Added event placeholder #_EXTERNALURL, to show the external url for the event if it has a value
  • Bugfix for locations, preventing a location-filtered calendar to work correctly

1.6.4 (2015/12/19)

  • Improvement: some more cleanup actions added
  • Bugfix: make sure the calendar title tags contain valid escaped chars

1.6.3 (2015/12/19)

  • Feature: added option holiday_id to [eme_calendar], so you can show holiday info in the calendar if wanted
  • Bugfix: captcha fix if code is wrong

1.6.2 (2015/12/11)

  • Feature: added option id to [eme_mybookings], so you can now show only the bookings for the logged in user if you use this in the single event format as: [eme_mybookings id=#_EVENTID]
  • Feature: added #_CANCEL_OWN_LINK (as #_CANCEL_OWN_URL but clickable)
  • Bugfix: if the start and end date are equal and the end time is not set, set it to 23:59:59 and not 00:00:00

1.6.1 (2015/12/07)

  • Bugfix: make captcha work again

1.6.0 (2015/12/06)

  • Feature: you can add holidays to a recurrent list of events, in which case that day will be skipped (no event) when creating/editing the recurrence A list of holidays consists of 1 or more rows of the format YYYY-MM-DD
  • Feature: added option weekdays to the calendar shortcode, so you can select which days of the week you want to show (0-6 as values)
  • Feature: added #_CANCEL_OWN_URL rsvp shortcode, can be used in event lists so you can allow logged in people to just cancel their own booking with a single click, or the event owner/author Difference with #_CANCEL_URL is that #_CANCEL_URL gives the url no matter what (easier for mails, not wp-members and such)
  • Feature: added shortcode [eme_attendees_report_link], generating a csv for the attendees/events (events as rows, dates as columns, attendees as cell entries) Options: - event_template_id (if not given, format is "#_EVENTNAME #_STARTTIME") - attend_template_id (if not given, format is "#_ATTENDFIRSTNAME #_ATTENDLASTNAME") - scope (the scope of events to return, if not given, scope=this_month) - category and notcategory (empty if not given, see the [eme_events] shortcode) - title (title of the link, if not given: "Attendees CSV")
  • Feature: autocomplete is now possible in the frontend rsvp form if you have the correct rights, together with #_CANCEL_OWN_URL this means bookings can totally be managed in the frontend if wanted
  • Improvement: 'Bookings for' was not translated in the printable view
  • Improvement: added partial Hungarian translation, thanks to Márton Jakobey
  • Improvement: for attendance types, if the min. number of seats to book is 1 (so attendance is required), then the yes/no field is now hidden (not for multibookings yet)
  • Improvement: some layout improvements when creating events (concerning the date/time and recurrent info)
  • Bugfix: firstname was not detected as an 'ok' field if it was required and WP membership was required too. Since the value is then readonly, we can ignore the required check then anyway ...
  • Bugfix: for multiprice events, the multibooking form was not rendered because the count of required fields in the formats was wrong

1.5.53 (2015/11/17)

  • Feature: added filters eme_cal_full_yearmonth and eme_cal_small_yearmonth, so you can change the header shown in the full/small calendar Has 3 arguments: current string, selected month, selected year
  • Work around a bug in wordpress date_i18n that doesn't translate everything correctly ...

1.5.52 (2015/11/16)

  • Improvement: added cancel form placeholder #_CANCELCOMMENT and corresponding rsvp placeholder #_RESPCANCELCOMMENT This allows you to show a comment form field when canceling, and to mail that comment to booker and/or contact person
  • Improvement: don't show the payment form if the total price to pay is 0
  • Improvement: show a spinner when switching months in the calendar
  • Improvement: added email filters eme_rsvp_email_text_xxx_filter and eme_rsvp_email_html_xxx_filter with "xxx" being one of: confirmed_body,updated_body,pending_body,denied_body,cancelled_body confirmed_subject,updated_subject,pending_subject,denied_subject,cancelled_subject contact_body,contact_cancelled_body,contact_pending_body contact_subject,contact_cancelled_subject,contact_pending_subject
  • Improvement: renamed eme lang files to events-made-easy, also changed the gettext calls accordingly this will allow to have wordpress language packs in the future
  • Improvement: German language updates, thanks to Joerg Knoerchen
  • Bugfix: when updating a recurrence, the days were set wrong in the edit screen
  • Bugfix: comparing min/max allowed seats was not working in a multiseat setup
  • Bugfix: allow for min=1,max=1 seats for a multiprice event to force exactly 1 seat to be taken in total

1.5.51 (2015/10/13)

  • Bugfix: make sure you can still add categories, templates, formfields

1.5.50 (2015/10/12)

  • Feature: you can now deactive the mail sending for approved and/or pending bookings
  • Feature: add cleanup action for old unpayed bookings
  • Feature: added 3 specific calendar conditional tags: #_IS_STARTDATE, #_IS_ENDDATE, #_IS_NOT_START_OR_END_DATE and a filter eme_cal_format_prefilter
  • Bugfix: if long_events=1 in the eme_calendar shortcode, and the end time was lower than the start time, the last day wasn't shown as eventfull
  • Bugfix: multi-fields in the filterform weren't working
  • Bugfix: excluding multiple categories in the widgets was not working as expected
  • Security fix: fix possible XSS attack vector in the admin pages for templates, categories, formfields and cleanup (thanks to David Sopas)

1.5.49 (2015/09/28)

  • Bugfix: when approving a booking and at the same time setting the payed status, the mail sent out was using the old payed status so #_PAID was wrong
  • Bugfix: fix undefined variable in eme_rsvp.php

1.5.48 (2015/09/26)

  • Feature: you can now move a booking to another event (when updating the booking)
  • Bugfix: when editing a recurrence, the end-days per individual event were set at the end date of the recurrence instead of the correct event end date

1.5.47 (2015/09/23)

  • Feature: added event placeholder #_SINGLE_EVENTPAGE_EVENTID, returns the event id of the single event page currently shown
  • Improvement: add a class to the rsvp form submit button
  • Bugfix: when editing a location, don't translate fields that are multi-language compatible (otherwise you lose the other languages)
  • Bugfix: make sure the calendar monthname is localised again

1.5.46 (2015/09/18)

  • Feature: you can now also set the cancelled and denied mail format per event
  • Bugfix: remove leading 0 for minutes was not working ok
  • Bugfix: event end time was not correct when editing an event with local timeformat in AM/PM notation

1.5.45 (2015/09/10)

  • Bugfix: the payment form was not shown after registration for #_ADDBOOKINGFORM_IF_NOT_REGISTERED
  • Bugfix: entering/updating events showed an error in some cases as the timezone was passed along as an argument

1.5.44 (2015/09/09)

  • Bugfix: the countdown and HOURS/DAYS_TILL_START/END were reversed (negative values shown)

1.5.43 (2015/09/09)

  • Improvement: German language updates, thanks to Joerg Knoerchen
  • Bugfix: take into account wordpress weirdness when setting UTC-like timezones in the preferences ...
  • Bugfix: forgot to initialize colreorder for the datatables, works again now

1.5.42 (2015/09/08)

  • Feature: added placeholders #_EVENT_EXTERNAL_REF and #_LOCATION_EXTERNAL_REF, returning the external reference for an event or location (typically the facebook id)
  • Feature: you can now also select a template in the event list widget
  • Feature: added attendee placeholder #_ATTENDSPACES{xx} to return the number of seats reserved for a specific price for a multi-price event
  • Improvement: use wordpress is_email function to check for valid email addresses
  • Improvement: small visual improvement when showing the username in the registration overview
  • Improvement: also show the CSV export link if there are just pending seats (not approved)
  • Bugfix/improvement: don't set the timezone globally anymore, use class ExpressDate (should help with some time conflicts in other plugins)
  • Bugfix: when updating a registration, the old info was still being shown in the mail sent
  • Bugfix: when showing a calendar day, not always the single event was shown if only 1 event was on that day
  • Bugfix: when showing the booking form, no check was made whether or not enough seats were available in the case of multiprice with a defined multi-minimum too
  • Bugfix: make sure all #_*SPACES placeholders return a number for multi-price values (wasn't the case if the value should be 0)
  • Bugfix: replace possible multibooking placeholders in the payment return page too

1.5.41 (2015/7/27)

  • Feature: added placeholder #_EVENTCATEGORIES_CSS, returning a space-separated list of categories. Also, excluding categories is possible, like in #_EVENTCATEGORIES Also added #_LOCATIONCATEGORIES_CSS
  • Feature: added rsvp placeholders #_RESPNICKNAME, #_RESPNICKNAME and attendee placeholders #_ATTENDNICKNAME and #_ATTENDDISPNAME (displays the nickname or displayname for a booker or attendee if the user is a wordpress user)
  • Feature: add extra header/footer format settings when showing the list of events for a specific category
  • Feature: allow attributes to be text areas now, so you can do more with them
  • Feature: add the option to ignore paypal tax setting in your profile
  • Change: mails with no subject or body will not be sent
  • Bugfix: for some reason, in the older plugin code I added the logic that the excerpt was never to be shown on single event pages. This has been corrected now.
  • Bugfix: add db column 'lang' for the peoples table if missing
  • Bugfix: the booker firstname/lastname was not correctly replaced in the cancel form for WP users

1.5.40 (2015/05/31)

  • Bugfix: when deleting a booking, the extra field answers were deleted before the mail was sent, resulting in some placeholders not being replaced in that mail
  • Bugfix: fix untranslated and unescaped category names when creating/editing events
  • Bugfix: fix edit and update bookings (missing argument for a function)

1.5.39 (2015/05/21)

  • Bugfix: small fix for undefined variable

1.5.38 (2015/05/21)

  • Bugfix: multibooking fix for mails
  • Bugfix: allow firstname to be required too

1.5.37 (2015/05/08)

  • Bugfix: cancel url was not correctly shown (and was also not working for bookings with no price)
  • CSS Bugfix for chrome (the fix got added in 1.3.4 and removed later on): datatable CSS fix so the footer doesn't overlap with the table in some browsers
  • Improvement: German language updates, thanks to Joerg Knoerchen

1.5.36 (2015/05/01)

  • Feature: added Worldpay payment gateway
  • Feature: added event placeholders #_AUTHORNAME, #_AUTHOREMAIL and #_AUTHORPHONE
  • Feature: added description for categories, together with placeholders #_EVENTCATEGORYDESCRIPTIONS and #_LOCATIONCATEGORYDESCRIPTIONS
  • Feature: added option "approval_status" to shortcode eme_mybookings. Values: 0=all, 1=approved, 2=pending. Default: 0
  • Feature: added function eme_get_person_by_post(), so people can call this to check if somebody is registered without needing to now the internals: $booker = eme_get_person_by_post(); if (!empty($booker)) { $already_registered=1; }
  • Feature: now everybody can cancel a booking (even non-wp users) via a special link. Cancel urls in mails and user profile use these links now. The old booking cancel form will be deprecated in the future, as using this link/form is more secure and easier to maintain For this #_CANCEL_LINK and #_CANCEL_URL have been adapted already. And a new placeholder #_CANCEL_CODE has been added that returns the cancel code to be used in the new cancel booking form (to be implemented)
  • Feature: added option ignore_url to shortcode eme_event: in a number of cases (like when using this shortcode in the calendar format for an event entry), the url would case the page to be redirected. Using this, you can ignore that url.
  • Bugfix: when canceling a booking via the cancel url, the mail being sent contained the free spaces info from before the cancel, it was sent too early in the process
  • Bugfix: event placeholders were not being replaced in booking mails (they were replaced in attendee mails)
  • Bugfix: make sure you can require the first name to be completed if wanted
  • Bugfix: a redundant check was made for firstname in multibooking events, so people filling in their last name still received an error that the last name was not filled out
  • Bugfix: some category link fixes


  • Bugfix: RSVP placeholders in multibooking mails were not being correctly replaced


  • Bugfix: make #_FIELDVALUE actually work ..
  • Bugfix: show the user display name as lastname if the lastname is empty for a user in forms


  • Bugfix: in a borderline case new reservations were not possible


  • Bugfix: make sure the booking recorded message shows, no matter what
  • Workaround: take into account that wordpress sets NULL for empty strings in the database (which it shouldn't)


  • Bugfix: don't make firstname required for the cancel form too


  • Bugfix: don't make firstname required when submitting, to preserver backward compatibility


  • Feature: allow 2Checkout sandbox/test/live modes
  • Feature: added Sage Pay payment gateway
  • Feature: attempt to make the map sizes responsive: width and height can be "%" too, for responsiveness: width should be 100%
  • Feature: added conditional booking placeholder #_IS_MULTIBOOKING again, only returns 1 when actually doing a multi-booking, not when updating/deleting a booking
  • Feature: extra info can be requested for a person: #_LASTNAME (= #_NAME), #_FIRSTNAME, #_ADDRESS1, #_ADDRESS2, #_CITY, #_STATE, #_ZIP, #_COUNTRY also the corresponding booking placeholders are there: #_RESPLASTNAME (= #_RESPNAME), #_RESPFIRSTNAME, ...
  • Feature: added placeholders #_EVENTCSVBOOKINGSLINK and #_EVENTCSVBOOKINGSURL
  • Feature: added conditional event placeholders #_IS_AUTHOR, #_IS_CONTACTPERSON and #_IS_AUTHOR_OR_CONTACTPERSON
  • Feature: allow csv/print/column reorder and column hiding in people, pending bookings, reservations
  • Security improvement: the form message could be altered upon booking, so one could be tricked in executing wrongful html code so a check has been added to make sure that the form message is generated by the system, not a malicious person
  • Bugfix: make the location map show again when editing locations
  • Improvement: German language updates, thanks to Joerg Knoerchen
  • Improvement: autocomplete person info (based on name) when adding new registrations in the backend


  • Bugfix: make 2checkout work again
  • Bugfix: fix event scopes today--this_week and today--this_week_plus_one


  • Bugfix: make #_EDITLOCATIONLINK and #_EDITLOCATIONURL actually work ...


  • Feature: added location placeholders #_EDITLOCATIONLINK and #_EDITLOCATIONURL
  • Feature: added generic "eme html header" and "eme html footer" settings, so you can add javascript in there if wanted without needing to change your theme
  • Bugfix: the 'no events message' was not always being shown
  • Bugfix: fix the double headers-options in EME settings (tab 'Other')
  • Bugfix: datapicker was not being added in the front end (for the monthly filter)
  • Bugfix: load google js via https when needed
  • Improvement: the smtp port setting should not be shown if smtp is not used for sending mails


  • Feature: added the possibility to add a Bcc address to all outgoing mails
  • Bugfix: Mollie form was not being displayed


  • Feature: implement a second extra charge option for payment providers (so you can use a percentage and a fixed amount together)
  • Feature: add Mollie payment gateway
  • Feature: add event placeholder #_MYLOCATIONATT{xx} (see doc)
  • Feature: per payment gateway, you can now customize the button label and the text above/below the button. You can use #_EXTRACHARGE and #_CURRENCY as placeholders, multilanguage ready too. Also, the button can be an image if wanted.
  • Improvement: prevent double click on form submit
  • Improvement: German language updates, thanks to Joerg Knoerchen
  • Bugfix: the setting "Default location list format footer" was overwriting the format header, not footer
  • Bugfix: small template fix when listing the bookings per person
  • Bugfix: eme_mybookings was only replacing 'event' level placeholders once for all bookings
  • Removed old Google Checkout


  • Bugfix: make client clock checking work again for the calendar
  • Improvement: optimize the inclusion of javascript files the way wordpress likes it most


  • Bugfix: another function rename that came back to haunt me is fixed


  • Bugfix: make #_BOOKINGS work again (typo fix)


  • Feature: added shortcode eme_mybookings with as optional arguments a template_id for header, content and footer, and an option to show future or all bookings [eme_mybookings template_id=3 template_id_header=7 template_id_footer=9 future=0] [eme_mybookings template_id=3 future=1] Will show all bookings for the logged in user, based on the layout given by the templates or by the generic booking list format Also added booking placeholders #_CANCEL_LINK and #_CANCEL_URL, so you can create a link to cancel 1 specific booking too (for future events only) Also: the list of future bookings made is now in the user's profile, with an cancel link
  • Feature: you can now also change the text above/below the payment buttons for a multi-booking form
  • Feature: added filters eme_eval_booking_form_post_filter and eme_eval_multibooking_form_post_filter, which happen just after the POST of the booking form (1 arg: $event for eme_eval_booking_form_post_filter, or $events of eme_eval_multibooking_form_post_filter; containing the event(s) details that are being booked for). The filter eme_eval_booking_form_post_filter differs from eme_eval_booking_form_filter in this sense that this filter happens immediately after the POST, while eme_eval_booking_form_filter happens after the booker has been created already (which is a bit stupid).
  • Feature: added option no_events_message to the shortcode eme_events, so you can adjust the text when there're no events per shortcode usage if wanted
  • Feature: the CSV separator can now be changed in the 'Other' section of the EME settings
  • Bugfix: sometimes when multiple maps were shown (and dependant on the OS used), even multiple calls to microtime() return the same value so as a result some javascript variables had the same name and thus the maps might show the same address This is now fixed by adding a rand() call to the variable names
  • Bugfix: required formfields that were defined as dropdown were not allowed to post "0" as a return value for required fields
  • Bugfix: fix some firstdata issues, thanks to ecoyork
  • Bugfix: when creating recurrent events, the last day was not taken into account
  • Bugfix: show correct number of days in months in the calendar
  • Change: renamed function eme_event_category_url to eme_category_url
  • Change: removed #_IS_MULTIBOOKING placeholder, was not working correctly
  • Improvement: when using custom fields in a form, FIELD{03} and FIELD{3} (thus leading zero's) are now supported. This was already working ok for storing the values, but not for checking the required field values
  • Improvement: when clicking on a calendar day in the small calendar and there's only one event where the external url is set, we now redirect to that url
  • Improvement: #_PHONE and #_COMMENT can now also be used in header/footer parts in a multibooking form
  • Improvement: German language updates, thanks to Joerg Knoerchen
  • Improvement: Dutch language updates, thanks to Herman Boswijk


  • Feature: rsvp end date/time restriction can now be negative, so you can say "Allow RSVP until -2 days -1 hours before the event starts, indicating the rsvp can go on for 2 days and 1 hour AFTER the event has started. The rsvp end can never go beyond the event end date itself of course.
  • Feature: new scope for events: 'ongoing': only shows ongoing events, for this we try to use the date and time, but it might be incorrect since there's no user timezone info
  • Feature: basic support for qtranslate-X (not fully functional yet, awaiting reply from the qtranslate-x authors)
  • Feature: added placeholders #_APPROVEDSPACES and #_APPROVEDSPACES{xx} (see the doc)
  • Feature: added option eme_register_empty_seats to the shortcode eme_add_multibooking_form: by default it is 0, but if you want to register 0-seats too, set this to 1
  • Feature: an event can now also be designated to take attendances only for bookings, a corresponding conditional tag #_IS_ATTENDANCE has been created as well so you can change messages shown or emails sent
  • Bugfix: the required fields were not being checked in the backend, so browsers not supporting the html5-required tag could input empty custom field info
  • Bugfix: take booking price=0 into account for events that still have a payment gateway configured
  • Bugfix: make simple event paging work again
  • Improvement: German language updates, thanks to Joerg Knoerchen


  • Feature: added action eme_delete_recurrence_action
  • Feature: allow custom fields also in the header/footer for multi-booking format templates, but use with care: will only work correctly for 'identical' events (events with the same custom fields)
  • Feature: support polylang, but only if the setting 'The language is set from content' is choosen
  • Feature: added filter eme_events_format_prefilter, a initial filter for the events format, in case people want to change anything before the placeholders get replaced. Has 2 arguments: $format and $event
  • Feature: added placeholder #_LOCALE, returning the currently chosen locale. Can be used in multilanguage setups, so you can change content of anything inside an event, location or form based on the locale active at that time (if no language tags are provided by the language plugin you're using)
  • Improvement: support custom translations files in wp-content/languages/ (WP_LANG_DIR setting), so changed translation files are not overwritten when updating EME
  • Bugfix: #_RSVPEND was incorrect
  • Bugfix: if the period was "daily" in the list widget and 2 events were on the same day but a different month, the new month info wasn't shown, making it look as the second event happened in the same month as the first
  • Bugfix: translation url fixes
  • Bugfix: recurrence defined as "start day" was not working ok
  • Code change: small code change to make multi-bookings more wordpress 404-proof


  • Bugfix: #_RSVPEND was incorrect


  • Improvement: each category now also has a SEO slug (albeit not editable yet)
  • Incompatibility: the function eme_event_category_url now takes the whole category array as argument (as for events and locations)
  • Incompatibility: the function eme_get_event_categories now returns an assoc array of categories, the old behaviour is renamed to a new function eme_get_event_category_names
  • Bugfix: make sure the booking cancel form work again


  • Improvement: allow username/email to be changed when doing a new registration via the backend and WP membership is required for an event
  • Bugfix: the new filters eme_rsvp_email_body_text_filter and eme_rsvp_email_body_html_filter were not taken into account (missing underscore)
  • Bugfix: the end date/time placeholder #@[a-z] were being replaced correctly, but the '@' remained too


  • Bugfix: make sure initial date for new events and recurrences is the current date, not 1970 ...


  • Bugfix: for events with no defined contact person, I tried to get the admin email but used a multisite function for it (which doesn't seem to be defined if you don't activate multisite)
  • Bugfix: fix sending of mail for normal registrations (typo fixes)


  • Bugfix: use php 5.3 notation for arrays, not everybody uses php 5.4 ...


  • Bugfix: not all mails were being sent out correctly


  • Feature: support qtranslate plus, next to qtranslate and mqtranslate
  • Feature: added new filters eme_rsvp_email_body_text_filter and eme_rsvp_email_body_html_filter to be able to change the mail body just before it is sent
  • Incompatibility: removed the per-user date format settings, was getting too confusing for coding up different formats for backend and frontend date formatting, while the generic WP settings should be used anyway
  • Incompatibility: renamed eme_email_filter to eme_email_obfuscate_filter
  • Improvement: try to use admin info when no other contact info is present for an event (can happen after using the frontent submit form)
  • Bugfix: better use of function strtotime to take Daylight Saving Time into account (not all days have 24 hours)
  • Bugfix: there's a bug for the cancel-mails and placeholders due to the fact that I first delete the booking before sending the mail (otherwise the number of free seats in the mail can be wrong), but because of that the placeholders can't be replaced anymore since the booking no longer exists. This has been fixed by getting the booking info before doing anything and handing that info to the function that does the mail sending (and not letting that function get the booking info anymore, since it might already been deleted)


  • Bugfix: the unique nbr for bookings only got generated when online payment was being selected too, now it gets generated if the total booking price >0


  • Feature: added 2 new scopes: relative-Xd--YYYY-MM-DD (end YYYY-MM-DD, start X days before that) and YYYY-MM-DD--relative+Xd (start YYYY-MM-DD, end X days past that)
  • Feature: added monthly range select in filter form: use #_FILTER_MONTHRANGE in the filter format and fields=monthrange in the eme_filterform shortcode
  • Feature: the shortcode eme_add_multibooking_form now also supports category_id as a parameter, to select all events for a single category
  • Doc: documented the template_id option for the shortcode eme_filterform, as the template is preferred before the fields option
  • Bugfix: first day of week in the datepicker is a integer, not a string. Putting a string created mangled day headers in the datepicker.


  • Feature: first day of week is now also respected in the datepicker


  • Feature: added 2 new filters to influence CSV output: eme_csv_header_filter and eme_csv_footer_filter Both take 1 parameter ($event) and should return an array (representing columns in the csv output in the header or footer) Can be used to add extra info at the top or bottom of the CSV output
  • Feature: new event placeholder #_RECURRENCE_NBR, returns the sequence number of an event in a recurrence series (first event is 1, second is 2, etc ...) Also added conditional tags #_IS_FIRST_RECURRENCE and #_IS_LAST_RECURRENCE
  • Feature: the RSVP cut-off date/time can now also be done based on the end-date of the event, not just the start-date
  • Feature: add a generic option to disable server-side required field checks when submitting a RSVP form
  • Improvement: renamed #_RECURRENCEDESC to #_RECURRENCE_DESC for conformity (the old one is still possible)
  • Bugfix: the unique number for payments should be calculated based on the payment ID, not the booking ID anymore.
  • Bugfix: small html correction in EME admin interface, tab Payments
  • Bugfix: fix some 'notcategory' behaviour for the eme_events shortcode
  • Bugfix: the optional choosen template got lost when switching months in the full calendar
  • Bugfix: the mail for cancellation was sent before the cancellation was done, resulting in wrong number of spaces free/reserved in the cancellation mail
  • Bugfix: better 24h-timeformat notation detection
  • Bugfix: better value escaping with ESC when using conditional tags
  • Bugfix: use correct headers when sending html-mail via wp_mail function


  • Bugfix: featured image for locations wasn't working anymore
  • Bugfix: show the map when editing an existing event with a known location
  • Bugfix: fix a JS error when looking at the list of events


  • Bugfix: account for the fact that a WP setting might be never changed, and thus just be empty in case of booleans


  • Feature: new hook eme_ipn_action (1 parameter: $booking), executed after successfull IPN Hint: get the event from the booking id by using this: $event = eme_get_event_by_booking_id($booking['booking_id']);
  • Feature: added placeholders #_PENDINGSPACES and #_PENDINGSPACES{xx} (see the doc)
  • Improvement: added conditional shortcodes eme_if7 till eme_if15 (some people really want these ...)
  • Bugfix: #_PAYMENT_URL was no longer replaced correctly
  • Bugfix: First Data payment button was not being generated correctly


  • Bugfix: multiple categories in widgets still contained an error, tested ok now


  • Bugfix: multiple categories in widgets wasn't working
  • Bugfix: removing a location wasn't working


  • Incompatible change: due to some changes in the code, 2 CSS id's changed too: no longer using a container id but using a real css class name: #eme_global_map img becomes .eme_global_map #eme_locations_list becomes .eme_locations_list
  • Feature: added template functionality to the calendar as well (new option template_id to the shortcode eme_calendar, for templating entries in the full calendar)
  • Feature: support tls when sending mail via smtp by prepending 'tls://' to the hostname (typically for port 587)
  • Feature: new placeholders #_HOURS_TILL_START and #_HOURS_TILL_END
  • Feature: new shortcode eme_add_multibooking_form that lets you use either a comma-seperated list of event id’s or a recurrence id for which you want to do multiple bookings in one go. It also has a template id for the header, entry and footer of the form list. More info in the doc.
  • Feature: new rsvp placeholder #_MULTIBOOKING_DETAILS_TEMPLATE{xx} (with xx a template id): parses the template for each booking in a multibooking scenario, all regular booking and event placeholders can be used in the template
  • Feature: new rsvp placeholder #_MULTIBOOKING_TOTALPRICE (the total price of all bookings in a multibooking scenario)
  • Feature: new rsvp placeholder #_MULTIBOOKING_SEATS (the total seats of all bookings in a multibooking scenario)
  • Feature: new rsvp placeholder #_IS_MULTIBOOKING (conditional tag you can use in rsvp mails)
  • Feature: new event placeholder #_EVENTATT, taking 2 arguments: eventid and attribute key. This allows to get the non-default value for an attribute from another event. E.g, for eventid 3 and attribute "my_att": #_EVENTATT{3}{my_att}
  • Feature: added the possibility to define an extra charge when paying via a payment provider. Also added an extra rsvp placeholder so you can show the extra cost being added per payment provider: #_CHARGE{google}, #_CHARGE{fdgg}, #_CHARGE{2co}, #_CHARGE{paypal}, #_CHARGE{webmoney}
  • Feature: now more than one global map can be shown on the same page
  • Feature: added event placeholders #_STARTDATE, #_STARTTIME, #_ENDDATE and #_ENDTIME, resulting in a easy way to get the start/end date and time for the event in the current WP settings format, without needed to use the other possible date/time placeholders
  • Feature: 2 new event scopes: ++YYYY-MM-DD (all events starting later than YYYY-MM-DD) and --YYYY-MM-DD (all events ending before YYYY-MM-DD)
  • Feature: mail subjects for the contact person can now also be changed in the settings
  • Feature: you can now select multiple categories in the widget. Multiple selected categories will be OR'd together (see the events placeholder)
  • Feature: added new filter eme_event_preupdate_filter, taking place just before the event is updated in the DB (the update companion of eme_event_preinsert_filter)
  • Feature: added a global option to ignore pending users when using the #_ATTENDEES or #_BOOKINGS placeholders.
  • Feature: you can now also send mails about a new event to all WP users, or to all WP users that did not yet register
  • Improvement: better image selection code for the featured image (since WP doesn't play nice with the 'insert from url', I needed to remove this)
  • Improvement: show the compact bookings table only when not editing a recurrence
  • Bugfix: eme_locations shortcode wasn't showing anything for option eventful=1
  • Bugfix: First Data setting was not being saved when selecting it as payment method for an event
  • Bugfix: added FDGG lib (First Data lib, was missing)
  • Bugfix: take into account lonely CR's when creating the javascript balloon text
  • Bugfix: when updating an event, the end time was not allowed to be equal to the start time
  • Bugfix: corrected contact_person as option for eme_rss_link (and documented it)
  • Bugfix: the shortcode eme_location used the wrong default format (should be the one specified in the settings called "Default single location page format")


  • Feature: added an option to hide past events (on a day-basis, not hour) in the calendar
  • Feature: added an option to hide events (from lists and calendar) which RSVP registration period has already ended
  • Feature: added #_FIELDVALUE{xx} to get the formfield value (can be used in the registration form, in #_BOOKINGS and RSVP mails)
  • Bugfix: using custom fields and/or html when re-sending mails didn't work as expected
  • Improvement: Italian language updates, thanks to Gianluca Granero
  • Improvement: Ukranian language updates, thanks to Michael Yunat (michael.yunat@gmail.com, see also http://www.iphostmonitor.com )
  • Improvement: updated Italian translation, tx to Antonio Venneri


  • Feature: added placeholders #_EVENTPRINTBOOKINGSLINK and #_EVENTPRINTBOOKINGSURL, showing either a link or just the URL to the printable bookings list, if you have the correct permissions
  • Improvement: if people enter field tags for multi-value custom fields, check that the number of tags is the same as the number of values
  • Bugfix: empty custom field tags were not correctly handled
  • Bugfix: make sure the day-hover title in the calendar no longer contains html
  • Bugfix: 24H format placeholders shouldn't return seconds, was never the case but got added in 1.3.0
  • Bugfix: for the detection of required fields for the RSVP form, I didn't take into account the fact that you can now use templates for the form so the required field detection failed


  • Feature: added placeholders #_12HSTARTTIME_NOLEADINGZERO and #_12HENDTIME_NOLEADINGZERO
  • Feature: added filter eme_eval_booking_filter, doing evaluations before the person is entered in the db. One parameter: $event. And $_POST can be used too of course.
  • Feature: added #_BOOKINGPRICEPERSEAT and #_BOOKINGPRICEPERSEAT{xx} rsvp placeholders, to return the end-price per booked seat (either normally or for multiprice for the indicated price category). The filter eme_insert_rsvp_action is taken into account, so the end-price includes anything you do with it (including discounts)
  • Feature: subjects of mails being send to bookers is now also customizable and multi-lang ready
  • Feature: you can now delete "unused" people (people without bookings, can happen if you delete old events)
  • Feature: you can now select a template for mail message and body when sending after-mails, and for many format settings when creating/editing an event
  • Feature: added an option to no longer show the RSVP form after a successful booking
  • Improvement: a little more polite bad-boy message
  • Improvement: renamed an eme option, no big deal
  • Improvement: all RSVP prices are now showing as floating point, with 2 digits behind the "."
  • Bugfix: removing a person and his booking info left orphaned answers, cleaning those now
  • Bugfix: when using the #_PAYMENT_URL in an email, all works ok but a php warning was shown (third variable for a function not initialized). Fixed
  • Bugfix: when deleting 1 template, all were deleted.


  • Bugfix: the filter eme_eval_booking_form_filter was called too early, causing the second argument to be empty
  • Bugfix: the captcha isn't taken into account when adding a booking via admin backend, but it prevented adding a booking then


  • Bugfix: some undef values fixed
  • Bugfix: make the default use the new notation too for captchas (for new installations)
  • Bugfix: the frontend submission plugin has been updated to account for new jquery timeentry plugin too


  • Bugfix: fixed a bug with a undefined var, preventing activation of the plugin for new installations
  • Bugfix: for plugin deletion, the tables were not deleted for multisite blogs


  • Feature: more consistent notation for placeholders, see http://www.e-dynamics.be/wordpress/?p=51559
  • Feature: people page can now do merging of bookings, show all bookings per person and allows person editing
  • Feature: RSS feed now shows html (no maps or forms), as does all other parts of wordpress do
  • Feature: use language selected at booking time for sending mail concerning the booking or the attendee
  • Feature: the cancel registration form can now also be formatted (also per event if wanted)
  • Feature: locations can now also be duplicated
  • Feature: added field tags to form fields, these are shown to the booker and are (m)qtranslate-compatible
  • Bugfix: don't show the captcha when showing the booking form in the admin backend, it was ignored but still it's best not to confuse people
  • Bugfix: if the current day had an event, the calendar didn't show the eventfull class
  • Bugfix: don't match "[...]" for location placeholders, solved more generically by the new placeholders notation feature.
  • Bugfix: show weekday initials only again for small calendar format
  • Bugfix: the wordpress nonce was being outputted too much times. Although the fields are hidden, it's not good to do so.
  • Bugfix: when inserting or updating a booking, the action hook was executed before the answers for extra fields were stored in the db
  • Improvement: the events database now gets updated upon first site visit (admin or not), so no more deactivate/reactivate action needed
  • Improvement: when the events page setting changes, the SEO rules are flushed, so no more deactivate/reactivate action needed
  • Improvement: code dedup for locations page
  • Improvement: show a warning if a custom field requires a value but it was left empty


  • Feature: when doing the "quick" deny for registrations while editing an event, no mails were being sent. There's now a general option in the Mail section that allows you to change that.
  • Bugfix: added a CSS to the datatables when showing events, so the footer div following it is moved when the table grows or shrinks
  • Bugfix: adding shortcodes to event details resulted in bad headers when using the setting "extra html headers" with placeholders like #_EXCERPT, and also gave problems for conditional tags


  • Feature: you can now send html-mails for RSVP messages if wanted
  • Bugfix: make the booking removal work again when in the event edit-window
  • Bugfix: make start of month correct again in new calendar code


  • Bugfix: remove some abiguous placeholder matching and correct the newly introduced image dimensions


  • Improvement: add width and height to thumb images, just in case the resized versions don't exist
  • Bugfix: make #_LOCATIONNAME work again
  • Bugfix: calendar days with a single digit didn't show the events
  • Bugfix: the booking recorded format may contain html, but was being sanitized


  • Feature: add/edit booking is now all possible from the backend, and when editing all custom fields show as well
  • Feature: added template functionality to the filter form as well (new option template_id to the shortcode eme_filterform)
  • Feature: added option 'show_recurrent_events_once' to the shortcode eme_events to show recurrent events only once. Remember that people will only see a normal event unless you add recurrent info to it using the placeholder #_RECURRENCEDESC
  • Feature: added placeholder #_EVENTCATEGORYIDS, returning the different category id's for an event. Not really usefull, unless you use the shortcode [eme_events category=#_EVENTCATEGORYIDS] inside a single event format, resulting in a list of events in the same categories as the one being viewed.
  • Feature: use jquery datatables in the backend for event and bookings, makes it easier to search, sort, ...
  • Improvement: doing a javascript post after a booking add/delete to prevent double actions when refreshing the page, also avoids using global variables
  • Improvement: German language updates, thanks to Wolfgang Löster
  • Improvement: extra antispam measurements
  • Behaviour change: make it possible for start and end date+time to be exactly the same
  • Bugfix: cleanup function shouldn't change recurrences with specific days, since those "end date" is 0
  • Major code rewrite in progress


  • Feature: added the possibility to define a return page for payment succes or failure, with event and/or booking placeholders
  • Feature: added placeholder #_RSVPEND that will show the date+time end of the registration period
  • Feature: added conditional placeholder #_IS_RSVP_ENDED, returns 1 if the registration period has passed
  • Feature: retain all filled in values if RSVP form validation proved wrong
  • Improvement: show an admin warning if the special events page is not ok
  • Improvement: German and Italian language updates, thanks to Stephan Oberarzbacher
  • Bugfix: make location attributes actually work
  • Bugfix: also deal with RESPNAME, RESPEMAIL, ... in the registration form format
  • Bugfix: the payment page was not shown for the placeholder #_ADDBOOKINGFORM_IF_NOT_REGISTERED after booking was done
  • Bugfix: fix double inclusion of eme_settings.php in uninstall.php, so uninstall works now


  • Feature: added new filter eme_categories_filter, executed when searching for the categories (e.g. when creating an event). With this, you can e.g. limit the categories shown when creating an event or location or ... . Has one parameter: array of categories.
  • Bugfix: make rsvp form work again (copy/paste error fix)


  • Bugfix: let shortcodes in booking and attendees lists be replaced at the end, so conditionals can be used there as well.


  • Feature: added width/height as optional parameters to shortcode eme_location_map
  • Feature: added radiobox, 'radiobox vertical', 'checkbox' and 'checkbox vertical' as new formfield types
  • Feature: added attributes for locations as well, and all templates are also searched for attribute definitions
  • Feature: event notes can now contain all event placeholders as well, when activating the new option called 'Enable placeholders in event notes'. This changes old behavior, so by default it is disabled
  • Improvement: make IS_REGISTERED work for all logged in users, not just when requiring WP membership for rsvp
  • Bugfix: fix layout for location list (the default format setting was being ignored)
  • Bugfix: some template header/footer fixes for attendee and booking lists
  • Bugfix: make [eme_location] work again


  • Feature: the payment form showing the buttons can now be customized in the EME settings, Payment section. The same placeholders as for bookings can be used. You can format the section above and below the payment buttons and everything is surrounded by CSS tags as well.
  • Feature: max and min amount of seats to book for one booking can now also be used for multiprice events (multi-compatible)
  • Feature: added option template_id to shortcode eme_single_event
  • Feature: added shortcode eme_location, with location id as argument, and optional a template_id for content: [eme_location id=1 template_id=3]
  • Feature: added shortcodes eme_bookings and eme_attendees, with event id as argument, and optional a template_id for header, content and footer [eme_attendees id=1 template_id=3 template_id_header=7 template_id_footer=9]
  • Feature: added placeholder #_IS_MULTIDAY. Returns 1 if the event start date is different from the end date, 0 otherwise.
  • Feature: added placeholder #_BOOKINGID for rsvp mails and booking info, in case you want to share the booking id
  • Feature: added new filter eme_add_currencies, so you can add extra currencies to the list. Be aware that not all payment portals support all currencies. Example: to add Ghanaian Cedi (GHS) to the list of currencies, add the following to your theme's functions.php:

    function my_eme_add_currencies($currencies){ $currencies['GHS'] = 'Ghanaian Cedi'; return $currencies; } add_filter('eme_add_currencies','my_eme_add_currencies');

  • Improvement: unified shortcode names:

    events_calendar ==> eme_calendar events_list ==> eme_events display_single_event ==> eme_event events_page ==> eme_events_page events_rss_link ==> eme_rss_link events_ical_link ==> eme_ical_link events_countdown ==> eme_countdown events_filterform ==> eme_filterform events_if ==> eme_if events_if2 ==> eme_if2 events_if3 ==> eme_if3 events_if4 ==> eme_if4 events_if5 ==> eme_if5 events_if6 ==> eme_if6 locations_map ==> eme_locations_map display_single_location ==> eme_location_map events_locations ==> eme_locations events_add_booking_form ==> eme_add_booking_form events_delete_booking_form ==> eme_delete_booking_form

    The old names are still valid, but will disappear from the doc

  • Bugfix: make sure that relative protocol urls (no http: or https:) are used for google api's in the admin backend

  • Bugfix: in the event edit window, the ajax method for removing rsvp's wasn't working anymore
  • Bugfix: some plugins add the lang info to the home_url, remove it so we don't get into trouble or add it twice
  • Bugfix: booking placeholders are also possible for the 'booking ok' message
  • Bugfix: only show location info in the ical feed if there's actually a location
  • Bugfix: ical fix for multiday allday events (they ended a day too soon)
  • Bugfix: use str_replace for replacing placeholders, to avoid issues with replacement strings containing $13 (preg_replace interprets those as backreferences)
  • Bugfix: the booking price is now shown correctly as floating point, not just integer
  • Bugfix: correct the placeholder replacement sequence for attendees and bookings
  • Bugfix: #ESC_NOTES was not working


  • Bugfix: prevent double header/footer appearance in event lists


  • Bugfix: prevent double header/f

Requires: 4.0 or higher
Compatible up to: 4.6
Last Updated: 2 days ago
Active Installs: 10,000+


4.6 out of 5 stars


30 of 30 support threads in the last two months have been marked resolved.

Got something to say? Need help?


Not enough data

0 people say it works.
0 people say it's broken.

100,3,3 67,3,2
100,3,3 75,4,3
50,2,1 80,5,4 100,1,1 100,1,1 100,1,1
100,1,1 100,2,2 100,1,1 100,1,1 100,1,1 0,1,0 100,1,1 100,1,1 100,1,1 100,1,1 100,2,2 100,1,1
33,3,1 100,2,2 100,1,1 100,2,2 100,1,1 100,1,1 100,1,1 100,1,1
100,1,1 0,1,0 100,2,2 100,3,3 100,1,1 100,1,1 100,1,1 100,1,1 100,1,1
100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,2,2
0,1,0 100,1,1
100,1,1 67,3,2 100,1,1 100,1,1
100,1,1 100,1,1 50,2,1 0,1,0 50,2,1
100,1,1 100,1,1 100,1,1 100,1,1 100,1,1
100,1,1 100,2,2 100,1,1
100,1,1 100,1,1 100,1,1