Events Made Easy – WordPress plugin

Deal Score0
Deal Score0

Events Made Easy is a full-featured event and membership management solution for WordPress. Events Made Easy supports public, private, draft and recurring events, membership and locations management, RSVP (+ optional approval), several payment gateways (Paypal, 2Checkout, FirstData, Mollie and others) and OpenStreetMap integration. With Events Made Easy you can plan and publish your event, let people book spaces for your weekly meetings or manage volunteers and memberships. You can add events list, calendars and description to your blog using multiple sidebar widgets or shortcodes; if you are a web designer you can simply employ the placeholders provided by Events Made Easy.

Main features:
* Public, private, draft and recurring events with custom and dynamic fields in the RSVP form
* Membership management with custom and dynamic fields
* Volunteer management for events (using event tasks)
* Attendance reporting for events and memberships if the rsvp or member qrcode is scanned by someone with enough rights
* Page and post content protection through memberships or via shortcodes
* Drip content via memberships
* People and groups with custom fields per person
* PDF creation for membership, bookings and people info
* Membership card or booking ticket can be sent as PDF via mail automatically, with optional QR code to scan for attendance/payment info
* RSS and ICAL feeds
* Calendar management, with holidays integration
* Several widgets for event listings and calendar
* Location management, with optional OpenStreetMap integration
* RSVP bookings with custom fields and dynamic fields, payment tracking, optional approval, discounts
* Protection of forms with internal captcha, Google reCaptcha or hCaptcha
* Templating for mails, event lists, single events, feeds, RSVP forms, … with specific placeholders for each
* Lots of shortcodes and options
* Payment gateways: Paypal, FirstData, 2CheckOut, Mollie, Payconiq, Worldpay, Stripe, Braintree, Instamojo, Mercado Pago
* Send mails to registered people, automatically send reminders for payments
* Automatically send reminders for memberships that are about to expire or have expired
* Mail queueing and newsletter functionality
* Mailings can be planned in the future, cancelled … and can include extra attacments
* Multi-site compatible
* Several GDPR assistance features (request, view and edit personal info via link; delete old records for mailings, attendances, bookings)
* Fully localisable and already fully localised in German, Swedish, French and Dutch. Also fully compatible with qtranslate-xt ( most of the settings allow for language tags so you can show your events in different languages to different people. The booking mails also take the choosen language into account. For other multi-lingual plugins, EME provides its own in-text language tags and takes the current chosen language into account.

For more information, documentation and support forum visit the Official site .

Always take a backup of your db before doing the upgrade, just in case …
1. Upload the events-made-easy folder to the /wp-content/plugins/ directory
2. Activate the plugin through the ‘Plugins’ menu in WordPress (make sure your configured database user has the right to create/modify tables and columns)
3. Add events list or calendars following the instructions in the Usage section.


After the installation, Events Made Easy add a top level “Events” menu to your WordPress Administration.

  • The Events page lets you manage your events. The Add new page lets you insert a new event.
    Generic EME settings concerning RSVP mails and templates can be overriden per event.
  • The Locations page lets you add, delete and edit locations directly. Locations are automatically added with events if not present, but this interface lets you customise your locations data and add a picture.
  • The Categories page lets you add, delete and edit categories (if Categories are activated in the Settings page).
  • The Holidays page is used to define and manage holiday lists used in a calendar
  • The Custom fields page lets you manage custom fields that can be used for events, locations, people, members, memberships and RSVP definitions
  • The Template page lets you manage templates for events, memberships, mails, pdf creation, …
  • The Discounts page lets you manage discounts and discount groups used in RSVP or membership definitions
  • The People page serves as a gathering point for the information about the people who booked a space for one of your events or for members personal info.
    It can also be used to add custom info for a person based on the group he’s in, so as to reflect the structure of an organization or just store extra info
  • The Groups page
  • The Pending bookings page is used to manage bookings for events that require approval.
  • The Change bookings page is used to change bookings for events.
  • The Members page is used to manage all your members (e.g. membership status, custom member info).
  • The Memberships page is used to define and manage your memberships.
  • The Countries/states page can be used to define countries and states (in different languages) for personal info in membership and RSVP forms
  • The Send mails page allows the planning, creation and management of mailings for events or generic info (many options possible)
  • The Scheduled actions page is used to plan automated EME tasks (like sending reminders, cancel unpaid bookings, newsletter)).
  • The Cleanup actions page
  • The Settings page is used to set generic EME defaults for events, payment gateways, mailserver info, mail templates, …
  • Fine-grainded configurable access control (ACL) for managing events, locations, bookings, members, …

Events list and calendars can be added to your blogs through widgets, shortcodes and placeholders. See the full documentation at the Events Made Easy Support Page.

“Events Made Easy” is open source software. The following people have contributed to this plugin.


2.2.75 (2022/05/06)

  • Fix BCC mail sending
  • Add option for newsletter sub/unsub per person too (the automatic mail for new events)
  • Add extra SEO permalink prefixes for calendar and payments
  • Added placeholder #_BOOKING_CONFIRM_URL (which gives a nicer link for a booker to confirm his booking if permalinks are active, not just the payment url)

2.2.74 (2022/04/25)

  • Allow filter on email settings, so you can e.g. change server/port/… based on the ‘to’
    The filter is called eme_filter_mail_options and takes 1 array as argument:
    ‘mail_send_method’, // smtp, mail, sendmail, qmail, wp_mail
    ‘send_html’, // true or false
    ‘smtp_encryption’, // none, tls or ssl
    ‘smtp_verify_cert’, // true or false
    ‘smtp_auth’, // 0 or 1, false or true
    ‘smtp_debug’, // true or false
    The return should be the filtered (changed) array
  • Optionally show event categories in bookings
  • Make “#_SINGLE_EVENTPAGE_EVENTID” placeholder work as expected
  • Add generic placeholder #_SINGLE_EVENTPAGE_LOCATIONID, returning the location id of the event currently being shown (so you can e.g. show a location map of the current event in a widget)
  • Add generic placeholder #_SINGLE_LOCATIONPAGE_LOCATIONID, returning the location id of the location currently being shown (so you can e.g. show a location map of the current location in a widget)
  • #_PAYMENT_URL placeholder (also used to have the user confirm a booking) was not showing the link if online payment for the event was not possible

2.2.73 (2022/04/15)

  • Leaflet JS will now also switch to dark mode if your browser is set that way
  • Allow direct template input for memberships too, without needing to define separate templates
  • Make add-tasks work again (javascript error sneaked in)

