8.3
Cerb (8.3) is a feature upgrade released on March 3, 2018. It includes more than 72 new features and improvements from community feedback.
- Search
- Broadcast
- Interactive record merge
- Currencies
- Worker preferences
- Portals
- Custom records
- Custom fields
- Workspaces
- Add worklist required filters using quick search queries
- Improved worklist filter usability
- Improved the performance of shared workspaces
- Added cards for workspace pages
- Added cards and profile pages for workspace tabs
- Added cards and profile pages for workspace widgets
- Added cards and profile pages for workspace custom worklists
- Dashboards
- Profiles
- Records
- Security
To check if you qualify for this release as a free update, view Setup » Configure » License. If your software updates expire on or after February 26, 2018 then you can upgrade without renewing your license. Cerb Cloud subscribers will be upgraded automatically.
Important Release Notes
-
Cerb 8.3 requires PHP 7.0+ and MySQL 5.6+.
-
To upgrade your installation, follow these instructions.
Search
Search menu shortcuts
Workers can now configure which record types show up in their search menu by default.
A “show all” option provides access to everything else. This reduces clutter and makes it easier to access the most frequently used record types (e.g. contacts, orgs, tasks, tickets).
The search menu also automatically adjusts its size based on the number of items displayed. When there are fewer than 20 record types, a single column is displayed to reduce the distance the cursor needs to travel for shortcuts.
This is configured from the Settings tab on the worker’s profile.
Broadcast
Broadcast to any email-based field on records
Broadcasts can now be sent to any combination of email-based fields on records: email fields on the record; links to emails, contacts, orgs, or workers; and watchers.
Previously, broadcasts were limited to one specific email field for a given record type.
Placeholders for the recipient are available as broadcast_email_*
.
The new broadcast functionality is currently implemented for the follow record types:
-
Contacts
-
Custom records [#585]
-
Domains
-
Email addresses
-
Opportunities
-
Organizations
-
Workers
Interactive record merge
Implemented an abstract record merge feature that can be quickly added to any record type. This allows a worker to interactively select the destination record and field values during the merge, including all custom fields on any of the records.
The permission to merge each record type is controlled by roles.
-
Email address records can now be merged. This resolves the issue where email address records couldn’t be deleted, so defunct and typo email addresses remained in the database forever. These addresses can now be merged with a valid email address, which will migrate all of their content (comments, messages, links, etc). This uses the new merge functionality, where field values and the destination record can be selected by the current worker. [#303]
-
Contact records can now be merged. This uses the new merge functionality where field values and the destination record can be selected by the current worker. [#183]
-
Opportunity records can now be merged. This uses the new merge functionality where field values and the destination record can be selected by the current worker. [#371]
-
Task records can now be merged. This uses the new merge functionality where field values and the destination record can be selected by the current worker.
-
Implemented the new interactive merge functionality for custom record types.
-
Improved merge functionality on organization records. Field values and the destination record can be selected by the current worker. Previously, merging organizations created a new record and copied values into it.
-
Improved merge functionality on ticket records. Previously, tickets were merged using an algorithm with no user input. This now uses the new merge functionality where the current worker can select the field values and destination record. This also allows custom fields to be interactively merged.
Currencies
Added a new record type for currencies. Each currency has a name (US Dollars, Euros, Bitcoins), code (e.g. USD, EUR, BTC), symbol (e.g. $, £, €), and number of decimal places. Once defined, currencies can be used by other records to parse and format amounts of currency.
Multi-currency opportunities
Added currency support to opportunity records. Previously, the amount
field on opportunities was just a nondescript number with two decimal places. Now, each opportunity can specify a currency for the deal amount (e.g. USD, GBP, EUR, BTC). Opportunity records can be filtered by currency type. This allows geographically distributed teams to use opportunity records.
Worker preferences
Revamped worker preferences
Worker preferences have moved from their own page into worker profiles. Preferences are now organized into sections instead of presenting a giant list. The ‘Settings’ tab is visible to admins and to workers on their own profile. Administrators can now modify all preferences for other worker accounts without having to use the impersonate feature.
Admins can configure any worker’s pages menu
Administrators can now configure the pages in any worker’s menu from the Settings tab on their profile. Previously, admins had to use the impersonate feature, which required several extra steps.
Portals
Built-in portal hosting
Portals can now be used directly from their /portal
URL from Cerb. Previously, portals could only be used from a proxy, which complicated development, testing, and evaluation. [#573]
A proxy like Nginx is still recommended for production use, and you’ll need one to host your portal on a different hostname (e.g. support.example.com
).
Friendly URLs for portals
Community portals can now specify a user-friendly path
field. This is used rather than the portal’s unique code (e.g. a1b2c3d4) in the /portal
URL (e.g. /portal/support, /portal/survey).
Revamped portal configuration
Previously, portals were found in the Setup section. Now they’re in the Search menu like most other records.
Worker privileges in roles control access to portals.
In earlier versions, a portal like the Support Center had one long form to configure everything, which made it complex and confusing to add new options. Portals are now configured from their profile page, which provide more space and flexibility for options.
New deploy options for portals
On portal profiles, added a ‘Deploy’ tab which replaces the old ‘Installation’ tab. This provides several options for hosting a portal: built-in URL, Cerb Cloud, Nginx, and the PHP reverse proxy script. Previously, only the PHP script was offered, and many users had no idea what to do with it.
Cards and profile pages for portals
Implemented cards and profile pages for portal records. Portals can now have custom fieldsets and be linked to other records.
Code editor for portal templates
In portals, when configuring custom templates for the Support Center, a code editor is now provided rather than a basic textbox.
Custom records
Profile images on custom records
Custom records can now have profile images. This is enabled by selecting the ‘Profile images’ option when editing a custom record. The images are displayed on peek cards and worklists. [#576]
Custom fields
Currency-based custom fields
Added a new ‘Currency’ custom field type. This stores amounts of a given currency as a record field. This is particularly useful for product management (prices), order history (line items, invoice totals), property management (sale/listing prices), trade history (asset/cryptocurrency prices), etc. [#578]
Decimal-based custom fields
Added a new ‘Decimal’ custom field type. This stores a floating point number with an arbitrary precision (i.e. 2 decimal places, 8 decimal places). This allows decimal numbers to be used in custom fields and custom records. For instance, 2.75 bathrooms on a property listing, a discount rate of 0.20 on a reseller, a quantity of 1.5 items on an order, etc.
Validation
Implemented custom field validation on all record editor popups.
Workspaces
Add worklist required filters using quick search queries
On custom worklists, required filters are now added using a quick search query. This is far more flexible than the previous individual filters (AND/OR, multiple values, deep search, etc).
Queries also support placeholders that are evaluated at the moment the list is displayed (e.g. based on the current worker).
Any worklists with itemized required filters will continue to work in the short term, but new filters can’t be added that way. These filters should be migrated to a query.
Improved worklist filter usability
Simplified adding filters to worklists.
Previously, clicking on the filters bubble opened a menu, which expanded an ‘Add Filters’ section with a toggle between query and a picker.
Now, clicking the filters bubble opens the section without the extra step of a menu (those options have moved to other places). There is no toggle for quick search, since that can be done on every worklist already. The filters section automatically closes after a filter is added, and doesn’t remain open on subsequent reloads of the worklist.
Eventually, all filtering will be handled by quick search queries.
Improved the performance of shared workspaces
Improved the performance of updating a workspace worklist that is shared by many workers. In some environments with hundreds of workers, the old approach could cause out-of-memory or timeout issues due to the fact that every copy of the worklist was loaded, modified, and saved. The new approach uses a single SQL query.
Added cards for workspace pages
This provides information about a workspace even when a worker doesn’t have write access to it. Previously, opening the popup for a card was blank without write access. Workspace pages can now have custom fields and be linked to other records.
-
Added an
updated_at
field to workspace page records. This aids with synchronizing content in the API, etc. [#558] -
On workspace page worklists, added the ‘Type’ field as a column and filter.
-
Workspace page records can be quick searched by
type:
. -
On workspace page worklists, subtotals are now available for filtering the records.
-
On workspace page cards, there’s a new search button for ‘Tabs’. This displays a search popup for all of the tabs within the workspace.
Added cards and profile pages for workspace tabs
Workspace tabs are now a first-class record type, with cards, choosers, profiles, search, custom fields, links, etc. Tabs can now be configured from a single popup.
- Cards for workspace tabs now show counts and search buttons for widgets and worklists (depending on the tab type).
Added cards and profile pages for workspace widgets
Workspace dashboard widgets are now a first-class record type, with cards, choosers, profiles, search, custom fields, links, etc. Widgets can now be configured from a single popup.
Added cards and profile pages for workspace custom worklists
Workspace custom worklists are now a first-class record type, with cards, choosers, profiles, search, custom fields, links, etc.
- Implemented subtotals for workspace list worklists. This currently supports the ‘Type’ and ‘Workspace Tab’ fields.
Dashboards
Row subtotals on chart widgets
On dashboards, stacked bar charts now have configurable row (x-axis) subtotals. The available aggregations are: sum, mean, min, and max. These are only available when every series uses the same format (e.g. secs elapsed, bytes, percentage). [#580]
Column subtotals on chart widgets
On dashboards, charts now have configurable series (columnar) subtotals. The aggregation options are: sum, mean, min, and max. These automatically use the same format (e.g. secs elapsed, bytes) as the data. [#579]
More forgiving bar chart widgets
Fixed an issue with dashboard stacked bar chart widgets. Previously, if the series had different ranges or time scales then the chart broke. Now we normalize the x-axis ticks so they’re uniform across all series. [#154]
Configure calendar widgets with a chooser
On workspace dashboards, calendar widgets are now configured using a chooser rather than a dropdown. This allows autocompletion and filtering.
Dashboards default to three columns
On workspaces, dashboard tabs now default to 3 columns. Previously they defaulted to 1.
Profiles
-
Custom fields with file attachments now open a peek popup rather than downloading the file immediately.
-
Worker-based custom fields now open a peek popup. Previously, these displayed non-interactive text.
Records
Calendars
- Implemented autocomplete for calendar choosers.
Contacts
-
Profile images are now displayed on contact worklists.
Email addresses
-
In the email record editor, the ‘is banned’ and ‘is defunct’ options are now better explained as “Reject incoming email from this address (is banned)” and “Reject outgoing mail to this address (is defunct)”. The options are now located in a ‘Mail filtering’ section.
-
When an admin is editing an address record, they can select from: We send email from this address, This is a worker’s personal email address, or None of the above.
Groups
-
On group profile pages, added search buttons for: members, buckets, bots, and custom fieldsets. Removed the built-in tabs for those records.
Opportunities
-
Opportunity records no longer require an email address, and the
Email:
field has been removed. Any email addresses associated with opportunities have been migrated to record links (email<->opp). Opportunities can still be filtered and subtotaled by email address by using record links. This also allows multiple email addresses and organizations to be associated with a single opportunity record. -
On opportunity records, the
is_closed
andis_won
fields have been consolidated into a singlestatus_id
field (0
=open,1
=won,2
=lost). Existing records have been migrated to the new field. This schema is faster, smaller, and requires less code complexity. -
When using the records API to create or modify opportunity records, the
status
field can now be provided with one of the following values:open
,closed_won
, orclosed_lost
.
Organizations
-
Profile images are now displayed on organization worklists.
Tickets
-
On ticket profiles, added a ‘Send Again’ option to the ‘…’ menu of sent messages in the timeline. This sends another copy of the same message to the same recipients, with a new
Message-Id:
andDate:
header. All attachments are included. Anoriginal_message.html
attachment is used as an HTML body. This is more convenient than forwarding messages to the same recipients, and it doesn’t create a second copy of the message in the timeline.
Workers
-
On worker records, admins can now directly edit a worker’s alternate email addresses from the peek editor. Confirmation of the email address is no longer required. Workers can no longer modify their own alternate email addresses. [#600]
-
On worker profile pages, added search buttons for group memberships and bots. Removed the built-in tabs for those records.
-
Workers can no longer edit their own first name, last name, or title. An administrator must do so. This protects against impersonation attacks.
Security
Fixed a content injection issue on the login form
Previously, literal error messages were passed as URL parameters. Now an error code is passed in the parameter, and this displays the appropriate message from a hard-coded list.
This wasn’t linked to any known exploit (it couldn’t run arbitrary scripts), but it could be used to display fake error messages which could intentionally social engineer workers (e.g. call a phone number to unlock account, where an attacker could use social engineering to steal a login and password).