LiveWhale 1.4

Complete list of changes in LiveWhale 1.4.1


As you know, LiveWhale 1.4.0 was one of our biggest, most exciting upgrades in LiveWhale history! Building upon the new features and improvements in the previous release, 1.4.1 takes 1.4 to the next step with improved functionality, optimizations and security enhacements, and incorporating suggestions based on the terrific feedback we've been getting from all our clients -- so, thank you!

Please contact Alex with any additional questions about the changes detailed below, questions about scheduling your upgrade, or information about the upcoming LiveWhale developer community.

Feature Enhancements


  • The page navigation process, introduced in 1.4.0, has been streamlined across the board, thanks to feedback from our clients.
    • For groups with multiple navigations, the navigation selection process is now available from the navigation manager itself, rather than a separate screen. This more unified interface is designed to be clearer, and more straightforward for single navigation groups.
    • Similarly, a link to the navigation edit screen is available from the navigation manager itself.
    • It is now possible to rename existing navigation menu items. In particular, pages added to your navigation will use the default page title, but an option is provided to rename the item to a custom title used only in the navigation.
    • It is now possible to add non-linked separator text to a navigation menu.
    • If page creation is allowed, the "Create a new page" option, which previously left the navigation manager, now allows you to create a page without leaving the page and disrupting the navigation management workflow.
    • A warning is now provided if an attempt is made to leave the page without saving your work.
    • There is now a separate checkbox under the user edit screen which allows a page editor to be authorized for navigation editing. Previously all users had this permission. If a user is not authorized to make navigation edits, their navigation will be displayed in read-only mode. Note: After upgrading to 1.4.1, users will be de-authorized for navigation editing until authorization occurs. Please let us know ahead of time if you would like users authorized in bulk at the time of upgrade.
    • Assorted other visual improvements to the navigation management interface.
  • Introducing the pages widget. It can list pages according to parameters such as tagging and searching, as well as sort by popularity (via Google Analytics) or by last edited date.
  • You can now edit some page details (title, description, keywords, tags) directly from the page editing interface, whereas previously the link would redirect you to the page details editor.
  • Added the ability to embed media in WYSIWYG fields (for example, YouTube videos) with one click of the new media WYSIWYG toolbar button.
  • You can now restore an entire deleted directory and its contents with a single click from the file browser.
  • The Pages module has a new submenu, "Notes", which lists recently posted notes on pages you are authorized to edit.
  • It is now possible to restrict page editors' usage of templates at the group and user level. This is done in exactly the same manner as authorizing groups or users for page editing permissions (via the group edit or user edit pages). Note: If no permissions have been set, access to all templates is granted, as was the case in previous versions of LiveWhale.
  • The page errors screen now warns about a rare case where a page is prepared for page editing but not granted write access by the LiveWhale FTP user, because page editing will fail in this case.
  • Pages are now available as a valid content type for related content attachments.
  • To protect users from accidently losing their work, previous versions of LiveWhale triggered an alert if you tried to leave a page while actively editing it. However, it only presented the alert if changes had actually been made to the page. LiveWhale will now always display this alert, to avoid confusion or concern among web editors.
  • Improved awareness of deleted pages in navigations management and display.
  • In previous versions of LiveWhale, the "Content Analyzer" was accessible only by admin users. This feature has now been moved to a submenu called "Errors" under the Pages tab, and is available for all users authorized for the Pages module. Page editors can now easily view any problems, such as 404 links, in the pages they are responsible for.


  • News editors can now click "archive now" from the news manager list for any news item.
  • News widget lists can now optionally include "contact_info" in their output via the format arg.


  • Added the "max_days" arg to the events widget, allowing you to control how many days of events are displayed from the start date.
  • The events calendar widget now supports the same args as the events widget, rather than a subset of them. This includes format, format_starred, thumb_width, and thumb_height, which can be used to produce more interactive, Javascript powered calendars.
  • The sample events template now automatically includes the link to its corresponding ICAL file.
  • Added the "show_public" arg to the events widget and calendar widget. This will enable display of publicly-submitted events (in the Public group). Note that if you choose to expose these items, they will still only display once a LiveWhale user has brought them live; they are hidden initially after submission takes place.


  • The file widget now supports multiple "path" args, in which case the file will be chosen at random.
  • Added additional CSS classes to output in the file widget for improved customization.


  • Inline forms should now be referenced by ID instead of title. Existing inline forms using the title arg will continue to be supported, however.


  • The images widget now supports RSS feeds via the show_rss_link arg, already used in other widgets.
  • The images widget now supports date searching via the start_date and end_date arg as used in other widgets.
  • The images widget now supports fulltext searching via the search arg as used in other widgets.
  • The image attachment interface now allows you to restrict image results by date using a new dropdown menu.
  • You can now embed images in WYSIWYG-enabled fields for content types using the image button, as is currently done in the page editor.


  • Improved the format of tag /live url requests.