2.2.72 (2022/04/11)

  • Delete old answers for custom fields for people if appropriate (when the custom formfield is no longer present) if updating the person in the backend
  • Allow 0/empty as value for planned actions “Schedule the automatic removal of unpaid pending bookings older than” and “Schedule the automatic removal of unconfirmed bookings older than”
  • Correct Donate button

2.2.71 (2022/04/09)

  • Better plan cron (WP only takes 24 hours in a day, not taking summer/winter timezones into account)
  • Birthday mails needs to be sent for people indicated to do so, despite the default setting for new people

2.2.70 (2022/04/08)

  • Update Stripe API to 7.121.0
  • Update Braintree API to 6.8.0
  • Update Fondy API to
  • Update Mercadopago API to 2.4.5
  • Update Mollie API to 2.41.0
  • Remove Paymill and Sagepay payment gateways
  • Implement Braintree refunding
  • Show Worldpay callback url in the payment options page
  • Add RSVP placeholder #_WAITINGLIST_POSITION, returning the position of a booking on the waiting list
  • Implement birthday functionality with new people placeholder #_BIRTHDAY_EMAIL, can be used to show a form field (yes/no) to allow people to indicate they want an email (or not) or as text info (Yes/No text)

2.2.69 (2022/03/26)

  • Export also partial payment info (received and remaining) in the CSV export for bookings
  • Add forgotten filter eme_event_formfields
  • Cache extra queries, resulting in much better performance
  • Add a div with a class around the text “You can change your last name in your WP profile.” so you can hide it if you’d like.

2.2.68 (2022/03/22)

  • Fix PHP warning
  • Add filters eme_event_formfields, eme_location_formfields, eme_membership_formfields, allowing you to influence e.g. the order of custom fields shown in the EME admin interface
    for events, locations and memberships

2.2.67 (2022/03/19)

  • Fix a recursion detection, causing some placeholders/shortcodes not to be replaced in certain cases

2.2.66 (2022/03/18)

  • Do not apply the filter eme_event_list_filter in the backend
  • Add booking placeholder #_IS_PENDING (returns 1 if booking is pending approval, 0 otherwise)
  • Added #_USER_IS_REGISTERED placeholder for shortcode eme_tasks_signups, can be used as e.g. conditional tag
  • Added #_HAS_USER_TASK_REGISTERED{xx} (with ‘xx’ being one or more task ids, seperated by comma) returns 1 if the current logged in user is registered for one of the mentioned tasks
  • Added shortcode eme_mytasks to show the signups for the current logged in user. Extra options:
    ‘scope’ => ‘future’ (other values: ‘past’, ‘all’)
    ‘task_id’ => 0 (so you can use this shortcode inside a eme_tasks shortcode to show signups in a specific format)
    ‘event_id’ => 0 (so you can use this shortcode inside a eme_events shortcode to show signups in a specific format)
    ‘template_id’ => 0 (if not specified, the generic task signup template will be taken)
    ‘template_id_header’ and ‘template_id_footer’ (see the doc)
  • Allow to change also start date for recurrences via mass action
  • Improved regex to better catch paired curly brackets, even when enclosed in others
    This also allows for more recursion for event and membership placeholders

2.2.65 (2022/03/02)

  • Take deleted groups into account when editing a custom field of type “people”
  • Update Braintree API to 6.6.0
  • Update Dompdf to 1.2.0
  • Added “on behalf of” part for cli_mail forwarding
  • Add all sent mails to the database, even if no queueing is active
  • Support “scope” as a parameter for the shortcode eme_mybookings. Default value “future” (other options: “past” or “all”). The old “future” parameter will override the scope parameter if set

2.2.64 (2022/02/19)

2.2.63 (2022/02/16)

  • Bring back the “Mark paid and approve” button
  • Fix the deprecated option “approval_status” for eme_my_bookings, eme_bookings and eme_attendees shortcodes

2.2.62 (2022/02/16)

  • Fix eme_mybookings (sql error) shortcode

2.2.61 (2022/02/15)

  • Added placeholders #_CURDATE{xx}, #_CURTIME{xx}, #_BOOKINGPAYMENTDATE{xx}, #_BOOKINGPAYMENTTIME{xx}, #_BOOKINGCREATIONDATE{xx} and #_BOOKINGCREATIONTIME{xx} so you can format the layout to your liking (‘xx’ being the date/time format in php date notation)
  • Added bulk actions to set GDPR or Massmail to “no”
  • Fix #_ATTENDEES showing trashed bookings too

2.2.60 (2022/02/15)

  • For sub/unsub form: the mailgroup select will be a single preselected dropdown if only 1 group is to be presented
  • Also delete person linked to unconfirmed booking after cleanup if that person is not used in other bookings or memberships and created around the same time as the booking
  • Add action eme_delete_person_action
  • Fix eme_mybookings (sql error) shortcode
  • Fix sending reminders for pending/approved bookings (was reversed) and #_BOOKINGS (was showing trashed bookings too)

2.2.59 (2022/02/14)

  • Remove the ugly code for linking rsvp section from one event to another. You can always use [eme_add_booking_form] if you want to use the booking form from another event.
  • Changed option approval_status to rsvp_status (the old option will continue to work for now, but is depecrecated) for shortcodes eme_bookings, eme_mybokings, eme_attendees
  • Add an option to ask for user confirmation after a booking. The booking itself will stay marked as pending until the person has confirmed it. Also cleanup actions have been added to remove unconfirmed bookings (default: unconfirmed bookings older than 24 hours will get removed)
  • For subscribe/unsubscribe: #_MAILGROUPS shows by default a list of all public groups, now you can limit that list by using #_MAILGROUPS{xx} with xx a comma-separated list of group ids
  • Obfuscate all emails of people (not just contact/author but also bookers or members) if shown on the site
  • Defined action eme_trash_person_action
  • Added code to prevent mail obfuscation in html mails

2.2.58 (2022/02/10)

  • Attendance check returned empty for qrcode scan if a booking was not paid and the user doing the scan was logged in
  • Don’t replace shortcodes in event or location notes too soon
  • Make sure gdpr cron actions are planned

2.2.57 (2022/02/07)

  • Fix attendance-only events (if someone selected 0 seats, it was not accepted)
  • Add condition ‘not equal to’ for dynamic data
  • Make dynamic fields also work for RSVP forms in the admin backend

