LiveWhale CMS

Content management for storytellers

LiveWhale 1.7

The Complete Changelog

LiveWhale 1.7 includes a heck of a lot—overhauls to the UI and back-end accessibility, plus tons of great new features requested by folks like you!

Highlights include:

  • New UI
  • Accessibility: intensive work on changes to the LiveWhale front-end and back-end
  • Fully-customizable email notifications [docs]
  • 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 [docs]

UI Refresh: Dashboard and Toolbar

The LiveWhale back-end has a fresh, updated look, including new fonts and colors!

The main changes you’ll notice are to the toolbar: the new Toolbox dropdown contains your libraries as well as curator/admin superpowers.

And, when you’re on the front end, the Your Content dropdown lets you immediately reach your pages, news, events, etc. without having to go first to the Dashboard.

CMS Toolbox CMS Your Content


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
  • WCAG 2.0 AA
    • LiveWhale Calendar: back-end is now 100% compliant: at least according to our latest tests! If you notice anything we’ve missed, please reach out.
    • 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.
  • New back-end filter: Search for images without captions (if they had been uploaded before the decorative-image option was added) Customer Request
  • New user permission: Upload files Customer Request
    • This user permission lets you enable/disable the uploading of PDF and Word documents to LiveWhale (enabled by default) so you can grant it selectively to editors who have been trained in creating accessible PDFs.
  • 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. Customer Request

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!


  • Email notifications are now fully customizable. Previously you could edit the global HTML wrapper but not the contents of individual notifications. Now, each notification type has a separate template which you can duplicate in your _ingredients folder and customize. [docs] Customer Request

Pages & Navigation

  • 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. [docs]
  • 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. [docs] Customer Request
    • Note: using a template, theme, or file widget is still the best way to include site-wide code or styles/scripts that need to be included on multiple pages. However, several LiveWhale Developers mentioned that there are cases where the ability to easily paste some one-off code onto a single page would be helpful. So, now you can!
      Add Custom Code interface
  • The navigation widget now allows you to specify a path to a page that your nav should treat as the current page, using the new argument nav_page. [docs]
  • 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—allowing you to render menu items that would otherwise be hidden, so you can show them with JS dropdowns or the like—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.


  • Profile Import: Profiles may now be imported via CSV. This frequently-requested feature is finally here! Click “Import” in the back-end and follow instructions for how to format your CSV, or to download a sample CSV. You can import fresh data or overwrite existing data by including profile ID in your spreadsheet (or matching up against another column of your choosing, like email or username). [docs] Customer Request
  • Profile Templates: Individual profile types may now have a default details template specified by admins. This functionality was previously only available via a custom plugin. [docs] Customer Request


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


  • Accessibility: 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. Customer Request
  • You can now schedule form submission periods (opening and closing) with date and time (previously only date was available). Customer Request
  • Pages containing LiveWhale forms can now have form fields prepopulated using associated GET vars in the URL. [docs] Customer Request
  • Form submissions now require authentication in order to be viewed (even when using a link from a notification email). Customer Request
  • Forms fields may now be inserted in the middle of a form.


  • Content types that support attached galleries may now access the associated gallery ID as a widget format variable. [docs]
  • Custom gallery types can now have a default widget template. [docs]

