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 frompublic CopySiteStateValueReplacer(CopySiteTask currentTask, Database database, SiteCopierJob job, Set<ObjectType> typeSet, Map<UUID, UUID> copiedObjects)
topublic 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
orWorkflow#getTransitionsTo
APIs directly with initial or final must change to usingWorkflowState.INITIAL_STATE_NAME
orWorkflowState.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#marketoCredential
s field at the asset level was deprecated in favor of theMarketoImportSettings#accounts field
at the site level. As a result of notification system improvements, the following breaking changes were made:
-
SmsDeliveryOption
andEmailDeliveryOption
no longer extendVerifiableDeliveryOption
orToolDeliveryOption
, and instead extendVerifiableDeliveryMethod
andToolDeliveryMethod
. -
SlackDeliveryOption
no longer extendsVerifiableDeliveryOption
orToolDeliveryOption
, and instead extendsToolDeliveryMethod
. -
BrowserDeliveryOption
no longer extendsToolDeliveryOption
, and instead extendsToolDeliveryMethod
. -
SmsMessage
,EmailMessage
,SlackMessage
, andBrowserMessage
no longer extendcom.psddev.cms.notification.Message
, and instead extendcom.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 onGoogleAnalyticsPageViewsSupplier
. TheGoogleAnalyticsProcessTask
uses the newanalyticsImportTaskSchedule
field onGoogleAnalyticsTaskGlobalSettingsModification
for its execution time calculation. - The
Impressions
class now uses ajava.lang.Long
instead of anorg.joda.time.DateTime
for storing date information. Thejava.lang.Long
value can be retrieved by using the new parsing methodsReport#parseHourMillisecondsFromString
,Report#parseDayMillisecondsFromString
, andReport#parseMonthMillisecondsFromString
. - The site-level metrics imported by
SiteReport
will now have the site’s UUID added as a suffix on the relatedTimeSeries
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 with45-54
instead of45_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 theTimeSeries#set
changes.
- Deprecated the
The following methods in
RichTextElement
are nowfinal
:-
afterCreate
-
onDuplicate
-
beforeCommit
-
afterSave
-
beforeDelete
-
afterDelete
-
- Projects that have overridden these methods will experience build-time errors. (
onValidate
andbeforeSave
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.