2.2.56 (2022/02/06)

  • Fix for forever memberships (end date was not correctly set to 0)
  • Change “mail_only” to “public” for groups as an option, becayse #_SUBSCRIBE_TO_GROUP can also be used for those
  • Groups to subscribe to (that are rendered via #_SUBSCRIBE_TO_GROUP in the rsvp/member form) need to be set to ‘public’, just as for eme_subform and eme_unsubform shortcode or the form generated by #_UNSUB_URL
  • Make sure no mail error message is returned if the subject/body is empty for certain member actions

2.2.55 (2022/02/05)

  • A custom field of type “People” can now be in more than one group as a field condition, meaning the field will then appear for all people in one of the selected groups when editing a person
  • Fix list of people being shown for an empty group (list should be empty, not everybody)
  • Allow eme_email as an URL parameter for the page containing the eme_subform or eme_unsubform shortcode, causing the email field there to be filled in immediately
  • Added bulk action “remove from group” for people in the admin backend
  • Add placeholder #_SUBSCRIBE_TO_GROUP{xx} for RSVP and member forms, to allow people to indicate they want to be a member of a certain group
    (xx can be the id or name of a group)

2.2.54 (2022/02/02)

  • Add order param for multibooking form shortcodes (only has effect when using together with scope or category_id options)
  • Fix 2 possible php notices

2.2.53 (2022/01/27)

  • Ajax for author and contact in admin interface when adding/editing an event (for big sites the list of wp users was just too big)
  • Readonly for email/lastname/firstname in multibooking too if logged in
  • Fix a php error when the combo of multibooking+only_one_event+simple was used
  • Fix booking for only_one_event
  • Fix php warning for categories

2.2.52 (2022/01/25)

  • For events and memberships: only configured payment methods are now shown and never selected by default
  • Fix conversion for answer values causing a php error when wanting to convert to a localized value (currently no longer converted)

2.2.51 (2022/01/24)

  • Convert value to price when using #_FIELDVALUE for answer of custom fields that had “extra charge” indicated
  • Better layout for backend task signups overview (clickable events and people now)
  • Fix a typo causing bookings to fail to work for events (one letter …)

2.2.50 (2022/01/23)

  • Add options signupform_template_id and skip_full to eme_tasks_signupform shortcode
  • Add task placeholder #_TASKID (allows you to call e.g. [eme_task_signups task_id=#_TASKID] when inside the list of task signups
  • Add task placeholder #_TASKSIGNUPS, to be able to show a list of signups inside the signup form itself (format is then done via the generic EME settings for tasks)
  • Added event placeholders #_AVAILABLETASKS and #_FREETASKS, returns the number of free tasks for an event
  • Added the option “simple” to the shortcode eme_add_multibooking_form, allowing simpler multi-booking form (no need to change per-event mail formatting)
  • Renamed the option “only_one” to “only_one_event” for the shortcode eme_add_multibooking_form
  • Added the option “only_one_seat” to the shortcode eme_add_multibooking_form, which forces the min/max allowed seats to book per event to 1 (and thus hidden)
    This is mostly usefull in combination with “only_one_event” or “simple”
  • Added shortcode eme_add_simple_multibooking_form, which is identical to eme_add_multibooking_form with the simple=1 option
  • Allow to show all custom fields of purpose “people” in the membership overview too. This is a setting in the members-section of the EME options

2.2.49 (2022/01/19)

  • Allow the definition of an extra charge for new members in a membership (applied to members in “pending” status only)
  • Also allow auto-completion for task signups from the frontend if the permissions allow it
  • Removed the long deprecated filter eme_eval_booking_form_filter
  • When manually marking a member as stopped, set the end date to today
  • Take the full name format into account to do name sorting in groups
  • Added people placeholders #_FIRSTNAME{x} and #_LASTNAME{x} (to show only the first x characters of the first or last name, followed by “.”), #_INITIALS and #_LASTNAME_INITIALS
  • Added extra access settings to define who is able to access the people/groups/members/membership menu (the “list” access setting then does what it currently advertises)

2.2.48 (2022/01/14)

  • Allow empty firstname for csv import of people/members
  • Indicate that the member-edit template is only used when marking a member as unpaid
  • Correctly take the offline info into account before deciding wether or not automatically redirecting to the payment gateway
  • Send correct booking mail after moving automatically from waiting list to pending or approved
  • For eme_events shortcode: if not needing to show events by period (or “long_events option”), don’t try to group by date because that will not provide a correct result for events when using the “order” option

2.2.47 (2022/01/12)

  • Use CSS to diable password autocomplete, chrome just keeps messing with it
  • Make more personal info read-only when editing a member
  • Respect the setting “redirect wait period” for member payments too when the option “Redirect immediately to payment gateway?” is set

2.2.46 (2022/01/06)

  • Allow to set a cutoff period in which people can renew their active membership (e.g. renewal only allowed 30 days before the membership currently ends), so people can’t pay for multiple periods

2.2.45 (2022/01/02)

  • Make sure the ticket gets attached for approved bookings

2.2.44 (2021/12/30)

  • Keep existing choice of queue schedule for upgrade from 2.2.41 (can help if you use queue scheduling and didn’t update to 2.2.42 yet, otherwise verify your queue settings in the EME mail options section)

2.2.43 (2021/12/30)

  • Make sure a sensible default is set for the mail queue schedule (‘hourly’ if nothing present).
    Due to the upgrade to 2.2.42 this option might have been reset to ‘hourly’. Please check your EME mail options to verify/change the schedule to your liking.

2.2.42 (2021/12/29)

  • Fix gdpr daily actions schedule
  • Update Mollie API to 2.39.0
  • Fix upgrade from 2.1.122 that might have lost customer answers for events/locations/memberships (not for bookings or members)
  • For the subscribe form, lastname and firstname are optional (even when #_LASTNAME and #_FIRSTNAME are used).
    They can be made required by using #REQ_LASTNAME and #REQ_FIRSTNAME
  • Removed the cron action to send out reminders for unpaid bookings for all events. You can schedule reminders per event, so this cron is no longer needed
  • The mail queue settings are moved to the options page (where they belong)
  • Fix member transfer to other membership

2.2.41 (2021/12/11)

  • Typo fix for dynamic member data

2.2.40 (2021/12/11)

  • CSS fix for people image preview
  • Small discount layout fix when deleting a group
  • Mass action to remove discounts from a group
  • Make sure dynamic price calculations happen late enough so the theme discount functions are taken into account too
  • If no dynamic fields but “the dynamic data on all fields” is checked, now discount functions of type code will run too, so dynamic price gets updated as well
  • Fix adding recurrent events where end time was smaller than start time

2.2.39 (2021/12/07)

  • Fix selecting people by random id
  • Allow multiple group_ids when using [eme_people]
  • Show the person image as personal info too if present, and allow it to be changed in the front too (use #_IMAGE in the “Change personal info Form template”)
  • Make sure older members get extended too (payment id was missing)

2.2.38 (2021/12/03)

  • Mollie tracking fix for members (the mollie payment tracking number was not saved per member after payment)
  • Small bugfix causing attachments to not be sent anymore

2.2.37 (2021/12/02)

2.2.36 (2021/12/02)

  • Add mass action to resend member expiration reminder
  • Security fix (possible SQL Injection by authenticated users): fix an unescaped search query in the ajax eme_searchmail action (reported via WPScan)

2.2.35 (2021/12/01)

  • Allow people to clear the lastname/firstname fields if “Require WP membership” is not selected for events or memberships
  • Fix eme_tasks_signups shortcode and let it have the same options as the eme_tasks_signupform shortcode
  • Add #_PAYMENTID as placeholder for bookings and members

2.2.34 (2021/11/26)

  • Fix sending out reminders for approved bookings

2.2.33 (2021/11/24)

  • Allow member id to be imported too for CSV import of members (column: member_id). If the member_id already exists, that value will be ignored
  • Added filters eme_event_email_subject_filter, eme_event_email_body_filter, eme_generic_email_subject_filter, eme_generic_email_body_filter
  • Add groups, creation and modif date as extra columns for people
  • Fix bulk action to add people to a group
  • eme_countdown shortcode now shows the difference in days, not taking the hour into account
  • Fix undefined var when subscribing to a group
  • Fix undefined var when unsubscribing from a group
  • For sortable elements (like dynamic data fields), only allow sorting when clicking the sort image, this prevents issues on mobile browsers
  • Add eme_add_booking_form_prefilter so people can influence the placeholders already before being replaced
  • Reminders can be set per event for pending/approved bookings
  • Reminder days can be set to 0 for memberships, meaning to send a reminder the day the membership will expire (at midnight).
    The same goed for reminders for pending/approved bookings or tasks
  • Added event tasks (for volunteer signups per event). By default this is deactivated, so if you want to use this, go in the generic EME settings and set “Use tasks”
    The shortcodes [eme_tasks_signups] and [eme_tasks_signupform] have been created for this (see the doc)
    Reminders for tasks are configurable as well.

2.2.32 (2021/11/06)

  • In certain cases own javascript had also br-tags added, this caused javascript errors of course.
  • Allow immediate redirect to online payment gateway if only 1 gateway is selected for that event/membership.
  • Fix storing answers for members, it was a bug introduced in 2.2.29

2.2.31 (2021/11/04)

  • Fix subscribe with name/email to mailgroups

2.2.30 (2021/11/02)

  • Fix a weird php bug where array_map with extra arguments loses the array keys. This affected mainly the frontend submit plugin

2.2.29 (2021/11/01)

  • Allow all booking placeholders to be used as condition for dynamic fields (idem for members)
  • Fix email tracking (due to a typo, tracking was not done anymore)
  • Allow unfiltered html (except javascript) in some parts, as wordpress does for posts. This will be indicated.
  • Fix the display of a person’s birthdate/place in members overview

2.2.28 (2021/10/27)

  • Correctly move bookings to trash for future events if moving the corresponding person to trash
  • Fix showing the language in the countries overview
  • Add the translated strings for the select-windows (used for countries/states)
  • Added filters eme_insert_discount_filter, eme_insert_event_filter, eme_insert_location_filter, eme_insert_person_filter, eme_insert_group_filter, eme_insert_member_filter
  • The chosen setting for ‘Check waitinglist when seats become available’ was not being saved in the global options
  • Allow all payment gateway placeholders to be used as booking and member placeholders too
  • Fix 12:00 AM times for events (old bug in ExpressiveDate.php lib)
  • Use more resilient placeholder replacement regex
  • For Belgium: added Payconiq support
  • Added filter eme_insert_event_filter (there’s already eme_preinsert_event_filter, but this name is more logical)

2.2.27 (2021/10/14)

  • Documented [eme_person] shortcode
    [eme_person] parameter person_id can be overriden via a url param (using the person’s random id). This allows to create 1 page where you can show other people’s info based on their random id (so not easy to guess) from e.g. within an event. The param name is “prid”.
  • The eme_change_personal_info shortcode will detect if you’re logged in and immediately show the form if a linked EME user is found and the option “show_form_if_logged_in” is set to 1 or true
  • The eme_request_personal_info shortcode will detect if you’re logged in and immediately show the info if a linked EME user is found and the option “show_info_if_logged_in” is set to 1 or true
  • EME notices will no longer be shown to non-admin users
  • Fix updates for dynamic answers for family members when updating head-of-family (the same answers were taken for all family members, which was not the intention)
  • Take UTF-8 BOM into account for CSV import
  • Added mass-action to add discounts to groups
  • Added mass-action to change “valid from” date for discounts
  • Added mass-action to change “valid until” date for discounts

2.2.26 (2021/10/04)

  • Fix auto-removal of old expired members (if set in the GDPR settings)
  • Fix subscribe/unsubscribe mail forms

2.2.25 (2021/10/01)

  • Fix sending of booking mails (due to the quick release of the security issue, I didn’t get around to testing that too well, so made a typo)

2.2.24 (2021/10/01)

  • More nl2br tuning: don’t add a br-tag if the next line starts with a html closing tag
  • Optimize the code for extending recurrences
  • Fix some undef php variables in paypal legacy payment method
  • Allow generic placeholder to contain other placeholders in {..}, so generic placeholders that use {..} can contain event/location/membership placeholders
  • Security fix (XSS): fix an unsanitized field (name) in the custom formfields form (reported by Huy Nguyen via WPScan)

2.2.23 (2021/09/25)

  • nl2br fixes
  • Noscript-detection fixes

2.2.22 (2021/09/22)

  • Added event placeholder #_CANCELEND, returns the localized date+time until people can cancel a booking
  • Make sure to restore the schedule of the planned actions after deactivation/reactivation of the plugin
  • Add new timepicker for some cases (replaced the slider when creating events and for custom fields of type time_js)
  • Work around the bug that wordpress doesn’t allow “+” in the sanitize_email function
  • Some more nl2br where needed

2.2.21 (2021/09/12)

  • Detect if javascript is disabled for forms and show an error message if it happens (and not the form)
  • Cleanup action added to remove people in trash longer than X days
  • Correct payment buttons for memberships

2.2.20 (2021/09/08)

  • Added action hook eme_trash_rsvp_action, so you can hook into the removal (trash) of a booking
  • Add support for hCaptcha (since Google starts charching for reCaptcha). See
  • Make sure person phone gets updated if linked wp user updates his phone

2.2.19 (2021/09/01)

  • The option to check the waiting list when a seat becomes available is now also a global option
  • Fix #_AVAILABLEWAITINGLISTSEATS and #_AVAILABLESEATS to better account for booked seats on the waitinglist
  • Added #_BOOKEDWAITINGLISTSEATS (number of booked seats on the waiting list)
  • Allow current discount usage to be edited too when editing a discount
  • Added action hook eme_delete_rsvp_action, so you can hook into the actual removal of a booking too (not just trashing it)
  • Added #_CURRENCY and #_CURRENCYSYMBOL for memberships too
  • Added #_PRICE_INCLUDING_CHARGES (or #_GATEWAY_PRICE) as placeholder to be used above/below a payment button per gateway, so you can show the price with the charges for that gateway included
  • Fix the location add when creating an event again in the backend (caused by setting a default language but because of that the location dropdown showed to avoid multiple locations to be creted)
  • Update Mollie API to 2.37.1
  • Allow “NOW” as default value for custom fields of type date_js,datetime_js and time_js
  • Allow properties for discounts to be imported too

2.2.18 (2021/08/26)

  • In case a booking moves from one event to another, check the waiting list of the original event to optionally approve a booking
  • #_FILTER_LOCS was not showing the location dropdown in the filter form due to a typo, this has been fixed

2.2.17 (2021/08/25)

  • Show a small error message if a non-existing membership ID is used in the eme_add_member_form shortcode
  • You can now also use #_LASTNAME and #_FIRSTNAME in the email subscription form (not an obligation), and also in the email subscription confirmation mail
    If a logged-in user wants to subscribe, the info is readonly in the form and taken from the wp profile
  • Fix edit window for states/countries upon saving when also the option to “Stay on edit page after save” was set
  • Fix slug-duplication check/warning in EME options
  • Fix booking mails for pending bookings on waiting list
  • Only add person to group for a membership (if configured to do so) if the member actually paid
  • Added the option to automatically take a booking from the waiting list when seats become available for an event
  • Added aria-label for input selects/dropdowns
  • Support language tags under the form “[:ll]text[:]” (the default in qtranslate-xt)
  • If activating the option to disable wpautop, EME replaces it by a function that replaces carriage returns by br-tags in a smart way

2.2.16 (2021/08/16)

  • Fix CSV export of bookings with people custom fields
  • Fix discount and limits for groups/members
  • When a person subscribes to “all” groups, add them to every group designated as “mail only”
  • Be more strict in length of subject when sending mails (wordpress doesn’t catch db length issues, so it seems to be an error but one can’t trace it back)

2.2.15 (2021/08/11)

  • Fix some placeholder matching that accidentally got too strict

2.2.14 (2021/08/10)

  • Fix #_DYNAMICFIELD{xx} placeholder for members and bookings
  • Show person language and allow to change it
  • Start supporting language tags under the form “{:ll}text{:}” (with ll a 2 or 3-letter language code) no matter which plugin is installed. Supports the “lang=ll” query param or the “/ll/” url notation
  • Added a filter (eme_language_regex) to change the url language regex detection if done by EME itself and not ok
    The default regex is ‘[a-z]{2,3}’, matching 2 letter and 3 letter lannguage notations
    This also influences the format of the language tags, so normally you don’t need to change this
  • Mass action added to update language for a number of people in one go
  • Make sure members table gets created for new setups

2.2.13 (2021/07/31)

  • Show more discount/payment columns in member overview
  • Added all zero-decimal currencies to the regular currency list
  • Added filter eme_payment_gateways, which allows you to change the payment gateways array (and also thus change the order gateways are shown in the payment form)
  • Stop supporting IE for the dynamic fields/price
  • Pending members are removed based on creation date alone, not start/end date (if configured to do so in the membership)
  • Fixed sql for members or people in dynamic groups (in the new style, everyone was included)
  • Added cli_mail.php, to be able to pipe mail via php-call to this script to a defined EME group
    To use this in e.g. postfix:
    1) in /etc/postfix/transport, add your email you want to forward to the group and a custom postfix transport. E.g.: my-custom-transport:
    2) After that, compile the file (postmap /etc/postfix/transport)
    3) Define that custom transport in /etc/postfix/
    my-custom-transport unix – n n – – pipe
    flags=DRhu user=www-data argv=/usr/bin/php -q /path/to/wp-content/plugins/events-made-easy/cli_mail.php -d ${recipient}
    4) reload postfix (postfix reload)
    5) For all options available to cli_mail.php, do “/usr/bin/php -q /path/to/wp-content/plugins/events-made-easy/cli_mail.php -h”
    (-f ${sender} and -d {$recipient} are typically used for postfix piping, but you can use other options too)
  • Added eme_bookings_report_link shortcode

