From Cerb Wiki
Jump to: navigation, search

Cerb5 (5.7) is a major functionality update released on January 9th 2012. It contains over 70 new features, fixes, and usability tweaks from community feedback. 31 additional improvements have been provided through 2 maintenance updates.

This is a summary of the highlights of this release. You can find the detailed changelog in the forums.

  • To check if you qualify for this release as a free update, view Setup->System->License Info. If your software updates expire after January 9, 2012 then you can upgrade without updating your license.
    Cerb 510 license expires.png
  • Visit the project website to subscribe to feature updates on your existing license.

Important Release Notes

  • Make a backup before upgrading.

Source Control (Git/Subversion)

  • We have discontinued hosting our own Subversion repositories. If you are unable to use Git for accessing the project files, you can use GitHub's Subversion interface to download the project files:
    svn co https://github.com/wgm/cerb5/branches/stable cerb5

Third-party Plugins

  • Third-party plugins can now be installed and updated entirely through the browser. This eliminates the need to maintain dozens of project checkouts and juggle branches for each version in order to use optional plugins. Make sure your storage/plugins/ directory is writeable by your webserver's user so the new library can manage this for you.
  • Plugins that are not known to be compatible with the current version will now be disabled automatically. This is true for plugins you wrote as well. Very minor tweaks should be required to make past plugins compatible with 5.7+. Please refer to the new <requires> block in the plugin.xml file here: https://github.com/wgm/cerb5/blob/stable/install/extras/sdk/plugin.xml


Plugin Library

  • Implemented the Plugin Library which allows completely browser-based plugin installs. In addition, it makes it much easier to find new plugins that are guaranteed to be compatible with your current version. After a Cerb5 upgrade, the plugin library will help you automatically update all your plugins (previously you had to track down new plugin versions from various places on your own). This first library will focus on plugins that we've reviewed to ensure they're safe; however, we're building the system with the ability to add arbitrary repositories for easier management of your own custom plugins.
    C570 plugins library.png

Plugin Management

  • The setup pages for installed plugins and the plugin library have been combined into a single Manage Plugins section. Each list is presented as a tab, which makes them easier to notice.
    C570 plugins setuptabs.png
  • The list of installed plugins is now displayed in a worklist. This allows the familiar paging, sorting, and searching functionality. Plugins can now be enabled or disabled per-row, which makes it easier to enable dependencies.
    C570 plugins worklist.png
  • Plugins that are installed through the browser will no longer default to enabled. Instead, a popup will be shown which allows the plugin to be configured at the same time as it is enabled.
  • When managing plugins in setup, a configuration popup is now provided for each plugin. This saves plugin authors the requirement to create a new configuration section, and it makes it easier for end-users because they don't have to hunt down inconsistent configuration settings after installing a plugin.
    C570 plugins setupcfg.png
  • Plugins that are disabled will now display a banner on top of their plugin icon. This visual cue improves the usability of the worklist by making it easier to spot plugins that are inactive.
    C570 plugins disabled.png
  • Plugin requirements are now clearly displayed in the Plugins tab in Setup.
    C570 plugins reqs.png
  • Plugin requirements now must be satisfied before a plugin can be enabled in Setup.
  • Plugins will now be disabled during an upgrade if their requirements aren't met. Third-party plugins that haven't been tested with the new application version will also be disabled. To compensate for this, we're introducing a system that automatically updates plugins after an upgrade.
  • Installed third-party plugins can now be completely uninstalled through the browser.
  • Implemented quick search for the Installed Plugins and Plugin Library worklists.
  • Implemented subtotals for the Installed Plugins and Plugin Library worklists.

Plugin Development

  • Plugin requirements can now be specified in their manifest. These include PHP extensions, plugin dependencies, a required minimum version of Cerb5, and a 'tested up to' version.
    C570 plugins reqs mft.png
  • Plugins manifests now should specify a version in the same XX.YY.ZZ format as Cerb5. The incremental revision count has been removed since it complicates maintaining branches of development for different major versions.
    C570 plugins vers.png
  • Implemented a new extension point (cerberusweb.plugin.setup) that displays tabs on the 'Configure' area for a plugin in Setup. This makes it easy to provide options that need to be verified before a plugin can be enabled (e.g. for integration). Multiple instances of this extension per plugin will be rendered as tabs in the popup. Developers no longer need to implement custom page sections for configuration, and users no longer have to dig for the setup page for each plugin -- they can simply configure them at the same time they enable them.