Public Submissions

  • Event submission form now supports end date and summary fields. [docs] Customer Request
  • Public submission â€œthank you” page can now be configured on a per-form basis. [docs] Customer Request
  • Public submission form now supports sending a confirmation email. [docs]


  • The blog editor now has a field for setting a custom Blog URL. You can use this in your blog post details template (<xphp var=”details_blog_url”/>)  to link back to each individual blog homepage. [docs]


  • Improvements to Image Collections
    • Images can now be added to more than one collection.
    • New automatic collections: Shared Images, Added to Events, Added to Profiles, etc.
    • It is now possible to copy shared images directly to a collection or add to a new or existing gallery.
  • 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.


  • New: Widget Templates. You can save the work of repeating your widget formatting (or any other arguments) between multiple widgets with this new widget template functionality. [docs]
  • It is now possible to access location latitude and longitude in widget lists. Customer Request
  • Improved duplicate filtering in stream widgets.Customer Request
  • 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).


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


  • Improved quality of search results in backend interfaces to better align with the quality of frontend search functionalities. Customer Request
  • Improved back-end location search, especially for whole name matches. Customer Request
  • 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).


  • Easier Custom Fields: The ability to add custom fields to backend editors is now integrated into the CMS and no longer requires a client module. [docs]
  • 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. [docs]
  • GET variables are now preserved through widget pagination.
  • New XPHP functionality
    • XPHP now supports shorthand syntax for simple if-then conditions: <xphp if=”var”>some conditional content</xphp> [docs]
    • 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. [docs]
    • You can now reference GET/POST/SERVER/COOKIE vars with XPHP using the attribute-safe syntax %%xphp_. [docs]
    • xphp var=details_tags_dashed now available on all details pages
  • Expanded JSON Results
    • 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. [docs]
    • Added to results: thumbnail_caption Customer Request
    • Added to results: location_id Customer Request
    • Added to results: last_modified Customer Request
    • 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. Customer Request
  • New $_LW Functions
    • In addition to create()/update()/delete(), the LiveWhale API now supports $_LW>read() which mirrors the response provided by the /live/json REST endpoint. [docs]
    • Added method for obtaining IDs of content that possess specified custom data values via getContentForCustomFieldValue(). [docs]
    • 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. Customer Request
  • New Handlers
    • 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. [docs]


  • Dynamic content links without ID #s: 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.
  • 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.
  • It is no longer possible to toggle the sharing state of content from managers in bulk.
  • TinyMCE upgraded to 4.9.2. jQuery upgraded to version 3.4.1 jQuery UI upgraded to version 1.12.1.

Server Administration

  • Software Upgrade: We are continuing development on tools for pulling LiveWhale updates—if you’re an admin who previously had “Software Updates” in your superpowers menu, you may notice that’s been temporarily hidden in 1.7. Please let us know if you’d be interested in beta testing this functionality.
  • 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.
  • New Secure Connection Options
    • Added support for MySQL connections via SSL. [docs] Customer Request
    • LDAP login module now supports TLS via the LDAP_TLS setting. [docs] Customer Request
    • Added support for certificates to LDAP logins via LDAP_CACERTFILE and LDAP_CACERTDIR. [docs] Customer Request
  • 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.

Diagnostics and Reporting

  • Certain bulk actions from managers (including changes from Hidden to Live) are now logged in the activity feed. Customer Request
  • The activity log and page history now display info for users that have since been deleted. Customer Request
  • 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.

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.
  • Fixed an issue where WYSIWYG fields in profiles were having their formatting/images stripped when saving and restoring from revisions.
  • 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.
  • Updated URL syntax for Facebook and Twitter 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.
  • File upload fields in forms now only accept a single upload (it used to be they would appear to accept multiple uploads but only save one).

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. Follow these instructions to migrate to modular components, or contact for assistance.
  • Note: Some of your theming might need to be adjusted to account for accessibility improvements to Livewhale 1.7. For instance, in the forms module, we now correctly wrap radio button and checkboxes in their own labels, rather than adding the label to the question before—so, to make your forms look the same as 1.6.2 and earlier, you could update your theming to give div.lw_forms_label the same styling as the other label element.
  • 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: If you had previously customized your email template at /livewhale/client/modules/messages/includes/email_template.html, we recommend migrating that to the new /_ingredients/notifications/ setup [docs].
  • Note: 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. [docs]
  • Note: If you are using the custom client profiles_template app, that functionality is now native in 1.7, you may migrate to the new settings and then remove the custom module. [docs]
  • If you host your own site: LiveWhale now requires a minimum version of PHP 5.5 (7.2 recommended) and MySQL 5.1 for operation. [docs and all system requirements]

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.