Cerb Changelog

New in version 6.7.9

September 6th, 2014
  • [Web-API/Search/Tickets] In the Web-API, 'tickets/search.json' now provides a 'links' filter for returning tickets that are linked to other records or record types. This filter should always use the 'in' operator, and the values should be provided as a JSON-formatted array of contexts or context:id pairs.
  • [Web-API/Search/Time Tracking] In the Web-API, 'timetracking/search.json' now provides a 'links' filter for returning time tracking entries that are linked to other records or record types. This filter should always use the 'in' operator, and the values should be provided as a JSON-formatted array of contexts or context:id pairs.
  • [CHD-3829] [Search/Sphinx] When using the Sphinx search engine, errors are now handled more gracefully if the service isn't running.
  • [CHD-3856] [Custom Fields/Files] Fixed an issue with 'file' and 'files' custom fields where the linked attachments could show up multiple times on profiles, peek, and worklists
  • [CHD-3847] [Dashboards/Subtotals] Subtotal widgets may now display more than 20 results.
  • [CHD-3822] [Mail/Relay] Fixed an issue where relayed messages could contain blank names in the 'From:' header.
  • [CHD-3717] [Notifications/Usability] Fixed an issue where clicking some non-record notifications didn't automatically mark them as read.
  • [CHD-3810] [Migration/Custom Fields] Retroactively fixed an issue where certain non-text custom fields (e.g. date, number, worker) weren't properly migrated from groups to fieldsets in 6.4
  • [CHD-3574] [Mail/Compose/Drafts] Compose drafts now properly restore the 'owner' field.
  • [Mail/Compose/Drafts] Compose drafts now properly restore the 'watchers' field.
  • [CHD-3880] [Mail/Compose/Custom Fields] Fixed an issue with composing mail where file-based custom fields could be attached to the message rather than set as a field value.
  • [CHD-2563] [Mail/Merge] When viewing the profile of a deleted ticket that was merged, a helper message will display the new ticket location.

