Release announcements, helpful tips, and community discussion


Cerb (6.0) is a feature upgrade released on May 29, 2012. It contains over 239 new features and improvements from community feedback.

To check if you qualify for this release as a free update, view Setup » Configure » License. If your software updates expire on or after May 28, 2012 then you can upgrade without renewing your license.

Important Release Notes

  • Make a backup before upgrading.

  • The project now requires PHP 5.3 or later.

  • A new “Pages” feature has replaced workspace tabs. During the update, existing workspaces will be added to a new page for each owner (i.e. each worker, group, or role).

  • Custom plugins will need to be updated for 6.0 compatibility. Plugins that were installed through the Plugin Library can be updated to 6.0 from Setup->Plugins->Library.


  • Improved the colors, contrast, and stylization of the top navigation menu and page submenus.
  • Added a CSS3 drop-shadow effect to popups. This gives them more depth and makes it easier to tell there’s a floating window on top of the normal content.
  • Worklists now have gray titlebars when displayed in popups like choosers. This makes it easier to visually separate them from the blue popup window titles.

  • Tweaked the default date format to use a 12-hour clock with AM/PM rather than the 24-hour clock.





  • The app-wide approach for navigation and custom workspaces has been completely redesigned. Now instead of just being able to add new tabs to existing pages (i.e. custom tabs on Mail, Activity, Address Book), workers can create brand new pages. These pages can be owned by roles, groups, or workers; which simplifies the process of sharing a workspace. Previously, each custom workspace tab could have a different owner, but the tabs and worklists on a page now inherit the owner of their page, making it much easier to ensure that everyone using the workspace has access to all of its content.
  • Most of the built-in pages (e.g. Mail, Activity, Address Book) have been removed in favor of the new custom pages functionality, since a worker can now construct their ideal environment based on their specific duties. This means that pages that don’t concern a particular worker can now be completely removed from their menu to make room for more relevant things.

  • Each worker can now add or remove pages from their own global menu.

  • Pages that haven’t been added to a worker’s menu can still be accessed from a new pages worklist. A downward-pointing arrow icon is located at the of the menu bar. When clicked, this will display a list of all pages that the current worker can access. Clicking on a page in the list will display it. A ‘menu’ column is also provided to add any of these pages to the worker’s global menu. A quick search option helps find pages when the list gets crowded.

  • Custom workspace tabs from earlier versions will be automatically migrated to a new custom page for each owner that contains all of their legacy workspace tabs on it. This content can then be redistributed using the new functionality.

  • When displaying any custom page, a worker is given the option to add it to their global menu with a single click. Conversely, pages can also be removed from the menu in the same fashion.

  • A ‘transfer’ effect gives a visual indication of what happens when a worker adds something to their menu. A small box outline will move across the screen from the location being clicked and toward the menu when adding an item; and the same animation happens in reverse when removing an item from the menu. This remedies some early feedback where it wasn’t immediately clear to some people what happened when clicking the buttons that added menu shortcuts.
  • Workers can now mouse-drag pages around in their global menu to change their preferred order. This order can be different for each worker. The first page in the menu is treated as the default page. This addresses some long-time feedback where various people have requested the ability to replace the ‘Mail’ page with something else.
  • Workers can mouse-drag tabs around on custom pages to change their preferred order. The preferred order of these tabs is remembered for each worker. A worker can change the order of the tabs on any page they have access to, even if they otherwise can’t modify its contents. This allows a larger collection of workers to share the same pages, but modify them to suit their duties. On a page that displays mail, calls, and tasks, various workers may deal with one type of record more than the others.
  • The “Who’s Online” activity list is now shown at the bottom of every workspace page. This was inconsistently implemented before.


  • Snippet placeholders can now be used in search filters when there is a target object. This allows for some very interesting functionality. Virtual Attendants can search a worklist using any of the fields provided by an event or macro. Shared workspaces can use placeholders so a worklist like “My Overdue Tasks” can adapt depending on who is looking at it.
  • A ‘Current Worker’ placeholder is now available for all worker-based filters on shared worklists. For example, a group can now share a ‘My Assignments’ worklist that will reflect the assignments of the worker who is looking at it.
  • Worklist actions in the blue titlebar have been converted from text to icons. This takes up less space and is more visually appealing.
  • New records can be added while viewing any worklist. Previously you had to navigate to a specific page where the Add button was available. This makes custom pages more efficient to use because you can add various kinds of records from a single place.
  • If more than two watchers are searched for using filters in a worklist, the filter bubble will now report “Watcher is any of (3 people)” rather than listing out each worker. Hovering over the “3 people” text will show the names in a tooltip.
  • When hovering over the search filter bubbles, they will no longer resize and jump around the screen when the delete buttons become visible. From a usability standpoint, nobody likes a button to move as they get closer to it.

  • Setting an existing filter on a worklist will now automatically use the current options as a starting point rather than a blank form. This makes it much less frustrating to modify filters, especially when making small changes to complex options.

  • The search filters for all checkbox (boolean) fields will now be displayed as ‘yes/no’ instead of ‘0/1’.

  • Worklist actions that act on individual list items are now hidden until at least one row has been selected. For example, when looking at a ticket worklist, the buttons for close/spam/delete/move/merge won’t be displayed until you select something. This reduces visual clutter in the interface.
  • The parameters of new worklists will now start with contextual defaults when they are added to a workspace tab. Previously, a worklist of tickets would start with no parameters, which could lead to it trying to display the first page of millions of rows. Now tickets will default to open/waiting, tasks to ‘not closed’, etc.

  • A global ‘Search’ menu provides quick access to a worklist for any kind of object in the system. This is where we’ve migrated all the scattered default worklists from around the interface (e.g. Activity, Address Book, Datacenter). Plugins no longer need to implement a tab on these other pages. This makes it easy to quickly jump to the search results of any kind of object from any page within the app. You can also use the search page as a temporary worklist for any kind of object, and your preferences on that list will be saved.

  • On the profile page for all records, the tabs for ‘Comments’ and ‘Links’ will now show a count in a badge to the right of the tab label. When working with ‘Links’, the count will automatically update as links are added or removed.
  • Links can now be subtotaled on most worklists. This is a simple and very useful two-step process. When you first select the ‘Links’ it will subtotal all the contexts (e.g. org, ticket, task) that are linked with the objects in the worklist. After selecting one of those contexts, the most linked objects from that context will be subtotaled. For example, on an opportunity worklist you can subtotal by links to organization records, and then you can drill-down your results to specific organizations.
  • [CHD-2702] Worklists can now be filtered based on their links. For example, a worker can filter a worklist of Time Tracking entries to only those linked to a specific organization. A worklist can also be filtered to only show records that have no links at all.