Relocated Plugins

  • Moved the Gravatar plugin out of the core project and into the plugin library.
  • Moved the Feed Reader plugin out of the core project and into the plugin library.
  • Moved the Call Logging plugin out of the core project and into the plugin library.
  • Moved the Datacenter plugin out of the core project and into the plugin library.
  • Moved the Datacenter domains plugin out of the core project and into the plugin library.
  • Moved the OpenID plugin out of the core project and into the plugin library.
  • Moved the Spam Analysis plugin out of the core project and into the plugin library.

Virtual Attendants

Behavior Variables

  • Virtual Attendant behaviors can now define, set, and check custom variables. Variables can be used in conditions and actions. They are also available as placeholders in snippets. The value of a variable can be static (a constant value), synthesized (generated based on other values), or composited (combining multiple values). For a simple example usage, a variable can be set to a different value depending on the various outcomes of a condition. Additionally, a true/false variable can be set based on a complex set of conditions and then reused throughout the decision tree as a single condition with a more intuitive name (e.g. "has SLA"). This also handles workflows where a piece of information (e.g. an organization or server name) needs to be extracted from another field (e.g. a ticket subject) and act as both a condition and a value in actions. A variable's value can be set using snippets, and if the same template needs to be sent in multiple actions (e.g. auto-replies) then it can be set as a variable and reused with a single placeholder. This improves reusability and allows template modifications in a single place.
    C570 va vars.png
  • Virtual Attendant behavior can now define custom variables that refer to workers. This is useful for configuring assignment workflow, where the variable can be used to set an owner rather than a hard-coded worker.
  • Ticket owners can now be set using worker variables in Virtual Attendant behavior. This makes automated assignment workflow possible.
    C570 va vars set owner.png
  • Expanded the options for setting a worker variable in Virtual Attendant behavior. Workers can now be chosen at random, in round-robin sequence, or by load balancing the number of open assignments. Workers can be defined explicitly or by including entire groups. The final list of available workers can be filtered to only those who are currently logged in. This should allow for far more sophisticated auto-assignment workflow in Virtual Attendants.
    C570 va vars worker.png
  • Virtual Attendant behaviors now automatically increment the key 'trigger.<id>.counter' in the Devblocks registry service. This counter can be read by custom criteria and actions to provide arbitrary sequence-based functionality. For example, to round-robin a sequence of 5 objects, the modulus of the counter's value by 5 will return a repeating range of 0-4, which can be used as index values for the sequence array. It is recommended to use this pattern for performance because it will not add any additional reads/writes to the registry in order to implement new counter-driven behavior.

Macro Parameters

  • Virtual Attendant macros now accept parameters. This allows you to create macros with greater reusability. For example, a macro that creates a task on a ticket could take parameters to specify the title and the due date which allows it to be used in more situations than a macro with hard-coded options.
    C570 va macros params.png
  • When scheduling behavior from a Virtual Attendant action you can now pass arbitrary values as parameters for any defined variables. This works exactly like it does on macros, improving reuse and enabling messages to be passed between behaviors in order to have a persistent state.
    C570 va macros params sched.png
  • [CHD-2682] Workers can now run group macros through the Virtual Attendant menu on Display Ticket. This removes a lot of redundancy since all group members can now share a single set of macros that are set up by the group manager. Each worker can still create their own macros in addition to the shared ones.
    C570 va macros params group.png
  • Virtual Attendant behavior variables can now be defined as public or private. When used as a macro, a public variable is exposed to workers as a parameter where they can choose the value. A private variable is never displayed and is to be considered for internal use only. For example, a macro to create a task could expose two public variables for the task name and due date; while a behavior to automatically assign workers would have a private variable for the assignee (since this is not something a worker would choose when using the behavior).
    C570 va macros params pubpriv.png
  • Virtual Attendant macros can now be invoked from bulk update with custom parameters.
    C570 va macros params bulk.png

