You can now divide /_ingredients/templates/widgets/ and /_ingredients/templates/wysiwyg/ into further subdirectories (such as /_ingredients/templates/widgets/news, etc.). LiveWhale will scan recursively for all WTs/CLs, and will flag with a dashboard error if any duplicates are detected (filenames must be unique).
New widget setting: min_image_size for inline galleries
Introduced in LiveWhale 2.13.0, min_image_size=true lets you skip results whose thumbnail image is smaller than the widget’s thumb_width and thumb_height, allowing you to preserve the design intent of widgets rather than loading in images that may be too small. In LiveWhale 2.16.0 this was extended to inline gallery widgets, so your gallery can skip images that are too small when min_image_size=true.
Beta support for Content Layouts v2
For CMS sites under active development, LiveWhale 2.16.0 adds beta support for a new way of managing Content Layouts [docs]. This approach is backwards-compatible with the original Content Layouts v1, the current insert/edit functionality shouldn’t be at all disrupted by this addition.
In the last year, more and more of you have been successfully running your own upgrades. To help make that process smoother, LiveWhale 2.15.2 comes bundled with some messaging and process improvements. (These won’t be visible when you get this version, but will appear the following time you upgrade.)
First off: future LiveWhale releases will now be tied to specific release dates, rather than being available for automatic and manual upgrades immediately. This is to allow greater time for testing on development servers, and to more intelligently steer clear of inopportune times for automatic upgrades (holidays, etc.). We’ll announce the release date with each forthcoming new version announcement.
We’re also rolling out new dashboard messages (examples in the docs) and updated confirmation messaging (example) for those running their own upgrades. These include helpful links to the release notes and reminders about testing on dev before pulling to production.
New widget option: Hide “Show all” pagination links
Widgets that support pagination can now specify hide_pagination_show_all=true to optionally disable the “(X total)” link. The widget will still be paginated and will display the “Show more…” link until all results are shown.
Disabling notifications for “declined” suggestions
When users have “All notifications” enabled in their user settings, they get emails for all sharing actions, including when someone in another group has declined their content suggestion. Now you can disable this type of notification site-wide by adding the following to client/global.config.php:
By default, the /live/rss/events endpoint sets event date/time as the “pubDate” attribute using Coordinated Universal Time (UTC), and it’s up to any RSS integrations consuming LiveWhale events to translate that into their local timezone (or the event’s timezone, using the livewhale:timezone RSS attribute). Now, you can choose to customize that site-wide timezone for the /live/rss events endpoint by adding the following to client/public.config.php:
$_LW->REGISTERED_WIDGETS['events']['custom']['rss_timezone']="America/New_York"; // default: UTC
New theming option: deferred styles and scripts
We’re still experimenting with this functionality in some of our projects, but the tools are here now if you’d like to try them out too: any script or stylesheet files in your theme’s scripts/ or styles/ folder can now be moved into scripts-defer/ and styles-defer/, where LiveWhale will auto-detect them and load them after the initial page load. That is, it won’t wait until the entire page has loaded, but “deferring” the files tells the browser “don’t wait on this CSS/JS, keep loading and display the rest of the contents.”
Render-blocking CSS has a big impact on site speed, so this may represent a big performance improvement (especially for mobile) – often times your complete global theme includes CSS/JS that isn’t critical for the first above-the-fold page load. If you end up finding success (or struggles) with this new option, please let us know!
LiveWhale CMS: New option for pre-defining image sizes
Adding data-image-size=”300x200” to HTML containers in your WYSIWYG-editable areas and content layouts will require users select an image of that size when adding/editing an image inside that area via the Edit Page interface. This matches the existing class=lw_fixed_dimensions functionality that already exists – and you may already be using – but will persist even if the original image is deleted and a new one is added into that area.
In LiveWhale CMS, you might be displaying Related Content on your news and profile pages – starting in LiveWhale 2.14.0, we’ve greatly increased the design flexibility around how you show related content with new widget settings. For any widget type, you can add the new setting my_related_content to show items related to the current item (or specify a certain type by my_related_content_type). Similarly, if you’re using a widget with the related_to setting, you can also specify related_to_type to limit to certain types of results. [docs]
Blurb widget templates
When using Insert > Blurb in LiveWhale CMS, the output format has been dictated by the default widget template for blurbs. And, while you can customize that default widget template, we found often you’ll want different formatting for different blurb types. Now, you can now specify a widget template for each blurb type that will be used when Insert > Blurb is selected for that blurb (or any other blurbs widget where id is specified).
More customizable gallery headers
The widget setting “header” is now available on inline galleries in LiveWhale CMS. Headers are not automatically added to the output, as with other widgets, however, use of the header format variable is permitted. This allows you to incorporate the header into your gallery design, but also override the header text on a per-use basis more easily.
When creating widgets in LiveWhale, you’ve always been able to specify “Only show items with an image?” and configure the image width and height. However, content with images smaller than still gets included, with their images cropped as close as possible to your specifications. Now, a new option “Exclude results with images that aren’t big enough?” (min_image_size=true) allows you stricter control of that behavior, for when you’re managing highly-designed widgets that need to look just right. When enabled, results with images smaller than your specified width/height will be skipped.
You can now also use the header and header_clean format variables inside of individual widget results (the format setting), in case you have a design where the header needs to appear with each result. [docs]
Linked Calendar auto-repair and saved customizations
Every iCal feed should have a unique ID (UID) assigned to every event, which is how systems can sync updates to pre-existing events. However, in rare cases we’ve seen some systems erroneously reassign new UIDs, making it look like a set of all-new events—for Linked Calendars, that means all the existing events get deleted (including any customizations), and new ones get re-created from the feed data. Now, linked calendars can auto-repair UID changes in iCal feeds if the event title and date/time stays the same over the UID change.
Also, when items do get removed during a Linked Calendar sync, they will now go into Deleted Items where they can be restored (including any per-event customizations you’ve done) as a native LiveWhale event. This is intended as a stop-gap for events that disappear from your source iCal files but you still want appearing on your calendar.
LiveWhale CMS: Blurbs as related content
Blurbs that have their own details pages (that is, where “Allow this blurb to appear on a page by itself” is checked off) can now also be set as Related Content for other content types in LiveWhale CMS.
In recent years we’ve already seen several schools doing neat things with customized RSS outputs—using a widget, essentially, to make a hand-built RSS syntax that matches exactly what your particular application is looking for. This has always involved a bit of complex hand-coding or module work, though, and so for LiveWhale 2.12.0 we decided to codify this “widget-style” approach into something any developer could do. After upgrading, you can start with the bundled example file and customize it to change the /live/rss/events formatting the same way you would any widget. [docs and instructions]
Linked Calendars make it easy to consume iCal feeds from external sources and events stay in sync with LiveWhale, and LiveWhale 2.11.0 adds two new ways of managing your Linked Calendars.
First, for when you have edited feed-wide overrides (either via the Edit linked calendar tool, or using a custom module) a new admin-only option “Save calendar and reset all events in feed” is available from the editor. When clicked—following a confirmation box—this will remove all existing events and re-load them fresh from the Linked Calendar, so any new customizations get applied to the whole feed.
We’ve noticed some iCal sources (including other LiveWhale sites) only publish upcoming events, and events that vanish from the Linked Calendar source iCal are removed on each hourly sync. A new Linked Calendars setting “Keep past events” transforms iCal imported events into native LiveWhale events if they have passed.
Spam-fighting with event RSVP captchas
LiveWhale has long supported Google Recaptcha and custom captchas for form submissions and public event/news submissions. Event RSVPs had not been included in this, but we’ve noticed an uptick in spam submissions to LiveWhale Calendar Event RSVP forms over the last few months. As such, we’ve extended existing captcha support to event RSVPs.
More flexible widget headers
When creating widgets, the optional built-in “Header” has always been automatically added before your results list. But we’ve seen this doesn’t always meet the design needs of heavily-customized widgets, and developers would often end up putting the header text straight into the widget wrapper (format_widget).
Starting in LiveWhale 2.11.0, you can now use “header” or “header_clean” in the widget wrapper formatting (format_widget) to specify the precise location of the widget header in the HTML output. This makes it easier to design widgets and widget templates that will allow for user-customized headers (<arg id=”header”>My Header Override</arg>) that get placed exactly where you want in the design.
LiveWhale CMS: Updates to the “Insert widget” modal
When inserting widgets onto a page, you may find that you want to make edits to the underlying saved widget. Two small additions to the Insert/edit widget modal help with that.
Users with the ability to edit widgets will now see a link to edit any saved widget when double-clicking it from the page editor. Additionally, you can now manually refresh the widget preview from that same modal, in the event that widget settings have been changed in another window.
We’re excited to be rolling out an often-requested change that we hope will make zero difference to some of you and a huge difference to others: customizable URLs for events, profiles, news, forms, files, and more [docs].
What we mean is—for everyday editors who just want to post their thing and go, the experience in 2.10.0 should be very familiar. For marketing folks who want /live/news/new-science-center (instead of /50843-announcing-the-new-science-center-funded-by), or for faculty profiles where you want to link to /live/profiles/emily-post (instead of /1098-emily-post), all that is now possible in this latest release.
Like with all of LiveWhale, we’ve put a lot of thought into making the editing experience as smooth and intuitive as possible. There is a fair amount happening behind the scenes, though—previous versions of each URL will redirect to the current one, and administrators can choose to override or delete existing custom URLs—which is all spelled out in the documentation. As you start test-driving this new feature on your development server, feel free to reach out to support@livewhale.com if you run into any questions.
More useful save success messages
After saving content, the success message now includes a consistent Edit button, as well as a View button for content that has a corresponding front-end view (labeled “Preview” when that content is hidden).
Before:
After:
New filtering option: Scheduled content
When managing news, events, or any content that allows you to schedule a future go-live, you can now filter in the sidebar by Status = Scheduled in addition to Live and Hidden.
Automatic improvement: Sharper resized images
When adding an image that later gets resized on a page or as a widget result, LiveWhale now runs automatic optimizations to improve the sharpness of those resulting rendered JPG and WebP images.
The JSON API endpoint now includes thumbnail_alt as a separate value from thumbnail_caption, where an ALT text is set on the image.
Updated aria-required to move it to radiogroup element for required radio buttons in forms and RSVP forms.
Inserted WYSIWYG images now use alt variables instead of hardcoded caption in their widget format (leveraging the existing ALT functionality more consistently).
The following improvements have been made to the front-end calendar.
For keyboard and screen-reader users
The default “Search events” component now has a focusable (but visually hidden) submit button using the new class=”lw_sr_only_focusable”. (To improve visual styling for keyboard users, consider display:flex on the container of your themed search form.)
For screen-reader users
The month view table now has a screen-reader-only “caption” tag that updates as the current month is changed.
When the #lw_cal_this_day header is empty, it now gets hidden to avoid empty-header warnings.
The view selector (day, week, month, all) now has aria-current=”true” added to the currently selected view.
The “Close Event” button in event details view now has a more descriptive screen-reader label.
The Subscribe button no longer needs to be an <a> tag - instead, you can use <button class=”lw_cal_subscribe_button”> for better semantic HTML (<a> still supported for backwards compatibility).
The Subscribe modal now has more descriptive ARIA labels on each individual RSS/iCal link.
The h4.lw_accordion_block_title tag generated by accordions can now be customized and replaced with div or any other block-level HTML tag using the new ACCORDION_BUTTON_WRAPPER config option in client/global.config.php:
Auto-generated titles when inserting a WYSIWYG video no longer get prefixed with “VIDEO:” (titles are still fully editable when inserting and editing).
Removed the requirement that groups called “Homepage” or “Home Page” set their URL to /. Homepage groups can use any URL or no URL.
Lowered the length of custom URLs to 50 characters to prevent database errors when saving drafts. All existing URLs over 50 characters will continue to work and be shortened automatically on next save. This will include a redirect from the old to new URL for backwards-compatibility.
Restored prior behavior for showing 404 to logged-out users when trying to view hidden news, profiles, blurbs, and redirecting hidden events. This replaces the behavior of redirecting to login, which some found confusing.
Added details_issue_slug to news/blurbs template when part of an Issue (for creating a link back to the issue). You can also use the existing variable details_issue_url for this.
LiveWhale now validates replacement images by file type extension, to ensure that the file type does not change.
LiveWhale CMS Only: The QuickAccess widget (for placing top links on a search page results) will no longer match partial words (like “art” returning “department”).
LiveWhale now defaults to loading all iframes via lazy loading, unless a manually applied loading attribute is already present.
Event types are now included in the RSS and ICAL event endpoints even when JSON API v2 is enabled, restoring the RSS/ICAL default behavior.
Using the my_related_content arg now respects the manually chosen sort order of related content items, unless sort_my_related_content=true is utilized as an override to respect sort_order.
LiveWhale will auto-correct back-end event editor URLs from events_sub_edit to events_edit, in addition to vice versa.
Group directory/calendar values are now properly validated based on allowed characters.
The location auto-suggestion that appears when you type will now show global locations and your group’s locations (it had erroneously been showing locations from all groups).
LiveWhale CMS Only
When a page is deleted, LiveWhale now removes not just the empty parent directory of that page, but also other empty parent directories up to the web root.
When a form is attached to an event RSVP, the confirmation email for the RSVP now includes the form responses.
When sharing to another group and auto-accepting as live, the shared item is no longer duplicated to the destination group, but created as a linked copy. This means that the “Auto-accept as Live” behavior now matches what you’d get by clicking “Accept as Live” in the suggestion notifications on the recipient group.
When linking to an anchor element inside an accordion content block, the content panel will now automatically open before moving to the element.
Search interfaces now include all groups by default in the WYSIWYG add/edit link dialog.
The profile type editor now lists custom fields set in the CMS system configuration that already apply to the profile type being edited.
Event RSS feeds now automatically include the values of custom fields, matching ICAL and JSON feeds.
Relaxed the limit on maximum length of args such as format and format_widget.
When adding a new link using the search tool, the wysiwyg link dialog will now auto-fill empty link text with the item or page title.
LiveWhale CMS only: It is now possible to bulk reassign templates for pages without a current template, provided they do not have special field mapping needs.
When restoring an image from the trash, if content that previously used that image have not had new images assigned, they will have their use of the image restored.
Robots.txt files will now reference the https:// version of the sitemap rather than http:// for sites that support SSL.
Updated field length checking so customized maximums are checked against visible text characters before saving (disregarding the length of any invisible HTML markup). A new back-end check has been added on save to verify that data doesn’t exceed the database maximums.
Updated section navigation behavior and allows easier fallbacks with show_section_navigation. [docs]
LiveWhale CMS Only: The submit button on the page detail editor is now disabled when selecting a new template and waiting for it to load, in order to prevent saving without a template selection prematurely.
When using a widget that requires images (require_image=true), events that reference an External Image from a linked calendar will now be included alongside events that have had an image added in LiveWhale.
QuickAccess is now enabled when applied to inputs of type=”search”, just as they are for type=”text”.
Added support for data-qa-results-div-id attribute on QuickAccess fields, which optionally allows targeting an existing element in the page by ID for use as a results container.
Changed QuickAccess JavaScript to wait for new results before clearing the old ones.
Added a new setting to the QuickAccess options to specify a results div by ID (data-qa-results-div-id=”id-of-results-div”). This is an alternative to the default behavior where a results container is automatically added after your form input.
Fixed an issue where the year would not show on the frontend calendar if the “repeats until” date extended into another year.
Fixed an issue introduced in LiveWhale 2.15 that could sometimes cause explicit width/height attributes to be removed from image tags when calculating image size.
Fixed an issue causing certain images to be shrunk (rather than returning original size) when larger versions are requested. This could result in og:image sharing tags missing from content with small images attached.
Fixed a PHP8 bug affecting widgets sorted by most-tags-matched when only one tag was applied.
LiveWhale CMS: Fixed an issue where certain /live details requests could erroneously get flagged in the Page Error log as 404s.
Fixed an issue that could cause certain widget settings to result in PHP8 errors.
Fixed an issue that could sometimes prevent a custom module from loading properly.
Added code to prevent redirect loops on the calendar when the url of a linked calendar event is the same as the current url.
Fixed a bug that prevented changes to RSVPs in the RSVP manager.
Fixed an issue that could cause incorrect pagination behavior on certain managers when remembering the state of the last visited page (e.g., in the RSVP manager).
Fixed an issue that caused admin-only tags to be copied to other groups when content with those tags got moved between groups.
Fixed periodic visual bugs with overflowing content on the profile and widget editor screens.
Fixed an issue that could interfere with double-click to edit WYSIWYG images that are owned by other groups.
LiveWhale Calendar Only
Fixed an issue with using the &filter= setting in embedded widgets.
LiveWhale CMS Only
Fixed an issue that could cause erroneous 404 page errors referencing local links to dynamic content.
Fixed an issue that prevented profile types with location=”none” (never display) from being used in custom sort orderings.
Fixed an issue where the “With checked items” form could erroneously update the last modified datetime/user on items that weren’t actually changed.
Fixed an issue introduced in LiveWhale 2.10 where event metadata (schema.org / LD+JSON) was not embedded in the event details view.
Fixed an issue that could prevent images from appearing in the back-end UI when a group had been excluded from site-wide search and API results.
Fixed an issue with using the image_size=200x200 shorthand in a widget template and overriding it via the widget editor. Now, modifying thumb_width or thumb_height via the widget editor will correctly unset image_size coming from a WT.
Fixed an edge case issue where images encoded a certain way could have their colors inverted when derivative sizes were generated from the master image.
Fixed an edge case where a redirect loop could occur.
Fixed front-end date entry fields (in LiveWhale Forms and the Public Submissionn Form) from allowing pasting of non-date-formatted values. Back-end forms like the widget editor still support free-form date entry for relative dates.
Fixed an issue that prevented some theme files (especially SCSS partials) from triggering cache refreshes when edited.
Fixed an issue where the Google Maps script that loads on the location editor wouldn’t recache when the saved Google Maps API key was updated.
Fixed an issue that prevented certain system cleanup tasks from running on web2 in load-balanced environments.
Fixed some PHP8.1 compatibility errors related to events, galleries, and SAML testing.
LiveWhale CMS Only
When editing a profile type, changing a field type from multiple choice will now clear any saved multiple-choice options.
Fixed an issue that could cause Facebook to not retrieve an image when sharing a link to an Issue.
Fixed an issue that prevented Forms from being indexed for search when created via the Duplicate option.
Fixed an issue with clicking an anchor link leading to a result inside of a LiveWhale Accordion on the same page.
Fixed an issue where deleting an entire group, and then restoring it, would result in some of that group’s content being restorable from trash and others not.
Fixed a bug that could cause some repeating events to be placed into the trash when performing bulk actions from the events manager.
Fixed an issue where “Share to Group” dropdown would make full copies rather than normal “Accept as Live” linked copies.
Fixed an issue where custom fields erroneously allowed dashes to be used in their names, which could lead to frontend loading issues.
Fixed an incompatibility between the locations widget and the exclude_group arg.
Fixed an issue with the places widget that prevented images from displaying when desired in custom marker formatting.
Fixed an issue where customized file URLs wouldn’t work if they started with another file’s ID number.
Fixed ?id= backwards-compatibility support for Issues, as well as ensuring that Issues list widgets use the correct customizable URL rather than the legacy ?id= format.
Fixed a 404 error that would come up when embedding LiveWhale Calendar widgets when no global/styles/widgets.css stylesheet was present. Now, when that stylesheet is requested specifically, it has a special case to return a 200 OK message with the empty response instead of 404 Not Found.
Added an error message when trying to move an event into another group where a shared copy of that event already exists.
Fixed an issue preventing the “Edit this item” link from displaying on the frontend in details-viewing contexts.
LiveWhale redirects are now considered before redirecting from archived slugs or non-canonical detail requests to the canonical url.
Fixed an issue with validating new redirects where it could erroneously warn that a directory exists even if a page did not exist at the specified url.
Fixed an issue where the group switcher would not immediately update when a group was restored from the trash.
Fixed an edge-case bug that could sometimes cause foo/ and foo.php to get caught in an infinite redirect loop.
Fixed an issue with the functionality and appearance of the Collection dropdown on the Bulk Upload Images tool.
Fixed an issue with viewing stories in a LiveWhale Issue, where a link copy did not pull variables for the associated Issue after redirecting to the original.
Fixed an issue where LiveWhale Issues did not properly set the url variable for the Issue homepage.
Fixed an issue with LiveWhale Forms where missing field error messages wouldn’t always appear alongside the screen-reader announcement.
Fixed an issue that prevented files, tags, and locations from appearing as links in the toolbox for Publisher users.
Fixed an issue that prevented the RSVP styling (payments.css/less/scss) from being overridden by a matching file in the global theme. Now, any time a theme CSS or JS file is requested from the core theme, the corresponding global version will be used as an override if available.
Fixed an issue where sometimes changing group permissions for profile or blurb types could revoke access to Live content. Now, group access to a global profile or blurb type is locked if the group has content of that type.
Fixed an edge-case issue where HTML comments in a file include could become double-encoded, resulting in unintended markup.
Fixed an issue where the tools for adding tags/settings to a widget via the Insert/Edit Widget interface were missing for some users depending on their group membership or permissions. Those tools are now available to all editors.
Fixed an issue where the “delete” link in the editor sidebar could sometimes collide with other elements at certain screen sizes.
Fixed an edge-case bug that caused Related Content to sometimes not appear.
Fixed an issue with the /live/tags endpoint that wouldn’t show results when the tag name contained a comma. Multiple tags can still be indicated with |-separation.
Fixed an issue preventing today facts from displaying when AP-style dates are configured.
Fixed an edge-case issue that prevented certain custom module code from running during some non-browser activities (such as sitemap regeneration).
Fixed a condition where Linked Calendar feed refreshes could become delayed.
Fixed an issue where the front-end calendar component lw_calendar_tags was showing individual group’s starred tags on a main calendar (not restricted by group). Now, calendars that include all groups (i.e., no group= argument) will only show global starred tags.
Fixed an issue where text indicating group ownership of widgets in WYSIWYG widget insert overlays read as “undefined”.
Changed title of editor form validation overlay from “Missing Required Field” to “Form Validation Error” since sometimes it can be a field’s length or custom validation that is the cause of the error.
Fixed an issue where the image collections in the “Add to collection” drop-down weren’t appearing in alphabetical order.
Fixed the checkbox to make all groups automatically display manually-authorized content.
Fixed a PHP syntax issue (introduced in 2.11.0) affecting front-end calendars running PHP 8.
Fixed an issue affecting CSV imports of content containing inline forms.
Fixed an issue with Google Analytics when an invalid p12 private key was used.
LiveWhale CMS Only
Fixed an edge case where a section nav might not display on a section homepage if the homepage appeared twice in a nav.
Fixed a compatibility issue with PHP 8.1 that could sometimes cause section navigations to display improperly.
Fixed an issue where nested accordions in the page editor wouldn’t process correctly when publishing.
Fixed an issue that preventing the “Group: ____” info text from showing up in the back-end profiles list when showing results from all groups.
Fixed an issue affecting custom URLs for schools using the experimental “drafts” feature.
Fixed an issue in LiveWhale calendar where non-existent group calendars or event URLs would show the main calendar (or get stuck in a redirect loop). Both cases now properly provide 404 Not Found responses.
Fixed an edge-case issue where certain Firefox plugins could cause onclick actions (like uploading images) to not function.
Fixed an edge-case error where Content Length headers could sometimes be wrong the first time an API feed gets downloaded. That header is now removed when showing feed results.
Fixed an issue where the “Subscribe” event type list might not auto-populate correctly if the lw_cal_categories.html component were styled with additional HTML between the list item and the form label.
Fixed an issue with custom image code that used % for height or width, causing the missing value to be miscalculated. Now, when % is found in height or width, the other value will be left as-is.
Fixed an issue where the group-level configuration of available event types in the event editor could sometimes fail to reflect those customizations.
Fixed a small PHP compatibility error affecting schools who have configured FITVIDS_IGNORE_CLASSES.
LiveWhale CMS Only: Fixed an issue where renaming a group directory from the file browser would fail to properly recalculate group-level page editing permissions afterward.
Fixed a bug that caused the wrong days to display on the calendar week view during the daylight savings transition.
Fixed an issue where font lines in theme .scss files could sometimes break styles if the font URL contained a semicolon.
LiveWhale Storyteller Only: Fixed a bug in the toolbar that prevented the Files/Tags/Location manager links from appearing in the toolbox for some users.
LiveWhale CMS Only
Fixed an issue where quick access results remained highlighted after hover.
Fixed an issue where a profile linking to another profile would not properly redirect.
Updated the Instagram widget to accommodate JPG images sent from the Instragram Graph API with the .heic extension.
Fixed an issue where HTML comments were being stripped when using Edit Source view.
Fixed an issue where shared content that links to an external url wasn’t properly updating the shared copies when the original item was changed to no longer be a link.
Fixed an issue that prevented event metatags from showing up on page load under the new customized URL structure.
Fixed an issue where timezones could return as undefined on calendar list views when custom event fields are used.
Fixed an issue where date ranges within a single month were displaying an abbreviated month name instead of the full month name.
Fixed a performance issue when using a tags widget to list tags by usage.
Fixed an issue where the placeholder could sometimes be stripped in format_widget args.
Fixed an issue where a user’s default tag was not being considered under LiveWhale Calendar and Storyteller.
Fixed an issue where some custom plugins using $_LW->sortByChild() were sorting case-sensitively rather than case-insensitively.
LiveWhale CMS Only
Fixed an issue where galleries with the same name in different themes might not follow the normal theme inheritance rules.
Fixed an issue where pages with extremely large accessibility reports would fail to display in the accessibility tab.
Fixed a front-end calendar bug that caused the local timezone to output as “undefined” when an event’s timezone was different than the user’s timezone
Fixed an issue where calendar URLs using /event_id/### weren’t backwards-compatible in every intended case.
Processes any existing saved news stories to repair the date record that, following a recent fix, was sometimes showing off by one day in the LiveWhale back-end.
When saving a news story, blurb, or gallery that is part of an Issue, the Issue details page cache is now expired rather than requiring a 5min wait.
Fixed an issue where @charset definitions in theme CSS files could sometimes cause nearby rules to be truncated.
Fixed an issue introduced in LiveWhale 2.10.3 that caused half-column images to not fill the correct width.
Fixed an issue where a public submission with an image would save the image but not attach it to the submitted item when a custom required field has been configured for the LiveWhale installation.
Added some missing labels to the JSON events endpoint for event repeating frequencies (MWF, TR, and yearly).
Fixed an issue where WYSIWYG editors that disallow block-level HTML elements (like image captions) were erroneously allowing block elements when they included CSS classes or other additional markup.
Fixed display issues—including a hidden submit button—when LiveWhale CMS forms were added to Event RSVPs.
Fixed an edge-case issue where the view selector could disappear when embedding a calendar view using ?iframe=1.
Fixed an issue where curly quotes used inside of a simple conditional formatting variable in the widget editor could cause unintended behavior.
Fixed an issue where links to individual events might not render if they were not included from that calendar’s category_campus or category_audience settings.
Fixed a follow-up timezone issue affecting back-end display of news story dates.
Fixed an issue where HTML header tags were being stripped from widget formatting settings.
Fixed an issue where auto-generated news sitemaps were missing a reference to the Google News schema.
Fixed a calendar performance issue that could occur due to improper validation of some event locations.
Fixed an issue where repeating events from a Linked Calendar could sometimes be excluded from widget views, even with hide_repeats=false.
Fixed an issue where full- or half-column images inserted into a wysiwyg area could overspill the width of their parent containers.
Added a missing validation check when saving an image to ensure keywords don’t exceed the allowable length.
LiveWhale CMS Only
Fixed an issue the front-end calculation of group ownership that prevented group-specific theming of details pages, and an issue where a subdirectory of a group-owned directory would not have the correct group owner/theme.
Fixed a bug that broke the datepicker on forms added to WYSIWYG fields.
Fixed a bug that prevented Issues with customizable URLs from showing the correct content.
When saving a news story, blurb, or gallery that is part of an Issue, the Issue details page cache is now expired rather than requiring a 5min wait.
Fixed an issue with saving blogs posts that manually link to an external url.
Fixed an issue where details templates wouldn’t always receive proper group ownership (affecting group=me widgets, XPHP variables, and body classes) after an item’s URL had been customized.
Fixed an issue where performing bulk actions from the manager (starring/unstarring, adding/removing balloons) could erroneously reset custom URLs.
Fixed an issue where creating a new profile wouldn’t use firstname/lastname when generating the default URL.
Fixed the /live/[type]/[id]@JSON endpoint to use absolute (rather than relative) image URLs.
Fixed an issue with the 2.10.0 upgrade step that erroneously assigned default URLs using the format [id]- rather than [id]-[title].
Fixed an issue with tag details pages stemming from the 2.10.0 URL changes.
Fixed an issue with the timing calculations of self-update production servers (ensuring the intended seven-day pause between automatic dev and prod upgrades).
Fixed bug that broke category and tag links on the calendar’s list views, both in the calendar and when opened in a new window.
Fixed two bugs introduced in Safari 16.4: one that disallowed use of the calendar theming variable “group” (by auto-replacing it with “obj.group” in rendered calendar components), and another in the widget editor that had resulted in “undefined” appearing in the default group setting for new widgets.
Fixed an issue where the manager could sometimes show an erroneous time for story publish dates.
Cached galleries are now immediately updated when individual images are updated in ways that may impact gallery display (e.g., caption or credit changes).
LiveWhale Calendar and Storyteller: Fixed a bug where editing a saved widget with no group set would auto-fill the current group. (This default behavior now only applies to newly-created widgets.)
LiveWhale CMS Only
Fixed an edge-case issue that prevented the 404 page from receiving theme styling in certain scenarios.
Fixed an issue where very large page revision histories could run out of memory when being viewed.
Core calendar.less styles have been organized into LESS partials, such that livewhale/theme/core/styles/calendar.less will output the same styles for backwards compatibility, but developers now have the option to selectively include just portions of the core theming when designing calendars. More about this new approach is in the theming documentation.
Added a SAML configuration setting SAML_ALLOW_EMAIL_AS_USERNAME that allows full email addresses to be used as SAML username attributes (otherwise, anything @ and after would be stripped).
In breadcrumb widgets, separator text items from a navigation can now be shown by including include_separator_text=true in the widget settings.
The date range separator ( - ) is now configurable to replace with other dash types (e.g., –) with or without spaces. This setting is available in sample.public.config.php: $_LW->REGISTERED_WIDGETS[‘events’][‘custom’][‘date_range_separator’]=’ - ‘;
Calendar initialization now waits until document ready to allow custom code to bind to the calBeforeInit event. This fixes an issue that was causing custom functions triggered by calBeforeInit to not run in time for the calendar initialization, preventing them from altering certain core functionality. (In testing, this change only delays calendar initialization by around 1/100th of a second.)
For custom back-end modules: exposed the manager state object (LW.manager.manager_state) to custom code, allowing for modules to save custom data using the “Save these changes” action from list view.
The h4.lw_accordion_block_title tag generated by accordions can now be customized and replaced with div or any other block-level HTML tag using the new ACCORDION_BUTTON_WRAPPER config option.
Custom fields now track their last modified date/time, allowing for eventual expiration of selected custom data.
The XPHP text and text-content casts, as well as *_clean variables, now strip any leading or trailing whitespace from the output.
You can now enable editors to insert code snippets into their WYSIWYG fields by seeing ENABLE_CODE_SAMPLES=true in the config.
Added a host setting for RESTRICT_COOKIES_TO_SUBDOMAIN which disables multiple-domain support but can be used to avoid auto-deletion of login cookies by certain external scripts.
When using allRows() on an SQL query, you can now specify the field value to return in the foreach loop, rather than an array of values.
When creating XPHP conditionals you can now use type=”get-array” or type=”post-array” to account for cases where type=”get/post” and type=”array” would both apply. This can allow checking for contains=”” values against a GET or POST array, like a series of form checkboxes for instance.
When embedding an image by ID, it is now possible to use id=placeholder to represent the ID of the placeholder image as defined by the new PLACEHOLDER_IMAGE config setting. [docs]
Development servers for sites using multiple domains/subdomains can now configure a SYNC_HOST for each hostname record in order to map content from production domains onto dev domains during the content sync process.
Updated the LiveWhale SAML integration to allow for multiple IdP signing certificates for easier cert rollover.
Updated the LiveWhale SAML integration to allow login POST data from all hosts as long as certificate(s) validate, even if different from the IdP server hostname.
SMTP email notification errors will now be logged to all nodes in a load-balanced environment, to avoid administrators from missing errors on another node.
Added a new setting FILTER_USING_LOCAL_DATE_FORMAT to allow widget and API requests to use a consistent format when enabled, regardless of dashes vs slashes. This means US timezones can use mm-dd-yyyy or mm/dd/yyyy and European/Australian timezones can use dd-mm-yyyy or dd/mm/yyyy. [docs]
Improved responsiveness of the hourly linked calendar refresh cycle.
Performance improvement: the same widget cache now gets shared between both web nodes unless specifically configured to require different per-node caches. In most cases, widgets can and should show the same results for both nodes.
Fixed an issue with the SAML login module that occasionally logged an error when starting a new login session.
Fixed a recently introduced issue where a custom BACKUPS_TTL setting could be ignored and save more backups than intended.
Fixed an issue where an internal cache failed to perform its cleanup routine on secondary web nodes.
Added a new setting DATABASE_HOST_READ to support an additional read-only database. (Will require hardware changes implemented on a case-by-case basis by the LiveWhale Support team.)
Added a diagnostic check for an edge-case failure of APCU variable caching.
SAML logins can now configure to disable the requestedAuthnContext from their integrations, which may allow for easier non-password login modes (USB key, etc.)
Fixed an issue where the recently upgraded Pel library for EXIF support did not run properly on PHP 5.6 installs. Added a secondary Pel library to maintain support for PHP 5.6.