Keyboard Shortcuts

  • Workspace keyboard shortcuts are now available even when multiple worklists are displayed within tabs on the same page. The keyboard shortcut will be sent to the first worklist with selected rows. If no rows are selected, then the worklist the mouse is hovering over will be used. If no list is being hovered over, then the first worklist is used. Worklists will receive a new ‘indirect’ parameter along with the keyboard event. A direct event is based on selected rows, and everything else is considered indirect (e.g. hover, default). This allows worklists to make intelligent decisions in trying to anticipate what a worker desired to do. For example, without any selected rows (indirect), pressing the ‘B’ key will focus the bulk update dialog. With selected rows (direct), the ‘B’ key will open the bulk update dialog. This process works for all keyboard shortcuts.


  • A new import service makes it much easier for any kind of object to provide bulk insertion and update functionality through uploaded import files (including objects that come from plugins). Previously import functionality was only available for addresses, organizations, and opportunities; and each one implemented it differently. Plugins can use the IDevblocksContextImport interface to take advantage of the new service.

  • Records can now be imported while viewing any worklist (right next to the export option). Previously you had to navigate to a specific page where the Import button was available.

  • The new import feature now allows fields to be set using a combination of imported file columns, placeholders, and literal text. For example, when importing opportunities a worker can manually set a ‘campaign’ custom field from the UI rather than having to edit the file before uploading it. This can also be more involved; the value for a field can be synthesized based on a combination of other values. For instance, when importing a large number of opportunities they can be marked as ‘closed/lost’ only if their last activity date is older than 60 days. This logic can occur during the import rather than when preparing the file.
  • The new import feature now provides contextual hints based on the type of field being set. For example, a checkbox field has options for ‘yes/no’, a date has a shortcut for ‘now’, and there’s a worker field shortcut for ‘me’.

  • The new import feature now provides a preview of the changes that will be made. This assists with fine-tuning the import configuration.

  • The new import feature is now more flexible in the values it accepts for different kinds of fields. For example, the values for a checkbox field can be ‘yes/no/true/false/y/n/t/f/0/1’. Workers can be provided as partial matches – e.g. ‘Joe’ will match ‘Joe Worker’.

  • The new import feature allows specific fields to be marked as ‘required’ or ‘force-match’. Required fields must be provided by the import file or synthesized. Fields that are force-matched will always be included when looking for existing records to update. For example, you never want to import the same email address in your address book, so that field is set to ‘force-match’. If an imported email address matches an existing contact then the existing record will be updated rather than a duplicate being created. In other situations, like opportunities, it is desirable to be able to have multiple opps with the same email address (e.g. in different campaigns).

Virtual Attendants

Worklist Variables

  • Virtual Attendants can now use their own worklists to gather information and make decisions. You can add list-based variables to VA behavior. VAs can populate these lists with a worklist-based chooser, and then use the results in conditions and actions. For example, with a ‘Task List’ variable, a VA can then search tasks using presets for ‘Overdue’ and ‘Watched by me’. The results can be filtered, sorted, and limited; and multiple lookups can be combined with addition (add to list), subtraction (remove these from list if they exist), and replacement (only use this list). For another example, you could use presets to set a worker list variable to ‘Admins’ and ‘Active within the past hour’. This variable could then be used instead of an explicit worker list when sending notifications, adding watchers, etc.
  • List variables can be used as conditions. This is a comparison of the number of objects in the list (e.g. greater than zero).
  • You can now use worker-based custom fields or list-based behavior variables in most Virtual Attendant actions. This allows you to create much more dynamic behavior instead of having to create pre-defined lists. For instance in the ‘Notify:’ option of a task comment you can select a custom field like ‘Assignee’. The behavior will always notify the current worker set in that field.
  • List-based behavior variables in Virtual Attendants can now be iterated in snippets using the {% for object in objects %} syntax of Twig. You can also perform array-based filters on them, like ‘length’ and ‘keys’.

Behavior Simulator

  • A new simulator tool allows Virtual Attendant behavior to be tested in a sandbox. This enables you to see how behavior will respond in any situation without having to test using live data. Click on any behavior and select ‘Simulate’ from the menu. The values used by conditions and actions will be initialized from a sample object. You can modify any combination of these values. The current time (as perceived by VAs) can be changed for testing time-dependent behavior (e.g. day, night, weekend). You can use the simulator popup in real-time while making changes to behavior. This should significantly improve the workflow of creating and testing VA behaviors.
  • When using the outcome editor on Virtual Attendant behavior, there are now ‘Save & Close’ and ‘Save & Continue’ buttons to make it easier to use the VA simulator. There’s also a simulator button to quickly launch it to test the current behavior.

  • When editing actions on a Virtual Attendant behavior, you can now choose between ‘Save & Close’ and ‘Save & Continue’. The former was the default behavior in the past, and the latter allows you to make changes to the actions and test them in the VA Simulator without having to constantly reopen the action editor popup.

  • The Virtual Attendant behavior simulator can now display output for actions to describes the changes that would have occurred. For example, a comment that’s created with placeholders will show the translated content, as well as the workers that would be notified about it. Plugins can take advantage of this feature by implementing the simulateActionExtension() method on devblocks.event extensions.

  • Implemented the Virtual Attendant simulator action for setting variables. This lets you easily preview the values being selected from your ‘set variable’ action.

  • A ‘simulator’ button is now shown in the action editor on Virtual Attendant behavior. This makes it easier to test the current actions. Repeatedly clicking the simulator button will generate new test data.

  • When list-based variables are defined, the Virtual Attendant simulator will now demonstrate how to use them as placeholders in actions. This includes an example of looping through a list, as well as all of the available fields.

  • When scheduling behavior on a record from the Virtual Attendant button, you now have the option of running the simulator using the current record. This will show you exactly what would happen if the behavior ran at that moment.


  • Improved the worker placeholders in Virtual Attendant behavior actions. Previously each placeholder was shown in a ‘bubble’ with a checkbox, but this used up a lot of screen space and looked messy. The placeholders and worker chooser are combined into a single ‘Add’ button that displays a searchable menu of fields. Bubbles are now only shown for the selected fields.