2.2.12 (2021/07/22)

  • Fix members and people overview which shows all info if on page 0
  • Fix GDPR cleanup action (archiving) of old mailings
  • Fix #_CONTACTPHONE for events and memberships
  • Exclude selected rows when selecting people for deletion and choosing another person to transfer the bookings to

2.2.11 (2021/07/20)

  • Better code when updating a booking from the backend (payment status can now also be set when editing)
  • When transfering a member to another membership, take dynamic answers into account too (if possible)
  • You can transfer a memberships from one person to another person when editing the member
  • For family members, also copy the paid status from the main family account
  • Allow dynamic member and people groups to be edited (existing dynamic groups are incompatible, but will continue to work as before as long as you don’t edit these, in previous releases editing was prohibited so it doesn’t change in fact)
  • Add mass action to set massmail to Yes for multiple persons in admin backend
    (take gdpr into account hen you decide to change this of course)

2.2.10 (2021/07/14)

  • Fix a JS error in the console
  • Support Brazilian Real
  • Allow member transfer to another membership
  • Fix searching on event end date too (or between start/end) in bookings
  • Make sure that the result is considered ok if no mail is sent due to empty subject or body
  • Account for non-linked wp user in the cancel booking form (caused a php notice)

2.2.9 (2021/07/10)

  • Allow all attachments to be reused
  • Add an option that allows to remove the p-tags/br-tags that wordpress adds/replaces for event/location notes/excerpts
  • Added placeholder #_DYNAMICFIELD{xxx} for members and bookings, which works like #_FIELD but for dynamic fields added. Since these can be repeated multiple times, those answers will be separated by a carriage return or a br-tag
  • Added shortcode eme_members_report_link (see doc)
  • Added option to eme_attendees_report_link to be accessible via the frontend without needing to be logged in (nonce-protected and then the page needs to be password protected too)
  • Fix the reporting of approved/pending seats when clicking on Approved/Pending from the events overview and not being admin