Users & Groups

  • You can now export all LiveWhale users to a CSV.
  • When importing users from a CSV, the field for page editing authorizations now requires a host as part of each url.


  • Introducing the new save-and-share widget. This produces the same save-and-share feature that has only appeared on news, event, etc. details pages in previous versions of LiveWhale.
  • Added Google and Yahoo bookmarks to the save-and-share feature.
  • The save-and-share feature now supports sharing a link by e-mail.


  • Added support for embedding saved widgets in WYSIWYG fields via a new widget button. Among our most anticipated new features!
  • Widgets that can show thumbnails for attached images can now use the thumb_crop arg to disable thumbnail cropping when desired.
  • Format args can now specify an XHTML-safe version of any variable (for use in HTML attributes) by appending "_clean" to the variable name (example: title vs. title_clean). Variables used in HTML attributes without "_clean" will be converted automatically.
  • Format args now have access to a version of the item's title without the wrapping <a> tag, via "title_text"/"headline_text". Supported widgets: news, events, galleries, files, forms, and pages.
  • Widgets with thumb_width and thumb_height args can now specify "auto" as a valid value of either. This has the effect of dynamically adjusting the "auto" dimension according to the hardcoded size specified by the other dimension.
  • For backwards compatibility, "randomize" args still in use will automatically be converted to sort_order=random.
  • Improved wording of sort_order arg choices for clarity.
  • When a widget is embedded in a WYSIWYG field, the blue widget placeholder now displays the type of widget. If it is a saved widget, it also displays the title of that widget.
  • Widget detail templates can now optionally display a list of tags associated with that item, using new "news_tags", "events_tags", etc. variables.
  • Improved support for WYSIWYG changes to format args in the widget editor.


  • LiveWhale RSS feeds may now set guid, atom:link, language, category, generator, ttl, and source fields for more robust formatting.
  • If a widget includes a header and RSS link, but does not set an RSS channel title, the value of the header will automatically be used.
  • The feeds automatically added to public web pages have changed slightly. They are now added per-widget, rather than per data type, require a "header" arg on the widget, and the resulting feed does not strip entries published before a cutoff date. This better reflects the intent of the end user in regards to subscription.
  • Improved formatting of ICAL feeds containing backslashes.