Scheduled Behavior

  • Virtual Attendant scheduled behavior can now be configured to repeat without relying on complex ‘behavior loops’. The frequency options are: every (interval), weekly, monthly, and yearly. For example, you can create a behavior to email at 8am every weekday morning with a TODO list based on your tasks, and a schedule based on your calendar. You could also create a behavior that emails you an hourly summary of your unread notifications.
  • Virtual Attendant behavior can now be scheduled relative to any dates found on a record. This also includes custom field dates. For example, you can schedule a reminder for “2 hours before task is due” or “1 day before calendar event starts”. Previously you could only schedule behavior using either absolute dates or dates relative to the current time.
  • When editing an object that has scheduled behavior on it, any relative dates (e.g. “4 hours before task due”) will be rescheduled if those dates are changed. For example, if you change a task’s due date from 8 hours in the future to 12, then a scheduled behavior of “2 hours before due date” will move from 6 hours in the future to 10 hours.

  • In Virtual Attendants, behavior can now be scheduled on related records from a macro. For instance, from a ticket macro you can schedule behavior on records like its organization, sender, and owner.

  • In Virtual Attendants, behavior can now be scheduled for each object in arbitrary list variables. For instance, on an organization macro you can create a list of addresses and schedule a macro to run on each of them from the same action.

  • You can now unschedule behavior from related records in Virtual Attendant actions. For instance, you use an address macro to remove schedule behavior from all of a sender’s tickets.

  • Implemented the ability to schedule and unschedule behavior on opportunity events and macros.

  • Administrators can now view and modify everyone’s scheduled behavior from Setup.

  • An administrator can now use their own custom behavior when scheduling behavior on another worker’s profile. Previously the ‘Virtual Attendant’ button always showed the VA for the worker whose profile it was (which can be accessed using the ‘impersonation’ feature).


  • Added a new Virtual Attendant event for ‘custom worker behavior’. This allows you to create worker-based macros that can be added to workers from their profile. For instance, you can use a worker macro to send someone a reminder of all their overdue tasks.

  • Administrators can run ‘custom worker behavior’ macros on workers from their profiles.

  • Roles can now create custom behavior macros for all record types.


  • Implemented a new Virtual Attendants section in Setup. You’ll find it in the Configure menu. This page enables administrators to view and configure all VA behavior from a single place regardless of owner. A text box at the top of the page helps quickly locate the desired roles, groups, or workers. Selecting an owner will add a new tab to the page with their Virtual Attendant behavior.
  • The ‘Add Watchers’ action in VA behavior can now use a worker list variable for the watchers to add. It can also use any list variable for the records to add the watchers to (opposed to the current record). For instance, an org macro could use this functionality to add a list of watchers to every ticket from the current organization.

  • The ‘Create Comment’ action in VA behavior can now use a worker list variable for the ‘notify workers’ option. It can also use any list variable for the objects to comment on (opposed to the current object). For instance, a ticket macro can comment on the oldest tickets that are at risk of breaking a service level guarantee, and the workers to notify could be group managers who are currently logged in.

  • The ‘Create Notification’ action in VA behavior can now use a worker list variable for the people to notify. It can also use any list variable for the objects to link the notification to (opposed to the current object). For instance, a task macro can send notifications to the current worker about all their overdue tasks (this could also happen at every login).

  • The ‘Create Task’ action in VA behavior can now use a worker list variable for the watcher and notification options.

  • Watchers can now be added when creating a ticket from a VA macro. The watchers can come from a list variable on the behavior.

  • When creating a ticket from a VA macro, it will now be linked to the current object if one exists. For instance, if creating a ticket from an organization macro.

  • Snippet placeholders can now be used in the ‘recipients’ field when creating a ticket from VA behavior.

  • Placeholders can now be used in the ‘To’ and ‘Subject’ fields with the Send Mail action in VA behavior.

  • The Send Mail action in VA behavior can now include any address list variables in the ‘To’ field. For instance, from an org macro you can look up any addresses associated with the org (and save them to a variable), then send them the same message.

  • In Virtual Attendant actions, watchers can now be added using worker-based custom fields.

  • In Virtual Attendant actions, watchers can now be added to related records. For example, from an organization macro watchers can be added to all the members of that organization.

  • In Virtual Attendant actions, comments can now be added to related objects. For example, from an opportunity macro you can set a comment on the address record of the lead.

  • In Virtual Attendant actions, notifications can now be sent for related objects. For example, if you wanted to draw attention to all the open tickets from a particular client, you could use an address or organization macro to send a notification to the owner of each of their open tickets. This can now be done from a single reusable macro.

  • In Virtual Attendant actions, tasks can now be created for related objects. When creating a task on a list-based behavior variable, a task will be created for each object. Task notifications and watchers can be set using list-based behavior variables or worker-based custom fields. Implemented simulator output for the create task action.

  • In Virtual Attendant actions, tickets can be linked to list-based behavior variables.

  • In Virtual Attendant actions, mail can be sent to address list-based behavior variables. This allows you to search for a particular list of addresses and email them all in a single macro.

  • [CHD-2801] Virtual Attendants can now make decisions based on the mail ‘reopen’ date field (aka: wait until). For example, one use case is to notify workers when they send a reply with an indefinite ‘waiting for reply’ status.

  • Virtual Attendants can now use the watchers of an object to make decisions or run actions. The watchers on linked objects are also available. For instance, when a feed item changes, the watchers of its feed can be notified. Likewise, when an opportunity event happens, the watchers of its email address (or org) can be notified.

  • Notification worklists can now be managed by Virtual Attendants. For example, your VA can send you an hourly email report of your unread notifications.

  • Virtual Attendants can now manage worklists about groups and save the results to list-based variables for use in conditions and actions.

  • Notifications can now be created from Virtual Attendant behavior with arbitrary URLs. Previously you could only link notifications to a record (e.g. worker, task, ticket). Now you can provide the most appropriate URL for the notification. For example, when dealing with list variables you can direct the worker to a worklist rather than an individual record.

  • Added a ‘watcher count’ condition to all Virtual Attendant behaviors. This can also check if linked records have watchers – for example, a ticket-based event can check for watchers on the ticket, ticket’s org, sender, or sender’s org. This uses the efficient new lazy-loader, so if watchers aren’t required for a particular behavior then they aren’t retrieved from the database.

  • Added a new ‘Application’ owner for Virtual Attendant behavior. This allows administrators to set up global behavior that doesn’t trickle down to workers like role-based ownership does.

  • Implemented a new ‘task created by worker’ event for creating Virtual Attendant behavior. This is only available to application-owned behavior configured by administrators in Setup->Virtual Attendants. This can be used to send notifications about new tasks when no watchers exist.

  • Implemented a new ‘mail conversation viewed by worker’ event for creating Virtual Attendant behavior. This can currently only be configured by administrators in Setup->Virtual Attendants. This can help solve a common feature request where mangers want to be able to track the last time a conversation was viewed by any worker. You can add a ‘last viewed’ date to tickets as a custom field and then use this event to have the custom field value set by a Virtual Attendant each time a ticket is displayed. When filtering worklists by this custom field you can create ‘unread’ functionality.

  • Added the ability to create custom group behavior. These macros can be run or scheduled from group profiles. For example, a group behavior could look for ‘idle’ tickets in the group’s buckets (e.g. owned tickets needing a worker reply for more than 4 hours). A custom ticket behavior can be scheduled on each idle ticket, which might notify their respective owners.

  • When creating Virtual Attendant behavior, placeholders can now be used when setting a value on a date field. This is now displayed as multi-line textarea rather than a single-line input in order to make it easier to use template scripts to construct the date value. For example, you can use a template script to choose a due date for a new ticket according to complex business rules involving business hours (e.g. if after end of business, schedule the overage from the start of business tomorrow; if Friday, schedule from the start of business on Monday). This reduces complex decision trees to a simple date field.



  • Implemented a reusable calendar that supports events, recurring schedules, active/busy status, etc. A scheduler job creates ongoing future events based on recurring schedules.
  • Added a calendar tab to each worker profile.

  • Worklists can be created for calendar events.

  • Added a ‘custom calendar behavior’ event for Virtual Attendant behavior. This allows you to make macros for calendar events.

  • Calendar event worklists can be used as Virtual Attendant behavior variables.

  • Implemented a virtual ‘owner’ field for calendar worklists. This can be used as a column, search filter, or subtotal.

  • Implemented a ‘Calendar Availability’ search filter for building worker lists. This returns workers who are either available or busy over a given time period (as determined by their calendar). This is especially useful when combined with Virtual Attendant behavior – for example, to automatically dispatch assignments, or notifications, based on availability.

  • Implemented a profile page for calendar events. This provides a space for comment conversations and Virtual Attendant scheduled behavior.

  • Scheduled behavior for a specific event is shown on the calendar popup.


