v4.2.20 release

Release date: June 3, 2021


Version 4.2.20 had 64 bug fixes, 11 new features, and 38 improvements.

Reminder: Projects with Slack notifications need to add the API com.psddev:slack-notification dependency to the project’s build.gradle file.

Significant improvements

  • Create assets from the header—Editors can now create new assets from the header instead of from the search panel. This saves several mouse clicks and scrolls. This improvement is especially helpful for assets not commonly found in the Quick Start widget.
  • Pin messages in the Conversation widget—Editors can now pin messages in the Conversations widget for easy future reference. When many stakeholders engage in a long discussion, no important messages get lost in the thread.
  • Publish subscription improvements—

    • Editors can elect to receive a notification after an asset is first published (instead of receiving a notification after every publish).
    • Editors can create content-type specific filters similar to those available in the search panel. For example, if an editor filters by article, the filter can be further refined by other fields associated with articles, such as author, section, and tag.
  • Translation subscriptions—Editors can now subscribe to translation notifications. Filtering is available for combinations of translation service, status, creator, sites, and content types. In particular, editors can receive a notification should a translation job fail.
  • Date picker improvement—Editors can select from predefined ranges, such as today, yesterday, past 7 days, past 30 days, as well as a custom range.
  • Sort searches by label—Editors can now sort search results by label.
  • Full labels in Quick Start widget—Starting with this release, the Quick Start widget displays the entire label of a content type. Prior to this release, long content type labels appeared truncated.

Significant defects addressed

  • In some scenarios, attempting to copy a site generated an error NullPointerException. This defect has been addressed.
  • In some scenarios, attempting to filter the Recent Activity widget by a role generated an error. This defect has been addressed.
  • In some scenarios, a GraphQL query did not return a corresponding view model. This defect has been addressed.
  • In some scenarios, an Atom feed entry incorrectly used the HTTP protocol in an <atom:link> element instead of the HTTPS protocol; depending on the target server’s configuration, this may have generated an error. This defect has been addressed.
  • Prior to this release, editors could not insert an enhancement into the rich-text editor when that enhancement was a one-off audio file from a federated search. This defect has been addressed.
  • Prior to this release, the Edit Theme Overrides tab displayed blank color fields and then applied default colors in the front end. In other scenarios, the placeholder color was rendered as a color explicitly selected. Starting with this release, the placeholder colors in the Edit Theme Overrides tab behave consistently with other fields having placeholder values. If the editor did not make an explicit selection, the value defaults to the placeholder color in light italics (and this value carries over to the front end); if the editor did make an explicit selection, the value appears in normal roman.
  • In some scenarios, an editor assigned to a role without publish permissions could indeed publish an asset when it is in a workflow. For example, articles have a three-step workflow that ends with publish, and a role exists that excludes the ability to publish. In some scenarios, editors assigned to that role could publish articles at the end of a workflow. This defect has been addressed.
  • Prior to this release, workflows having more than one status with the same name caused incorrect processing of transitions and notifications as an asset proceeded through the workflow. For example, if a workflow has two statuses named Editing, processing of assets into one of those statuses was incorrect. Starting with this release, workflow statuses with the same name generate correct transitions and notifications.
  • In some scenarios (usually with JPGs), when an editor uploaded an image to Brightspot, the original image’s orientation was not retained. For example, if the original image had a portrait orientation, the uploaded image was assigned a landscape orientation. For those scenarios, Brightspot now retains the image’s native orientation.