2.2.8 (2021/07/04)

  • Added placeholder #_PAYMENTGATEWAYUSED for members and bookings, it returns the payment gateway that was used to make the payment
  • Added placeholder #_MEMBER_STATUS (returns “Pending”, “Active”, “Grace period” or “Expired”)
  • Make Stripe work again

2.2.7 (2021/07/03)

  • Hook some actions later into wordpress, after the theme custome filters are loaded too
  • Also reuse attachments when reusing a mail or mailing
  • Fix CSV booking export for custom fields (due to extra check they were no longer added)
  • Update remaining amount to pay if the price of an event has changed when updating a booking
  • More userfriendly Stripe payment methods
  • Added conditional placeholder #_IS_LOGIN_REQUIRED (returns ‘1’ is login is required to rsvp or the event is private, ‘0’ otherwise)

2.2.6 (2021/07/01)

  • Fix filtering for multiple custom fields (using shortcode eme_filterform) of type “event”
  • Show linked WP user correctly when editing a person
  • Membership evaluation was not working due to added code for discounts, corrected now
  • Add attachments to preview mails too if present

2.2.5 (2021/06/29)

  • Add membership discounts
  • Added bulk action to be able to extend recurrences until a new date
  • Also create wp user if adding member from backend if the membership is configured like that
  • Add possibility to copy recurrences (just like events)
  • Add possibility to search for a name in the recurrences admin pane too
  • #_IS_CONTACT or #_IS_AUTHOR_OR_CONTACTPERSON failed to return the expected value if the event contact person was indicated as “event author”
  • Allow category descriptions to contain html
  • Better removal of yoast headers by EME itself for the special events page