Snippet Placeholders

  • Any Virtual Attendant action can now access the snippet placeholder toolbar by using the CSS class "placeholders" on any input:text or textarea form elements. With this single tag, the searchable token insertion menu and snippet tester button will be available when the field receives focus.
    C570 va snippet placeholders.png
  • Virtual Attendant behavior can now rewrite ticket subjects using placeholders. For example, under certain conditions the phrase "URGENT:" could be prepended to incoming ticket subjects.
    C570 va example subjecturgent.png
  • Virtual Attendant behavior can now set text-based custom fields using placeholder values.
    C570 va example cfield placeholder.png

Mail Filters

  • [CHD-2517] Responding to a message from mail filters will now use the first matching destination address as the 'From:' address. In the past, this functionality always used the default sender address, which could be confusing in multiple brand environments.
  • Fixed an issue that prevented testing snippet placeholders on Virtual Attendant mail filter behavior.
  • Snippet placeholders can now be used for 'To' and 'Subject' when sending or redirecting mail from Virtual Attendant filtering.


  • [CHD-2697] Fixed a bug in the Virtual Attendant 'relay to worker email' action that could result in a bucket's reply-to address being ignored.
  • [CHD-2715] In Virtual Attendants, the ability to drag around conditions or actions had a few usability issues. Previously you could drag conditions and actions by clicking and holding anywhere on their form, but this led to a lot of unintentional dragging. Now you can explicitly drag conditions from their bold heading, and the cursor will change to the 'move' icon when you hover over it. You can do the same with actions from the legend above their fieldset.
    C570 va misc drag.png
  • Added the ability to use group choosers in custom Virtual Attendant conditions and actions.
  • The /debug feature for exporting Virtual Attendant behavior now supports behavior variables.
  • The /debug feature for exporting Virtual Attendant behavior now displays human-readable labels for all conditions and actions. Comments are also added to the XML for worker_id with the full worker name.
  • Workers can now be notified when a Virtual Attendant behavior creates a comment.
    C570 va misc comment.png
  • [CHD-2514] Virtual Attendant behavior on the 'New message on a watched conversation' event can now access fields about the ticket owner.
  • [CHD-2653] Virtual Attendants can now send a notification to the dynamic 'owner' of a ticket-based or message-based record. Previously, notifications from behavior could only be sent to a predefined list of workers, which limited their flexibility.
    C570 va misc notify owner.png
  • Virtual Attendant behavior can now use conditions and actions based on the organization associated with a ticket. Previously, behavior had to rely on the organization associated with the initial or latest sender.
  • Fixed a bug with scheduling behavior from a behavior of the same type. If the scheduler was told to schedule only the 'earliest' behavior, it would usually be the behavior currently running instead of the one being added. The current behavior is now excluded from these comparisons.


  • Implemented a 'regexp' modifier for snippet placeholders. For example, {{ticket_subject|regexp('/New Order: (.*?)/', 1}} returns the first match of the given regular expression. The optional second argument specifies the match to be returned as determined by parenthesis. For example, in the regular expression "/((\d)(\w))/" on the text "4J" there are three matches: the first match is both \d and \w ('4J'), the second is exclusively \d (a digit; '4') and the third is exclusively \w (a word character, 'J'). This modifier supports the same options as PHP's preg_match() function. This modifier is especially useful when paired with the new Virtual Attendant custom variables feature in order to extract information from one field and save it as a new one.
    C570 snippets regexp.png



  • [CHD-2364] The 'From:' field on the 'Send Mail' page will now default to whatever group was previously used. This saves the tedium of constantly selecting a group from further down the list.
  • [CHD-2710] When using the Send Mail form, you can now compose a new ticket from individual group buckets. This allows you to use per-bucket reply-to addresses, and it saves the extra step for 'move to' at the bottom of the page. Using the 'Insert Signature' button will now load the bucket's signature if one is defined. This is also implemented for the compose popup.
  • [CHD-2707] Added a (w) keyboard shortcut on the Display Ticket page for toggling watcher status on and off.
  • [CHD-2640] The (r) shortcut on Display Ticket will now automatically click the 'Reply' button based on a worker's preferences (replying with or without quoting the original message). Previously this displayed a menu that allowed the selection of how to reply for each message. Using Shift+R as the keyboard shortcut will now show that menu.
  • [CHD-2718] Added two new keyboard shortcuts to the Display Ticket page: (T) take/assign, and (U) unassign. The 'take' shortcut is only available if the ticket is unassigned, and the 'unassign' shortcut is only available if the ticket is assigned to the current worker.
  • The ticket owner property is now always shown at the top of the Display Ticket page. If no owner is set it will display 'nobody'. Previously, the property was only displayed if an owner was assigned, and this meant to determine it was unassigned you had to look through every property and notice that 'owner' was missing. This is much less intuitive than always displaying the field in the same place and definitively stating that no owner is set.
  • [CHD-2724] Fixed an encoding problem on the full names of suggested recipients. These will now follow the encoding of the browser/database (e.g. UTF-8).



  • [CHD-2649] Implemented quick search for the tasks worklist on the Activity page. This is incremental, so it won't overwrite any non-title filters that are in effect.

Support Center

  • [CHD-2714] Fixed a bug that prevented sorting from working on the Ticket History list in the Support Center.
  • [CHD-2721] Fixed a bug in the Support Center where the 'Send Message' button could vanish permanently if a form was submitted without all the required fields.


  • [CHD-2706] Fixed a bug on the 'Created Tickets by Group' report that prevented the group names from showing up on the tabular subtotals.

Time Tracking

  • [CHD-2719] Fixed a bug that prevented the notes of a time tracking entry from showing up in the automatic comment left on the linked record. (Thanks to Robert Middleswarth for reporting the issue and providing a patch)
  • [CHD-2690] When adding a time tracking entry to a ticket, the entry will also be linked to the ticket's organization. In the event the ticket has no organization assigned then it will defer to the initial sender's organization. Prior to this change the initial sender's organization was always used the the ticket's organization was ignored.


  • Fixed a bug when saving a scheduler job that caused all the jobs to be run when clicking 'run now' (instead of just the specific job). This wasn't an issue when first loading the page, only after editing a job and then clicking the link.

Platform (Devblocks)

  • Implemented a registry service in Devblocks to provide persistence for arbitrary variables. It can be accessed using the DevblocksPlatform::getRegistryService() singleton. This service is designed to be efficient in high usage environments like Virtual Attendants. It will only read and write variables once per request. Delta updates are also supported using increment/decrement operations for variables like counters. Write-before-read is also supported, in situations where a value may be set or updated without a concern for its initial value; and when a delta value is read after being written it will automatically adjust to the initial+current value. This service is preferred for persistence if the data you're writing is arbitrary and write-intensive.
  • Implemented strVersionToInt() and intVersionToStr() utility methods. These convert versions between the formats '5.7.1' and '050701'. The latter integer version makes comparisons quicker and more efficient.
  • Devblocks will now track plugin version numbers instead of revision numbers. This allows simple version comparisons when looking for updated plugins.
  • Added the PclZip library by Vincent Blavet to Devblocks (LGPL licensed). This can be used to manage ZIP archives when the PHP 'zip' extension isn't installed. This will initially be used by the new browser-based plugin installer.

Maintenance Updates


Cerb5 (5.7.1) is a maintenance update released on January 25, 2012; it contains 8 minor fixes and usability tweaks from community feedback covering the recent 5.7 update. See these articles for upgrade instructions.

  • [Virtual Attendants/Variables] [CHD-2743] Fixed a warning log entry that occurs when editing certain behaviors that have no variables defined.
  • [Mail/Compose] [CHD-2744] Fixed a bug that prevented the 'From:' field on the Send Mail page from listing groups that had only an inbox and no other buckets.
  • [Mail/Compose] The custom fields for the Send Mail form will now be rendered properly for the default group/bucket.
  • [Mail/Virtual Attendants/Custom Fields] [CHD-2746] Custom fields on the compose and reply forms will now be applied first so that they are available to Virtual Attendant behavior. This allows VAs to make decisions based on selected custom fields, and it fixes the issue where changes that VAs made to custom fields were overwritten by any blank custom fields in the form provided by the worker.
  • [Setup/Groups] Fixed a minor glitch where the last group in the Manage Groups list was presented as the default group. The default should be 'Add Group'.
  • [Broadcast] Fixed a bug that prevented the 'Test' button from working on Broadcast functionality.
  • [Mail/Compose] [CHD-2734] Fixed another issue with the Send Mail form where workers who used it for the first time (i.e. prior to having a default preference) were unable to send mail if by chance they did not need to change the value of the 'From:' drop-down. If the drop-down was changed then everything worked as expected.
  • [Platform/Update] [CHD-2750] Fixed an issue during upgrades where the platform attempted to read plugin manifests before updating itself. This caused problems if the plugin schema in the platform changed (e.g. Cerb 5.7) and administrators attempted to upgrade from the /index.php page instead of the /update service. For now, any time the platform detects that the version has changed it will redirect to /update without reading plugin manifests first. As a consequence, every upgrade will log out sessions, but this shouldn't be a major problem since upgrades are infrequent in production.


Cerb5 (5.7.2) is a maintenance update released on March 13, 2012; it contains 23 minor fixes and usability tweaks from community feedback covering the recent 5.7 update. See these articles for upgrade instructions.

  • [Mail/Parser] The email parser will now check incoming attachments for a 'content-name' or 'disposition-filename'. Previously only the former was checked, and when an attachment only had the latter, and was text/plain, its contents were incorrectly appended to the message body.
  • [Search/Performance] Optimized the fulltext search indexing for messages and comments. Only the first 10KB bytes of message content will be indexed, and messages will ignore quoted content since this should be contained in the original message. This should make indexing long conversations much more efficient, and it should remedy the situation where workers or recipients quote the entire conversation every message and end up polluting the search index.
  • [Welcome] Added a link to the manual on the /welcome page.
  • [Virtual Attendants/Parameters] Fixed a warning with worker variables on Virtual Attendants when no workers are selected.
  • [CHD-2816] [Mail/Compose] Banned addresses will no longer be suggested as recipients when opening a ticket by organization.
  • [CHD-2788] [Mail/Tickets/Bulk Update] Workers can now bulk update the organization on ticket worklists.
  • [CHD-2779] [Mail/Worklists/Usability] In ticket worklists, the ticket move dropdown was changed to a chooser menu with a quick search box. This should make it much easier to select a specific bucket from a long list.
  • [Mail/Worklists/Usability] On ticket worklists, the 'm' keyboard shortcut will now open the move menu and focus the quick search box.
  • [CHD-2784] [Snippets/Usability] Added the two-step delete confirmation to the snippets popup.
  • [CHD-2792] [Mail/RSS/Security] Fixed an issue where RSS feeds for worklists were viewable for disabled workers.
  • [CHD-2754] [Plugins] Updated the built-in plugin manifests to version 5.7.2 from 5.6.x
  • [CHD-2764] [Reports] Date-based reports can now group charts by hour.
  • [CHD-2741] [Setup/Plugins] You can now search by name on the 'Installed Plugins' and 'Plugin Library' tabs in Setup.
  • [CHD-2766] [Reports] When hovering over a report chart, the value of a data point is now displayed in addition to the date and the label for the 'Group Replies over Date Range', 'Created Tickets by Group over Date Range', 'Closed Tickets by Group over Date Range', and 'Worker History over Date Range' reports.
  • [CHD-2627] [Mail/Parser] The parser will now treat 'message/rfc822' mime parts as attachments. These messages are sent as abuse reports, bounces, and forwarded messages. Their content will no longer be appended to the message body.
  • [Mail/Print] Fixed the broken default logos when printing tickets or messages.
  • [CHD-2807] [Snippets/Roles] Implemented role-owned snippets. This allows you to easily share snippets with multiple groups, arbitrary lists of workers, or everyone. Currently, only administrators can create or modify role-owned snippets, but any worker associated with the role can use them.
  • [CHD-2680] [Snippets/Worklists] Added a virtual column on snippet worklists for displaying the owner (worker, group, or role). This is also displayed on the snippet chooser.
  • [CHD-2680] [Snippets/Worklists/Search] Snippet worklists can now be filtered by owner. This also introduces a new multi-context autocomplete widget (selecting workers, groups, or roles).
  • [CHD-2808] [Snippets/Setup] Added a new Snippets management area to Setup. This allows administrators to create, view, and modify all snippets (regardless of owner) in a centralized place.
  • [CHD-2809] [Snippets/Worklists] Administrators can now bulk update owners and custom fields on snippet worklists.
  • [CHD-2827] [Snippets/Subtotals] Fixed a bug that prevented filtering snippet worklists by the 'plaintext' type from the subtotals sidebar.
  • [CHD-2826] [Mail/Filters] FIXED: Adding a wildcard (*) filter value on a header will match all messages, even those that don't contain the header.