Worker Profiles

  • Worker profiles now show the list of properties and custom fields at the top of the page.

  • Comments can now be added to worker profiles. This provides a way to ask someone a question, or give them an assignment, without relating the message to a specific record.

  • A new ‘Scheduled Behavior’ tab has been added to worker profiles. This allows a worker to see all their pending scheduled behavior in one place.

  • The pending scheduled behavior panel is now displayed on worker profiles. This makes it easier to see what behavior will run in the near future.

  • Notifications will now be summarized and marked read when directing workers to other workers’ profiles. For example, a Virtual Attendant could send a notification to a group manager for each member with overdue tickets. These notifications would link directly to a worker’s profile to make it easy for the manager to review their activity log and assignments.

  • When commenting on a worker they will automatically be added to the notify list. When commenting on a group, all members will be added to the notify list. In either situation a quick ‘clear’ link is provided to reset the list so you can choose your own list of people to notify when desired.

Group Profiles

  • Group profiles have been given a much needed makeover. The properties and custom fields are displayed at the top of the profile. Group managers can edit basic information directly from the profile. There are several aesthetic improvements.

  • Comments can now be added to group profiles. This provides a quick way to direct the attention of an entire group to something, or to ask a question that any member could answer.

  • Group-owned Virtual Attendant behavior can now be run and scheduled from the group profile page.

  • Notifications can now point to group profiles.

  • Group profiles now have a Scheduled Behavior tab that is visible to group managers. This shows all the behavior scheduled on various objects by the group. There is also a summary at the top of the profile of any behavior scheduled on the group itself.

  • Managers can now modify grouped-owned Virtual Attendant behavior from the group’s profile page.

  • Managers can now manage group-owned snippets from the group’s profile page.