New in version 6.6.3 (February 25th, 2014)

  • [Virtual Attendants/Email Relay] Fixed an occasional "PHP Notice: Undefined variable: worker_address" log entry from the 'Relay email' action of Virtual Attendant behaviors.
  • [CHD-3019] [Scheduler/Maintenance/Platform] Miscellaneous /storage/tmp/php* files are now deleted by maintenance (cron.maint) once they are at least 12 hours old. These are usually created when someone uploads an import file on a worklist and then abandons the process.
  • [CHD-3665] [Scheduler/Maintenance/Platform] Miscellaneous /storage/tmp/mime* files are now deleted by maintenance (cron.maint) once they are at least 12 hours old. These are created by mailparse and left on the disk if the parser fails before completing. The original messages are moved to /storage/mail/fail/, and these temporary files serve no further purpose.
  • [Plugins/Activity Log/Localization] Activity Log events defined in the plugin.xml now provide a 'string_key' parameter that links their strings.xml key. This formalizes the translations for activity logs, which makes it easier to work with this data procedurally (e.g. in plugins and the REST API).
  • [Plugins/Activity Log] Activity Log events defined in the plugin.xml manifest may now provide an 'options' parameter containing the value 'api_create' in order to authorize their creation through the REST API.
  • [Plugins/Activity Log/Watchers] Activity Log events defined in the plugin.xml manifest may now provide an 'options' parameter containing the value 'no_notifications' to exclude the event from triggering watcher notifications. This is particularly useful when logging activities through the API.
  • [Profiles/Usability] The permalink URLs generated on worklists and in snippet placeholders will now Romanize accented and non-latin characters (e.g. รค to a). Previously these characters were replaced with spaces, which generated some difficult to read URLs.
  • [Web-API/Activity Log] Implemented 'GET /rest/contexts/activity/events.json' in the Web-API for retrieving the list of Activity Log events with IDs, names, options, and translation info. This data is useful for creating or interpreting Activity Log entries through the API. See: http://cerbweb.com/book/latest/developer_guide/rest_api/contexts.html#list-events
  • [CHD-3667] [Web-API/Activity Log] Implemented 'POST /rest/contexts/activity/create.json' in the Web-API for creating Activity Log entries. The given Activity Log event must have 'api_create' in its 'options' parameter in plugin.xml in order to authorize this method of creation. Most Activity Log entries are created automatically based on worker actions, but API-created entries are useful for automatically recording external actions back to Cerb records (e.g. licensing, purchases, store visits, calls, and anything else). See: http://cerbweb.com/book/latest/developer_guide/rest_api/contexts.html#create
  • [Plugins/SDK] Added an 'example.activity_log.event' plugin to the SDK to demonstrate how to add new Activity Log events.
  • [Mail/Parser] The mail parser would previously choose a sender address from either the 'Reply-To:', 'From:', or 'Return-Path:' headers (in that order), but if one turned out to be malformed then the others wouldn't be checked. Now the subsequent headers will be checked until a match is found.
  • [Mail/Parser] The mail parser is now more tolerant of malformed 'From:' headers when processing new messages, and will fallback to a simpler email address search if the personal name doesn't comply with RFC-2822. For instance, all commas in a personal name should be quoted (e.g. "Last, First" ). When this wasn't the case, messages were being sent to /storage/mail/fail/.
  • [Mail/Parser] Suppressed a PHP Notice in the mail parser when mbstring doesn't support the given encoding. This doesn't affect message processing in any way.
  • [CHD-3673] [Virtual Attendants] Fixed a PHP notice ("Undefined index: _types") in Virtual Attendants when editing an outcome with a 'Worklist Type' condition on a '[UI] While displaying a worklist' behavior.
  • [CHD-3670] [Platform/Usability] Fixed the broken 'spinner' image when URL rewriting is disabled. For instance, when replying to a ticket the "Loading, please wait..." popup should have an animated image. When the page URLs contained '/index.php/' this image was broken.
  • [Mail/Usability] When replying to a message, the 'suggested recipients' will now ignore invalid addresses in the original From/To/Cc headers.
  • [CHD-3614] [Mail/Relay/Usability] Worker replies that are received through the mail relay will now have any leading blank lines automatically removed.
  • [CHD-3672] [Web-API/Groups/Buckets] Implemented 'GET /groups/123.json' in the Web-API for retrieving information about a specific worker group. The optional parameter 'expands' supports the following comma-delimited values: 'buckets' (a full list of the group's bucket) and 'members' (a full list of the group's managers and members). See: http://cerbweb.com/book/latest/developer_guide/rest_api/groups.html#retrieve
  • [CHD-3672] [Web-API/Groups/Buckets] Implemented 'POST /groups/search.json' in the Web-API for filtering the full list of worker groups. See: http://cerbweb.com/book/latest/developer_guide/rest_api/groups.html#search
  • [Web-API/Usability] When performing a 'POST /rest/.../search/' in the Web-API, the '_labels' and '_types' dictionaries are now consolidated in a top-level 'results_meta' key. Previously these were repeated for every result, which wasted cycles and bandwidth.