Other Improvements

  • jQuery and TinyMCE both upgraded to latest versions.
  • LiveWhale now sends notifications when someone from your group accepts or declines a suggested item.
  • When saving a news story or event with an external link, you will now be warned if that link is broken.
  • When copying a news story or event that is itself a link, the link being copied will automatically be re-evaluated for validity.
  • Details templates will now set a meta description containing the item's summary/description, when available. This content can then be displayed in search engine results.
  • New unified search box for improved adding of related content to a news story, event, etc.
  • Added the option to "Remove Balloons" to managers that support balloons. Like "Remove Tags", this action in the checked items menu will remove all balloons for all checked items. Additionally, a quick method of adding/removing 10 balloons at once is available by shift-clicking the gray add balloon icon or on a balloon to pop.
  • Improved the appearance of captchas when integrating a Recaptcha account into LiveWhale.
  • Widgets, details for most content types, and individual web pages may all optionally include the last modified time and name of the last editor in their output with the use of new variables.
  • WYSIWYG toolbars are now better organized into two rows. The first row contains styling and layout options, and the second row contains embeddable objects.


  • New architectural changes offer some performance optimizations. Backwards incompatible include paths in client code related to these changes will be updated at upgrade time.
  • LiveWhale now incorporates a built-in script and stylesheet minifier/concatenator/compressor. If your web page includes a series of scripts or stylesheets, they will be automatically combined into a single, small, cached resource to reduce server load. Certain types of resources that should not be aggregated in this fashion will be automatically excluded.
  • LiveWhale now takes advantage of the popular APC accelerator for PHP, above and beyond the normal benefits of an opcode cache. If enabled on your server, the CMS will hold certain data in shared memory for faster access, instead of repeatedly reading it from the file system over multiple http requests. For this reason we now recommend APC's usage.
  • LiveWhale now detects, closes, and logs leaked FTP connections at the end of runtime execution.
  • The widget cache now supports the events calendar widget.
  • Optimizations to LiveWhale's diagnostic routines.
  • The LiveWhale host config now allows you to set any number of CDNs for a host (alternate hosts that point to the same docroot). If CDNs are set, LiveWhale will use them to distribute various resources across multiple hosts for more efficient page loading.
  • Further improvements to reducing resource usage during page editing.
  • Due to improvements to the Smart Cache page cache system, LiveWhale will now periodically prune unused page cache entries.
  • Other assorted minor improvements to the page cache.


  • The LOGIN_SECURE config option no longer just enforces https for LiveWhale login form submission. Instead it now enforces https for all server requests that acknowledge a LiveWhale login, for the duration of the login session. The sole system requirement is allowing your web site to be accessible over https just as it is over http. Enabling this feature will allow all LiveWhale logins to be authenticated over SSL, and reduce the risk of exposing login credentials, especially on unprotected public networks. This should be considered a major security enhancement, is is highly recommended for all LiveWhale customers.
  • Session files are now stored under the LiveWhale data directory for improved security on shared systems.
  • LiveWhale now allows iframes and script tags to be inserted into WYSIWYG editable areas throughout the CMS, provided the target domain (for the "src" attribute) is listed in the global whitelist array ($_LW->CONFIG['HOSTNAME_WHITELIST']). Wild card prefixes on domains (* are allowed. The whitelist comes pre-filled with several popular media sites (YouTube, Vimeo, etc.), as well as your own *, but can also be customized to add or remove any domain you wish. NOTE: Inline scripts (i.e. without a src attribute) are only allowed to be added with the "edit page source" feature.


  • Applications can now be configured to load only when the request URI matches a pattern. Frontend applications can also be configured to only load if the user is logged into LiveWhale.
  • Custom client widgets can now opt into the widget cache.
  • LiveWhale now incorporates a debug console for developers. To use it, you must be logged into LiveWhale. Simply add lw_debug=1 to the query string for the current page to view statistical information about the CMS, a snapshot of the widget cache, a profiler backtrace/timeline for the present request, error log, slow request log, database statistics, and more.
  • Introduced a new LiveURL plugin (/live/json) which generates a JSON array of items of the requested type. Usage mirrors /live/rss exactly. For example: /live/rss/news/max/1 becomes /live/json/news/max/1.
  • The cache layer now sends an X-Smart-Cache custom header when a page is served by the cache layer, with information about how the page cache responded.
  • New API calls exist for url shortening/expansion: $_LW->setFormatShortenedUrl() and $_LW->setFormatExpandedUrl().
  • It is now possible to set the duration database backups are stored for (in seconds), using the new BACKUPS_TTL config setting. (The default is still 30 days.)
  • Assorted across the board architectural and structural improvements, with a focus on improved developer API accessibility.


  • Requests for story, event, etc. details are now included in Google Analytics stats for the default template of that data type.
  • LiveWhale now displays the top Google searches for a page along with the analytics stats, when the data is available.
  • Widgets with detail templates (such as news, events, etc.) gain a new option for the "sort_order" arg called "analytics", allowing you to sort widget results by number of hits to that item.

Bug Fixes

  • When requesting an RSS feed from LiveWhale (/live/rss/etc.), it will now take into account whether SSL is used or not. Requests using https:// will produce a feed whose images are requested over https:// so that any secure pages embedding the RSS content will not produce insecure content warnings.
  • Fixed a minor bug with date range data associated with publicly submitted events.
  • Fixed an issue where updating your name under Settings would not immediately display the change in the current toolbar.
  • Fixed a bug where HTML entities could be seen as encoded in bulletin e-mail notifications.
  • Fixed a bug where a bad submissions from the pages_edit screen caused the accessibility information to lose CSS styling.
  • Implemented a workaround for a browser-specific bug which caused some users to not get the most current version of Javascript files after an upgrade.
  • Named widgets now have their cache automatically reset for every usage on the public web site when the widget is edited and resaved.
  • Fix a bug where widgets pulling data from the public submissions group were not automatically expired upon new submission.
  • Fixed an issue where submitting a tag in a tag entry field could be ignored in Google Chrome.
  • Fixed an issue where a page filename suggestion was erroneously appended to the url on a failed submission of a new page.
  • Removed an occasional erroneous warning on the page creation screen about being unable to create a directory.
  • Disabled the "no flash" login screen alert for iPad/iPhone users, since it is not applicable.
  • Fixed a bug where related content did not get repopulated after a failed save submission.
  • The Pages module now adapts properly to case-sensitive file systems.
  • Fixed a bug where you were not warned if you tried to save a widget with no args.
  • Fixed a cosmetic issue where the events calendar would sometimes use the old style events url.
  • Fixed an issue where rotating images would not properly appear in preview mode within the page editing console.
  • Fixed a issue where trailing whitespace on a url was not properly stripped by TinyMCE.
  • Fixed a bug where hiding comments could fail.