2.2.4 (2021/06/18)

  • Fix translation of recurrence table header, so CSV and Print show too
  • When the contact or author filter is deselected, make sure we no longer filter for an non-existing person
  • Stopping a member could result in all members being marked as expired

2.2.3 (2021/06/15)

  • Decrease size of EME by 50% removing unneeded files for mercadopago (saves about 25MB)
  • Fix image removal for locations
  • Update mercadopago lib to 2.3.0
  • Make sure #_SINGLE_EVENTPAGE_EVENTID returns the event id, not the slug
  • Fix #_EVENTFUL* filter placeholders
  • Fix filtering for custom fields for events/locations/calendar
  • Fix scanning qrcode for event attendance (the total was marked as 0)

2.2.2 (2021/06/10)

  • When searching for an existing person, also search for lastname/firstname in the wrong order (if not empty)
  • Added filter placeholders #_FILTER_CONTACT and #_FILTER_AUTHOR together with the filters eme_filter_searchfilter_contact and eme_filter_searchfilter_author, which both take an array of options as argument (similar to wp_dropdown_users_args, but only 1 array as argument, this allows you to e.g. add the exclude param to the options so you can exclude certain WP users from the list)
    #_FILTER_CONTACT{xx} and #_FILTER_AUTHOR{xx} are the same as #_FILTER_CONTACT and #_FILTER_AUTHOR, the ‘xx’ just influences the search label shown in the dropdown box
    #_FILTER_CONTACT{xx}{yy} and #_FILTER_AUTHOR{xx}{yy} are again the same but the second params influence an exclude list (comma separated) of wordpress IDs you don’t want to show in the dropdown list. While this exclude list could also be handled via the filters eme_filter_searchfilter_contact and eme_filter_searchfilter_author, it is easier to do this way (and more likely to be used)
  • The body of the mail sent to change your personal info has been changed to a new default setting (reason is that now only 1 mail is sent for all matching emails, instead of 1 mail per matching email). Go in the EME settings to check the new value and change to your liking.
  • The setting “full name” has been changed to a new default “#_FIRSTNAME #_LASTNAME”. Go in the EME settings to change this after the upgrade if not wanted
  • Support #_CONTACTDISPNAME and #_AUTHORDISPNAME if the event contact/auther (a wp user) is not linked to an EME person
  • Allow #_CONTACTLASTNAME (and FIRSTNAME) and also #_AUTHORLASTNAME (and FIRSTNAME) if the event contact/author (a wp user) is not linked to an EME person
  • Support setting different payment methods for Stripe
  • The address1/2 fields for family members were not copied from the main family member for membership signup

2.2.1 (2021/06/05)

  • If the event contact or author (or membership contact, they are all WP accounts) is linked to an EME person, you can now use #_CONTACT (or #_AUTHOR) followed by any person placeholders (e.g. #_CONTACTNAME, #_CONTACTADDRESS1, all people placeholders preceded by “AUTHOR” or “CONTACT”) to show EME info from that person
  • Added person placeholder #_FULLNAME to return the fullname of a person
  • Added generic placeholder #_WPID to return the wp id, this can then be used in included eme_events shortcodes (if e.g. you want to filter on contact id based on current logged in user)
    Also added the person placeholder #_PERSONWPID, to optionally return the wp id of the person you’re looking at via [eme_people], so you could then show a list of events where that person is contact for (as an example)
  • Fix ++YYY-MM-DD scope so it really searches for days greater than, not starting from the beginning of the mentioned day
  • Fix sending event related mails (bug introduced in 2.1.117)
  • Fix #_FIELD{xx} for files for rsvp/people/member answers (was new in 2.2.0 but not working as expected)
  • Make sure events show on the last day too in the calendar if the end time was smaller than the start time (was a new bug in 2.2.0 due to switching over from separate date/time columns to 1)

