Category Archives: amr events

Notes that relate to creating and editing events

GDPR Compliance for event plugins

This statement is for the wordpress plugins amr-events, amr-ical-events-list  and amr events attendees at https://icalevents.com/plugins_downloads/

Briefly: the amr-events plugin creates events as wordpress custom posts. No additional user data is created or stored. The post author (display name and email) is assumed to be the event organiser for purposes of complying with the ics feed RFC5545 standard. The plugins do not send or store data on any other servers.


Collecting & storing of user data:


The amr-events plugin creates events as wordpress posts.  As per standard wp processing the author of the post is recorded.  That is the extent of any collecting any personal user data that is within the plugins control – only as per standard wordpress user functioning.   The plugin does not of itself collect and store user data.  Control of that user data rests with the website owner.


Processing or use of user data (email and display name):

In event feeds (ics feed) as per the RFC5545 standard the event organizer must be included in the RFC 5545 ics file.  Refer https://tools.ietf.org/html/rfc5545#section-3.8.4.3   – see Organizer

This property MUST be specified in an iCalendar object
      that specifies a group-scheduled calendar entity.  This property
      MUST be specified in an iCalendar object that specifies the
      publication of a calendar user's busy time.

To conform to this, the event post author’s data is then included in the ics file as per the example in the specification :

ORGANIZER;CN=John Smith:mailto:jsmith@example.com

The plugin uses the wordpress post authors “display name” if it exists, if not then the wordpress users “userlogin”, and then the wordpress users ‘user_email’ to provide the required ORGANIZER details.  The plugin does not have any means to validate this data and simply uses what has been stored the user records by the website.

A web developer can choose to display (or not) the public ics url.  The web developer can also control whether a real user or a dummy user is recorded as the post author.

The plugins can also list events from external public ics files.  These ics files may contain attendee data.  The ics files are cached and refreshed daily or as requested.  The cache purpose is to continue to be able to list events should there be a disruption in access to source url.   If the web designer chooses to use the addon https://icalevents.com/downloads/amr-events-attendees/  then the web designer can choose to display that attendee data in the event list.  That list may be displayed in a  public or private page as setup by the web designer.  There is currently no provision to add attendee data to the custom events created inside wordpress.  If this becomes available, a link to the user data such as the user id or email address is what would be stored.

GDPR Summary

The plugins use a minimal amount of user data required to provide event functionality in adherence with the ‘purpose’ and ‘data minimisation’ principles.  With respect to the other GDPR principles, the plugins do not control the accuracy, storage, or security of this user data.   The plugin does not pass user data on to any other parties except as required by the RFC5545 ics specification and as configured by the website developer.

Memory Problems or Timeouts ?

Experiencing memory problems or  timeouts ? Check the following:

Are your default wordpress and php memory settings up to handling all that you have added to the site?

Over time, as you add change themes, and add plugins, your wordpress setup starts needing more and more memory.   Sometimes the last plugin added is the one that ‘tips it over the threshhold’.   It may not be the main memory hog (or it may see below.)       Please check your wordpress and php memory limits.  Here are some helpful posts:

If your memory setting is already quite high, then evaluate whether you are asking the plugin to do too much:

Do you have recurring events ?

If you do have recurring events, please consider the following carefully:

How many days, months and number of events have you set as your maximum ?

This can influence how much work are you expecting the plugin to do.  Setting unnecessary high thresholds can cause a lot of extra work.   More info on number of events, number of days or months here.

How old is your ics file and how many ‘old’ events does it have ?

If it’s a google calendar, the ics feed does not at time of writing offer a way to request future events only.  This means your ics file will grow. The plugin has to parse ALL the events in the file, hold them in memory to check for a possible modifying VEVENT with a later sequence number that modifies the date. More info on google calendar ics files – and how to bulk delete old events.

 

Event List Parameters, number of events, days, months, years

In the list type settings, and as shortcode parameters, you can set the maximum number of events and the maximum number of days or months that the plugin will attempt to list.  It also uses these to limit the recurring events it has to generate.

maximum events and number of days, or months
maximum events and number of days, or months

It is important to set a balance between number of days/months and number of events, particularly if you have recurring events and in particular for those people using ics files.    An event, especially a recurring can be made up of multiple VEVENT definitions, additional definitions for each excluded date, or modified instance.  So for each recurring event, the plugin has to

  • generate the possible instances, hold them all in memory
  • check for any modifications, exclusions etc and apply those to the instances, before it can start limiting.

