LiveWhale CMS

Content management for storytellers

LiveWhale 1.7

The Complete Changelog

Here’s what’s up!

Highlights include:

  • New UI
  • Accessibility [docs] Customer Request
  • Customizable Notifications
  • API enhancements: do more with importing (from iCal, CSV) and exporting (JSON)
  • Logs: increased activity tracking of editor actions and data retention for deleted users.
  • Add custom fields more easily than ever


We all know it: making accessible websites and using accessible tools is more important than ever. With LiveWhale 1.7 we have taken huge strides towards ensuring that your site visitors and editors have the smoothest, most inclusive experience possible. 

  • Out-of-the-box calendar templates now contain 0 WAVE Errors and are 100% WCAG 2.0/Section 508 compliant
  • New Tool: Content Review Customer Request
    • Say more about content review
  • WCAG 2.0 AA
    • LiveWhale Calendar: back-end is now 100% compliant
    • LiveWhale CMS: back-end interfaces are 95%+ compliant: some complex interfaces like the drag-and-drop navigation editor and certain tools in the widget editor may not be fully compliant; it’s on our list to work on those next, and please reach out if you have particular questions or feedback about this project (or if you’d like to be a beta-tester!).
  • Keyboard and screen-reader navigability (tested with JAWS for Windows and VoiceOver for Mac)
    • Core calendar front-end templates now have proper tab order and allows focus of all key elements. Aria roles have also been added for navigation.
    • Date fields now provide the necessary format (MM/DD/YYYY) for keyboard and screen-reader users, allowing them to bypass the mouse-only datepicker
    • Subscribe modal (and all modal menus) are now keyboard navigable, and allow you to exit and return to your earlier cursor focus with the Escape key.
    • Calendar search and event type filters now receive an automatic “Skip to results” link as the next tab item when interacted with. (After testing, we determined this was our preferred way to assist screen-reader users in finding updated events listings, rather than using aria-live.)
    • Mini-cal is now keyboard and screen-reader navigable using the arrow keys and Enter to pick a date:

Animation demonstrating how the calendar mini-cal is now keyboard and screen-reader navigable.

  • You can now control which users are able to upload files to the file library, allowing for PDF accessibility training before granting this ability.
  • Empty headers h1–h6 are now converted to empty paragraph tags on save, to preserve visual spacing as much as possible while avoiding “empty header” accessibility errors.

Of course, it takes a village to make a website, and a CMS is no different! As you use LiveWhale, please don’t hesitate to reach out with accessibility questions or concerns. We’re always going to do our best to keep up with the evolving standards in our field, and if you ever see an area where we’re falling short, let us know!

Pages & Navigation

  • Users who do not have permission to make changes to public webpages live can no longer view and edit page details.
  • The USE_INCLUDE_HIDDEN_IN_GROUP_NAVIGATION setting now applies to section navigations as well as group navigations.
  • While development mode is enabled, new pages added to a navigation default to live instead of hidden.
  • The navigation widget now allows you to specify a path to a page that your nav should treat as the current page.
  • Custom code can be added to any page from the backend page edit screen. CSS and JS defined there will be added to the page either in the head or at the end of the body, as specified.
  • The template manager now auto-discovers templates added/removed/modified inside /_ingredients/templates. Starting with LiveWhale 1.7, new templates will only be available under that directory (or subdirectories therein). Existing templates outside of this directory will be supported until they are unflagged as templates.


  • Front-end display of event types and tags are now configurable on a per-group basis.
  • Events can now be scheduled as planned for publication at a future date.
  • Linked calendars can now have custom RSVP fields configured and applied to all new incoming events.
  • Enhancements to what fields can be imported from iCal feeds
    • CATEGORIES now supports both bar-separation and comma-separation
  • Increased character limit in event registration response email from 2000 to 4000.
  • RSVP count is now visible from the events manager and event editor.
  • Event types may now contain parentheses.
  • Added the ability to exclude groups from the public submissions dropdown via EXCLUDE_PUBLIC_GROUPS.


  • Theme files that exist in the global theme only can now be subsequently overridden by a custom theme. (Previously, it was required that they match filenames from the core theme.)
  • LiveWhale Calendar now supports nested theme directories (/foo/ and /foo/bar/ can be separate groups)