Quick Search

  • The newly remodeled Quick Search functionality now provides much more flexibility. Previously you could only search a few hand-picked text fields; now you can search text, date, number, checkbox, worker, picklist, and multi-checkbox fields – including all custom fields. Additionally, quick searches will now add or change filters rather than resetting them. If you quick search on any field with a blank value it will be cleared.
  • When using Quick Search on numeric fields, you can now prefix search terms with != (not equal to), >, <, >=, and <=. For example “# nonspam > 5”.

  • When using Quick Search on textual fields, you can now prefix search terms with ‘!’ (exclamation) for negation. You can also use an ‘’ (asterisk) for wildcards. These can be combined, for example: “subject: !spam”.

  • When using Quick Search on date fields, you can now specify a range of dates using the word ‘to’. For example: “-5 days to +10 months”. If you only specify a single date, ‘now’ will automatically be included as the second boundary. If your date is in the future then ‘now’ will be the lower boundary (i.e. from date), otherwise ‘now’ be added as the upper boundary (i.e. to date).

  • When using Quick Search on checkbox fields, you can enter true/yes/y/t/1 or false/no/n/f/0. When searching for false checkboxes on custom fields, an “is blank or false” operator will be selected for you automatically to include checkboxes that aren’t set at all.

  • When using Quick Search on pick list and multi-checkbox fields, you can now specify multiple terms by separating them with commas. You can prefix your search terms with ‘!’ to negate your search (e.g. list does not include these terms). You can also specify terms by entering their first few characters, for example “v.i.p, prior” would match ‘V.I.P.’ and ‘Priority Support’ in a picklist custom field for Service Levels.

  • When using Quick Search on worker or watcher fields, you can now specify multiple people by separating them with commas. You can prefix your search terms with ‘!’ to negate your search (e.g. watchers does not include these workers). You can specify workers by entering a few characters from their name, for example “Jeff, Da” would match ‘Jeff’, ‘Dan’, and ‘Darren’. You can also specify ‘me’ as a shortcut for yourself.

  • Quick Search will now remember the last search field used based on the type of worklist. This means if a worker quick searches a ticket worklist based on ‘mask’, the next time they pop-up a ticket chooser it will also default to searching by mask. Additionally, choosers will now auto-focus the quick search text input box rather than the picklist of fields. This should save several steps in many workflows.


  • The new Quick Search functionality is now displayed on all choosers. This should make choosers much more usable by reducing the number of clicks needed to filter their worklists.
  • The extra ‘Add Selected’ step on choosers has been optimized away. Now you can simply click on rows in a chooser to select them, and you can click them again to deselect. This behavior is consistent even when making selections across multiple pages in a chooser.

  • The customize, subtotals, and refresh actions can now be performed on chooser worklists.

  • Choosers now automatically remove unnecessary controls from their worklist (e.g. toolbar, export, RSS). This should solve issues with the choosers for some objects falling behind compared to the normal worklist, since choosers no longer require their own template. This also makes it easier for plugin developers to add new choosers.

  • The default filters on ticket choosers have been improved. The groups have been moved to a required filter so they’re hidden and don’t take up space. The watcher filter that’s added by default now properly selects the current worker, instead of drawing a blank filter bubble.



  • Attachments are now added to mail replies using a file chooser. This allows the future functionality of selecting frequently used attachments from a library. This would drastically reduce the storage requirements for processes that send a lot of duplicate attachments; e.g. marketing materials, forms, etc.

  • When forwarding a message from an existing conversation, the attachments of the original message will be ‘linked’ to the new message. No matter how many times you forward a file with attachments, there will only be a single copy of those files in storage.


  • [CHD-1855] Saving a draft while composing mail from the new peek popup will now save everything: message properties, custom fields, options, and file attachments.

  • [CHD-1832] Saving a draft while writing a reply on an existing conversation now also saves custom fields and attachments.

  • Draft worklists can be added to workspaces.

  • Drafts can be used as list variables in Virtual Attendant behavior. For example, a VA could be instructed to send a daily email reminder about unsent drafts.


  • New tickets can be created from any ticket worklist. This replaces the ‘Compose’ button on the mail page, so when you need to create a new ticket you can click the green ‘+’ icon in the nearest ticket worklist (e.g. on one of your workspaces).

  • Merged the mail compose page with the peek popup. The popup for creating tickets now supports all the standard functionality: custom fields, org linking, to/cc/bcc, recipient suggestions, attachments, etc.


  • [CHD-2852] Added a ‘# messages’ column to ticket worklists which contains the number of messages in the conversation. This can be used in filters and Virtual Attendant conditions.
  • [CHD-2851] Ticket worklists rows can now be displayed on one or two lines. If an explicit ‘subject’ column is added to the worklist then rows will be on one line. Otherwise the default is to display rows on two lines with subject having its own full-width line. This is mostly useful if you have a large monitor with lots of horizontal screen space.

  • On the mail conversation profile page, the tags that denote messages as sent, received, comment, or sticky note, have been stylistically improved. The font size is smaller and the colors offer better contrast. This provides a more modern look.

  • When displaying a mail conversation, the ‘Date:’ header is now always displayed using the current worker’s timezone. The original timestamp in the sender’s timezone can be displayed from a tooltip by hovering the mouse over the the relative time to the right of the date (e.g. “2 hours ago”).

  • [CHD-2057] New tickets can be created with the ‘Create & Link’ option from the ‘Links’ tab on any profile.

  • When using ticket worklists, the ‘more>’ button has been removed. Its options (e.g. merge, waiting) are now available with a single click.

  • The ‘In Groups of Worker’ filter on mail worklists can now use the ‘Current Worker’ placeholder. This allows you to make a shared worklist that is dynamically constrained by the group memberships of the worker looking at it.

  • Added a ‘ticket is deleted’ filter to message worklists.


  • The REST-based Web API now authenticates using an access key and secure signature derived from a secret key. Previously, workers entered their own email address and password to use the API, which was poorly designed from a security standpoint. Even though the password wasn’t transmitted, it was exposed in the various apps and services where the API was used. Workers can now create any number of API credentials. These credentials can be restricted to only specific REST requests; for example, an API credential may only be valid for performing address book lookups, posting sensor updates, or importing opportunities. If these credentials are compromised then the potential for abuse should be far less severe than exposing a worker login (especially if that worker was an administrator). Approved requests will continue to run with the permissions of API credentials’ owner. These new options can be found on the new ‘API Credentials’ tab on the worker settings page when the Web-API plugin is enabled.


  • Improved the performance of custom field lookups. Previously, all custom field database tables were blindly checked for values. Now we’ll only scan the tables for the custom field types applicable for a given object. For example, if an object type (e.g. tasks) only has a string custom field, the ‘number’ and ‘clob’ tables won’t be checked. If no custom fields are defined for an object then lookups are bypassed entirely. This reduces the number of queries made to the database.

  • Combined the multiple custom field value lookup queries into a single UNION ALL query. This reduces the number of queries and roundtrips to the database server while serving requests.

  • Fixed an issue where the notification count cache was cleared every time a notification list was displayed on a record; even if the list was blank and nothing was marked read.

  • Removed all uses of PHP’s create_function() since it doesn’t free memory until the script execution completes. The function was used excessively for sorting arrays of objects with arbitrary comparison functions, since closures weren’t available with our original minimum supported PHP version of 5.2. In high-load environments (many VAs and many mail parses), or low-memory environments (VMs), this could contribute to out-of-memory errors.

  • Implemented ‘lazy loading’ for placeholders in snippets and Virtual Attendant behavior. Previously we used ‘eager loading’, where values for all the possible placeholders were preloaded even if they weren’t used. This inefficiently utilized server resources (cycles, memory, queries). Now, for example, if you don’t need the watchers or custom fields on a ticket then they won’t be retrieved. Once values are loaded in VA behavior, they can be reused by future conditions and actions without any additional lookups. The lazy loader is also capable of cascading lookups; for instance, if you request the custom fields of an email address’s organization prior to using information about the email address, the system will load the intermediate objects. Another positive consequence of this change is that we can make more information available as placeholders since the performance impact should be minimal.

  • Requesting a single ‘worker role’ object was performing a database lookup each time, and now it will properly use the cache. This was generating several superfluous queries when displaying worklists that have an owner column with a role, group, or worker (i.e. each row that contained a role-based owner was doing a new database query).

  • Fixed the issue where worklists inside a workspace were loaded twice. Those pages should now load dramatically faster.

  • Fixed a bug in subtotals functionality that duplicated the packets being sent to the server when a subtotal link was clicked (as opposed to the row whitespace around the link). This generated an extra HTTP request and the consequent queries against the database. Even though this was discovered serendipitously, and most environments probably never noticed the wasted cycles, the performance improvement appears perceptible.


  • [CHD-2146] Added a ‘signature’ snippet placeholder when replying to mail from broadcast. This will use the appropriate group or bucket signature for each ticket.

Time Tracking

  • Time tracking worklists will now display time spent in whole minutes or hours rounded to two decimal places (e.g. 5 minutes or 4.25 hours).
  • Improved the look and feel of the floating timer in Time Tracking. It now has rounded corners, a slight gradient, and a drop shadow. It also takes up less space vertically, and it hovers in the top right corner rather than the middle of the page.
  • The Time Tracking plugin now adds a timer button to every profile page (including those from plugins). This provides the ability to start tracking time from any object. Previously this was only implemented for tickets, tasks, and opportunities.
  • Removed the concept of ‘rates’ (billable/non-billable) from Time Tracking activities because it was never used anywhere. This could be reproduced with a simple custom field.

  • The ‘activity’ field can now be subtotaled on Time Tracking worklists.


  • [CHD-2857] Reimplemented the version check that determines when to run the /update process for upgrades. Previously the last known version was cached, but if this was stored in memory (like Memcached) then the application would think it was being updated every time the cache was cleared. Since Memcached isn’t persistent (compared to Membase/Redis), this also meant that Cerb could go into update-mode every time the server was rebooted. The last known version is now stored in the filesystem, until we have a mechanism for determining that other forms of caching have persistence.

  • The email parser can now be instructed to save a copy of all incoming messages prior to processing them. The original message source for each message is saved in the /storage/mail/archive/ directory and organized by subdirectories for year, month, and day. This mode can be enabled by defining the DEVELOPMENT_ARCHIVE_PARSER_MSGSOURCE constant as ‘true’ in the framework.config.php file. This is useful if you want to keep a record of processed messages for audit control, backups, or if you want to recover the original sources for troubleshooting.


  • When displaying a knowledgebase article from peek or the HTML editor preview, the content will now be properly stylized.

  • When clicking the Knowledgebase button during a mail reply, an article chooser popup will now be displayed.


  • Removed some older reports because their functionality can be completely replaced by worklists and functionality like subtotals: currently open tickets, waiting tickets, oldest open tickets, and ticket assignments.

  • Reports with worklists can now be filtered or subtotaled.

  • Reports with data tables will now display them in a grid format that allows for easier comparison.