Modifications of instances can change an instance date and time – pushing it out of the desired time range or WORSE, pulling an instance that is currently out of range, INTO the time range.

Try to balance the two parameters: the time period and the number of events based on your knowledge of the types of events and their frequency.

For example:   If you specify 10 events and 1000 days, the recurring events have to be generated out to 1000 days and all held in memory, until all events generated and modifications applied, and then the number can be cut back to 10.

As a guideline, If you want to show 5 events and usually they’d be in the next two months, then maybe 90-120 days would be suitable.

Note also that there is a difference between how hours, days, months thresholds are treated.

  • hours start from current hour
  • days start from current day
  • months start from current month

So if you say months=1 and the list is running on the last few days of the month, you will not see many of ‘future’ events ie: next months day. Bette to perhaps either use: days=30 or months=2,

 

Google calendar ics files

If you are using a google calendar ics file as event input you should be aware of the following:

  • the ics file may get rather large over time.  At time of writing there is no way to get the feed to only show future events, so it will have ALL your old data.  This all has ti be parsed, turned into event data and held in memeory to see if there any any modifications, or exclusions.    If you don’t need the old events, try deleting them.  You may need a bulk delete tool.  I have used this GcalToolkit, not ideal but it does work.
  • At times the ics feed used to be slow to update – check what the actual feed contains if you think events are missing .  Open the ics file in notepad, and check if your events or your changes are there.  Note that an instance may have multiple VEVENTS with incremental SEQUENCE numbers later in the file.

On the other hand, when using an amr-events feed in a google calendar,  google can be slow to refresh reading the feed, sometimes it will do the first one fine, then you make a change and expect google to show in instantly.  It will not.  Not much we can do about that.

Ics Feeds, RDATEs and google calendar – version 3.11

Google calendar has always been slightly more particular about ics feeds and frustrating in the lack of information it gives if it rejects a ics url.   Thanks to Toby Hage, a couple of oddities to do with blank lines in descriptions and  in repeating dates (RDATES) in the ics feed were been identified.   These are now resolved in version 3.11.   This version is up at http://test.icalevents.com/ and all appears to be stable so far.  It is available for download at https://icalevents.com/downloads/amr-events/

If any of you have any feature requests, please contact me at anmari@anmari.com.

 

 

Improved performance in amr-events 3.6

Version 3.6 of amr-events is available for download.

It should be used with the free listing part: amr-ical-events-list version 4.30.       Several improvements have been made in the way that event meta data, taxonomies etc were being retrieved.  This has reduced the database queries made when producing an event list from events in wordpress.

If you have a fairly recent version, and your access to the automated updates from icalevents is still current, then  it should appear in the normal wordpress plugin updates.

Event Roles and Capabilities

From version 3.3 on wards, amr-events now has three optional additional roles:

  • Event Contributor
  • Event Editor
  • Event Manager

If you wish to keep your event creation separate from your post creation, these may be useful.  If you are updating the plugin, you may find that you need to force an update of the various roles (even existing admin may need capabilties manually added).  So while one hopes not, just in case:  use a role manager like https://wordpress.org/plugins/members/

Event Capabilities as seen in the members role plugin
Event Capabilities as seen in the members role plugin

Custom post types, taxonomies , capabilities, roles

Are you you getting the browser messages when saving a new custom post type draft?

  • Firefox: “This page is asking you to confirm that you want to leave – data you have entered may not be saved.”
  • Internet Explorer: “Are you sure you want to leave this page”
  • Chrome: “The changes you have made will be lost if you navigate away from this page”
  • “Leave page or Stay on page” when you click save draft on a new custom post type?

What happens when you do not have the right capability
What happens when you do not have the right capability

Leave or Stay message in chrome
Leave or Stay message in chrome

What happens?

You opt to leave and the post was still saved but the custom fields etc do not save.  BUT then you CAN edit the post and then add in the custom fields / meta box without any further problem (what the?)

And of course admin’s have no problem!

Why?

This appears to be because we have said that the custom post type supports the default taxonomies and possibly wordpress is trying to do something with javascript (maybe assign a default category to the custom post type) but the user is not allowed to.  However it also happens when the custom post type has tags but not categories?  But it does not happen if it just has the custom taxonomy (with the assign_terms or assign_terms=>edit_events capability).    The behaviour only occurs with default taxonomies.

Key finding:

