Release announcements, helpful tips, and community discussion


Cerb (7.3.11) is a maintenance update released on May 4, 2017. It includes 18 fixes and minor features from community feedback covering the 7.3 update. You can follow these instructions to upgrade.

  • [Bots/Scripting] Fixed an issue in the bot scripting sandbox where the __toString() method was blocked. This is used by XML handling to typecast from SimpleXMLElement to a string.

  • [Plugins/Webhooks] Fixed an issue with webhooks. When editing an existing webhook, the currently associated behavior wasn’t selected properly.

  • [Bots/Events] Fixed an issue with ‘Record changed’ events in bots. When edited, the events were losing their ‘type’ context, which disabled the conditions and actions.

  • [Bots/Record Changed] Optimized bot behaviors on the ‘Record changed’ event. These could be inefficient when a bulk update changed many records at once.

  • [Platform/Localization/Performance] Optimized the mb_ucfirst() fallback function.

  • [Platform/Developers/Plugins] Added a DevblocksPlatform::strNum() helper for returning only the numeric components of a string. This is useful for validation in bot scripting.

  • [Bots/Performance] Optimized the method used to load deeply nested bot placeholder labels. This should be faster now for all behaviors on all events.

  • [Bots/Scripting] Added an |alphanum(also,replace) filter to bot and snippet scripting. This returns only the alphanumeric components of a text variable. The optional also argument is a string of other characters to allow (e.g. -_[]), which defaults to NULL. The optional replace argument specifies the substitution for non-allowed characters (defaults to '').

  • [Bots/Scripting] Added a random_string(length) function to bot and snippet scripting. It returns a random alphanumeric string of the given length (defaults to 8). This is useful for generating temporary passwords, confirmation codes, etc.

  • [Bots/Scripting] Added a validate_email(email) function to bot and snippet scripting. It returns true for a valid email address and false otherwise.

  • [Bots/Scripting] Added a validate_number(string) function to bot and snippet scripting. It returns true for a valid number and false otherwise.

  • [Bots/Maint] Nightly maintenance now purges inactive conversational bot sessions.

  • [Worklists/Tickets/Subtotals] Fixed an issue with subtotals on ticket worklists where clicking on the ‘(none)’ group for ‘Organization’ didn’t add a filter.

  • [Dashboards/Custom Fields] Fixed an issue on dashboard widgets when using number- or date-based custom fields as an aggregate field (e.g. metric or axis value). In some cases, these custom field prevented the widgets from functioning properly due to an optimization in queries referencing custom fields.

  • [Bots/Scripting] Added a |hash_hmac(key,algo) filter to bot and snippet scripting. It generates an HMAC signature for a given string using the a secret key (key) and algorithm (algo which defaults to sha256). This is useful if you need to generate a signature for a message to detect tampering. For instance, in dynamically generated survey links, a (partial) hash could be included to verify that the URL arguments (like email address) weren’t modified. HMAC is also used to sign some API requests. Bots can now both generate and validate these signatures.

  • [Bots/Scripting] Added a |sha1 filter to bot and snippet scripting. This generates a SHA-1 hash for the given text.

  • [Worklists/Filters] On worklists, fixed an issue when editing a numeric filter that contained a non-numeric value. For instance, the filter was added using quick search with a ‘between’ operator and a value that’s an array of the two boundary numbers.

  • [Worklists/Dashboards/Subtotals] Fixed another issue with the way multiple value custom fields were being subtotaled on worklists and dashboard widgets. The limit of subtotals returned was including combinations of values rather than distinct values, which means some combinations were truncated and left out of the totals. These totals are now computed directly from the custom field values (rather than the record), which should resolve the shortcomings with the old approach.