New in version 6.6.2 (February 18th, 2014)

  • [CHD-3650] [Workspaces/Widgets] Fixed an issue with drag reordering on workspace widgets not saving their positions. This had to do with changes to the jQuery API.
  • [CHD-3649] [Explore/Messages] When using explore mode on a messages worklist, the specific messages in a conversation will now be focused. Previously each message displayed its parent ticket and the focused the latest message.
  • [CHD-3648] [Workspaces/Quick Search] The following field types now support boolean 'OR' searches from quick search on any worklist: single line text, multiple line text, url, picklist, multi-checkbox, number, and date. To perform an OR search, include the word 'OR' in capital letters with spaces between the terms. For example: Recipient "jeff@example.com OR hildy@example.com".
  • [CHD-3647] [Worklists/Search] Fixed a bug where UTF-8 characters weren't displaying properly in tooltips for the "is in any of (x objects)" filter bubbles.
  • [Worklists/Search/Custom Fields] Fixed an issue where the custom field tables weren't joining properly in a search if the field only occurred in nested search parameters (e.g. OR, AND).
  • [Mail/Parser/HTML] Fixed an issue that corrupted some UTF-8 characters when displaying an original_message.html attachment in the browser if the PHP 'tidy' extension was loaded. These attachments worked fine if downloaded instead since they skipped the tidy/purify step.
  • [CHD-3660] [Support Center/Attachments] Fixed an issue with attachments being uploaded in Support Center contact forms.
  • [CHD-3659] [Notifications/Mail/Notes] Watchers will no longer receive a notification about their own sticky notes on tickets.
  • [CHD-3654] [Virtual Attendants/Mail/Owner] When using the 'Set owner' action on ticket-based Virtual Attendant behaviors, the owner information will now immediately update in the placeholders. Previously, additional actions on the same VA behavior would still refer to the previous owner.
  • [Virtual Attendants/Orgs] When using the 'Set organization' action on ticket-based Virtual Attendant behaviors, the org information will now immediately update in the placeholders. Previously, additional actions on the same VA behavior would still refer to the previous org.
  • [CHD-3661] [Mail/HTML] When using HTML mode to send email, the 'Code Format' button will now automatically detect whether the selection contains multiple lines. Previously, the button always used inline code formatting (ideal for variable and file names). Multiple lines are now wrapped in code block tags (```).
  • [CHD-3653] [Worklists/Custom Fields] Fixed an issue with a "Subquery returns more than 1 row" error being displayed on a worklist if a single-value custom field in fact had multiple values in the database. This only seems to be the case for long-running databases that had imported data into version 4.x from earlier versions.
  • [Mail/HTML] When HTML messages are converted to plaintext, lists (UL and OL) now have their items prefixed with a '*' bullet point. Previously these were just being converted into sentences, which lost some readability.
  • [Search/Mail] The search indexes for 'Message Content' now include the text from the subject line. This makes it easier to use the same filter for matching the subject or message body.
  • [Search/Mail] When a worker uses the 'Message Content' filter on ticket or message worklists, the search terms will now automatically be phrase quoted if they don't contain any spaces, quotes, or wildcards. This should dramatically improve both the performance and relevancy of searches for terms like email addresses, domains, URLs, phone numbers, IP addresses, etc. Previously, an email address like 'jeff@cerbweb.com' without quotes was being parsed as 'jeff OR cerbweb OR com', which is neither intuitive or particularly relevant.
  • [Search/Mail] When a worker uses the 'Message Content' filter on ticket or message worklists and includes quoted phrases as search terms, the terms will have stop-words (e.g. the, an, by) removed so that they match the search index exactly. This should significantly improve the relevancy of results for these types of searches.
  • [CHD-3067] [Search/Snippets] Fixed an issue where Search->Snippet worklists for some users became unusable if they had contained previously deprecated filters.
  • [Parser/Localization] The parser can now detect the encoding of text if none is given. This is particularly useful when extracting part of a message (e.g. an inline bounce) that may not have been encoded properly. For instance, some inline bounces (*cough* Exchange) may be in UTF-8 when their envelope is in a different encoding.
  • [CHD-3655] [Parser/Localization] When invalid characters are encountered by the mail parser and the iconv extension is used, they will now either be converted or ignored. Previously they were displaying a PHP notice and truncating the content.
  • [Mail/Parser/Usability] When a mail server (e.g. Exchange) sends an inline copy of the full message source from a bounced message, Cerb will now automatically convert it to an attachment, and correct the encoding if necessary.
  • [Web-API/Time Tracking] Implemented 'GET /timetracking/activities.json' in the Web-API for listing available time tracking activities.
  • [CHD-3664] [Web-API/Time Tracking] Implemented 'POST /timetracking/create.json' in the Web-API for creating time tracking entries.
  • [Web-API/Time Tracking] Implemented 'PUT /timetracking/123.json' in the Web-API for updating time tracking entries.

New in version 6.6.1 (February 12th, 2014)

  • [Virtual Attendants] Fixed an issue with a few conditions showing up blank when editing Virtual Attendant "New message on a watched conversation" behaviors.
  • [Code Cleanup/Attachments] Added missing translation text for the 'SHA-1 Hash' field on attachment worklists.
  • [CHD-3631] [Workspaces/Pages/Tabs] Fixed an issue that prevented the drag reordering of workspace pages and tabs. This had to do with a change to the jQuery library.
  • [Code Cleanup] Fixed the extra HTTP requests made by jQuery looking for an HTML5 Javascript .map file.
  • [Support Center] Fixed a PHP notice when Support Center contact forms were submitted with no attachments. This had to do with the switch to HTML5 multiple file uploads.
  • [Support Center] Fixed an issue when tickets were created from Support Center contact forms with custom fields from fieldsets, and the fieldsets weren't being linked to the ticket.
  • [CHD-3572] [Snippets] Added an 'updated' field to snippet records. This makes it easier to identify changed snippets from the UI, and enables syncing through the API.
  • [CHD-3632] [UI/Accessibility/Search] The global search menu can now be accessed using the TAB key for vision-impaired users. Previously the menu only opened with a mouse 'hover' event, but it now responds to clicks (and ENTER) as well. When clicking or pressing ENTER, the first item in the search menu will be focused automatically.
  • [CHD-3629] [Setup/Branding] When setting a logo or favicon URL from Setup->Configure->Branding, the URLs will be tested before they are saved. Some users were entering URLs without a scheme (e.g. example.com/logo.png vs. http://example.com/logo.png) and having trouble.
  • [CHD-3635] [Mail/Compose] Tickets can now be opened without any recipients, and the form will act like the "Start a new conversation without sending a copy of this message to the recipients" option was selected. This creates a ticket record without sending any mail. Several users have asked for the ability to create tickets as the result of phone calls or Twitter messages without requiring an email address.
  • [UI/Usability/Popups] Popup windows can be resized again, and they'll respect a maximum height of 85% of the browser window.

New in version 6.6 (February 4th, 2014)

  • This major update includes 70 new features.
  • Workers and Virtual Attendants can send HTML formatted messages (including inline images) when composing, replying, or broadcasting.
  • Cerb automatically converts CSS blocks to inline attributes for maximum compatibility with mail readers.
  • Workers can relay specific messages to external email accounts without first having to set up a Virtual Attendant behavior.
  • Cerb detects when a new storage object duplicates an existing one, and a link will be created to the same file.
  • Workers can enable the display of Activity Log entries on the ticket timeline.

New in version 6.5.5 (January 23rd, 2014)

  • [CHD-3615] [Virtual Attendants/Scheduled Behavior] Fixed a bug where a deleted Virtual Attendant behavior could remain in the scheduled behavior queue and cause an error when viewing an associated profile.
  • [CHD-3494] [Virtual Attendants/Relay] Fixed an issue where new tickets created by workers from the UI didn't relay their attachments to external worker email addresses.
  • [CHD-3616] [Mail/Merge/Usability] Fixed an issue where the merge popup on a ticket profile failed to complete properly if any of the tickets in the chooser had their peek popup opened during the process.
  • [CHD-3617] [Mail/Reply] Fixed an issue that occurred when multiple workers attempted to reply to the same ticket within a short time period. Normally this displays a warning with a 'Continue replying' option, but clicking this button wasn't doing anything.
  • [CHD-3444] [Mail/Peek/Usability] Added the relative time to the 'Date:' header on the ticket peek popup. For example: "Tue, 21 Jan 2014 01:30 am (45 mins ago)". Previously this only showed the absolute date.
  • [CHD-3414] [Mail/Profiles/Masks] Fixed an issue with ticket mask patterns that are purely numeric (e.g. date-based like: 201401220001) which prevented their profiles from displaying. This had to do with Cerb assuming their masks were internal IDs. Now masks are always checked first, and IDs are only checked if there's no match. The performance of this lookup was also improved, because it was previously looking up ticket metadata in two database queries (mask->id, then id->metadata). A single query (mask->metadata) now retrieves the record in most cases. For sanity's sake, it is still important that ticket masks don't overlap with IDs, so a date-based mask format would be improved by adding hyphens between the components (e.g. 2014-01-22-0001).

New in version 6.5.4 (January 16th, 2014)

  • [Activity Log/Usability] Fixed an issue where some Activity Log entries were still being created with hardcoded actor permalinks. These are now generated using a dynamic format which will adapt if Cerb is moved to a new base URL.
  • [Activity Log/Migration] Fixed an issue in the 6.0.0 migration script where knowledgebase articles referenced in the Activity Log weren't converted to the new ctx:// URL format.
  • [Activity Log/Migration] Fixed an issue in the 6.0.0 migration script where a query attempted to retrieve *all* of the Activity Log entries as a single resultset in order to convert them to a new format. This could overwhelm the available PHP memory_limit and prevent an upgrade from completing. These records are now broken up into chunks of 5,000 rows.
  • [Workspaces/Migration] Fixed an issue from the 5.6.0 migration script where certain ticket worklist filters weren't fully converted to their newer counterparts. This resulted in worklists with nameless filters on them which didn't filter as expected. While these could be cleaned up manually after the upgrade, some Cerb instances have hundreds of worklists and this process would be tedious. These rows will be converted properly for people migrating from a version earlier than 5.6.0, and the rows will be fixed retroactively for any later versions by the 6.5.4 upgrade script.
  • [Development/POP3] Added a script to /install/extras/developers/ for running a mock POP3 server in order to debug esoteric issues (like sporadic 30+ second connection timeouts). These conditions are harder to simulate with a live mail server.
  • [Virtual Attendants/Migration] Fixed an issue in the 5.4.0 migration script where Group Inbox Routing rules were not properly converted to Virtual Attendant group behaviors if there was only a 'To/Cc' condition.
  • [Virtual Attendants/Migration] The 5.4.0 migration script will now create separate 'To:' and 'Cc:' header checks when converting Group Inbox Routing 'To/Cc:' rules to Virtual Attendant behaviors. Previously it just created a 'To:' header check.
  • [Update/Plugin Library] Fixed an issue in 4.x and 5.x migrations where the Plugin Library attempted to download its updates before the 5.7.0 patch created its database tables. This didn't interrupt the upgrade process, it just logged an error.

New in version 6.5.3 (January 3rd, 2014)

  • [Virtual Attendants/Snippets/Placeholders] Implemented a new 'xml_decode()' function for placeholder scripts. This converts an XML string into an associative array of nested nodes. Attributes can also be accessed through an '@attributes' key on any node. Check the Cerb docs for more details.
  • [Web-API/Tickets] Ticket records can be filtered using 'group_id' and 'bucket_id' in the Web-API.
  • [Quick Search/Performance] When using the quick search feature, text-based searches will no longer include leading and trailing wildcards by default. This was requiring every record to be scanned in the database. Instead, wildcards can be explicitly specified with an asterisk (e.g. *@example.com).
  • [Mail/Parser] Fixed a bug in the parser where multiple 'attached_message.txt' (message/rfc822) or 'delivery_status.txt' (message/delivery-status) attachments on an incoming message were ignored and only the last one was kept. They are now sequentially numbered like 'attached_message_001.txt'.
  • [CHD-3596 [Worklists/Custom Fields] Fixed an issue where number-based custom fields didn't sort properly as worklist columns. Rather than sorting in numerical order (e.g. 64, 256, 1024) the results were sorted lexicographically (e.g. 1024, 256, 64). This bug was introduced by an earlier feature that separated multiple custom field values with commas, as it converted the field to text from integers.
  • [CHD-3595 [Parser/HTML] Fixed an obscure issue with nonbreaking spaces in HTML-only mimeparts encoded in quoted-printable format as Unicode (=A0). These were not being treated as whitespace, and code like hyperlink-detection was including them.
  • [CHD-3590 [Worklists/Quick Search] Fixed an issue when using quick search on the ticket 'spam score' column with decimal numbers (e.g. '> 0.33').
  • [CHD-3585 [Workspaces/Tabs/Usability] Fixed an issue where pressing ENTER in the 'Label:' field when adding a new tab would lead to a JSON response from the Ajax request being printed in the browser.
  • [Platform] Updated the copyright years in the footer to 2002-2014.
  • [Storage/Devblocks/Platform] The Devblocks storage service will no longer unarchive objects for attachments or message content. The original purpose of the unarchiving feature was to relocate frequently accessed objects back to active storage (e.g. from S3 back to the local filesystem). This was causing issues because large objects could be constantly moved between storage engines like S3 and the local filesystem based on minor activity. Generally, once an object is moved to a long-term storage engine like S3 it is desirable to always retrieve it from there in the future.
  • [Storage/Devblocks/Platform] The Devblocks storage service will now only archive objects that are currently in the active storage profile. Previously, any objects would be archived if they weren't already in the archive storage profile. This caused problems if some objects (e.g. very old or large) were moved to a different storage profile manually. It is now possible to partition the storage of objects in whatever way is desirable, and the auto-migration features of the storage service won't get in the way.
  • [CHD-3603 [Virtual Attendants/Usability] When attempting to view the profile of a non-existent Virtual Attendant (e.g. after deleting it), a worker will be redirected to a worklist of valid VAs using the /search page.
  • [CHD-3598 [Scheduler/POP3] Previously, Cerb was incapable of determining if a POP3/IMAP connection timed out while downloading the contents of a message. This could lead to tickets being created with valid headers but blank content. Cerb will now discard a message if it took more than 95% of the IMAP_READTIMEOUT value (default 60 seconds) to download it, and it will retry the next time the mailbox is checked.
  • [Scheduler/POP3/Performance] The POP3 scheduler job now saves message contents directly to the disk rather than reading them into memory first. This uses significantly less memory and can handle much larger message sizes.

New in version 6.5.2 (October 22nd, 2013)

  • [CHD-3569] [Virtual Attendants/Mail/Headers] In 'Before sending worker message' Virtual Attendant behaviors, the 'Set header' action is now capable of replacing existing headers like 'Subject:' and 'X-Mailer:'. Previously, duplicate headers were being added.
  • [CHD-3519] [Virtual Attendants/Mail] In the 'Before sending worker message' Virtual Attendant behavior, the 'Bucket' condition is now available again.
  • [CHD-3568] [Worklists/Usability] Fixed an issue when editing 'Owner' filters on worklists where the existing values weren't displayed as defaults. This meant if you were filtering by a list of 5 owners, you had to reselect them in addition to any other changes you were making.
  • [Virtual Attendants/Groups] Fixed an issue with bucket names always being 'Inbox' in some Virtual Attendant behaviors.
  • [CHD-3508] [Virtual Attendants/Usability] When building Virtual Attendant outcomes and actions, the 'Insert placeholder' menu will now include the '|date' modifier on placeholders by default. Otherwise they are displayed as Unix timestamps (e.g. 1381874586). This used to happen in earlier versions, but the '|date' option was hardcoded for various fields; now it happens automatically based on the field type.
  • [CHD-3470] [Mail/Reply/Usability] On ticket profiles, if the reply form is already open then clicking the 'Reply' button or pressing the 'r' shortcut will focus the existing form rather than discarding its contents and opening a new one.
  • [CHD-3433] [Mail/Setup/Usability] Added a warning to POP3 setup that downloaded messages will be deleted from the mailbox. There have been a few instances where users included an IMAP mailbox with a long history where clearing the mailbox was not desirable.
  • [CHD-3378] [Virtual Attendants/Worklists] 'While displaying a worklist' behaviors can now be created by role-owned Virtual Attendants.
  • [Setup/Custom Fields/Usability] In Setup, custom fields can now be quickly dragged into the desired order rather than having to manually number them.
  • [Setup/Custom Fields/Usability] When deleting custom fields in Setup, a confirmation step is now shown prior to deleting the fields and their data.
  • [CHD-3372] [Setup/Custom Fields/Fieldsets] In Setup, global custom fields can now be easily migrated to fieldsets of the same type.
  • [CHD-3341] [Mail/Reply/Usability] After clicking the 'Reply' button in a ticket conversation, a loading indicator is shown in a popup until the form is displayed. This was requested several times by clients who experience occasional latency so they have a visual cue that something is happening.