Public Submissions

  • Event submission form now supports end date and summary fields.
  • Public submission “thank you” page can now be configured on a per-form basis.
  • Public submission form now supports sending a confirmation email.


  • Content types that support attached galleries may now access the associated gallery ID as a widget format variable.
  • Custom gallery types can now have a default widget_template (see new widget_template arg for details) bundled as my_gallery_type.xml.


  • Pages containing LiveWhale forms can now have form fields prepopulated using associated GET vars in the format: lw_form_A_B=value where A = the form ID and B = the field ID.
  • Forms fields may now be inserted in the middle of a form.
  • a11y: Form headers can now be selected from h2, h3, h4, and h5 rather than defaulting to h3, to allow for custom header hierarchy and better accessibility.
  • Improved ability to schedule form submission period with start/end times.
  • Form submissions now require authentication in order to be viewed (even when using a link from a notification email).


  • The blog editor now permits entering an url to your blog’s homepage. The details_blog_url variable is available on the blog details template to link back to the homepage.
  • Profiles
  • Profiles may now be imported via CSV.
  • Individual profile types may now have a default details template specified by admins. This functionality was previously only available via a custom plugin.


  • It is now possible to apply shared sets of preset args to any widget via the new widget templates option on the widget editor. [docs]
  • It is now possible to access location latitude and longitude in widget lists.
  • Improved duplicate filtering in stream widgets.
  • It is now possible to wrap clean markup results rather than the entire widget via the format_widget option.
  • The group and exclude_group args on the tags widget now restrict results to tags used by content found in those groups (as opposed to restricting results by tag ownership alone).


  • Uploaded images now retain EXIF/ICC/IPTC metadata in the subsequent image sizes/crops generated from the high res original. Customer Request
  • Images can now have licensing information entered and optionally displayed. Customer Request
  • Images may now be starred from the image manager.
  • Images can now be added to multiple collections.
  • Better organization of image collections as well as new automatic collections.
  • It is now possible to copy shared images directly to a collection or add to a new or existing gallery.


  • Improved quality of search results in backend interfaces to better align with the quality of frontend search functionalities.
  • Improved back-end location search, especially for whole name matches.
  • Improved UI for the backend content search. Additionally, if group switch access allows, search results may now contain profiles in other groups even if that profile type is restricted to that single group.
  • Certain manager sidebar filters now adapt to selections made in other sidebar filters (such as tag options reflecting the group filter).

Diagnostics and History

  • Certain bulk actions from managers (including changes from Hidden to Live) are now logged in the activity feed.
  • The activity log and page history now display info for users that have since been deleted.
  • LiveWhale now performs a diagnostic check to detect and warn about syntax errors in CMS config files.
  • LiveWhale now emits a diagnostic message about details templates that are either missing or non-functional.


  • CMS notifications are now templatized and can be individually customized.
  • The ability to add custom fields to backend editors is now integrated into the CMS and no longer requires the custom_fields application.
  • XPHP now supports shorthand syntax for simple if-var-then-content conditions: <xphp if=”var”>some conditional content</xphp>
  • getPlacesReservationInstructions now returns the name and ID of conflicting events separately. Also, conflicts will be indicated on the event editor even if “This location requires a reservation” is unchecked.
  • Added new XPHP casts for controlling the case of strings: uppercase, lowercase, uppercase-first, uppercase-words. Additionally, it is now possible to specify multiple casts by separating the values of the cast attribute with a space.
  • LiveWhale now supports CMS commenting. Comments in the style <!— LW: your comment here —> (i.e. with a “LW:” prefix) will not show up in the browser source.
  • You can now reference GET/POST/SERVER/COOKIE vars with XPHP using the attribute-safe syntax. This is done by specifying the type with (|TYPE) as such: %%xphp_my_variable|GET%%. You can also cast these variables with |CAST:format. The two can be used in combination. For example: %%xphp_foo|GET|CAST:dashed%%.
  • JSON
    • The /live/json endpoint now supports pagination. Specify your pagination arg (/pagination/30) and use ?page=1, ?page=2, etc. to fetch subsequent pages of results. Please note that the endpoint response is modified when pagination is turned on in order to deliver metadata about pagination.
    • Added to results: thumbnail_caption 
    • Added to results: location_id
    • Added to results: last_modified
    • Added to results: repeats_start and repeats_end for repeating and multi-day events, which communicate the start and end of the repeating/multi-day series.
  • GET variables are now preserved through widget pagination.
  • Added method for obtaining IDs of content that possess specified custom data values via getContentForCustomFieldValue().
  • xphp var=details_tags_dashed now available on all details pages
  • New Handler: New onChangeDatabaseHost handler allows custom modules to update their own data when a host switch is performed.
  • Handler onAfterSync has new mode unchanged for after unchanged items are synced.
  • In addition to create()/update()/delete(), the LiveWhale API now supports $_LW>read() which mirrors the response provided by the /live/json REST endpoint.