If you are allowing your custom post type to be assigned categories and tag taxonomies like normal posts, then ANY role that is required to be able to create the custom post type while default taxonomies are supported, must also have ‘edit_posts’ capability. (Unless you have code to change the default taxonomies, but then you will be messing with the standard posts capabilities)

Arguably the wordpress default capability ‘assign_terms’ should not be mapped by default to ‘edit_posts’ as this is what is making life complicated.  Possibly a contributor should have ‘assign_terms’ capability directly?   Or one might say that it’s the sharing of taxonomies that is causing the complication.

Background

I wanted a role that could create events but NOT also create posts.  Similarly with editors.
Custom roles can be setup to manage custom post types (in this case events) and one can isolate these capabilities.  However when one adds taxonomies (default and custom) into the mix, things get more interesting.

Default taxonomy capabilities for categories and tags

$default_caps = array(
 'manage_terms' => 'manage_categories',
 'edit_terms'   => 'manage_categories',
 'delete_terms' => 'manage_categories',
 'assign_terms' => 'edit_posts',
 );

While one could overwrite these capabilities with say ‘assign_terms’=>’assign_terms’, then one would not be able to assign categories and tags to standard post types without also ensuring that the default roles were assigned the capability ‘assign_terms’.  All achievable, it just seems wrong to have to mess with standard wp and risk breaking other plugins.

Registering custom taxonomy means that in this case ‘edit_events’ capability is enough to be able to assign this custom taxonomy to this single custom post type

'capabilities' => array (
 'manage_terms'=> 'manage_categories',
 'edit_terms'=> 'manage_categories',
 'delete_terms'=> 'manage_categories',
 'assign_terms' => 'edit_events'  // strictly speaking need one for each new posttype ?
 )

 

TIP: while you are testing this all out, a role manager plugin like Justin Tadlock’s members plugin is very helpful.  Roles and their capabilities are saved in the database and unless you ‘remove’ the role and add it again, the capabilties will not update as you might want them to.

I was actually trying to create a custom role that can assign categories, tags and custom taxonomies to your custom post type. If you give these roles ‘manage_categories’, they’ll be able to add new categories BUT still not assign a post to existing categories.  They have to have ‘edit_posts’ or obe has to override the default wp setup.

 

How to change icon images (subscribe to calendar, add to google)

The plugin comes with two sets of default icons (16px and 32 px).  It also includes extra icons that match those for your use.

screenshot of icon listing
some of the available icons

Don’t like those icons?

You could do one or more of the following:

  1. Switch images off
  2. Use Css to replace the text with your own images
  3. Write own formatting routines

Switch images off

You could choose just to have the link text for the actions behind the icons.  See the “Listing events’ settings.

settings screenshot to show you how to switch images off
Switch images off

Use Css to replace the text with your own images

First switch the default  images off and then use css to show your chosen icons instead.

text replaced with image
text replaced with image

There are various techniques that one can use to replace text with an image. The following was used to demonstrate the above replacement using the plugins html classes.

a.icalsubscribe { 
    display: block;
    height: 50px;
    width: 50px;
    background-image: url(http://i.stack.imgur.com/XtpTm.png);
    background-size: 50px 50px;
    text-indent: -9999px;
    overflow: hidden;
}

Some of the link classes that you may wish to define image icons for are:

  • subscribe
  • icalsubscribe
  • addtogoogle
  • hrefaddtogoogle
  • hrefmap
  • timezone
  • refresh

Add the extra css :

  1. Either to your custom themes stylesheet (not to one that gets updated automatically, because you will lose your modifications), or
  2. use something like jetpacks wordpress custom css, or
  3. use a custom ical events list css

Write own formatting routines

See the pluggable files in each plugin folder.  Use the function there as a base for your new function.  Add your function to your custom themes function.php or to your own site specific snippets plugin.

some pluggable functions in amr-icalevents-list

  • add_cal_to_google
  • add_event_to_google
  • amr_ical_showmap
  • amr_show_refresh_option
  • amr_format_tz

some pluggable functions in amr-events

  • amr_subscribe_to_event_series
  • amr_subscribe_to_event

 

Groupings of events, expanding and collapsing the groupings

Events can be grouped in many ways. To set up groupings see this post on event grouping and styling.

Expand and Contract Groupings

To expand and contract groupings, tick the ‘load js’ in the listing events settings

Use js
Use js

and optionally add a shortcode to add text to showall or hideall detail of groupings

[expandall]
[events]

Events collapsed behind groupings
Events collapsed behind groupings

One event grouping expanded
One event grouping expanded