Plugin Development

  • Profiles are now a reusable service that is available to plugins. They provide a permalink location to display detailed information about a particular object, as well as several conveniences. This should remove the need to create a page controller for many plugins that implement custom record types.

  • Peek popups are now handled abstractly by the platform. This makes it easier to implement functionality like ‘Create & Link’ which opens a peek popup for any object type (e.g. ticket, task, opp). Previously this was implemented separately by each kind of object which made things difficult to work with. Now it’s also simple to have ‘Add’ buttons for these records displayed anywhere in the UI.

  • When using Devblocks’s genericAjaxPopup() call, you can now specify the $target argument as ‘reuse’ to have the same position used for the new popup if the old popup hasn’t been closed yet. Popups are considered duplicates if they have the same $layer.

  • Implemented a new DevblocksPlatform::sortObjects($array,$by,$asc) method which is capable of sorting objects by arbitrary members at depth. The $by parameter can also mix and match members and array keys – for example, you can sort on $obj->model->params[‘key’] with $by = “model->params->[key]”.

  • Implemented ‘date_pretty’ and ‘bytes_pretty’ filters for placeholders. The former converts a timestamp to human-friendly strings like ‘4 days ago’, and the latter converts a number of bytes to a KB/MB/GB/TB/PB representation with the specified decimal precision.

  • Implemented DevblocksCalendarHelper for generating recurring dates with patterns (daily/weekly/monthly/yearly). The sequence of dates can be terminated by an ending date or a maximum number of projected dates.

  • Converted the URLs of Activity Log entries to an abstract format of “ctx://context:id/permalink”. The proper URLs can be generated as needed, which makes the data more portable if the app is relocated or internal paths change.

  • Context extensions can now implement the IDevblocksContextProfile interface to provide an efficient URL to their profile display page via profileGetUrl(). This is used in place of getMeta() which is more expensive to call because it often requires a database lookup per object.

  • Any worklist can implement intelligent keyboard shortcuts by listening for the ‘keyboard_shortcut’ jQuery event. This event is generated by Devblocks and the worklist will receive it regardless of where it is located in a search or workspace page. The default shortcuts for subtotals and filtering are implemented automatically, so a worklist only needs to handle its own shortcuts (e.g. explore, bulk update).

  • Implemented ‘Quick Search’ as a platform service in Devblocks. This means all object types, including those from plugins, can implement quick search functionality without any custom code.