Breaking changes

  • As a result of an improvement to the site copier functionality, the constructor for CopySiteStateValueReplacer has changed from public CopySiteStateValueReplacer(CopySiteTask currentTask, Database database, SiteCopierJob job, Set<ObjectType> typeSet, Map<UUID, UUID> copiedObjects) to public CopySiteStateValueReplacer(CopySiteTask currentTask, Database database, SiteCopierJob job, Set<ObjectType> typeSet, Map<UUID, Object> copiedObjects).
  • Due to an error related to TimeSeries underreporting daily results in the two-month view, a breaking change was made. Please contact your Brightspot representative for more information, and reference ticket number BSP-11732.
  • TimeSeries was updated to only keep data regarding the most recent interval. Please contact your Brightspot representative for more information, and reference ticket number BSP-11708.
  • Workflows named “New,” “Published,” “Initial,” or “Final” were occasionally failing. As a result, projects using Workflow#getTransitionsFrom or Workflow#getTransitionsTo APIs directly with initial or final must change to using WorkflowState.INITIAL_STATE_NAME or WorkflowState.FINAL_STATE_NAME constants. 
  • Users without publishing permissions were still able to publish if the transition was included in a workflow. As a result, permission of the transition to the final state has been removed in favor of the Publish permission.
  • To simplify the experience around publishing third-party forms on Brightspot, the Marketo Credentials field was from the asset level to the site level. As a result, the MarketoThirdPartyFormProvider#marketoCredentials field at the asset level was deprecated in favor of the MarketoImportSettings#accounts field at the site level.
  • As a result of notification system improvements, the following breaking changes were made:

    • SmsDeliveryOption and EmailDeliveryOption no longer extend VerifiableDeliveryOption or ToolDeliveryOption, and instead extend VerifiableDeliveryMethod and ToolDeliveryMethod.
    • SlackDeliveryOption no longer extends VerifiableDeliveryOption or ToolDeliveryOption, and instead extends ToolDeliveryMethod.
    • BrowserDeliveryOption no longer extends ToolDeliveryOption, and instead extends ToolDeliveryMethod.
    • SmsMessage, EmailMessage, SlackMessage, and BrowserMessage no longer extend com.psddev.cms.notification.Message, and instead extend com.psddev.dari.notification.Message.
  • The Watching filter was moved into the Global Filters area. As a result, the Watcher plugin can no longer be disabled entirely via a setting. If users want to disable this plugin, it must be removed from the project (similar to other plugins). Additionally, because the “Watching?” filter has moved to the left, where other filters are, it is no longer persistent across searches. If users desire to retain the old behavior, settings to control this can be found in Admin > Sites & Settings > Global > CMS > UI > Watching Search Result Filter Enabled/Watching Search Filter Disabled.
  • As a result of removing the Legacy Settings section of Sites & Settings, the Conversation settings must be reconfigured. 
  • Brightspot 4.2 adds a Google Analytics integration. All classes are in the com.psddev.google.analytics package unless as noted below:

    • Deprecated the reportTaskSchedule field on GoogleAnalyticsPageViewsSupplier. The GoogleAnalyticsProcessTask uses the new analyticsImportTaskSchedule field on GoogleAnalyticsTaskGlobalSettingsModification for its execution time calculation.
    • The Impressions class now uses a java.lang.Long instead of an org.joda.time.DateTime for storing date information. The java.lang.Long value can be retrieved by using the new parsing methods Report#parseHourMillisecondsFromString, Report#parseDayMillisecondsFromString, and Report#parseMonthMillisecondsFromString.
    • The site-level metrics imported by SiteReport will now have the site’s UUID added as a suffix on the related TimeSeries names.  This change brings those site-level metrics in line with the other reports' site-level metrics.
    • The GoogleAnalytics.AGE_RANGE_45_54_TIME_SERIES_NAME constant has been changed to end with 45-54 instead of 45_54 (hyphen instead of underscore) to match the data coming from GA.
    • Report and its implementations have been updated to fetch data bucketed by hour, day, and month, as required by the TimeSeries#set changes.
  • The following methods in RichTextElement are now final:

    • afterCreate
    • onDuplicate
    • beforeCommit
    • afterSave
    • beforeDelete
    • afterDelete
  • Projects that have overridden these methods will experience build-time errors. (onValidate and beforeSave can still be overridden.)
  • SearchDashboardWidget was moved to a different package. Instances of this class will need to be republished to use the new implementation.
Our robust, flexible Design System provides hundreds of pre-built components you can use to build the presentation layer of your dreams.

Asset types
Module types
Page types
Brightspot is packaged with content types that get you up and running in a matter of days, including assets, modules and landing pages.

Content types
Modules
Landing pages
Everything you need to know when creating, managing, and administering content within Brightspot CMS.

Dashboards
Publishing
Workflows
Admin configurations
A guide for installing, supporting, extending, modifying and administering code on the Brightspot platform.

Field types
Content modeling
Rich-text elements
Images
A guide to configuring Brightspot's library of integrations, including pre-built options and developer-configured extensions.

Google Analytics
Shopify
Apple News