2.2.0 (2021/06/02)

  • The date and time format can now be set differently for the EME backend, if the wordpress settings don’t suit you. For frontend settings (replacements in placeholders) this can always be tuned via the existing placeholders and options
  • Since #_MEMBER_QRCODE and #_ATTENDANCE_QRCODE (which name is poorly chosen anyway) can’t conflict, both have been renamed to just #_QRCODE (the old placeholders still work)
  • Event RSVP tab layout improvements
  • Add unauthenticated and authenticated attendance format message options when accessing an event attendance url (typically the qrcode)
  • Add unauthenticated (authenticated was already there) attendance format message options when accessing an member attendance url (typically the qrcode)
  • Added event conditional placeholders #_IS_REGISTERED_PENDING (returns 1 if logged in and registered and user has 1 or more pending registrations for the event) and #_IS_REGISTERED_APPROVED (returns 1 if logged in and registered and user has no pending registrations for the event)
  • Added booking conditional placeholder #_IS_APPROVED (returns 1 if approved, 0 if not)
  • Added scope now–7d (same as +7d, but taking datetime into account)
  • Switch to datetime notation for event start/end, simplifying a lot of code in doing so
  • Change in database tables storing custom field answers (merge done for bookings, people, members, events, locations and memberships)
  • Allow more placeholders to be used in the form for changing personal info in the frontend
  • The shortcodes [eme_gdpr_approve], [eme_request_personal_info] and [eme_change_personal_info] now check the url of the page for the parameter eme_email. If present and a correct email, it will be used to prefill the email field for those forms
  • Document the existing shortcodes [eme_request_personal_info] and [eme_change_personal_info] (documentation existed, but was not visible in the doc menu tree)
  • Memberships now have the notion of family relationships (where only the main family member will be charged and get reminders, the rest are added as related members)
    #_FAMILYCOUNT and #_FAMILYMEMBERS are new membership placeholders that allow to ask how many family members there are and where the data should be rendered in the form.
    The membership defnition has an extra new setting (“Family Member Form”) that gets repeated for each family member and rendered in place of #_FAMILYMEMBERS
    You can also use #_FAMILYCOUNT and #_FAMILYMEMBERS as placeholders in the mail for new members then.
  • People now also have the notion of family relationships, but it is only a notion (nothing relates to this, but you can use it to indicate families)
  • Initial code added for event tasks (but not operational yet)
  • Added personal placeholders #_BIRTHDATE and #_BIRTHPLACE (and the correspondig fields when editing a person)
  • Fix multiple file upload for bookings/members
  • Allow #_FIELD{xx} for files too when showing booking answers (showing the file upload html link)

2.1.122 (2021/05/07)

  • Fix cancel date check introduced in 2.1.121

2.1.121 (2021/05/06)

  • When canceling a payment, make sure to only cancel the bookings that are still allowed to be cancelled. The form already only showed those, but upon submit all bookings linked to the payment were still deleted (even if already in the past)
  • Improve the search for events when moving a booking (by default only show future events)
  • Fix person names when subscribing for an event. If a person with matching email already existed, that person would’ve been taken and not the latest one.
    This was due to a problem created in 2.1.119

2.1.120 (2021/05/03)

  • Show a warning if a dynamic data condition is already used in answers when editing an event or membership
  • Simplify the dynamic data condition form a bit when defining events or memberships
  • Add #_DYNAMICDATA automatically if not present in the format but dynamic data conditions are defined
    This was already happening for #_SUBMIT and #_CAPTCHA placeholders too and helps people to make less errors when defining a form format
  • Allow reorder in dynamic data conditions for events and memberships
  • Add people address info also in member overview (hidden by default)

2.1.119 (2021/05/01)

  • Added the option to define a VAT percentage globally or per event or membership.
    Also added placeholders for events, bookings, memberships and members:
    “1 year 3 months 2 days 3 hours 1 min 5 seconds” or (if e.g. the differences for year and month are 0) “2 days 3 hours 1 min 5 seconds”
    Also, if you want own formatting: #_DATETIMEDIFF_TILL_START{xx} and alike can be used, with xx being a php date interval format (see )
  • Added placeholder #_DATETIMEDIFF_START_END{xx}, to indicate the date/time diffeence between start and end, with xx being a php date interval format (see )
  • if the booking is paid for after entering a partial payment and the event is not set to automatic approve, send out the paid mail
  • Fix unsub from email groups if the name of a person in EME is not empty
  • Fix #_INVITEURL{xx} in rsvp mails when you want to invite the booker for another event
  • The attendance qrcode for events is now scannable also when not logged in, people then just see if it is paid for or not (like the qrcode for members in fact)

2.1.118 (2021/04/21)

  • Copy the location custom field answers too when copying a location
  • Correct the event sanitizing function so it keeps working for the emefs plugin too

2.1.117 (2021/04/17)

  • Fix new mail actions from bookings and members admin menu
  • Don’t queue mails with empty subject and body, they don’t get sent anyway
  • For invite-only events, the RSVP form now also takes the lastname/firstname from the invite url if present (and then it can’t be modified in the rsvp form)
  • Fix delete of custom formfields
  • Treat a string consisting of only whitespaces as an empty string where appropriate in the admin setting for events and mail templates (and so take the default value if needed)
  • Create a mailing entry for newsletters too, so you can see the statistics of it and cancel it as well
  • Validate event or location externam url before redirect
  • The eme_if conditions incsv and notincv now allow for “,” and “+” in their values, so you can search for “string A or string B” (string A,string B) or “string A and string B” (string A+string B) in the mentioned tag
  • Copy the event custom field answers too when copying an event

2.1.116 (2021/03/29)

  • New mail actions from bookings and members admin menu (to be able to send bookings/members related mails directly from there using templates)
  • Added Stripe refund
  • Fix a newly introduced db setup issue in 2.1.115 that would empty the title column in templates and type in formfields if you skipped some EME versions and needed a db update

2.1.115 (2021/03/21)

  • Make sure to add recaptcha and submit placeholders correctly for eme_subform and eme_unsubform shortcodes if not present in the format
  • Fix an undefined var
  • When deactivating and then reactivating, make sure the EME schedules are planned again too

2.1.114 (2021/03/12)

  • Correct a wrong split-statement and a typo when adding people to groups after rsvp submit