Server Administration

  • LiveWhale now requires a minimum version of PHP 5.5 (7.2 recommended) and MySQL 5.1 for operation. For the latest software requirements and recommendations, please consult the LiveWhale documentation at
  • LiveWhale 1.7 uses node modules that are installed in the instance’s root directory, or at the level as the site’s public_html directory. When installing or upgrading to 1.7, all node modules (LESS, cleancss, etc.) must be installed by running npm install as the user LW is installed under (without sudo) from the installation’s root directory. The npx module must also be installed globally with sudo npm install -g npx
  • Added support for auto-compiling ES6. As with LESS, a .es6 file will take precedent over a .js file and compile automatically.
  • Added support for MySQL connections via SSL.
  • LDAP login module now supports TLS via the LDAP_TLS setting.
  • Added support for certificates to LDAP logins via LDAP_CACERTFILE and LDAP_CACERTDIR.
  • A new location for integrations has been established (/integrations, along side /data, /logs, etc.) This is the new location for both Google Analytics key files and SAML configurations. Note that files will be copied from their old locations to this new location at upgrade time.


  • Dynamic content can now be accessed via permalink without knowing the ID, using either an exact title or best-match: /live/news/my-story.
  • You can now add additional tags args to a widget when adding them to a WYSIWYG element.
  • The interface for pullings system updates has been improved and now indicates ongoing bug fixes that are pending.
  • Add support for embedding Youtube Playlists via the wysiwyg editor
  • The by tag filter on all managers is now restricted to only tags used by the current group’s content of that type.
  • TinyMCE upgraded to 4.9.2. jQuery upgraded to version 3.4.1 jQuery UI upgraded to version 1.12.1.
  • It is no longer possible to toggle the sharing state of content from managers in bulk.

Bug Fixes

  • Fixed an issue where it was not possible to add a location to content, when not saving it to the locations library, if it had the same name as an existing saved location.
  • Fixed an issue where urls in the redirects manager and the navigation manager were too strictly limited in allowable length.
  • Draft revisions of pages no longer count toward last-modified date or user.
  • Strip extra spaces from radio, checkbox, and select fields in form editor.
  • Public event submissions can once again be directed to specific groups.
  • Fix bug in trash view for non-admin users.
  • Remove defunct Google Plus share links.
  • Fix image attachment bug on public event submission form.
  • Upcoming Featured Events in calendar view correctly shows only starred events once more.
  • Fixed an issue where link copies of blurbs did not properly sync their content with the parent blurb.
  • Sort linked calendars alphabetically rather than by id.
  • Campus selector now properly shows up in selected item dropdown.
  • Fixed ical parsing issue to import recurrence-id events whose parents cannot be found.
  • Failures to connect to slave nodes va SFTP during the page save process now fail more gracefully, minimizing impact on editors.

Upgrade Steps 

  • Note: Use of non-modular template components is no longer supported in the frontend calendar. Please migrate to modular components as part of the upgrade process.
  • Note: The /live/json/* endpoints now denote tags as an array, rather than a comma separated string. This may require updating applications using these endpoints.
  • Note: LiveWhale now requires a minimum version of PHP 5.5 (7.2 recommended) and MySQL 5.1 for operation. For the latest software requirements and recommendations, please consult the LiveWhale documentation at

 The LiveWhale team will be systematically updating all of your dev servers to the latest version shortly (please let us know if you need us to wait to upgrade your dev server for any reason, if you’re actively developing something for instance).

Once your dev server is upgraded, you can review your site there for any client-specific code (themes, modules, or other customizations) that might need to be updated to work with the new version. Then we can schedule your production server upgrade once that testing is complete.

If you don’t have a dev server, please reach out to about getting one set up.