Extension Points

  • Implemented a new extension point ( for adding tabs to profile pages. This single extension point can add a tab to any combination of profiles pages, where previously each profile page had its own extension point. Wildcards () can also be used to match patterns when providing the desired profiles. Specifying ‘’ will add the tab to the profile page for every record type. An example plugin is provided in the SDK under ‘example.profile_tab’.

  • Added a new extension point (cerberusweb.ui.context.profile.script) that allows arbitrary scripts to modify profile pages. For example, this can add buttons to toolbars – but it can also do more interesting things like modifying existing content. This extension point replaces the itemized ‘toolbar item’ extension points for things like tasks and tickets.

  • Implemented a new extension point ( for creating workspace tabs with completely custom functionality. Rather than just containing a set of worklists, a tab extension could display a dashboard of reporting metrics, etc. This extension point is currently used to provide a ‘Knowledgebase Browser’ tab that can added to any page.

  • Implemented a new extension point ( for creating custom page types. A custom page can display any kind of content, and otherwise such pages are seamlessly integrated with workspace-based pages. For example, the reports plugin now implements a custom workspace page to display reports – which is useful, since the format of reports is outside the typical “workspace of worklists” pattern.


  • Added a new SDK example for implementing custom workspace pages using the ‘’ extension point.

  • Added an SDK example plugin ( for demonstrating how to make new workspace tab types.

Maintenance Updates


Cerb6 (6.0.1) is a maintenance update released on June 13, 2012; it contains 27 minor fixes and usability enhancements from community feedback covering the recent 6.0 update. You can follow these instructions to upgrade.

  • [Quick Search/Localization] FIXED: Using quick search on fulltext fields doesn’t Romanize the query.

  • [SDK/Plugins] Added a new example plugin to the SDK for demonstrating a community portal extension.

  • [CRM/Opportunities/Subtotals] Fixed an issue that caused inaccurate subtotal counts for opportunity custom fields.

  • [Addresses/Popup/Usability] Added a shortcut to the address peek popup for ‘similar’ senders. This appears to the right of the email address and it will open a new browser tab to display an address worklist with people from the same host domain. For example, if you click ‘similar’ for, you might see a list with and This makes it much easier to associate people from the same domain with the same organization while performing routine duties (e.g. sales, marketing, support).

  • [Mail/Parser/Localization] Fixed an issue with the mail parser where Japanese messages would fail if they had ‘Content-Type: ISO-2022-JP’ in the headers but the message content contained ISO-2022-JP-MS encoded characters (such as ‘circle 1’, U+2460).

  • [Devblocks/Platform] Updated Twig template engine dependency from 1.7-dev to 1.8.2-release.

  • [Snippets/Custom Fields] Fixed an issue with the snippets lazy loader where custom fields and watchers weren’t always loaded for the root context. This was most prevalent in worker signatures that used custom fields.

  • [Peek/Custom Fields/Usability] When setting a worker-based custom field, there are now shortcut buttons for ‘me’ and ‘nobody’.

  • [CRM/Opps/Virtual Attendants] Fixed a bug where applying Virtual Attendant behavior to an opportunity profile page ended up redirecting to a deprecated URL (making the contents appear blank).

  • [Orgs/Merge] [CHD-2946] Added a ‘merge’ action to organization worklists. If any rows are selected then they’ll be the initial organizations selected to merge. You can select a single organization and then use the autocomplete or chooser to locate a dupe that is not named similarly.

  • [CHD-2865] [Notifications/Usability] Notifications about sticky notes are now marked as read upon being clicked.

  • [CHD-2886] [Mail/Parser] Invalid ‘From:’ addresses will no longer cause incoming mail to be discarded. Instead these messages are moved to storage/mail/fail. The parser now makes a distinction between ‘return NULL’ (e.g. banned, VA behavior, blackhole) and ‘return FALSE’ (unanticipated errors).

  • [CHD-2919] [Virtual Attendants] VA Scheduled Behaviors will no longer fatally error when a behavior sets nonexistent workers as watchers.

  • [Groups/Usability] For usability, the tabs for ‘Virtual Attendant’, ‘Scheduled Behavior’ and ‘Snippets’ have been added back to the Group config page, as well as their profile page. The redundancy will be cleaned up when we phase out the Group config pages in favor of profiles.

  • [Reports] [CHD-2848] Added a ‘weeks’ grouping option to all the reports that support date ranges.

  • [CHD-2784] [Impex/Import] Registered Contacts are now properly imported.

  • [CHD-2858] [Support Center/OpenID] The images on the OpenID login screen in the Support Center now display properly, even when the OpenID plugin is not installed.

  • [CHD-2945] [Virtual Attendants/Actions] Watcher options will no longer display disabled workers.

  • [CHD-2941] [Gravatar] Fixed Gravatar URLs to use a secure connection when Cerb is using SSL (Thanks to Michael Pasqualone for noticing the issue and providing a patch).

  • [CHD-2926] [Web-API] Fixed comment retrieval via the REST API (Thanks to Michael Pasqualone for reporting the issue).

  • [CHD-2917] [Plugin Library] Attempting to update or install a plugin from the Plugin Library will now display an error if the cURL extension is not installed in the PHP environment.

  • [CHD-2906] [Virtual Attendants] The spam score of a ticket can now be compared against decimal values in search and Virtual Attendants.

  • [CHD-2860] [Parser/HTML] ‘br’ tags with attributes are now stripped when HTML parts are converted to plaintext.

  • [CHD-2859] [Parser] The parser now skips *.msg files without read+write permission.

  • [Notifications/Subtotals] Fixed an issue with subtotaling a notification worklist by URL. Clicking the links didn’t add the proper filter.

  • [Workers/Signatures] Disabled worker accounts will no longer be included in the results when testing new signatures or Virtual Attendant behaviors.

  • [CHD-2959] [Mail/Subtotals] Fixed an issue with subtotaling a ticket worklist by status. Clicking the totals didn’t properly set the filter.


Cerb6 (6.0.2) is a maintenance update released on June 28, 2012; it contains 28 minor fixes and usability enhancements from community feedback covering the recent 6.0 update. You can follow these instructions to upgrade.

  • [CHD-1478] [Support Center/Attachments] Customers can now include attachments on replies that originate from the Support Center.

  • [Setup/Attachments/Quick Search] Added Quick Search to the attachments worklist in Setup->Storage.

  • [Setup/Storage/Profiles/Search] Added search filtering and Quick Search functionality to storage profile worklists in Setup->Storage.

  • [Profiles/Scheduled Behavior/Search] Added Quick Search functionality to scheduled behavior worklists on profiles.

  • [Prefs/Web-API/Search] Added Quick Search functionality to Web-API credentials on the worker preferences page.

  • [Worklists/Quick Search] Added a search icon to the top of every worklist. This displays a quick search popup that can be used to filter the worklist, which is especially useful in situations (like workspaces) where the default quick search option isn’t displayed due to space constraints.

  • [Mail/Profiles/History] The ‘Recipient History’ worklist on ticket profiles is now filterable and searchable.

  • [CRM/Search] The ‘Opportunities’ tab worklist on ticket and organization profiles is now filterable and searchable.

  • [Orgs/People] The People worklist on Organization profiles is now filterable and searchable.

  • [Address Book/Mail] The Mail History tab on Address and Organization profiles is now filterable and searchable.

  • [Contacts] The ‘Email Addresses’ and ‘Mail History’ worklists on Contact Person profiles are now filterable and searchable.

  • [Activity Log/Code Cleanup] Fixed an issue in the Activity Log that displayed an error when a referenced context no longer existed (e.g. its plugin was disabled or uninstalled).

  • [Setup/Plugins/Usability] Added shortcuts to the Setup->Plugin menu for ‘Installed Plugins’ and ‘Plugin Library’. This reduces the extra click that was required by selecting ‘Manage Plugins’ then selecting a tab.

  • [CHD-2970] [Maintenance] FIXED: “DELETE QUICK workspace” SQL fails in maintenance mode.

  • [CHD-2732] [Mail/Usability] FIXED: Place input focus on ‘To:’ field when forwarding a message.

  • [CHD-2881] [Snippets/Mail] FIXED: Snippets owned by a role don’t show up in quick search while replying.

  • [CHD-2924] [Workspaces/Pages] FIXED: The tab title doesn’t update when edited from the popup unless you refresh the entire page.

  • [CHD-2944] [Virtual Attendants/Mail] Added an action for setting the reopen date of tickets in Virtual Attendants behavior.

  • [CHD-2966] [Profiles/Mail/Usability] The ticket profile page will no longer persist the selected tab. This was preventing the page from resetting to ‘Timeline’ when opening a different ticket.

  • [CHD-2955] FIXED: Error log entries with “devblocks_property_store” cache file missing.

  • [CHD-2950] [Mail/Worklists/Piles] FIXED: Using the pile sorter on a ticket worklist sends the worker to the non-existent /tickets page on completion.

  • [CHD-2967] Suppressed a PHP E_NOTICE related to rare situations of checking custom fields from Virtual Attendant behaviors.

  • [CHD-2976] [Virtual Attendants/Simulator/Group] The ‘send reply to recipients’ action doesn’t have simulator output. This applies to Ticket and Message events.

  • [CHD-2974] [Profiles/Contact Person] Fixed an issue where the ‘edit’ button disappeared on Contact Person profiles after clicking the watcher button.

  • [CHD-2891] [Workspaces/Usability] Worklists will now reset to the first page when adding filters, subtotaling, or customizing.

  • [CHD-2979] [Knowledgebase/Usability] FIXED: Clicking the ‘+’ to add a new article from a knowledgebase worklist starts in preview mode rather than an editor.

  • [CHD-2983] [Virtual Attendants/Macros] Allow all custom behavior macros to be owned by groups or roles.

  • [CHD-2978] [SDK/Reports] Added an example plugin to the SDK that demonstrates how to build new reports.


Cerb6 (6.0.3) is a maintenance update released on August 2, 2012; it contains 16 minor fixes and usability enhancements from community feedback covering the recent 6.0 update. You can follow these instructions to upgrade.

  • [Search/Usability] A quick search will now reset the underlying worklist to the first page.

  • [CHD-3021] [Virtual Attendants] The ‘set reopen date’ action on ticket-based events now works properly.

  • [CHD-3033] [Mail/Usability] When forwarding a message, the tooltip on the ‘To:’ box will no longer refer to the recipients as receiving a copy of all future messages.

  • [CHD-3026] [Virtual Attendants/Buckets] Added a context for buckets so the lazy loader will properly retrieve bucket data in ticket-related VA events.

  • [CHD-3029] [Time Tracking] Fixed a FATAL PHP error when time tracking entries are created directly from a worklist rather than the timer.

  • [CHD-2989] [UI/Usability] Selecting a new option in quick search no longer clears the text entry box.

  • [CHD-2982] [Time Tracking/Bulk Update] You can now bulk update the activity field on time tracking records.

  • [CHD-3023] [Virtual Attendants] Scheduled behaviors that have been disabled will no longer run.

  • [CHD-2987] [Worklists/Import] Importing a CSV file in Opera no longer displays a download dialog.

  • [CHD-2961] [Reports/Time Tracking] Hourly and weekly date groupings have been added to the Time Tracking reports.

  • [CHD-3013] [Mail/Search] Fixed the operators for the ‘status’ filter on ticket worklists.

  • [CHD-3043] [Requirements/Installer] The PHP ‘ctype’ extension is required (via Twig Templates library). This has been built in to PHP since 4.2, but it’s possible to disable during compile.

  • [CHD-3025] [Time Tracking] Time Tracking worklists now have a ‘close’ button shortcut that acts on the selected rows.

  • [CHD-3014] [Quick Search/Watchers] In a watcher quick search, you can now use ‘=’ or ‘!’ alone to find ‘no watchers’ or ‘any watchers’ respectively.

  • [Quick Search/Usability] You can now prefix the tag ‘#reset’ to any quick search to reset the filters at the same time you add a new filter. This saves the extra step of clearing the filters manually. For example, you can quick search first wrote by ‘#reset support@*’.

  • [CHD-3044] [Mail Filtering/Usability] Adding new behavior from Setup->Mail->Filtering will now properly only show the ‘Before new mail is accepted’ event. Previously this was showing other global events which could be created but were never displayed in this section (they could be found in Setup->Configure->Virtual Attendants).


Cerb6 (6.0.4) is a maintenance update released on August 9, 2012; it contains 6 minor fixes and usability enhancements from community feedback covering the recent 6.0 update. You can follow these instructions to upgrade.

  • [CHD-3049] [Mail] Fixed an issue in some situations where URLs to ticket records had spaces in them.

  • [CHD-2984] [Workspaces/Usability] If you switch workspace tabs while a slow worklist is still loading, the worklist should no longer be appended to the wrong tab.

  • [CHD-3052] [Virtual Attendants/Tasks] Fixed an issue where custom fields on tasks weren’t set until after Virtual Attendants ran ‘New Task created’ behavior. This prevented custom fields values from being able to affect the outcome.

  • [CHD-3054] [Mail/Parser] When naming attachments, favor the ‘content-disposition filename’ before checking ‘content-type name’. This is more closely aligned with the RFC recommendations.

  • [CHD-3055] [Web-API] Fixed an issue where API credentials couldn’t be added for non-admin workers.

  • [CHD-3056] Fixed a PHP error about ‘Class SearchFields_Bucket not found’.


Cerb6 (6.0.5) is a maintenance update released on August 20, 2012; it contains 14 minor fixes and usability enhancements from community feedback covering the recent 6.0 update. You can follow these instructions to upgrade.

  • [CHD-3062] [Mail/Routing] Fixed “PHP Notice: Undefined property: stdClass::$mailbox” when an invalid address was used in ‘To/Cc:’ on Mail Routing rules.

  • [CHD-3063] [Calendars] Fixed an issue with weekly recurring calendar events where schedules could skip ‘every other week’. This had to do with Sunday being considered the first day of the week in some functions, and Monday in others. These should be normalized to ISO-8601.

  • [Search] Removed the ‘Bucket’ context from the global search menu.

  • [Search] The /search page will now verify that the record type being displayed has a worklist implemented.

  • [Setup/Groups] Improved the aesthetics of the ‘delete’ option on groups in Setup.

  • [Knowledgebase] When editing a knowledgebase article from its profile page, the popup will now switch to edit mode automatically.

  • [Knowledgebase/Profiles] Fixed an issue where editing a knowledgebase article from its profile didn’t refresh the page after saving.

  • [Platform/Smarty] Fixed a bug where the Smarty Template Engine expects its character set to be defined in uppercase letters. If ‘utf-8’ was provided in lower case in framework.config.php – as per the provided example in the file – then Unicode support was disabled. In most cases this bug was harmless, since Latin-based languages overlap with Unicode, but some clients experienced problems with ‘StRiNgS ThAt LoOkED LiKE tHiS’ on old versions of CentOS 5.x with old 6.x versions of PCRE (Perl Compatible Regular Expressions). This patch worked for most clients, but a few still had to update the PCRE library.

  • [CHD-3067] [CHD-3071] Added a workaround for a bug in PHP 5.3.3 when the 3rd user data argument to array_walk_recursive() is passed by reference. This usually manifested as an error on snippets worklists when subtotaling or filtering by owner or record links.

  • [CHD-3068] [VAs/Scheduled Behavior] FIXED: The ‘On:’ preference is not preserved when re-editing a Virtual Attendant action that schedules behavior.

  • [Time Tracking/Usability] Fixed an issue where saving a time tracking popup didn’t reload the underlying view.

  • [CHD-3048] [Time Tracking] Fixed an issue where a time tracking entry created from the Links tab of a profile wasn’t properly linked to the current record.

  • [Virtual Attendants/Simulator] The random workers used for testing throughout the Virtual Attendant simulator will no longer include disabled workers.

  • [Plugins/Translations] Fixed an issue when installing a new plugin from the Plugin Library that generated a warning in the web server error logs. It had to do with the translation strings being refreshed on plugins that were being updated.


Cerb6 (6.0.6) is a maintenance update released on August 24, 2012; it contains 7 minor fixes and usability enhancements from community feedback covering the recent 6.0 update. You can follow these instructions to upgrade.

  • [PHP] Fixes for compatibility with PHP 5.4+

  • [Code Cleanup] Cleaned up a few PHP warnings.

  • [Platform/Snippets] Fixed snippets and the Devblocks template builder in PHP 5.4+.

  • [CHD-3080] [Mail/Worklists] Fixed an issue on ticket worklists where the status subtotal counts for open/waiting could be slightly off if tickets were in strange states (e.g. waiting and closed). Also fixed a related issue where searching for status=’!deleted’ could give slightly different results than status=’open,waiting,closed’.

  • [CHD-3078] [Support Center/Knowledgebase] Fixed an issue with the Knowledgebase in the Support Center where starting a new search didn’t reset to the first page of results.

  • [CHD-2787] [Mail/Compose] Fixed an issue where a worker wasn’t associated with composed messages that they sent through the Broadcast feature. This generally wasn’t an issue, but it logged a NOTICE in the error log. It had a happy consequence of not polluting worker reply totals with automated messages, but that’s been addressed with the new ‘is broadcast’ field in 6.1+.

  • [CHD-3075] [Virtual Attendants/Usability] Fixed an issue where Virtual Attendant behaviors were displayed alphabetically even if they were previously dragged into a different order.