2.1.113 (2021/03/12)

  • For future versions, #_SUBMIT and #_CAPTCHA (or #_RECAPTCHA) will be added to forms if not present but needed. This makes life a bit easier for beginning users
  • Removed the 3 options that allow to set category separators, only 2 filters remain: eme_categorydescriptions_sep_filter and eme_categories_sep_filter
  • Added filter eme_validate_event_filter with 2 options (event and string with existing validation issues), to allow adding own validation rules for the created event.
    If the output of the filter is not empty, the event will not be inserted in the db and the returned text will be shown as a validation error instead.
  • Allow multiple group selection for rsvp/membership-adding a person to a group

2.1.112 (2021/03/05)

  • Added event placeholder #_IS_REGISTERED_PAID, to check if a logged-in person is already registered and has no unpaid bookings for this event
  • Added wysiwyg for per-event mail templates
  • The option to skip payment options per event was not checked when re-editing an event
  • Add support for Google reCAPTCHA

2.1.111 (2021/02/26)

  • Allow expired members to sign up again too: this will change nothing in the db but they will be redirected to the membership payment page
  • Update Braintree API to 5.5.0
  • Update Stripe API to 7.75.0
  • Update Mercado Pago API to 2.2.1
  • Allow to skip payment directly after booking

2.1.110 (2021/02/16)

  • Correctly ignore mail count if the same tracker id arrives within a timeframe of 2 minutes
  • Add some hints for mail templates to inform people when some template will not be used.
  • Small maxlength fix for time-fields in events which would complain due to new jquery validation (if your wp settings cause the local time to be displayed in more than 8 chars only)

2.1.109 (2021/02/08)

  • Added “only_if_not_registered” and “only_one” options to the shortcode eme_add_multibooking_form
    The only_one option (default 0) – if value=1 – will cause a dropdown of the matching events to show, and not a select-box list.
  • Added “scope” option to the shortcode eme_add_multibooking_form (like for the eme_events shortcode)
  • Start using the jquery validate plugin in the backend, so we can jump to the specific event/location/membership tab that has a validation problem if that’s the case
  • Add pending bookings count to EME admin menu as a badge
  • Add “datetime (JS)” and “time (JS)” as formfield types
  • Lots of db cleanups, using the local date/time and never db date/time again (it works fine, but just too confusing to take into account multiple timesources)
  • Update select2 to 4.1.0-rc.0
  • Update dompdf to 1.0.2
  • More descriptive error messages upon import failure

2.1.108 (2021/01/30)

  • Fix the cancel specific booking per event functionality (when using #_CANCEL_LINK)

2.1.107 (2021/01/29)

  • Fix the cancel all bookings for an event functionality (e.g. when using #_CANCEL_OWN_LINK)
  • Added placeholders #_BOOKINGPDF_URL{xx} and #_MEMBERPDF_URL{xx} (with ‘xx’ being a template id) that allows you to generate pdf’s with booking/member info in them and mail that url to the person in question. If this placeholder is used multiple times with the same template (e.g. when you use it in “pending” and “approved” mail templates), the newest one remains and the older ones get removed. These placeholders can also be used in the booking thank-you message or the member signed-up template.
  • Make sure that the ticket PDF is also sent for pending bookings upon booking time if the setting is “at booking time” or “always”
  • Show mail subject in mailing overview too

2.1.106 (2021/01/25)

  • Fix mail tracking (it was not being stored in the db due to the new option)
  • Add database index to random_id in the mail queue table, to be more efficient for searching
  • Correct multivalue event field filtering in the filter form
  • Implement first/last read datetime for mails (and not just the first read datetime)
  • Added event scopes this_year–yesterday and YYYY-MM-DD–yesterday to show past events
  • Align some event payment options with newer code (removes 6 columns in the database for events: ‘use_paypal’,’use_2co’,’use_webmoney’,’use_fdgg’,’use_mollie’ and ‘use_sagepay’)
  • Ajaxify subscribe/unsubscribe/gdpr/gdpr approval forms
  • Shortcode [eme_change_personal_info] added, which allows people to change their own personal info. The form to change the info can also be configured in the EME settings (tab GDPR)
  • Some CSS id’s got renamed. While I tried to keep backwards compatibility: if you have custom CSS for the RSVP or membership forms, I advise to check your layout.
  • Added [eme_request_personal_info] as an alias for [eme_gdpr] (it is more than just for gdpr compliance anyway)

2.1.105 (2021/01/16)

  • Fix expiration reminders for members

2.1.104 (2021/01/14)

  • Remove the “always queue” option, now this is default when mail queueing is activated.
  • Store the person id or member id for rsvp or member mails, so you can reschedule properly if wanted
  • Allow the reschedule action on all queued mails
  • Add an option so you need to explicitly activate mail read tracking
  • Fix for: if the option to create a WP user upon registering is checked, we check if the email is not already taken in WP before accepting the booking if the booker is not logged in
  • WP id is stored with the EME person, so no need to store it again per booking.
  • Show all future events when trying to send event-related mails, not just the rsvp-enabled ones
  • The placeholders #_MEMBERNEXTENDDATE and #_MEMBERENDDATE also take expired into account now
  • Update Stripe API to 7.67.0
  • Editing people resulted in a copy of the person with the changes if lastname/firstname/email was changed

2.1.103 (2021/01/07)

  • Allow custom seo prefix for categories and locations as well
  • Correctly show relevant uploaded files in rsvp overview
  • Allow “0” for membership reminder mails too, and don’t send expiration reminderds for pending members
  • Make #ESC_TOTALSPACES return 0 for events with no space limit

2.1.102 (2020/12/30)

  • Fix some undefined vars and optimize code
  • Show relevant uploaded files in rsvp/people/members overview too

2.1.101 (2020/12/29)

  • Add an extra option to be able to change the page title for themes that don’t work using in_the_loop correctly (which seems to be a lot of themes …)
  • Fix some undefined var I introduced to respect the membership start date for fixed period membership if that start date is in the future

2.1.100 (2020/12/29)

  • If the option to create a WP user upon registering is checked, we check if the email is not already taken in WP before accepting the booking if the booker is not logged in
    This to avoid the creation of an EME user that is then not correctly linked to a WP user.
  • Update Braintree API to 5.4.0
  • Respect the membership start date for fixed period membership if that start date is in the future
  • Allow multiple event seo prefixes to be defined, so you can choose per event which prefix you like best

Older changes can be found in changelog.txt

Source link

We will be happy to hear your thoughts

      Leave a reply

      Wordpress Tutorials, Tips, Themes and Plugins.
      Register New Account
      Reset Password
      Shopping cart