Exciting News! The highly anticipated SpiceCRM version 2024.01.001 has arrived!
Managing custom modules and fields is now a breeze—no coding required! Our new dictionary manager lets you handle everything effortlessly. Plus, our revamped interface makes system upgrades smoother than ever. Sit back, relax, and enjoy this seamless experience with SpiceCRM.

Dictionary Manager for integrators

  • create custom modules and field definitions without a code line
  • administrate dropdown lists
  • load feature packages and use them right away
  • cache layout changes and check the results as you are configuring the views
  • turn on upgrade mode automatically
  • revive system automatically after an expected system error

Charts visualization in lists with flexible display options

Our charts now automatically render results based on predefined aggregates, making data visualization effortless. For instance, sales users can instantly see the highest value of their open deals or sum amounts by sales stage in “My Opportunities.” No report creation needed—the information is always accurate and readily available in the list. Metrics include count, sum, highest value, lowest value, and average.

Text Snippets

Enhance the quality of your business emails and save time with custom text snippets. Whether crafting an offer or handling customer service, easily combine these snippets with existing templates. In just a few clicks, add the perfect text block to meet your writing needs.


Release Details 2024.01.001


CR1001332: Save button would not be clickable after adding a label in the edit view for dictionary items [Hotfix]

This is a temporary measure til all changes can be caught properly in the component DictionaryManagerItemDetails.

CR1001331: Loading exchange extension in MORE version causing fatal error [Hotfix]

Depending on the php version in use and the system configuration loading the exchange REST extension would cause a fatal error. Fix added.

CR1001330: Dictionary Manager: removed default true for "drop item" [Hotfix]

We added a warning message and removed the default check on the checkbox in the drop item functionality. This feature might cause data loss if not used wisely

CR1001329: Dictionary Manager: added title to the top right icons on in the tab fields display [Hotfix]

We added a title on mouse over for the icons located at the top right of the tab fields in the dictionary manager, making it easier to understand the display.

CR1001286: OAuth2 Login Security Improvements [Security]

Restricted the oauth2 login popup window listener to accept only same source and origin.

CR1000968: Session expired with 2-Factor authentication and 1-time password [bug]

When my user session is experied I cannot re-login when my user is setup with 1-time-password authentication. Wether my password nor a new code picked from the google authenticator plugin is accepted. The login screen displayed on session expired seems not to consider the 2-Factor authentication capability.

CR1001203: Module Qualifications removed [change request]

We announced the removal of the module Qualifications for release 2023.02.001. It looks like we just forgot to remove it. It now happenned in 2024.01.001

CR1001229: Two-Factor Authentication Improvements [Security]

Added "user defined" option to the 2fa method to allow the user to select his own 2fa method.
A popup selection modal will appear to the user on login to select one of the available 2fa methods.
Added "remember device" option to the login screen to allow the user to decide if the system should remember the device or not.
Added 2fa check on password change.
Improved the login code to use the modal service for modals and load the required labels to the language service.

CR1001254: Additional config params for SpiceCRMExchangeLogger [change request]

Added config params to enable logging of in/outbound records. No logging per default. Can be set in the workbench or manually as
$spice_config['SpiceCRMExchange']['log_inbound_records'] = 1;
$spice_config['SpiceCRMExchange']['log_outbound_records'] = 0;
Both 0 per default.

CR1001170: SchedulerJOb: cron expression manually entered is not saved [bug]

When you select "Cron Expression" to schedule the job we shall be able to enter a cron expression. All 5 fields appear in the display, you enter you cron expression but after clicking save the cron expression is stilll * * * * * . The changes are simply not sent to the save logic. We corrected that.

CR1001207: Update Lightning Design to version 2.23.0 [change request]

SLDS has been updated to the latest Version (2.23.0 Spring 24)

CR1001280: fix dashboards not loading after closing tab [bug]

fixed dashboards not loading after closing tab

CR1001219: Split in Maps & Geocoding API Key for Google [change request]

the API key in the Google API admin section has been split into one key for Google Maps and one for Geocoding,, DIrections and Places API. This allows to restrict different key based on different rules.

CR1001177: HCM Employee Goals [feature request]

We extended the Human Capital Management package with 3 new modules to structure employee objectives, define a commitment for a specific time frame and relate to the strategic goals of your company that can now be stored under the company code.

CR1001190: add foreign key option to administationconfigurator []

added an option to allow foreign key relationships in the administration configurator.

This can link to another table ot a module by defining the config as follows:

"name": "salesdoctype",
"type": "foreign",
"foreign": {
"dictionary": "syssalesdoctypes",
"value": "name",
"display": "name"

or for a module as follows:

"name": "outputtemplate_id",
"type": "foreign",
"foreign": {
"module": "OutputTemplates"

CR1001255: Reporter fix building query for the time frame: last year to date [bug]

Built query for the lyytd "last year to date" time frame was not considering a leap year..

CR1001273: MediaFiles Internal API Route [change request]

API Route to get MediaFiles for internal use in the CRM

CR1001295: Label manager: removed button "Files to DB" [change request]

This button is deprecated and was removed in 2024.01.001

CR1001243: ServiceTicketStage: set sysservicecategory_id* field type to category [change request]

Necessary for reporting purpose. As in ServiceTickets and in ServiceCalls sysservicecategory_id* fields are now defined as category in ServiceTicketStages.

CR1001212: Updated FTS Config for Knowledge [change request]

overwrite old FTS config that is not supported anymore

CR1001312: Imap Fetch - Performance Improvements [change request]

Cleanup Imap Handler fetch removed unused imap_mailboxmsginfo reduced the fetch process time.

CR1001251: Changed position of test button for email connection test [change request]

The test button in IMAP is now matching other email handlers

CR1001220: Send Attachments as Zip Archive [feature request]

added functionality to send arrachments as .zip archive.
added check for maximal attachments size allowed by mailbox

Post deployment action: tested in ÖAMTC

CR1001261: Fixed Arrow directions in subpanels when sorting [change request]

CR1001265: Reporter: fix label input in filter display [bug]

Little modification in the use of slds classes to get the system-input-label open the results dropdown in the Report filter line.
Added label support for existing reports before 2023.03.001 so that display contains the default label for the field.

CR1001241: Opportunities & Products link [feature request]

A new m-2-m relationship & link between Opportunities & Products.

Post deployment action: Be aware of the new link in case you've got customizations and load the "productmanagement" package after updat. You might need to adapt your configurations and/or code.

CR1001191: new system component system-input-filter []

a new system component was added to enable selection of a defined module filter

CR1001320: SpiceLogger - Recursion Bug Fix [bug]

Fixed bug: SpiceLogger trying to log to the syslogs table creates a infinite recursion which leads to fatal error.

CR1001271: SpiceACLUsers: catch empty users array [bug]

Query to nsert records into the table spiceaclusers_hash ended malformed when no users were passed as input parameter. The function now returns an empty string when the input parameter is empty.

CR1001227: Workbench Mailboxes Manager [change request]

View like in role manager
left + right
fieldset schall be definable in left hand side
right hand side = current detail view of Mailbox

CR1001235: Bug fix: Closing Service Tickets [bug]

ServiceTickets are now correctly closing with SLA reason

CR1001155: add ability to create new entry from objectmodalmodellookup ("showaddbutton") [change request]

showaddbutton: if set, a button "new" is shown within the buttongroup in the footer of the modal, that allows to create a new entry of the type the modal (-model) is based on

CR1001268: fixes running both EWS and MSGraph Synchronizations [bug]

When both Syncs are in use, we should make sure on EWS side, that no EWS function is called, that cannot return a safe response.
We added the ExchangeUtils::checkOnSyncEnabled() function to skip the logic when so sync is possible.

CR1001239: Add search input field to - Create Event Registrations from Mailinglist - display [change request]

It is now possible to search for a mailinglist by entering a search term

CR1001294: Target Lists - Entries Count Field [feature request]

CR1001272: Mailbox Footer corrected [bug]

mailbox footer is now displayed correctly

CR1001231: CalendarSheetSchedule: display more link also when no results are returned [change request]

The "more" link was only displayed when results were returned. Since a click on the "more" link extends the time frame for the search it would make sense to display it also when no records are found. That is the change we made.

CR1001215: Mentioning In Rich Text Editor [feature request]

Added the mention ck-editor feature to the spice richtext editor to enable mentioning persons in text content.

CR1001250: M2MRelationship: added relationship data array as parameter for callAfterAdd() [change request]

$arguments['relationship_data'] in after_relationship_hook now contains the data row inserted/updated of the join table.

CR1001277: Bug fix case sensitivity for MSGraph and EWS IDs [bug]

MSGraph IDs and EWS IDs are case sensitive. Make a proper case sensitive query when retrieving a bean by external_id. Manual select is necessary.

CR1001214: GDPR include deleted records [feature request]

GDPR Retetionmanager went through UI improvements such as register changes & a new cancel button.

In the SpiceGDPRManagerController we added a new parameter "include_deleted" which helps us to retrieve Beans depending on GDPR settings (i.e. retrieve deleted Beans).

CR1001158: Workflows - New Task Type Conditional Decision [feature request]

Added a new workflow task type "conditional decision" to enable the system to decided the next task(s) to execute based on the matched conditions.

CR1001213: Module Filter Operator "changed" [feature request]

Create a module filter with the condition "changed"/"geändert" for a specific field.
Only in case this field has been changed since loading the bean, the bean will get filtered/taken.
This feature is commonly used with non-scheduled workflows.

CR1001247: add fts aggregate metrics [change request]

a new parameter is added to the fts field. For fields of type double aggregate metrics can be activated. If set for all aggregates in addition the metrics will also be calculated. This can be used to e.g. calculate the sum of the amount or the average of all opportunities in this aggregate. At this time this is only held in the back and also returned to the frontend but not yet used. It can be used via the api and will be used in upcoming releases to allow displaying aggregate metrics in the frontend as well.

General it is advised to use this carefully as this has also a performance impact on the elastic search.

CR1001285: Reporter: use outputtemplates for the PDF export [feature request]

Select an output template for the pdf export in Reporter MORE version. PDF export is now available in a simple version. A config variable to define the pdfhandler can be set in the workbench to render with the PDF service or with the default SpiceCRM PDF Handler

CR1001182: Search only for active users by default in Administration Tab [change request]

We added the optional module filter "Active Users" to the assigned user search. The filter is now part of the default configuration for administration tab.

CR1001310: add relatedmodels.model to relatedlistall [hotfix]

added relatedmodels.model to relatedlistall to allow correct rendering od sendgrid toggle button in a listview

CR1001201: extended Full Text Search Logic [feature request]

a new Search Logic has been implemented supporting the following extended search syntax:

- logical OR operator: individual searchterms can be combined with an OR clause. So a searchterm 'spice OR crm' will return all entries that mactch the term 'spice' or the term 'crm'
- exclusion of searchterms: if a searchterm is preceeded with a '-' that searchterm will be excluded. So a searchterm 'spice -crm' will return all records that match the term 'spice' but do not match the term 'crm'
- specific term: searchterms enclosed in double quotes will be treated as term that needs to be matched exact. A searchterm '"spicecrm"' will match all records that match the term 'spicecrm" exact in one of the searched fields.
- specific terms and wildcard: fro specific termas also wildcards can be used. A seacrhterm '"spicecrm*"' will return all records that match fields that are beginning with 'spicecrm'. Wildcards can be entered anywhere in the searchterm. So also searchterms like "*spice*crm*" will work matching all records that first match 'spice' and then 'crm' in a searchfield
- exclude specific terms: if a term in double quotes is preceeded by a '-' it is treated as not matched. So a searchterm 'spice' -"*crm"' will return records that match 'spice' and do NOT end with 'crm' as this searchterm was wildcarded
- search in specific fields: also for the search a searchterm can be set to just search specific fields if a searchterm is preceeded with the fieldname. So the searchterm 'meyer email:"*gmail.com"' will return all records that macth the term 'meyer' and have an email address ending with 'gmail.com' Also for the fieldnames the same logic for exact match and wildcard match of terms as well as exclusions applies. E.g. a search for 'meyer -email:gmail' will return all record matching the term meyer but not matching the term gmail in the email address. The matching of applicable fields is done by mathcing the fieldname in the searchstring with the searchfields available. If there is at least a partial match the field filter will be applied. So. e.g. 'phone:(867)' will return all records where any phone field matches the specified searchterm.

Post deployment action: For full functioning searchlogic Indices need to be recreated and reindexed.

CR1001236: Reporter: set optional mailbox in a scheduled report [change request]

A scheduled report would be sent from the default mailbox defined in SpiceCRM. Now it is possible to allocate a mailbox to a schedule report so that the report is sent via the specified mailbox.

CR1001278: MSGraph: Wrong response variable type for getSubscriptionData() [bug]

We removed the reponse type for getSubscriptionData() for now. It returns a boolean or an array and not null or an array. Response type boolean|array not possible under php7.4. Therefore removed.

CR1001240: enable new record creation in new tab [feature request]

the components ObjectActionNewButton, ObjectActionNewrelatedButton and GlobalNavigationMenuItemActionNew have been amended and a new parameter has been added to create the record in a new tab rather than in a modal view. Default Actionsets have also been crated and can thus be configured on a module basis on the global action menu, the list view and the related panels. This is to enhance the user experience when creating more complex new records like e.g. Opportunities or Leads.

CR1001258: Add option for timespan in API Log Viewer [feature request]

in the API Log viewer now a start and end date can be optionally selected. This allows with larger datasets to better hit the requested record and also lower selection times

CR1001210: Changes in User Panel [change request]

The user panel has been changed so in the global view the link to the profile is removed and the settings for signature as well as 2FA is moved to the global user panel. The link to the user details is removed and placed on the username . These are the first steps to remove the direct user access for regular (non-admin) users.

CR1001180: Enhance Administration Configurator []

added new fieldtypes and also a details modal for larger records so they can be better edited.

CR1001224: New Reporter Fields for Float, Number and Integer [change request]

new Fields for the value types Number, Float and Int have been added to the reporter rendering the number format properly to the users settings.

Post deployment action: reload package Reporting

CR1001266: Attachments view in sent Email fixed [bug]

fixed attachments not shown in activity panel sent email

CR1001223: added applicable scope to Roles [change request]

added a new option to the UI roles to define the applicability of a role. This allows to define roles that can be used only for external people or people within the organisation or to all.

CR1001218: Setting "no_status_callbacks" for Twilio SMS Mailbox [feature request]

Status callbacks do not work if the CRM API is not accessible from outside (the Internet). So the functionality of the status callbacks can get deactivated.

This feature is (for now) dedicated only to developers. So there is no possibility to turn on the feature in the frontend.

To use the feature:
In the mailbox record of the DB insert "no_status_callbacks":true into the json field "settings".

What will happen?
When commiting a Text Message to Twilio, no Callback URL will be communicated to Twilio and the field "delivery_status" of the Text Message Record will set to "sent" instead "queued".

CR1001232: Preset module when adding a hook in Hook Manager [bug]

When you add a logic hook to a module you usually first select the module from the module dropdown list to see which hooks are already available. Then you click add. When the modal window to enter the hook pops up the selected module is now set in the modal window.
The Event is automatically set to before_relationship_add as first choise. "select" is no longer of use in the event drop down.

CR1001233: Reporter: define the file name for scheduled export [change request]

When a scheduled report is sent via e-mail the generated file has an automated name that doesn't tell much about the content. Example: kreport_2024-02-08_09-05-02.csv. You can now use the fiedld "Save to" to define a prefix for the file name and get something like NPS_Data_ServiceTickets_weekly_kreport_2024-02-08_09-05-02;

CR1001217: added ACL for deleting Spiceattachments [change request]

it is now possible to manage rights to delete Spiceattachments that were not created by the user

CR1001287: Campaign Task Improvements [feature request]

Adjusted target manager to accept multiple exclusion lists.
Added pre activate necessary checks on campaign task types

Post deployment action: set the new field is_generated_by_system to 1 for auto generate inclusion and exclusion lists.

CR1001259: Accept Duplicate Phase I [feature request]

The Duplicates Panel was enhanced. Now you can configure a list (like in a subpanel) with own fieldset.
A new functionality was added: "Accepting Bean as Duplicate". Sometimes, Elasticsearch suggests Beans as duplicates, which in the reality are not duplicates. These Beans can now be "accepted as duplicates" with a new button "ObjectActionCheckDuplicateButton".
When a duplicate Bean is "accepted", the button turns green and the Bean is not shown in the merge modal.

In the panel, the duplicates can be filtered by their status "accepted", "found" or "all".

As part of this enhancements, we added the possibility to display buttons in list item actionsets.

CR1001173: Account Bank Accounts - New Fields [feature request]

Added new field sepa_id, sepa_valid_from, sepa_valid_to and a link to company codes to the module AccountBankAccounts.

CR1001148: Conditional color highlight for items in lists, dashlets and tiles [feature request]

Sometimes it's necessary to highlight an item in the list, dashlet or in a kanban tile. An example of such use could be highlighting a Call which has the status "Not Held" and "date_start" is in the past. For this kind of scenarios you can now define specific conditions and set them up with the new action "set_model_alert" in the validation rules manager.

CR1001288: Reporter Cleanup Categories [change request]

removed deprecated KReportCategoriesController

CR1001270: EWS: check on deleted bean before saving [change request]

In case data run out of sync the EWS automated Heartbeart could try to save an event coing from MS Exchange to the CRM. For some reason the corresponding record in the CRM might be set deleted. Savng the record from MS Exchange would trigger a database query error.
We now check the record deleted flag in the CRM befire you run save. If the record is deeted, we just write a log.

CR1001284: Calendar fix update event display [bug]

When edit an event directyl in the calendar, save the change and then edit again the same event, the display would not show the latest values changed but the original event data. Now corrected

CR1001260: Amount of potentials within Opportunities was set to 0 on opportunity change [bug]

When you have an opportunity with potentials and some amounts already set in them for that opportunity, the potential amount would be set to 0 on opportunity change like sales stage change or any other change that does not include a change in one of the potentials. Fix implemented.

CR1001230: Frontend - Code Improvements [feature request]

Added new method openStaticModal to modal.service to enable rendering modals that statically loaded on the app bootstrap.
Changed modal wrapper to use the static method loaded.

Campaign Target Lists Manager: include all list types except system generated.

Calendar bug fix: when tab is inactive and an event is visible in the calendar has been saved in other tab and the next active tab was not calendar, then the events are displayed in a wrong position.

Campaign: Add Task: added save and go to button.

System Filter Builder: Duplicate operator lastndays cleanup

Related card footer: Pages total count fixed

Attachments Panel bug fix reload attachments after upload image does not work

CR1001185: SpiceCRM Installable [feature request]

Added the required PWA (Progressive Web App) Files to enable the PWA installability as a standalone app on several operating systems supported by most browsers.

CR1001206: Duplicate Workflow Definitions (including Task Definitions) [feature request]

CR1001193: Contextmenu + Drag & Drop Tabs [feature request]

Inspired by Chrome, a rightclick on a tab should open a context menu in which you can chose from the following options:

Clone Tab (maintabs only)
Close Tab
Close Other Tabs
Close Tabs To The Left
Close Tabs To The Right
Move to Main Tabs (subtabs only)

If there are no other tabs or tabs to the right/ left, the option should be disabled.

if the tabs are pinned, they will not be closed
Also possible on subtabs.

CR1001248: Fixes in CampaignTasks of type Feedback [bug]

The relationship between CampainLog and ServiceFeedbacks was missing and is need in the template. The questionnaire field was not displayed and is necessary to create a proper service feedback. The function CampaignTask::genereateServiceFeedbacks() was renamed to CampaignTask::generateServiceFeedbacks()

CR1001198: HotFix in cloneattachments for selectedfiles [hotfix]

made sure the selected files is an array

CR1001113: SpiceCRM SendGrid Synchronization [feature request]

CR1001283: Dictionary Improvements [feature request]

Cron: prevent run jobs in recovery or maintenance mode

CR1001134: Text Snippets Button [feature request]

Added a new button to the richtext and html editors to enable inserting a predefined text snippet.

CR1001302: Workflow Monitor Sort [change request]

Changed the workflow monitor list sort direction from ascending to descending.

CR1001256: first/last/inner/even/odd/index for spicefor loops [feature request]

Tested with Red Cross Styria.

CR1001293: Installation Requirements [change request]

New requirement php extension bcmath added to the CRM installation.

1000593: Merge functionality [change request]

Configure module for merge and define what shall happen with merged entry (delete or deactivate) in module definition;

refactoring of property duplicate_merge on field level to boolean only (used to be disabled/enabled); same property is now available on link fields: Related entries to a merged record will be linked to the record that is kept / remains active. => implemented in CR1000882

CR1001257: Delete GUID non-db fields from vardefs & dictionary definition [bug]

The GUID fields "acocunt_id", "opportunity_id" and "lead_id" are defined as non-db fields in the Notes vardefs. They have been created as varchar fields in the database because there entries in the dictionary definitions for these fields.

The vardefs for these fields have been deleted.
The dictionary definitions have been deleted

CR1001303: Campaign Log Tracking [change request]

Added new field external_id to keep track of the email status on the campaign log entry.

CR1001309: fix undefined error for maxupload, zip and read_receipt [bug]

fixed undefined error for maxupload, zip and read_receipt

CR1000792: Dictionary Manager Phase 2 [feature request]

Lots of interface improvements for a better usability. The Dictionary Manager is from now on the tool to use for variable customizations.

CR1001199: Show uploaded files when added at email forwarding [bug]

fixed files not shown when loaded from forwarded email

CR1001192: new admin configurator item type filter []

a new admin configurator type filter has been added to allow selection of a module filter in the config settings

CR1001200: Update on EU VAT ID (VIES) check [change request]

the VIES check to validate European VAT IDs against the services from the EU has beenslightls enhanced. Also logging is now available. Just enable logging on the route "/vies/*" in the API log config and the requests towards the VIES service will be logged.

CR1001208: Deactivate Record functionality [change request]

Some modules have a field called is_inactive. When set to true a record will no longer be found in search. But it will appear in a related record.
We added an indicator to make the inactive setting visible. The system automatically looks up for a field of type "is_inactive" (domain is_inactive) and renders the indicator without any additional necessary configuration.

In the SpiceCRM core a user having edit right is able to click the indicator in order to deactivate a record. An alert makes the user aware of the responsibility of this action. Only users with edit rights can activate and deacticate the record.

In the list view filter capability under "display all" we also added three new checkboxes:
- "active" = which allows to display only active records
- "Inactive" = which allows to display only inactive records
- "active & inactive" = which allows to display both active & inactive records

These checkboxes are be combined with the already existing checkboxes "all", "own" & "created by me".

Post deployment action: 1. Set the value for the field is_inactive from null to '0' on all your Beans, which implement the templates "company" and "person".
2. If you have a global filter defined in the FTS, which filters inactive records out, please remove it. You don't need it anymore.
3. Reset and reindex these Beans.

If you have any entries in the sysmodulelists table, add the following string "groupstate":"active" after groupscope into the fielterdefs field. Your entry should i.e. look like "logicaloperator":"and","groupscope":"creator","groupstate":"active","conditions":[]

CR1001222: Workflow Task Definition: parameters are not passed to custom action method in System task [bug]

The field parameters (technical name sysparams) was not interpreted in the System Handler logic (SystemHandler) and therefore of no use in the custom action method. Now parameters are read and passed to the custom action method as second argument,

CR1001238: SpiceCalculator [feature request]

adding the Spice Calculator being available as dashlet and as option in the currency field. it is also per default at this time enabled in the opportunity amount field

CR1001263: add Search Aggregate Charts [feature request]

in the aggregate search an additional option has been added to display the search result graphically as a chart. The user can choose and also set the chart type. Additionally the settings are also saved in the preferences. So the next time the user returns the aggregates are also as they have been before.

CR1001211: Change reminder and notification buttons to icons [change request]

the reminder and notification buttons in the page header are removed and are placed as icons with click function in the page header next to the module name. The functionality remains as is and it not changed

CR1001279: Open contact details when call comes in CRM [change request]

it is now possible to configure opening contact details in call when contact is found

CR1001276: Pass the event ID as source ID when activating a campaigntask related to a campaign of type event [change request]

The source ID in the campaignlog is currently used by the campaigntask of type "event with campaign". In some cases we might need to store the event ID as source ID when the parent campaign is of type "event".

CR1001269: MSGraph: wrong query to grab a contact by externalId [bug]

The query to check in a contact would alwaysfail. Fixed in MSGraphBeanHandler::getBeanByGraphId.
We also added some debug lines in MSGraphHandler::graphItemExists.

CR1001281: Reporter fixes for target list export on the fly [bug]

Improved screen for better useability; update is now possible

CR1001237: minor Changes to App Launcher [change request]

the App Launcher Dialog has been slightly modified. Module names are not up to two lines long allowing better visibility of the module name. Padding is slightly enhanced and the app Launcher Button is removed.

CR1001202: Workbench - Config Transfer Export Package [feature request]

Added the possibility to export specific packages in the config transfer. Also added the input field for file name.

CR1001264: added chart.js as new charting library []

chart.js has been added as new charting library. The component is added as the first implementation and will gradually replace the use of google charts in the application.

CR1001234: Backend - Improvements [feature request]

Adjusted person save to index the email address link together with the person data.

Adjusted Spice Importer to handle big files processing for a SpiceCRM system which uses an external stream for the upload folder e.g. google cloud storage.

Added "SUBSTRING" database function to DBManager::convert

SpiceBeanHandler: return relationship join table record id, if the bean was retrieved by a relationship link.

Email: bug fix: duplicated recipient addresses after (save on editing) email address

Compiler: prevent trying to misparse quoted string in spiceif

CR1001194: update user panel [change request]

the user panel and global actions have been slightly updated.
- the user details now open after the mouse is moved over the user image and also closes when the user leaves the area. No need to click any longer
- the "clear & reload" button is moved into the upper bar as little icon accompanied next to the workbench icon. Both icon buttons are only displayed for the admin user.
- the reload and workbench buttons were removed from the standard global header actions
- minor changes to some global header actions so the cursor is rendered as pointer to indicate that the item can be clicked

CR1001292: MSGraph bug fix [bug]

fixed bug: update participants event on microsoft 365 calendar does not trigger on changing a participant status.

CR1001246: Fix Date Picker on date fields in Reporter filter and operator equal [bug]

fix has been applied to render a date picker and date fields on the operator equals and not equals in reporter filter for fields of type date and datetime

CR1001228: Read receipt for e-mail [feature request]

It is now possible to configure the mailbox so that the users may send a read receipt when they send an e-mail. Currently only available for IMAP milboxes.

CR1001216: Property "ignoreCache" for fieldEmailTemplates [change request]

The ability to force the EmailTemplates to reload each time the EmailTemplates field is displayed.

CR1001204: Angular 17 Upgrade [feature request]

Upgraded angular to version 17

CR1001244: add WSDL style parameter properly to SOAP server [change request]

the soap endpoint is amended so the style parameter is interpreted properly. The WSDL can be generated by the URL api/soap?wsdl and allows the additional request parameter &style=rpc or &style=document to generate the WSDL in either RPC or document style. By default the style is rpc if not otherwise specified

CR1001290: search within related list [bug]

fixed searching only within displayed records

CR1001225: Move from PHPExcel to PHPSpreadsheet [Security]

the libraries from PHPExcel used for the Excel Export are replaced with PHPSpreadsheet. At this stage this is only applicable for the Reporter Excel Export but might replace other CSV Exports at a later stage.

Implication is a required PHP Version 8.0 from release 2024.01 on


Breaking changes


default Mailbox upload size set to 26214400 Bytes, check and correct after update if Mailbox have lower or higher limit


new validation rule
REPLACE INTO `sysuimodelvalidations` (`id`, `name`, `module`, `onevents`, `active`, `logicoperator`, `priority`, `deleted`) VALUES ('8fac0367-599c-018e-511f-0053810071ea', 'Require sladeviation reason ', 'ServiceTickets', 'initialize,change', 1, 'and', 0, 0);
REPLACE INTO `sysuimodelvalidationconditions` (`id`, `sysuimodelvalidation_id`, `fieldname`, `comparator`, `valuations`, `onchange`, `deleted`) VALUES ('07a2857c-cc7e-20af-693c-6e52d6d8e46d', '8fac0367-599c-018e-511f-0053810071ea', 'sladeviation_reason', 'empty', '', 0, 0);
REPLACE INTO `sysuimodelvalidationactions` (`id`, `sysuimodelvalidation_id`, `fieldname`, `action`, `params`, `priority`, `deleted`) VALUES ('1d06d1a0-505f-e0c1-4894-d4c1ccab297d', '8fac0367-599c-018e-511f-0053810071ea', 'sladeviation_reason', 'set_stati', '"invalid":true', 0, 0);


the legacy wildcard search is deprecated. Wildcards now can be used in term specific queries.


check subqueries in KReporter and replace the $ with a reference for {t}


php extension bcmath is now a requirement!
Check manually before you make a SpiceCRM upgrade. The check is only implemented in the installation process.


Remove all global filters from FTS settings, if they filter the Bean for "is_inactive" = 0.
Set the field value is_inactive = 0 on all Beans, where is_inactive = null. Will be the case for all beans extending Company, Person, and also for OutputTemplates, EmailTemplates
You will have to set the new value during repair process for the folowwing modules, depending on the packages you have:
Accounts, Contacts, Consumers, Prospects, Leads, Employees, HCMJobApplicants, OutputTemplates, EmailTemplates


For developers: Node version must be at least v18.13.0


From 2024.01.001 on php 8.0 is a requirement



CR1001184: Remove $ as referencet o current table in KReporter

the alias $ that was able to be used to reference the current table in a subquery in KReporter is deprecated and removed. This symbol is used to allow JSON functions and thus cannot be used in formulas any longer


This version contains many improvements for developers & administrators: automated cache reload for a more comfortable layout configuration; workflow monitoring dashboard and new components to display charts whereever in the CRM.

Workflow Monitoring for administrators

How many open workflows are there? Which ones failed? SpiceCRM is now equipped with a workflow monitoring dashboard displaying clickable charts and workflow lists to track errors or see which workflows are stuck because of decisions to be made.

Manage Business Trips

In the previous version we introduced a group of modules to manage employee skills and trainings. We added business travel modules so that employees can plan, log and settle up their business trips. You can define a workflow definition to get the business trip approved and get the whole expenses checked.

Re-designed template builder

We re-designed the template builder with usability in mind: more space to write and a preview. The SpiceCRM page builder can now be used to design any kind template: PDF or email. The name of the file when you generate a PDF can now be dynamically defined.

Email attachment handling

SpiceCRM enables to save email attachment on the parent bean like a contact or a service ticket. When you send an email from or retrieve an email to SpiceCRM you can easily clone the email attachments and save them on your parent bean. You can select one or more attachments to be cloned. The attachments which you have already saved are disabled from selection. The cloned attachments can be found under the “FILES” Tab. Please note that a file is only stored once on the server. When you clone, you only create an additional link to the attachment.


Release Details 2023.03.001


HotFix CR1001262: Drag&Drop emails from Outlook[hotfix]

Too precise check on the content array which would cause an upload cancellation

CORE fixes find Charset in Email [hotfix]

CR1001197: CORE fix loss of related names in embedded models in recnet service by deep cloning the data [hotfix]

CR1001196: fix disappearing related fields in salesdocs container [hotfix]

Product name would not appear in salesdoc item

CR1001195: CORE bugfix in get country name [hotfix]

Country name was not rendered properly

CR1001189: CORE HOTFIX for link to not throw error [hotfix]

CR1001188: HOTFix BCC Address in GMail Trait [hotfix]

CR1001187 EWS: fix heart beat subscription [hotfix]

When trying to revive a subscription we now catch if the user is active in the CRM and if the mailbox on the other side really exists. No exception is thrown, only an error message is log. Throwing an exception you break the EWS heart beat cron job

CR1001186: HotFix in Relationship definition for prospectlists_prospectlistunsubscribes [hotfix]

We corrected the relationship definition which would break any attempt to call a prospectlist. We also corrected 2 package configurations for the module ProspectListUnsubscribes
REPLACE INTO `sysdictionarydefinitions` (`id`, `name`, `tablename`, `tabletype`, `audited`, `sysdictionary_type`, `description`, `version`, `package`, `status`, `deleted`, `sysdictionary_contenttype`) VALUES ('1e1c42dc-56fa-4261-9525-fde57bcc7bfe', 'ProspectListUnsubscribe', 'prospectlistunsubscribes', NULL, 0, 'module', NULL, '2023.03.001', 'campaignmanagement', 'a', 0, NULL);
REPLACE INTO `sysmodules` (`id`, `module`, `module_label`, `singular`, `singular_label`, `icon`, `track`, `favorites`, `duplicatecheck`, `actionset`, `bean`, `beanfile`, `beantable`, `sysdictionarydefinition_id`, `visible`, `visibleaclaction`, `tagging`, `acl`, `acl_multipleusers`, `workflow`, `reassignable`, `reassign_modulefilter_id`, `version`, `package`) VALUES ('49a0cd95-aade-4704-80a2-956ee41e07b3', 'ProspectListUnsubscribes', 'LBL_PROSPECTLIST_UNSUBSCRIBES', 'ProspectListUnsubscribe', 'LBL_PROSPECTLIST_UNSUBSCRIBE', 'process_exception', 0, 0, NULL, NULL, 'ProspectListUnsubscribe', NULL, 'prospectlistunsubscribes', '1e1c42dc-56fa-4261-9525-fde57bcc7bfe', 1, NULL, 0, 1, 0, 0, 0, NULL, '2023.03.001', 'campaignmanagement');

Hotfix for CR1001130: recent.service: manipulating data before storing recentItems & moduleRecentItems objects in browser cache [hotfix]

The application would die after clicking a recent view item from the global search bar

CR1001111: Added backward compatibility for the display of the sender e-mail address [bug]

Systems containing imported e-mails before the technical change regarding the handling of the email address in an e-mail and their display will not diplay the sender (from) address. We added a workaround that will display the value of from_addr in case there is no entry in the dedicate e-mail addresses array.

CR1001142: Default FTS settings for e-mail addresses [feature request]

We added a better analyzer for the indexing of e-mail addresses. "spice_email_all" is now the default analyzer in FTS configurations where we index email1 field. Change manually on your instance after upgrade if you wish to use it. Increase max

CR1001175: Workflow System Tasks: No Dummy System Actions any more [bug]

It is no longer necessary to also specify a dummy SystemAction when using a custom SystemAction.

CR1001066: disabled logged in with microsoft [bug]

disabled active logged in with microsoft if user is not the current user

CR1001149: BugFIx: fieldQuestionnaire: QuestionnaireRender is not displayed [bug]

CR1001121: Navigation with keyboard in telephonysearchmodal [change request]

extended navigation with keyboard in telephonysearchmodal

CR1001055: Open PDF in subtab [feature request]

This feature enables opening SpiceAttachments (i.e. files, images, etc.) in a new subtab. With this change request, the attachments will open in a new subtab per default. The opening of the attachment in a modal was moved to the preview button.

CR1001088: Business travels: added some fields for to TravelSegments [change request]

In order to calculate the costs to be refund to the employee when they use their private car to travel we added 2 fields for now that store the costs per distance unit (costs_per_unit) and the additional costs per unit (additional_costs_per_unit. Example: the employee takes a colleague as a passenger)

CR1000878: Restrict API Users to specific IP Addresses [feature request]

CR1001046: Frontend Development - Proxy [change request]

exposed assets to dev server to enable fetch from assets while ng serve is running. e,g, the file /assets/icons/spicecrm.svg, will be retrieved properly on the dev server.

CR1001137: Bug Fix Page Builder Section Drop [bug]

Fixed bug page builder section drop not possible when the content height is bigger than the page height.

CR1001126: Additional operator "is not one of" for module filters [feature request]

We added the operator to be able to revert an "is one of" filter that would not be performant. Something like "open opportunities" would check almost all possible sales stage values (is one of Qualification or Analysis or Proposition or Proposal or Negociation). Using "is not one of" emables to check only Closed Won, Closed Lost and Closed Discontinued

CR1001071: Bug Fix - Page Builder Parse HTML [bug]

Fixed bug: Page builder cannot parse html element content with single quotes.

CR1001125: Minor Changes Backend [change request]

SpiceBean: process_list_query return the total count from the count query if a limit is set

DB: Added date_diff covert function to MysqliManager and OCI8Manager

Notes- Vardefs: Added new field external_id

CR1001129: Template compiler: added html body cleanup [change request]

When an html field is parsed in a template we need to cleanup the content so that only the body content is taken into account. Furthermore we need to remove unaapriopriate tags like style or iframe

CR1001132: Remain in the current view after deleting an e-mail [change request]

E-mails are deleted mostly from the activity stream. It happens when you drag&dropped an e-mail to the wrong contact (or any other record) . After deletion the user used to be redirected to the home screen. We corrected the configuration of the delete button in the action set "Emails Object Page Header" so that the user remains in the main record or the e-amil is just removed.

CR1001174: Letters Module is now part of activities variable definitions [change request]

When adding activities capability to a module, we simply add the "activities" template to the variable definition. This templates adds calls, meetings, tasks, emails and notes link and relationship defintiions. Now letters are part of it.

CR1001141: API Log Viewer: Prevent JS Error when JSON is invalid [bug]

The Problem/Bug: By default, the response to requests is represented as JSON. If it is not JSON, a Javascript error will occur and all output will break.
Solution: Catch JSON errors and display the response as plain text.

CR1001073: Email Templates - Attachments [feature request]

Added Attachments Panel to EmailTemplates to be returned on parse. Adjusted Workflow/EmailHanlder to send the EmailTemplate Attachments with the email. Added a new Relationship with Output Templates to generate a PDF Content as a temp Attachment for EmailTemplate parse return. Added a new field content_method on EmailAddress to call a system method to override and adjust the parse return value.

Post deployment action: Reload emailhandling package
Repair cache and database

CR1001097: Copy rule additional function nl2br for calculated value parameter [change request]

When we copy a value from a text field to an html field we need to convert breaklines into
tags. The function name to enter in calculatedvalue field in the copy rule is "nl2br"

CR1001083: Bug Fixes [bug]

Bug Fixed: Frontend field email addresses on cancel does not reset the changes. Focus lost on typing.

Changed model.service::cancelEdit to emit changes after resetting data from backup data.

CR1001165: Manage Teams and Access rights with organizational units and employees [feature request]

Post deployment action: reload core package

CR1001016: Documentation missing for executeCopyRules field config option [feature request]

set 1 to prompt for confirmation before copy
set 2 to copy wihtout prompting
already in description in fieldParent
Missing in the others.
Can we change to string? What about BCW?

CR1001171: Select all files when adding files from record [change request]

it is now possible to select/deselect all files when changing files from record

CR1001059: Bug Fix - Frontend Email Addresses Field [bug]

Bug fixed: Email addresses field when clearing the address and retyping, the existing email address is overwritten.

CR1001128: Campaign Task Deactivate Button [feature request]

Added a new deactivate button for campaign task to enable deactivating the task after it has been activated and delete all the unprocessed related log entries.
Adjusted CampaignTaskActivateButton and CampaignSendMailButton added unsubscribe and reload list.
Added an acl custom action "deactivate" to enable/disable the button.

CR1001062: LDAP multiple connections: only first connection would be looped [bug]

The ldap_settings table can contain multiple rows for multiple connection settings. When the first connection didn't work the logic went directly to the fallback check on a SpiceCRM standard authentication instead of looping through all connections before going to the fallback. Now corrected.

CR1001116: Opportunities potentials performance improvement [change request]

When potentials are in use and combined with opportunities performance in list view and Kanban view was bad since all potentials were retrieved for each hit. The logic getting the potentials was triggered in an after_retrieve hook. We moved it to Opportunity::retrieveViewDetails() so that potentials are only retrieved when the opportunity gets opened. We deactivated the corresponding hook in the potentialmanagement package.

Post deployment action: reload potentialmanagement package if you have it in use.

CR1001150: fix for wrong subject-encoding in emails [bug]

the condition for email-subjects encoding was using custom code for detection

CR1001140: Default FTS settings for phone numbers [feature request]

Looking up a contact using part a phone number is a common user scenario. Most phone numbers are entered with white spaces, brackets, hyphens or any other kind of character with which they try to make the phone number readable. A phone number like +1 (212) 435-2309 would be difficult to find if the user searches with 212435.
We added the spice_phone analyzer which makes it possible with elasticsearch 8 (!) to index the digits only.so that entering 212435 would return the contact with a phone number like +1 (212) 435-2309

CR1001106: Add file from record in attachments [change request]

added a button add from record in spiceattachments panel, now a file from a record can be attached to email without downloading the file

CR1001069: Merge Beans - Copy Relationship Fields [bug]

Bug fix: On merge m2m relationship fields were not copied. Like email address primary flag.
Adjusted the merge logic to consider copying the relationship fields for all links on merge

CR1001098: Reporter - New Date Operators [feature request]

Added new date operators "in the last n days" and "n days ago" to the reporter filter.

CR1001053: Configure fieldset/componentset for any status network button item [feature request]

This feature brings more flexibility to the StatusNetworkButtonItems. From now on, it's possible to render a different fieldset and componentset for each status field. OR one fieldset/componentset for all of the StatusNetworkButtonItems.

The bean Agreements has 5 different status values. The change of the status can be managed by StatusNetworkButtons, so the user can change the status on button click. Sometimes it's necessary to make amendments to data when changing the status (i.e. the custom wants to enter the reason for cancelling an agreement). In this case, the administrator, can define a different fieldset for this one particular status or for each status field. This brings much more flexibility because until now it was possible to define only one fieldset for all StatusNetworkButtonItems.

CR1001115: Added limit parameter for SpiceKanban component [change request]

Default number of records to be retrieved is 50. In the KanBan view it would load more since the 50 are applied to each Kanban Stage. It is now possible to set the limit in the module configuration for SpiceKanban.

Post deployment action: reload the core package to get the change made in ObjectRepository > SpiceKanban

CR1001117: Delete link tree does not delete when only 1 entry found in the list [bug]

In category trees manager you can link your tree to one or multiple modules and define the fields for which the tree values are meant. To delete such a definition, you select the tree then click the "link" icon. A modal window opens. You may click on the delete icon. The entry will disappear from the list. If you only had the one record the save button would remain disabled and therefore you couldn't confirm the deletion. We removed the check on the number of entries in the list which caused the save button to remain disabled.

CR1001145: WebSMS: Prevent sending with numbers containing non-digits [change request]

The Service WebSMS does not accept mobile numbers containing other characters than digits (except "+" at first position). So strip those characters before send.

CR1001172: Module filter & Elastic filter: added "n years ago" [feature request]

CR1001080: Developer mode removed [change request]

We removed the developer mode capability because of performance issues. We replaced in appropriate logic for error handling with the stack_trace_errors config variable.
The developerMode config variable used to be implemented in:

# ErrorMiddleware + DeveloperMiddleware + RESTManager
Replaced by stack_trace_errors
stack_trace_errors has now 3 possible values 0 (for off), 1 (will throw the main error information), 2 (will thrown the full stack trace)

# class SpiceCache => removed from public static function get($key)

# class VarDefManager::loadVardef => removed code part
No longer necessary since we have SpiceCache

# class LDAPAuthenticate was used for more detailed ldap log.
Logic moved to the check on the ldap setting ldap_debug (CR1001138)

# removed from class CoreController::getSysinfo()
added stack_trace_errors instead

# remove from class AdminController::getSysinfo()
added stack_trace_errors instead

# Removed from Workbench General Settings
Updated stack_trace_errors from boolean to int value

# Removed from Installer
added stack_trace_errors instead set to 0 by default

# Removed in class Configurator $allow_undefined
stack_trace_errors already present there

# Removed the frontend developerMode Panel for admin User

# Removed in session.service headers

# Added SpiceUtils::getStackTrace() which returns an int value 0, 1 or 2

# SpiceUtils::inDeveloperMode() is deprecated and now returns SpiceUtils::getStackTrace()

Post deployment action: remove developerMode from config.php / config_override.php

CR1001087: System Chart Components [feature request]

Added new System components SystemChartMultiDimensional and SystemChartOneDimensional to display a one/multi dimensional google chart.

CR1001058: Frontend Model Service - New Method [feature request]

Added new method rollbackRemovedRelatedRecords to rollback the marked to remove related records from the link_name.beans_relations_to_delete object.

CR1001103: Show a link even if the name is an empty string [change request]

Implemented in fieldRelate and also fieldLinked.
Text from label "LBL_RECORD_WITHOUT_NAME" is shown.

CR1001147: Missing fieldset input for component SpicePathRelatedListTiles [bug]

The SpicePathRelatedListTiles component may be used as a subpanel to display only the stage path for each item. See the open opportunities panel under an account. When the list of items gets longer you may click on "view all" to switch to the full list. Since the parameter "fieldset" was not registered in the SpicePathRelatedListTiles configuration you couldn't select which fieldset shall be used for that display. The system retrieved the core list view fieldset. We added the parameter "fieldset" to the component config so that you can now select any fieldset for the "view all" display.

CR1001070: Action Button serviceassigntobutton does not pass the status value properly [bug]

Using the ServiceTicketAssignToButton in a status network record would load the current status a serviceticket but not set the taret status defined in the status network record. We corrected the logic.

CR1001157: Copy componenset does not appear in componenset dropdown and breaks javascript [bug]

When you copy a component set the new componentset name shall appear in the dropdown list after save. It wasn't the case and therefore the whole view got broken. Fix done.

CR1001130: Improvements of Global Recent Items [change request]

- recently view items are not loaded on system start with load task item anymore
- are not cached in the backend but in the browser cache (appdata)

Post deployment action: Please delete the entry with the method "SpiceCRM\modules\Trackers\api\controllers\TrackersController->loadRecent" from the table "sysuiloadtaskitems".

CR1001072: Email Address - Set Invalid With Bounce Limit [change request]

Frontend: Disable editing invalid email address for field email addresses.
Backend: Added a new field "bounced_count" to EmailAddresses. This field will enable counting the bounce status before setting the invalid flag on the email address. If the limit set in the workbench/email address "is_invalid_after_bounce_limit" is exceeded, then the system will mark the email address as invalid. This feature is useful when using a mailbox handler webhook like "Mailgun" that might for some reason mark the email address as invalid but in the next try it come out that the email address is not invaild.
The default value of "is_invalid_after_bounce_limit" is 0 which means the system will immediately set the invalid flag for the email address.

CR1001091: Workflow - New Task Type Generate Bean [feature request]

Added a new task type generate bean, which enable creating a new bean out of the workflow source record. e.g. create a workflow that generates a contact out of a lead record.
Also adjusted the workflow task details view to show the type configs at the top e.g. email options.

CR1001136: Template Compiler - Body Only Param [feature request]

Added a new param "bodyContentOnly" to the template compiler to return only the content of the body element.

CR1001054: Workflow - Bug fixes [bug]

Bug fix: closing other tasks by system even if they are already completed.
Improved error handling. Start/end task no save on failure. Added save on task resolve before executing the next task.

CR1001178: new module OutputRevisions [feature request]

a new module and functionality has been added to manage, track and store PDF output files. The intention is to allow keeping record of PDFs generated and keep them as original. Preventing potential data loss as these documents might (e.g. in case of invoices or credit notes) be legally binding and need to be kept as original. The new function is added as new tab in the salesdoc and allow creation of new OutputRevisions, the display of them, the download, print and send via email. It also will keep track of who created new Outputs when and for what reason documented by a note from the user.

CR1001077: ServiceTickets: pass on a ticket and get it returned [feature request]

Following scenario: I work on a ticket located in the service queue of my department. I only have access that queue. In order to solve the problem described in the ticket I need to pass on the ticket to another department and when they are done I need to get the ticket back in my queue.
In order to request a ticket to be returned to the sender queue we added a "return to queue" flag in the "Switch Queue modal window". When the flag is set the system logs the original queue in the ticket. When the user of the other department opens the ticket, the usual "Change queue Icon (or button)" does not appear. The user sees another icon "return to queue". When the user is done with the job, a click on that icon will open a modal window "return ticket to Queue XY" and containing a comment field (as in the change queue modal window) .

CR1001060: SpiceImporter: import a csv file with only 1 value per line [change request]

We had a concrete case where the customer needed to import a CSV file containing only 1 value per line. We added the "end of line" delimiter option to make the import of such a file possible.

CR1001152: new DB Manager Method fetchAll [feature request]

a new methof fetchAll has been added to the DB Manager. This allows to send a query and get all records back for that query as array

CR1001086: Download Button for SystemObjectPreviewModal [feature request]

Some content causes problems with display, for example certain video formats.

Then the browser does not offer a download option. Even if content can be displayed, it may be - depending on the content type - that the browser does not offer a download option.

So there is now an explicit download button, offered by the CRM, to download any content of any type.

CR1001118: FTS Aggregate display of tree category renders label instead of the corresponding translation [bug]

Aggregate on fields of type fieldCategory would display the technical label name instead of its translation. We made the necessary correction in fieldCategory.display_value().

Post deployment action: Reload the service package after update.

CR1001095: Marketing Campaigns Improvements [change request]

Added new field unsubscribe_redirect_url to mailbox and a new system scope setting workbench/email tracking/unsubscribe_redirect_url.
When the user clicks on the system generated unsubscribe link in the email, the request is sent to the crm unsubscribe handler api to be tracked and then redirect the user to the given unsubscribe landing page url.

Bug fix: Email: style sheet is added before the html starting tag,

Added a function to opt out the email address when the user clicks on the system generate unsubscribe link.

Used the compiler for the mailbox footer and header

Added pre-send check on campaign task with the following conditions:
Recipient has is_inactive == 1 means true
Recipient has gdpr_marketing_agreement == 'r' means refused
Recipient has an opted out primary email address

Added new fields for campaign task:
save_email to toggle save the campaign emails
disable_marketing_agreement_check disable the marketing agreement granted check
disable_opt_out_check disable the email opt_out status check
disable_inactive_check disable the inactive flag check

Added new field activity_comment for campaign log to display a user friendly translated message for the email sending error reason.

CR1001063: Search Term Field - Improvements [change request]

Added new system component SystemInputSearchTerm to unify the search field layout and error handling. The new system field ist used in the list view, calendar, and mailbox view. Added error message icon and popup on the search field. Removed the max ngram check.

Post deployment action: Reload language package to get the error message label

CR1001092: Navigation with keyboard in field relate and field parent [feature request]

added navigation with arrow keys, enter and escape for field relate and parent, if only one matching result it will be accepted with enter click

CR1001096: Role menu manager interface improved [change request]

added prompt on delete of role, layout changed for better display

CR1001081: JobApplicant: activities and application evaluations [change request]

In 2023.02.001 we prepared the layouts for the JobApplicants module. In this release we added the necessary backend variable definitions in order to be able to use the activity side bar.

CR1001123: new filter for categorytree nodes in reporter [feature request]

added new filter type in KReporter so for fields linked to categorytrees the values per treenode are rendered as in an enum for easier reporting based on the category fields

Post deployment action: Check if you have any record in sysdictionaryitems whith that kind of field. They shall be removed and defined in files... with type category

CR1001061: Bug Fix - Outgoing Emails Corrupted Content [bug]

By outgoing emails fixed the bug: corrupted content added xml tag to the beginning of the emails instead of html.

CR1001114: ACL module actions will not be considered if there is a custom entry for that module in syscustommodules [bug]

Let say we have a syscustommodules record for the core module ServiceQueues. The record has a different id than its counterpart in sysmodules. We added an acl module action for ServiceQueues. The modulid stores for the action is the one from sysmodules. But the check on the action will use the id from syscustommodules. The action check will never return true,
We modified the SpiceModules::loadModules() so that the id of the core module is kept in the moduleDetails which are used for the acl action check.

CR1001135: Module List - Filter Context Param [change request]

Refactored "filtercontextbeanid" to "filtercontext" to accept an object of module data (module?: string, id?: string, data: object)

CR1001122: Change Tree link modal to allow selection from dropdown [change request]

in the tree manager for the category trees the modal has been amended to offer the fields from the module in a dropdown so no typing is necessary making the assignment of the tree easier.

CR1001127: Developer Code Improvements [change request]

Added a new frontend interface ActionSetItemI to be implemented when building a new action set item button component.
Added a new frontend interface ComponentSetItemI to be implemented when building a new component set item component.
Added a new frontend interface ModalComponentI to be implemented when building a new modal component.

CR1000933: Workflows - Improvements [feature request]

Added new task type to handle closing other workflows.
Added workflow a cron interval field to the workflow definition to enable running workflows on a specified interval date e.g. daily once.
Added field retention days to workflow definition to set a retention period for a workflow. Added Job "mark deleted retention exceeded workflows and their tasks".
Added permanently delete marked deleted workflows and their tasks.
Added manual, manual once workflow types to enable processing workflows manually.
Added workflow plugin to the reporter more to enable processing a workflow for the report result list or by the reporter scheduler.
Added a list of the manual workflows to the workflow panel view to enable processing the active manual workflows which matche the start condition.

Bug fix: starting scheduled workflows synchronously.
Bug fix: starting run once workflows even if the same workflow exists once.
Bug fix: saving the start task to the database if the start condition does not match.

Post deployment action: Reload package workflow

CR1001156: Missing link definition to emails when the parent is a contact, a consumer or an account [bug]

Emails are related to contacts, consumers and accounts in a many-to-many relationship. They also have one-to-many relationship to those modules per parent_id. Some definitions for the corresponsding relationships and the link to be used were missing. We added them so that a record merge would consider all relationship types.

CR1001102: Email display with base64 encodes images [change request]

An HTML e-mail body may contain multiple images which are embedded as base64 string by the CRM for the e-mail display. For the display as iframe we currently pass the full body content as base64 value. Unfortunately thre is a memory limit when passing a value to the src attribute of an iframe tag.
The new solution: we give a URL (CRM API route) to the src instead of a full base64 string. This way no limitation and the browser takes care of loading the content.
We added:
- the API route /module////html
- we defined the method getFieldHtmlContent() for Bean Objects that will be called by the api controller if the method exists.
- added a new config "iframe_as_blob_url" to field richtext to enable the separate api call for the content as blob url.

CR1001153: KReporter fix query built with limit 0, 0 [bug]

Somehow an empty selection limit was not interpreted properly. We now remove the start and limit parameters from query building when they are both set to 0.

CR1001076: FieldUrl new configuration parameters [change request]

Added new configuration parameters icononly, iconname and inputurl to field type fieldurl

Post deployment action: reload core package

CR1001094: New Mailbox Template Function - generateUnsubscribeLink [feature request]

Added a new template function for the mailbox footer to enable generating a trackable marketing unsubscribe link.

Post deployment action: Reload email handling package

CR1001133: ActionSet Manager: fix action config properties for standardActions buttons are not visible in Actionset Manager [bug]

Taking the DELETE button as an example: the DELETE button has the noredirectoncomplete property. This property is now visible in the actionset manager.

CR1001033: M2MRelationship - Reindex Beans [bug]

Fixed bug for m2m relationships that the beans relation was not properly indexed after adding the relationship. Problem discovered in the mailbox processor that assign all addresses to contacts but the email does not appear in the activity stream of those contacts.

CR1001167: Reload config button was removed [change request]

Admin users used to have the reload configuration icon on the top right of their screeen. This reload Icon was removed in 2023.03.001. Adminsitrators shall use the "reset&reload" button available in the window popping up after a click on their avatar.

Post deployment action: We removed the following entry from the Global Header componentset
REPLACE INTO `sysuicomponentsetscomponents` (`id`, `componentset_id`, `sequence`, `component`, `componentconfig`, `version`, `package`) VALUES ('e2af9a9a-0da5-8701-bf5b-0235a2d3197d', '5378fe86-58d3-b067-3ca6-30af9734bad7', 3, 'GlobalHeaderReload', '[]', '2020.01.001', 'core');

CR1001105: Download button for SystemObjectPreviewModal [feature request]

Some files (e.g. videos) are problematic; the browser displays them incorrectly. The only way out is to download the file. So a download button is needed.

CR1001138: LDAP settings: additional field ldap_debug [change request]

Value is 0 per default. When set to 1 the ldap option LDAP_OPT_DEBUG_LEVEL 7 is sent with the connection attempt. That ldap option LDAP_OPT_DEBUG_LEVEL used to be set when developerMode was on.

CR1001067: ObjectActionBooleanToggleButton [feature request]

This Button toggles a boolean field from 0 to 1 or vice versa
Which boolean field should be toggled can be defined in the actionset

CR1001084: Clone Attachments from Email to Parent Bean [change request]

The SpiceCRM enables to save e-mail attachment on the releated parent bean. When you send an email from or retrieve en email to SpiceCRM you can easily clone the email attachments and save them on your parent bean. You can select one or more attachments to be cloned. The attachments which you have already saved are disabled from selection. The cloned attachments can be found under the "FILES" Tab.

Post deployment action: Please reload the "Email Handling" package to get the newest configuration.

CR1001024: ServiceTickets: assign a user [feature request]

Assigning a user is now possible via assign button.

CR1001144: Campaigns: Sanitize send and test action buttons (also for SMS) [bug]


Until now the action buttons "send" and "test" are disabled (gray) when the type of the CampaignTask is not "Email" and not "SMS". In case of "SMS" the button is anyway disabled.

Modification: Don´t show them disabled, hide them instead.

Wird bei CRM4Blood schon verwendet.

CR1001085: New System Component - Input Cron Expression [feature request]

Added new system component "SystemInputCronExpression" that accepts a cron expression string and enable a user friendly setting for the expression values.

CR1001166: custom datefields sort direction [feature request]

In the fieldset configuration for a list it is now possible to define an expected sort direction on the first click applied to a sortable column. The first click will sort A->Z by default. Set Z->A where it is more likely to be expected.

CR1000738: LMS Training View [feature request]

Create a custom view that allows for easy navigation of training courses and their individual chapters

CR1001160: Workflow Timestamp & Improvements [bug]

Workflowtasks are now saved with a microsecond timestamp inside the field date_timestamp. This allows to better track the initialized and executed workflow tasks. The sorting of the workflow tasks is now done in the backend. In the fronted you can see the workflow tasks sorted by date_timestamp in ascending order.
The Workflowpanel has been improved. There is a new button which reloads all open workflow tasks.

CR1001093: Hooks manager improvement Webhooks [change request]

added webhooks to the hooks manager interface

CR1001108: Charset interpretation for e-mail display [change request]

.msg e-mail often lack a proper meta charset tag. We now analyse the html code before it is displayed and try to add UTF-8 when missing.

CR1001163: Sync to outlook button would not render [bug]

Having MS Exchange or MSGraph synchronization in use, a CRM user may decide to synchronize contacts from the CRM. By clicking on the "+ outlook" button, the user will trigger a synchronization between the CRM and its MS Groupware application. That button couldn't be rendered due to a data type change in the user configuration. Now fixed.

CR1001045: UI Config - Reload Cache Automation [feature request]

Adjusted the workbench components on save to automatically reload the frontend and the backend targeted cache. This will replace the "reset and reload" button.
Implemented for the following workbench components:
- Validation Rules Manager
- Select Tree
- Role Menu Manager
- Object Repository Manager
- Module Filter Builder
- Module Configuration
- Component Sets Manager
- Action Sets Manager
- Default Preferences
- Modules and Custom Modules

Other the other workbench components will follow in the next release

CR1001068: Address Referencing - Apply on Merge [feature request]

Adjusted address referencing logic to update the parent id field for the referenced children on merge

CR1001151: SalesPlanning Tool: use BeanFactory::getBean() to create an instance of a class [bug]

Syntax corrections in some of the classes where an object of the class itself is initiated: use BeanFactory::getBean() for that and not new self() or new [ClassName]

CR1001100: Height value set in the fieldconfig for a richtext field for not processed properly by the html editor [bug]

The height set in fieldconfig and passed to the editor was not interpreted correctly. The parameter height has to be entered with a unit like px. or the editor we nee dto remove the unit if given.

CR1001119: Backend Mailbox Transport Handler Code Improvements [change request]

Added a DispatchResponse class as a return type for the TransportHandler::dispatch method to unify the response object returned from the email handler. This helps preventing bugs for further mailbox developments.

CR1001075: spiceurls [feature request]

It's possible to save external URLs per drag and drop in CRM.
There is a new "SpiceUrlsPanelHeader" which displays the uploaded URLs. If you want to add it to a (custom) view, create a new ObjectTabContainer", select your "ObjectTabContainerItem" and link it to the core componentset "Urls Container" which holds the component "ObjectRelatedListUrls".

CR1001065: Load default graph ActiveAPI [change request]

added loading of default graph config

CR1001029: Frontend - ObjectListView - List Component Config [change request]

Pass component config from the componentset to each list component to enable more flexibility configuring the list components. One important restriction: you cannot use ObjectList as list component.

Post deployment action: I am currently not able to replicate the desired effect, as it is a new feature I will postpone debugging to release 2023.03.001

CR1001154: Added option "truncate" to fieldhtml [change request]

added option "truncate" to fieldhtml, if set takes the html as as and adds a class specific for truncating markup

CR1001090: Minor Changes Frontend Components [change request]

SystemModelProvider: Prevent initialize if module empty. Set the model id event if it's undefined.
SystemDropdownTriggerDirective: Max width of the list content same as the width of the trigger.
SystemSelect: Show pill container on blur. Replaced @Input [selectList] with the new child component SystemSelectOption. New syntax:

Page Builder: Layout improvements stretch the builder field container in display mode.

Bug fix: edit modal in fullscreen is behind the editor container.

FieldSystemLabel: Added config option added display_as_translated to display a translated label in view mode.

Object Table added loading stencil and fixed header inputs

Scheduler Job Method: Bug fix: on edit modal method empty

CR1001146: Removed activity_status_date_modified mapped in rel_fields in Calls + Meetings within links to contacts, users and consumers [change request]

This field is not in use and might trigger an mysql error when inserting records in the many-to-many tables calls_contacts, calls_users, meetings_contacts, meetings_users. meetings_consumers. Since we have no implementation of this use we removed it. Should you need to store the date when the accept_status was set, please create a custom field in the many-to-many table and add the mapping for the rel_fields.

CR1001143: FTS Settings and max_ngram_diff too small when increase max_ngram [bug]

The FTS index parameter max_ngram_diff is set to 20 per default. It represents the maximal value for the difference between the min_ngram (default 3) and the max_ngram (default 20). If you set max_ngram to 30, the difference would make 27 and exceed the 20. This would prevent you from creating the FTS index by returning an error. We therefore now set the max_ngram_diff with the same value as in max_gram so that the max difference allowed is always higher than the real diffrence.

CR1001131: Moved frontend event components located under campaigns to events module [change request]

Moved components: EventRegistrationButton, EventRegistrationModal, EventRegistrationModalList, EventRegistrationModalType, EventWithCampaignActivateButton

Post deployment action: reload campaign management and event management pakages if in use

CR1001139: Retrieve Service Tickets [change request]

The function retrieve() and its callable have been rewritten for ServiceTickets Class. When the details of a ServiceTicket are retrieved, the method "retrieveViewDetails()" is being called.

Post deployment action: Please make adaptations if you have customized this method. Call the method "retrieveViewDetails()" instead of "retrieve()"

CR1000861: SpiceCRM Standard for ServiceTickets [change request]

Use of ServiceTickets in SpiceCRM is now settled.

CR1001159: fix for proper display of calendar week [bug]

in the datepicker and the calendar under some circumstances the week of the year was not calculated properly. This has been changed so it is always calculated based on the thursday in that week according to international rules.

CR1001109: Fixed double service call container at incoming call [bug]

Fixed double service call container at incoming call after expanding and minimizing

CR1001107: Search records within related list [feature request]

You can now search for records within a related list: a search field is available in the related list panel and in the "view all" list

CR1001008: new price determination logic [feature request]

new price determination logic is added to the sales docs in SpiceCRM. At this time this is on request only and has no UI to maintain the pricing schemas etc. This will be extended in the future to enable flexible pricing in the CPQ Scenarios.

CR1001124: Workflow Monitor [feature request]

Replaced the workflow list view with the new monitor view. The new view renders a set of configurable charts which provides an overview of the system workflows by status and other parameters. Besides a table list is rendered which respects the selected point on the chart.

CR1001101: Richtext field content was truncated in display view [bug]

When the field content is not HTML but plain text (as an example from a plain text e-mail) the text would be displayed in 1 one and tehrefore truncated. We now pass the field-generic-display-notruncate input parameter so that slsd-nowarp class is not applied for the fieldRichText display.

CR1001089: Module filter: added "not equal", "not equal current user", "equals current user" operator for relate field value [feature request]

Typically used in a module filter with scope "created by me" but not assigned to me. Make sure your indexed user fields in use (assigned_user_id, created_by)

CR1001079: Task Manager view: participants of an task edited task will be set in the next task you edit [bug]

Participants are now correctly displayed and will not be passed from one task to the next

CR1001164: Sync to outlook button: dynamic route depending on selected groupware (MS Exchange or MS 365) [change request]

Having MS Exchange or MSGraph synchronization in use, a CRM user may decide to synchronize contacts from the CRM. By clicking on the "+ outlook" button, the user will trigger a synchronization between the CRM and their MS Groupware application. We added the trigger to Microsoft 365 (MSGraph API).


Breaking changes


The configuration variable developerMode no londer exists. Use stack_trace_errors instead.


The backend function "loadRecent()" has been modified. Please delete the entry with the method "SpiceCRM\modules\Trackers\api\controllers\TrackersController->loadRecent" from the table "sysuiloadtaskitems".


All Campaign Tasks type Email which expect the email to be saved must set the field save_emails to 1.
All Campaign Tasks type Email will not send an email when one of the following conditions match:
Recipient has is_inactive == 1 means true
Recipient has gdpr_marketing_agreement == 'r' means refused
Recipient has an opted out primary email address
To ignore this checks the new disable flags must be activated disable_inactive_check, disable_opt_out_check, disable_marketing_agreement_check


Non -db field activity_status_date_modified in Contacts and Users is no longer available. Customize your instance if you need them.


In case you have any customization, please note that the components EventRegistrationButton, EventRegistrationModal, EventRegistrationModalType and EventWithCampaignActivateButton are now to be found under ModuleEvents and no longer ModuleCampaigns. Please, modify your layout configurations accordingly.




SpiceCRM 2023.02.001

SpiceCRM now features a group of modules to manage staff administration requirements such as skills, follow-up on employee vocational training and the monitoring of employee needs such as vacation, sick leave, hiring and more.

Human capital management

In version 2023.01.001 we introduced some employee management features. We redesigned the employee layout to administrate vocational education, career measurements and hence get a 360° view of the employee. Activities can be logged and access to employee information is restricted solely to the granted and authorized users.

The Human Capital Management package also contains configurations to manage the employee hiring process. For bigger companies it could be interesting to prepare job offers in the CRM, publish them to a landing page and gather the job applications. To facilitate the selection process it is now possible to prepare a questionnaire that can be utilized during the interview. It will also be possible to compare , in this way , the hiring criteria and this will in turn guide the decision regarding the best candidate for the job.

Segmentation of accounts by main activity

The NACE/SIC Codes loader makes it possible in a few clicks and some configuration to make use of international company activity classification in SpiceCRM. Both NACE and SIC standards are available in English and German. The classification shall help marketers to segment accounts by their main activity and achieve more efficiency in campaigns based on companies’ main activity.

Whitelisting for developers & testers

Some good news for those who have been running e-mail or sms campaigns: we introduced a whitelisting functionality to enable the use of test e-mail addresses or mobile phone numbers on test environments. Just add the authorized e-mail addresses / mobile phone numbers to the whitelist field meant for this purpose in the mailbox configuration. Only the selected recipients addresses / phone numbers will receive the mass e-mail/text message sent. This is a handy way to test a marketing campaign.


Release Details 2023.02.001


CR1000975: Float fields rounding down entered number on specific decimal digit combinations [bug]

Entered value in fields of type float or currency would be rounded down depending on their length the the kind of digits entered after decimal. As an example entering 2082.22 would result in 2082.19. This was due to the use of Math.floor when converting the entered value to a number. We now only use parseFloat().

CR1000931: Removed api/include/language folder [change request]

Content of the folder has been deprecated since 2022.02.001. Folder is now removed.

CR1001056: Set Current Language [bug]

Added new function which sets the current language either from the syslangs table or from the user object preferences.

CR1000925: voipcalls table: additional fields [change request]

The fields date_entered and date_modified are now part of the table voipcalls. It makes it easier to look for specific calls registered in the table.

CR1001006: Email Addresses - Validation Improvement [feature request]

Added a new flag international email addresses to workbench/General Settings/Advanced Settings to enable/disable using international email addresses RFC 6530. Added domain check on email address on save and in the frontend field email addresses. Invalid emails will immediately get the flag invalid_email on save.

CR1000948: Email: set assigned user when empty [change request]

Whem an e-mail is imported to the CRM via drag&drop the assigned user of the e-mail shall be the current user

CR1000947: Mailbox: from address not set in Email record when sending e-mail with MSGraph mailbox [bug]

Interpretation of mailbox settings had to be reviewed

CR1000928: KnowledgeBooks: print a book [feature request]

Print a book using an output template is now possible

CR1001021: API - Find Bean By Fields [feature request]

Added new GET API /module/{beanName}/find to find a bean entry by the provided retrieve fields values. The request query params must include the param retrieveFields as an object with the field name and value as key value of the object.

CR1000974: new fieltype statusnetwork [change request]

added a new fieldtype for statusNetworks. This allows to set model status based on allowed status changes also in a view or list.

CR1000983: EWS Synchronisation: added parameter to force update []

In 2022.03.001 we added a function that would push CRM changes in an event to Exchange only if mapped fields were changed. In complexe customizations that method might not detect changes. This is why we added the configuration variable SpiceCRMExchange.alwayPushUpdateToEWS. When it is set and true the change detection will not be performed and the CRM calendar event will be pushed to Exchange each time the use pushes the save button.

CR1001022: Marketing Automation - Email Tracking Links [feature request]

Added the functionality to track marketing emails clicks and tracking pixels.

Post deployment action: Configs needed:

Workbench/Email Tracking:
tracking_pixel_url http://localhost/crm/api/email/o/
tracking_clicks_url http://localhost/crm/api/email/t/
blowfishkey 2fs5uhnjcnpxcpg9

track mailbox check to activate the tracking pixel for openness status

CR1001026: ServiceTicketStages: save all the data of mapped fields [bug]

On service ticket save a record of serviceticketstage is created when any change in mapped fields was made. It used to save only the changes values. Now it saves all the values at the time the change of onyl 1 value. We add an entry on serviceticket creation so that all steps can be followed in the history panel.

Post deployment action: reload Service package

CR1000986: Administration Configurator Edit: added info icon [change request]

It is now possible to add a long description to the label in use so that some explanations can be displayed on mouseover.

CR1001047: MSGraph integration: fix retrieving e-mails from mailbox [bug]

Depending on the length of messages the API response contains a further link to retrieve more "pages". This link wasn't passed properly in our logic. Now corrected.

CR1000923: Event Subtype & Cleanup of the Event Module [change request]

Invention of the field "subtype" for EventCapacityTypes, to differentiate or group the Types.
In addition, an extensive revision of the modules is necessary, including some bug fixes.

CR1001023: fix set call or Meeting participant status when MSGraph and EWS are run in the same CRM instance [change request]

When you migrate from Exchange on Premise to Microsoft 365 you might need to run the calendar synchronization with EWS or MSGraph deopending on the user. Until a user's mailbox is migrated to 365, they will synchronize using EWS. When a user accepts an invitation in the CRM, their partipation status can be sent to 365 but not to EWS. The logic now catches properly if MSGraph synchronization for 365 can be triggered.

CR1000981: new indicator for inbound/outbound mail [change request]

the email status indicator in the activity stream item has been updated to visualize also if an email was outbound or inbound.

CR1000999: Page Builder - Section Attributes [feature request]

Added edit button on section hover to modify its attributes

CR1000984: EWS: admin comopnent in workbench []

We added a component in the workbench to administrate all EWS Integration settings. In order to be able to implement the configuration view we had to refactor some of the variable settings:
Old ['curl_options'][81] to verify_ssl
Old ['curl_options'][64] to verify_peer
Old ['PushSubscriptionRequest']['StatusFrequency'] to PushSubscriptionRequestStatusFrequency

CR1001012: Additional config parameters for fieldRelate [change request]

It is now possible to disbale the lookup stored recent items and searched items. Parameters: disablerecent and disablesearch can be set in the field confguration. Might be handy when you want to force the user to open the the full list of related items

Post deployment action: reload core package or process SQL:

REPLACE INTO `sysuiobjectrepository` (`id`, `object`, `module`, `path`, `component`, `deprecated`, `description`, `componentconfig`, `version`, `package`) VALUES ('ca70633c-d1a3-4de1-9dbb-f49b997a8c71', 'fieldRelate', 'cf986fbd-7ee6-4733-af7d-a2867126334c', NULL, 'fieldRelate', 0, NULL, ',"executeCopyRules":,"modulefilter":,"disableadd":,"disablerecent":,"disablesearch":,"displayicon":,"promptondelete":,"relatefilterfield":,"relatefilterrelationship":,"relatedfilterrequired":}', '2018.02.001', 'core');

CR1000995: Create SalesDoc in new tab and not modal [change request]

the behaviour for creating new salesdocs has been changed. This is no longer rendered in a modal but in a separate tab. As a salesdoc is more of a complex object that might also take some time to be created this makes more sense from a usability point of view to handle it this way and thus increase the user experience.

CR1000934: B2C Added Link Consumers - Online Profiles [feature request]

Added link between the Consumers module and the ContactsOnlineProfiles module. Added Online Profiles panel under consumers related tab.

CR1001013: Bug CI Manager [bug]

all the colours that are changed are now saved. Added a reset button to return to original values

CR1001032: SchedulerJobs - Logger Improvement [feature request]

added filtering and sorting options to the logger panel for the scheduler job/task logger panel.

Post deployment action: Filtering for dates is there, I hope that is what was changed

CR1001011: MSGraph fix accept invitation in CRM [bug]

Wrong class Handler name in use in Calls & Meetings

CR1000982: Calendar: added groupwareDisabled component config [change request]

It is now possible to set Calendar.groupwareDisabled in the Calendar compoment in order to prevent the user to display nonsynchronized events from his groupware calendar

CR1001030: Added some help icons in workflow manager to try to explain the meaning of the fields [change request]

The workflow manager offers much flexibility designing a worflow. We tried to improve its usability by adding help texts to some areas of the manager.

CR1001020: Help Text Button & Modal [feature request]

A new button was created "ObjectActionHelpTextButton". Its purpose is to render a long help text in a modal.

Use case: When the space inside the standard info icon is too small for the help text.

CR1001001: Angular v16 [Security]

Upgraded angular to version16 which has some security and performance improvements

CR1001044: Fix adminstrate report categories [bug]

It was no longer possible to save report categories in the workbench due to wrong dictionary definition for metadata table kreportcategories.

CR1000914: HCM Module JobApplicants [feature request]

CR1000914 is an extension of CR1000879

You will need to load the hcm package for testing

CR1000949: add CampaignLog to Email Template Compiler [change request]

added the bean CampaignLog to the handler for sending emails fro a campaigntask. With {CampaignLog.xxxx} all attributes and also links from the CampaignLog are accessible in the email template compiler.

CR1001050: Layout Improvements [feature request]

Create a system component SystemSplitContainer that renders a split content with expandable sides.
Enabled toggle expand for the home component and the assistant
Enabled toggle display the dashboard panel in the dashboards editor.

CR1000942: Role module manager usability improved []

It is now possible to select a default dashboard or a default dashboard set via dropdown instead of copy/pasting the correspondig id

CR1001036: Flexible Cancel Pending Requests [hotfix]

Issue: When using modellist.service in a component and calling getListData, the list didn't show on first load due to the backend call cancelPendingRequests.

Solution: A new property was added "cancelPendingRequests" which is per default true. It can be called in your component with modellist.cancelPendingRequests and set as you require. This way you are more flexible when developing new components.

CR1000964: fieldCategories: add double click on value to remove current value [change request]

When a value is already selected xou can delete it bei double clicking on the value. After double click the value is removed and the focus is set into the search field. Since focus is triggered, the dropdown should appear.

CR1000996: Template Editor View - Layout Refactoring [change request]

Improved the layout details view layout for the modules CompaignTasks, EmailTemplates, OutputTemplates and LandingPages to make editing templates easier.

CR1001043: SpiceBean: retrieve_by_string_field() and encoding [change request]

Default value for $encode parameter was changed from true to false.
That should ease the use of that method which has been retrieving data wih htmlentities on special chars like ", and '

CR1000991: Display no Data Illustration in empty relate Container [change request]

Display a no Data Illustration in relate container if no configured component set is found

CR1000994: stateful tabs [change request]

added tabdata to the navigationtab service so a tab can keep its own state and data. This enables e.g. in the admin tabs if tabs are opened and the browser is reloaded that the admin tabs keep their loaded adminactions. For developers this means that in a tab the property tabdata can be read and written and can store data for the tab on its state and data that is also cached in the browser session.

CR1000950: Close ticket and SLA overtimed [change request]

When you close a ticket and the SLA time is over a modal window pops up. You are asked to enter an explanation why the SLA was overtimed. We added an explanation text and a warning icon in the modal window display. The explanation itself is store in the ticket in the field deviation_reason.

CR1000987: EWS Settings: refactoring of some config variables [change request]

It is now possible to enter the Exchange settings (using EWS) via the workbench. We simplified the configuration and refactored the variables ['SpiceCRMExchange']['PushSubscriptionRequest']['StatusFrequency'] to ['SpiceCRMExchange']['PushSubscriptionRequestStatusFrequency'] and ['SpiceCRMExchange']['curl_options'] to ['SpiceCRMExchange']['verify_ssl'] & ['SpiceCRMExchange']['verify_peer'].
The logic considers the old names in case you forget adapt your settings after the SpiceCRM update.

CR1000961: Change tree value: remove current value on double click [change request]

In a tree (component fieldcategories) you can use the icon X to remove the value currently set. Now you can double click on the value to remove it and open the tree to select a new value.

CR1000969: CRM Calendar displays both events in CRM and as external in 365 [bug]

With 365 synchronized events shall not appear as 365 event in the CRM calendar when the users open their calendar.

CR1000963: Config transfer: added a button "select custom only" [feature request]

Hit the button to have only custom tables selected (= table name contains the word custom).

CR1000970: fieldcategories and escape key [bug]

The listener on escape key wasn't terminated and caused performance issues with other fields. Working for a while with records using this type of field would result in delayed typed characters in any other input field.

CR1001014: Cache accounts custom lists [bug]

custom lists created in Accounts are now saved and displayed without logging out

CR1000962: Sorting for Multienum fields [feature request]

created an option to have multienum values sorted alphabetically

CR1001028: VAT Check correction [bug]

VAT check in accounts is returning correct message

CR1000954: Richtext with simple text and break lines [change request]

When you change a field from text to richtext in a fieldset layout, the current data will still be displayed but without the breaklines. We added a conversion of the breaklines to html
tag so that texts remain readable.

CR1001051: add delay when selecting aggregates [change request]

added a delay when selecting aggregates so multiple items of one aggregate can be selected or deselected before a reload of a list happens. This increases usability as a user can click multiple items and then the list waits for 1second until no further changes happens and then reloads

CR1000998: Email Templates - Bug Fix Styles [bug]

Problem when sending emails the email styles tags were misinterpreted. Fix covers all the mailboxes

CR1001019: Name display from Userpreferences [change request]

the full_name fields is now displayed iwith format from user preferences

CR1000985: Load Language: Added autocorrection of label ID changes [change request]

Sometimes the ID allocated to a language label changes. Until now this would trigger an error on language package load. We added a function that will replace the old ID by the new one and also re-map the ID in any custom translation that would exist for the corresponding label.
Information about changes made in custom translations will be pushed to the new warnings section added to the response of a language package load.

CR1001035: Email Whitelist [feature request]

Possibility to restrict email sending to a whitelist when sending emails in a test environment.

CR1001002: Template Compiler - Include Comments [feature request]

Added the option to include comments for the template compiler to generate the template comments with the compiled content. Important for conditional comments for IE html compatibility.

CR1001031: change address fields [change request]

amended the logic of the address field so so empty segments with commas separated are removed in the displayed value.

CR1000980: NACE/SIC Codes Loader [change request]

added a loader component in the workbench that allows loading files for industry SIC/NACE codes and use them in accounts for the industry classification following industry standards. A text file needs to be pasted and the user can select the levels of depth to be imported. The files used are also in the repository in folder /api/modules/Accounts/siccodefiles. The imported files will generate a select tree that then can be assigned to the accounts sic_code fields.

CR1000935: Move ticket to another queue: search functionality for the queue [change request]

The change queue button in a service ticket triggers the opening of a modal window in which you can select a service queue. Until now a full list was displayed without any search capability. Now the usual list with search capability is displayed. Only 1 queue can be selected as it used to be.

CR1000936: Data Stream Refactoring [feature request]

Moved UploadStream class to DataStreams\wrappers\UploadStream
Created StreamFactory to handle getting the path prefix of a stream.
Created new table sysdatastreams to hold the system stream wrapper definitions. Moved the legacy cdn to a new stream CDNStream.
Created GoogleCloudStorageStream.

CR1001038: Keep value for bean action until after save [change request]

SpiceBean class has athe property _bean_action which makes it possible to know if we are in a creation or an update. The property was reset before calling the after_save logic hooks preventing us to know in such a hook which action was triggered. We moved the unset at the end of the save function().

CR1000890: Update VIEW Interface [bug]

fixed the new namespace used by the European Union for the VIES VAT ID Check so it it properly checked again.

CR1000989: Page Builder - RSS Feed Element [feature request]

Added a new RSS feed element to the page builder to enable parsing from an RSS feed url.

CR1000978: add systemUpdate to SpiceBean [change request]

added a new parameter systemUpdate to the SpiceBEAN Class. If set to true before saving this will trigger a forced update on the changed bean on the client if the socket service is active and bypass the session check. Intention is to be able to force updates from Objects to the frontend if that happens systematically (e.g. if one bean updates another one and should communicate this to the frontend)

CR1000946: Module Qualications removed [change request]

The module itself and its related layout configurations were removed from SpiceCRM.

Post deployment action: DROP TABLE qualifications;

CR1001004: SystemDeploymentCRs Upgrade ListView Type [feature request]

"upgrade view" in a "display as" drop-down list

CR1001052: update on Statistics to have separate call on StreamFactory [change request]

as part of the stream factoryChanges also the statistics have been updated adding specific call on the StreamHandler class to get stats. If the calss implements this can be handled special ways to optimize performance. Specifically with 3S buckets like on AWS or GCP this implements specific API calls to improve stats performance significantly

CR1000993: Cleanup Recordview Companycodes [change request]

Cleaned up the Record view of the company codes. Removing the activities tab and the header details line in the page header.

CR1000990: Procurement Module [feature request]

CR1001048: ListView - Remember View [change request]

Saved selected view type component to user preferences so that the system will remember the selection after re-login.

CR1001000: Fix send email with MSGraph mailbox & Workflow [bug]

When using a mailbox with MSGraph Handler e-mail status wouldn't be set to "sent" even if e-mail was sent successfully. The response is now properly interpreted and returned.

CR1001003: KReports: improved listview fieldset [change request]

The default reports listview can now be sorted by name and date modified. You can also see the base module selected for the report and the allocated category.

CR1000992: Cleanup Products View [change request]

the View Layout for products has been cleaned up. Into a 1 only view with the tabs. The details on the header has been removed as this is not really needed here. The tab with attachments is moved into the main tabs and the notes tab has been removed.

CR1001007: Boolean bullet colors configurable [change request]

It is now possible to specify a css class for the display in a fieldset

CR1000953: DBManager - Encoding Strings [change request]

Removed the call of DBUtils::fromHtml in the quoteInternal method to prevent decoding entities before save.
Removed the call of html_entity_decode in SpiceBeanHandler::mapBeanToArray to prevent decoding any html entities before returning a response.

CR1001010: Limit number of items in aggregates to 5 []

amend the Aggregates view. By default only 5 items are shown. If more items are available a more link with the number of more items will be shown and the aggregate panel can be expanded. This allows also to have aggregates with more items loaded and still be able to limit scrolling.

CR1000997: Reporter - Filter Label [feature request]

Changed the reports designer filter name to display an editable label of the field, solving any naming conflict in the reporter filter panel.

CR1001018: MSGraph: admin shall be able to manage subscription [change request]

Only user themselves have been able to turn on/off their 365 subscriptions. Now an admin user can do it for the users

CR1000920: SpiceInstaller: improved overview for System requirements []

Improved listing for requirements checks to make the difference between PHP version check, php extensions checks and directory access permission checks.

CR1001027: syststatusnetworks now has a custom counterpart [change request]

Added table systcustomstatusnetworks. Domain setup in this custom table will prevail over the core table, The domain status network definition is retrieved either from the custom table or from the core table. If you need to customize 1 button, you will have to copy the whole thing to custom and adapt the proper record.

CR1000988: MSGraph fix UTC datetime in event editing [bug]

Events are sent as UTC from CRM to 365. In the 365 calendar events appear with a date time corresponding to the user's timezone set in 365. But as in event editing mode the time is displayed as UTC. This makes it difficult for users to keep track of the proper date time they agreed to.
We added a fix to avoid that behaviour by sending the time zone set for the user in the CRM.

CR1000960: Empty Color Picker [bug]

CR1001049: System Slider Component - Layout Adjustment [change request]

Adjusted the layout of the system slider component to show the incomplete part of the slider in grey color.

CR1001039: SalesDocs: call a function to get a document number [change request]

The logic to get a document number is now packed in the function "getSalesDocNumber" in the SalesDoc class. This way you can customize it by extending the class and overwriting the function.

CR1001005: Validation rule with unset active flag is still active [bug]

When the flag active is set the validation rule is applicable. When the flag isn't set the validation rule shall be ignored. This behaviour has been corrected.

CR1001040: Dashlet configuration: added parameter resolvelinks to force the retrieve of related records [change request]

The default behaviour of the call for a list will prevent from loading related records. This is because of performance issues on big systems. In some occasions like displaying a meeting dashlet on a dashboard with the typical accept/decline/don't know buttons we need to ensure that the related records (the users selected as participants in our case) will be loaded. The link definition is set to true and passing the resolvelinks parameter will trigger the loading.
The dashlet configuration displays the correspondig checkbox.
Of course it possible to use the resolvelinks parameter in any other API call for a list.


Breaking changes


UploadStream refactor under api\custom if used:
Class SpiceCRM\includes\UploadStream moved to SpiceCRM\includes\DataStreams\wrappers\UploadStream

"upload://" dir prefix under api\custom if used:
Replace hard coded "upload://" with SpiceCRM\includes\DataStreams\StreamFactory::getPathPrefix('upload')

In order to use the legacy cdn create a Stream in the workbench with the following fields:
name: cdn
class_namespace: SpiceCRM\includes\DataStreams\wrappers\CDNStream

Use StreamFactory::getPathPrefix("upload") instead of directly using the hard coded string "upload://" in file_put_contents.



CR1001064: Removed: menu item "Repair Database" in the workbench

As announced in release 2023.01.001 the menu item "Repair Database" was removed from the workbench.



SpiceCRM release 2023.01.001

2023 started with a Bang!!!

Check the usability enhancements

Security Enhancements with this new Release

  • angular framework upgrade to 15.2.2
  • improvement of security server settings by using .htaccess files 
  • the introduction of a 2-factor authentication with confirmation code sent either by SMS or by email.

MySQL8 & ElasticSearch8 Support

We know you have been waiting patiently for THIS!!!
We have even added optional username & password support for ElasticSearch.

Easy management of layout roles & logic hooks in the workbench

We have made the life of administrators much simpler!!
There won’t be the need to access the database anymore in order to enter the settings.


Release Details 2023.01.001


CR1001009: Missing duration value in call when entered in activity stream [hotfix]

We modified the fieldtype used for date start display from datetime to datetimeduration and removed the duration field. Please, reload the core package to get changes.

CR1000971/CR1000972: 2-Factor authentication [hotfix]

Behaviour was wrong on first login after turning on 2-Factor authentication

CR1000977: fixes for Extended PDF viewer [hotfix]

PDF preview can now be rendered without any browserextension (see CR1000900). The preview didn't work properly. It is now fixed.

CR1000966: Retrieving module lists for current user [hotfix]

The non-global lists created by a user was not shown in the dropdown. This fix enables to retrieve all global and private lists created by the current user.

CR1000965: Caching of the activity stream configuration [hotfix]

activity stream configuration is now being cached by the system. It might happen that the activities are shown in the "past" and "planned" activities tabs. This has been taken care of by adding a scope when retrieving the configuration for activities data (in the SpiceFTSUtils.php file).

CR1000960: Color Picker in CI manager does not display the colors[hotfix]

Only white squares were displayed in the color picker panel. Now the proper colors are displayed.

CR1000959: Entry in Config Table overwrites value in config [hotfix]

Entry in Config Table overwrites value in config.php

CR1000958: MSGraph removed query parts based on package name [hotfix]

The config for MSGraph synchronization used to be stored in the same table as EWS configs. We split applicaitons and had to cleanup some code.

CR1000955: CacheViewer: fix for display [hotfix]

Key search in standard file caching wouldn't deliver nay records. Now fixed.

CR1000952: QuestionSets [hotfix]

Cleaned up special Field, only used in a custom branch.

CR1000946: Module qualifications set deprecated [deprecation]

Module Qualifications located in User Details will be removed in 2023.02.001

CR1000944: DictionaryVardefsParser: field set to required when it is not. [bug]

Required field was not interpreted from the proper table field. Fixed. Had the effect that a non required field would have been set required depending on system setup.

CR1000896: Specify sort order of module list in parent field [change request]

Until now order was set by module name translation. We added the parameter sortbyparenttypes that will force to sort modules as entered in the parenttypes input field

CR1000893: ValidationManager: see deactivated rules [change request]

Currently when you deactivate a validation rule, the only way to re-activate it is to go to database directly and set the active flag. Now deactivated rules are highlighted in the list and can be activated by setting the active flag directly in the interface.

CR1000879: Human Capital Management [feature request]

Managing employees career within the company is now possible. SpiceCRM features an employees module in which you can administrate acquired skills, have an overvew of trainings and manage measures all around their job career. The Human Capital Management package is part of SpiceCRM more edition.

Post deployment action: load hcm package

CR1000894: Speed up Questionnaires [change request]

CR1000903: Modelutilities: fix in compare cases [bug]

Model validations using lessequal or less couldn't be evaluated properly since modelutilities compare did not evaluate less and lessequal but wrongly named cases lesser and lesserqual. We corrected the case values, kept the old ones in case any custom component would use the old case values.

CR1000887: Additional Validation rule action set_value_from_user [feature request]

It is now possible to set a value that is set for the user or one of its preferences

CR1000900: Extended PDF-Viewer [feature request]

The Extended PDF-Viewer helps to see the pdf documents without installing PDF viewer extension for browser.

Post deployment action: run npm install

CR1000853: Workbench Interface to administrate hooks [feature request]

Administrate LogicHooks and WebHooks through new workbench interface.
- Add/Edit/delete when workbench core editable is turned on. Else only list hooks per module including generic hooks with *
- Add/Edit/delete custom hooks
- activate/deactivate Hooks
Caution: core hooks are delivered per package. Re.loading a package would reactivate a core hook . That's why we currently use a custom entry with the same hook configuration as the core one but with hook_active = 0. We may think of a better way to hande this.

CR1000892: SpiceImport with method choice [change request]

adding a functionality into SpiceImport to allow choosing class and method for data handling depending on requirements

CR1000917: Angular Upgrade to version 15.2.2 [Security]

CR1000771: Workbench Role Manager - interface to administrate the main menu for a role (role- modules allocations) [feature request]

Allocation used to be done manually in the sysuirolemodules table. We now introduced a visual interface to administrate the records.

CR1000881: ServiceQueues and ACL permissions on tickets [feature request]

Allocate orgunits to service queues and interprete ACL permissions to access tickets.

CR1000906: KReporter send scheduled reports [bug]

Sending a KReport per email as CSV or Excel to one or multiple email adresses.

CR1000880: ActivityTimeLine: missing ActionMenu next to long subject text [bug]

When the subject a call or meeting or an activity is very long the ActionMenu (arrow down) used to disappear. Now corrected.

CR1000919: BWC ServiceFeedbackController [change request]

Little correction in ServiceFeedbacksController::saveAnswers: create the evaluation record; set servicefeedback status to completed

CR1000873: Harden /api/.htaccess [Security]

We added some settings to the .htaccess and ./api/.htaccess to reinforce application security

CR1000902: SpiceImport scheduled processing with line limit [change request]

adding a functionality fo the Spice importer to process big files in parts in the scheduler

CR1000891: KReporter Treeview fixes [bug]

Optional component name in the presentation layer for a tree view was not returned to frontend and therefore not rendered in the report. Additional fix to properly store field IDs needed to group for the tree.

CR1000926: Calendar - Month View Add On Click [feature request]

Added on click add modal for calendar month view.
Bug fixes displaying multi and absence events.

CR1000937: Avoid updating specific configuration records on package update [change request]

Some packages contain basic configuration records that may be changed as used in the instance. As an example: service ticket number ranges. In case of a package update the range would be overwritten which would reset the next number to get for a ticket. The list of respective tables is SpiceUiConfLoader::insertOnlyTables.

CR1000786: EventBooking Panel and Manager [feature request]

Capacities can be defined for an event. These define certain stations that provide services in the context of blood donation. Each of the capacities has a period of use, which may also deviate from the dates of the appointment. Each capacity also has associated appointments that can be automatically created according to a template (e.g. appointment slots of 15 minutes each). These slots can then be booked as part of the reservation.

Capacities can also be pooled (e.g. a resource with a capacity of 4 - if 4 offtake stations are operated). In this case, there is no dedicated assignment to a specific capacity, but to a pool. The final allocation takes place ad hoc on site.

CR1000882: Refactored property duplicate_merge to boolean [change request]

Variable definition property "duplicate_merge" is now a boolean. deprecated value "disabled" and "enabled" are now respectively false and true. All definitions in vardefs files were cleaned up. When the property is not set then it means true.

CR1000898: added Elastic8 support to Installer [change request]

added the required additional fields to the fts settings in the installer.

this mainly is about https support, the ssl verify options as well as username and password for an authenticated connection.

CR1000908: Spice Importer - Added Reject Key on Insert [feature request]

Add new functionality to Spice Importer that allows setting a selected key value when loading new records to avoid the creation of duplicate entries.

CR1000841: Revision Notifications [feature request]

Post deployment action: Documents Package

CR1000921: Chrome Extension - Manifest V3 [change request]

Upgraded the spice chrome extension manifest to version 3 with inbox sdk.

CR1000850: Specific ID for Questions [feature request]

The specific question ID is questionnaire-wide, is non-random and is to be defined by the user.

CR1000868: Lightening Design Upgrade to 2.20.1 [Security]

CR1000883: CampaignTasks - Targets Manager [feature request]

Created the campaign task targets manager to adjust the targets for a specific campaign without the need to adjust the original target lists.
The manager is accessible through the manager button in the campaign task details view header.
The manager view enables the user to include extra entries to an auto generated inclusion list. It is also possible to exclude entries to an auto generated exclusion list which will be considered when the campaign log is generated. The user can mark entries as seen to work the list on different phases.

CR1000930: Dropdown Trigger - Added Mobile View Sticky [feature request]

Added option stickyOnMobile to SystemDropDownTrigger directive make the dropdown container stick to the bottom of the window in mobile view. This is now enabled for the date picker.

CR1000863: SpiceSoap fixes [bug]

Some fixes to be really be able to use that old soap integration

CR1000867: Angular Upgrade to version 15.1 [Security]

CR1000905: Channel field for EventBookings [feature request]

Save the origin/provenance of a Event Booking (CRM or Web).

CR1000910: Convert prospect to contact or lead [feature request]

CR1000929: Security Improvement [Security]

Used hash_equals to comapre user password hash to prevent timing attachs.

CR1000858: MSGraph - Exchange Hybrid [change request]

For customers moving from Exchange to 365 we split the ms graph mapping tables from the ones meant so far for both exchange and 365. It is now possible to switch the type of synchronization between Exchange and 365 in the user preferences.

Post deployment action: download graph packages, repair database, repair dictionary cache, repair file cache

CR1000927: LDAP Login - use optional filter for login check [change request]

It is now possible to define a json string that will be rendered for filter option when performing the User login. This is needed when you need to check on a group dependency in a hierarchical LDAP group structure by applying the "memberof:1.2.840.113556.1.4.1941:" filter.

CR1000862: Upload files: set a default category [feature request]

It is now possible to set a default category to the component rendering uploaded files. When the parameter is set with the ID of an atachment category the file container renders the file list of this default category. Furthermore we fixed 2 bugs: reload the list after a file was deleted and allocate the selected category to an upload.

CR1000864: System configuration to cache files [feature request]

We refactored SugarCache to SpiceCache to improve performance on loading system configurations (load tasks, language labels, dictionaries...) . Files are stored in the server tmp folder or as defined in your environment. The files can be cleaned up by using the "repair external cache" action in the workbench. They will be automatically created as they are needed. The file caching is turned on per default. If you want to turn it off, check the box in the general settings-
For debugging purpose it is also possible to see the content of the cache files: use the cache file manager in the workbench

CR1000839: Deployment tool - improvements phase 2 [feature request]

Added System Landscape management to connect CRM systems together and handle the deployment process (loading released packages, deployment files and data)

CR1000901: Text display: strip HTML tags [change request]

In a list view or in a dashlet we can already display truncated text. If this text contains HTML Tags, then the tags will be visible which makes reading the text almost impossible. We added the option "striphtml" in the fieldText component. When set html tags are stripped so that plain text can appear.

CR1000708: Integrated PDF Viewer [feature request]

Integrated pdf viewer library to render pdf content. This replaces the required chrome extension.

Post deployment action: Run nmp install

CR1000943: Shortext cut on multibyte character will prevent load task "user step 2" from success [bug]

In Favorites and Reminders we slice the text for display purpose. If slice would fall on a multibyte character it would break the script when trying to json encode the results. This has been corrected.

CR1000904: Field Categories: added ESC key press event to hide category tree [feature request]

When the category tree is open there was no other possibility to select any category from the tree in order to close it. Now users may press escape key on their keyboard

CR1000801: SpiceMailToken [feature request]

The SpiceMailToken adds a sequence of letters and numbers to the email address of your mailbox (i.e. crm+26df3dcb9c24e73089808c27a552bab0@twentyreasons.com). With this hashed email address you can easily send emails outside of the CRM.

When retrieving your emails in CRM, the Mailbox (where you used SpiceMailToken) will automatically link the Email to the Bean. You can create multiple SpiceMailTokens and send them in one email. All of them will be found by the processor and linked to the Bean.

Techn. descr.:
The SpiceMailToken adds a sequence of letters and numbers to the email address of your mailbox (i.e. crm+26df3dcb9c24e73089808c27a552bab0@twentyreasons.com). This sequence is a hashed combination of BeanName and BeanID. The token is being hashed with md5.

In order for the button to be visible, please make sure that your Bean is of type “link” and the module “Emails” is not missing in the vardef declaration of your related bean.
Please add to your mailbox the following entries:
processor_class: \SpiceCRM\modules\Mailboxes\processors\SpiceEmailTokenInboundProcessor
processor_method: processTokenEmail

The SpiceMailToken-Button is visible in the Activities panel next to the filter button. The button is has a hashtag symbol. When you click on it, the hashed token email address is automatically copied and you get a confirmation (a green toast with your hashed email address)

CR1000897: enable adding ObjectListViewContainer in a separate subtab [change request]

adding a capability to open a module listview in a separate new tab

CR1000889: New method ACLAccessFTSQuery() on beans to define additional access logic for FTS query [feature request]

public function ACLAccessFTSQuery(): array
The method is only called if it exists. We pass the aclFilters array per reference and enrich with specific filters. Array is built as in SpiceACL::getInstance()->getFTSQuery
getAclFTSQuery is called if it exists in SpiceFTSBeanHandler::getModuleSearchQuery()
Example of use: users can only access service tickets if the tickets are linked to service queues that the users are allocated to.

CR1000869: SpiceLogger and LogViewer update Stage I [change request]

Additional column sub_loglevel for syslogs

CR1000916: Frontend - Cancel Pending Requests [feature request]

Added the functionality to cancel the API pending requests on tab close, or for certain action.

Improved SystemOverlayLoadingSpinner and added cancel button for the spinner. Added @Inputs asOverlay and cancellable to SystemSpinner.

CR1000856: DemoData generation for Calls and Meetings [feature request]

Generation demo data for calls and meetings for testing purposes.

CR1000871: Set a default dashboard set for a role [feature request]

It is now possible to set a dashboardset ID in a role definition so that this dashboard set is used as default when the user has not his dashboard set preference

CR1000886: sugar_version.php removed [change request]

File ./api/sugar_version.php was removed.
The version is now detected on installation by reading ./package.json (in the root folder of SpiceCRM). Old sugar_version.version variable is deprecated. Use SpiceConfig::getSystemVersion() to grab the value if needed in backend logic. Value is stored in config table, system > version

CR1000909: Global & List View Header - Layout Adjustment [feature request]

Added Collapse Button to the global header to gain more of the page height and also reduced the list and details view header height for users who use SpiceCRM from laptop.

CR1000907: EmailTemplateEditor: fix module source for preview [bug]

The configuration in EmailTemplates would enforce "Contacts" as the value for preview module. This was changed by introducing the component config variable "previewForBeanField". When this variable is set in the use of the component, the proper module shall be available in the preview. Please, reload emailHandling package after upgrade.

Post deployment action: Reload emailHandling package

CR1000918: Audit log display user name for assigned_user_id value [change request]

Workaround to display the user name in the audit log instead of user ID for changes in field assigned_user_id. Because of performance lost, we created the SpiceConfig variable auditlog.readable which needs to be set to true in order to perform conversion from value to user name. This workaround is only temporary.

CR1000877: Global Navigation - Loading Progress Bar [feature request]

Added pending requests count functionality to the backend service to draw the global navigation progress bar

CR1000922: Attention developers! package.json and npm install [change request]

After latest Angular update we had to workaround in order to make sure that packing the application (npm run build) will provide the right outcome. Please follow these instructions before you run npm install,.Please run
npm config set legacy-peer-deps true
Then run
npm install

CR1000866: elasticsearch 8.5 [feature request]

elasticsearch support 7.5 and higher within 7. Now elasticsearch 8.5 and higher is available. We also added user name / password support to login to elasticsearch and extended the number of options you can set directly in FTS Connexion settings.

CR1000911: Review 365 packages [bug]

msgraph package to download the 365 default mapping for Calendar events, tasks and contacts is now available in package loader under "contents"

CR1000872: SystemTree - Item Custom Actions Template [feature request]

Added @Input customButtonsContainer to SystemTree Component to render the provided template as the item custom actions.

CR1000941: Validation rules events [change request]

old event name "all" is no longer checked by the validation rule service. Please, make sure you check the boxes "initialize" and/or "change" when configuring your validation rules.

CR1000899: add sort icon to storable columns [feature request]

added a sort icon that indicates sortable fields in listview headers and relatedlist headers. Making it thus easier for a user to immediately see which columns can be sorted in a view.

CR1000885: Refactored sugar_config to spice_config [change request]

Deprecated variable sugar_config is now spice_config.
Backward compatibility added to ensure safe upgrades: content of sugar_config will automatically be passed on to spice_config.

CR1000854: Rich Text Editor: double scrollbars [change request]

In the e-mail add container in the Activitystream, the component for the richtext editor has a scrollbar. When the e-mail text gets longer, an additional scrollbar is automatically displayed in the text are. This confuses the users. Is it possible to remove the component scrollbar and just keep the text scrolbar?

CR1000924: sysservicecategories is no longer required per default [change request]

Field sysservicecategories is no longer required per default in modules ServiceTickets and ServiceCalls.

Post deployment action: I case you have any implementation where the requirement is important, please add a validation rule to make the sysservicecategories required

CR1000913: Login Improvement - Keep Me Logged In [feature request]

Added keep me logged in option to enable the the browser to remember the user login after closing the browser tab.

CR1000874: PotentialManager bug fixes [bug]

Some fixes due to older architecture changes: consider the switch of the company code and load proper data; consider refactoring of backend route applying getRevenues()

CR1000912: Security - Two-Factor Authentication [Security]

Added two-factor authentication methods for more secure verification process. Settings can be selected under workbench > Login management.

Post deployment action: Repair database
Reload core package
For SMS method package Text Messages and a mailbox Required
For Email method package Email Handling and a mailbox Required

CR1000865: MySQL 8 compatibility [feature request]

Using MySQL 8 is now possible


Breaking changes


Review your configurations like model validation conditions or any custom component using the modelutilities compare method. Use less instead of lesser. Use lessequal instead of lesserequal.


Create new column duplicate_merge manually on any Upgrade
ALTER TABLE `sysdictionaryitems` ADD COLUMN `duplicate_merge` INT(1) NULL DEFAULT '1' AFTER `labelinputhelper`;
ALTER TABLE `syscustomdictionaryitems` ADD COLUMN `duplicate_merge` INT(1) NULL DEFAULT '1' AFTER `labelinputhelper`;
ALTER TABLE `sysdictionaryrelationships` ADD COLUMN `rhs_duplicatemerge` INT(1) NULL DEFAULT '1' AFTER `package`;
ALTER TABLE `sysdictionaryrelationships` ADD COLUMN `lhs_duplicatemerge` INT(1) NULL DEFAULT '1' AFTER `package`;
ALTER TABLE `syscustomdictionaryrelationships` ADD COLUMN `rhs_duplicatemerge` INT(1) NULL DEFAULT '1' AFTER `package`;
ALTER TABLE `syscustomdictionaryrelationships` ADD COLUMN `lhs_duplicatemerge` INT(1) NULL DEFAULT '1' AFTER `package`;


If you already use the 365 integration, you will have to download graph packages after the update. Then move your custom mapping definitions to the new custom tables defined for graph integration. Re-test the synchronization before you go productive with the update.


Create additional column manually for table syslogs!
Statement for MySQL: ALTER TABLE `syslogs` ADD COLUMN `log_sublevel` VARCHAR(25) NULL DEFAULT NULL AFTER `log_level`;


The pending requests for model.service, modellist.service etc will be canceled in the Angular ngDestroy hook.
Be aware that this behavior will lead to cancel requests initiated by a child component of a modal when the modal is closed before the requests are done.


Validation rule service now only check events by name. Possible values are: initialize | change
Please, check you validation rules in your customer projects and check the proper boxes where necessary.



CR1000940: Deprecated workbench > Repair database entry

The menu item "Repair Database" in the workbench is now deprecated. It only renders a description of where to find the buttons you used to have udner "Repair Database"

CR1000932: Variable definition field type json to longtext is now deprecated

We will use column type json from 2023.02.001 on. Make sure you have dbType property in your custom definitions to keep the text type if wished. Or make sure your json column contains a clean JSON string without break lines in order to upgrade the colum type to JSON in SpiceCRM version 2023.02.001.

CR1000826: Cleanup SpiceUtils

Set "deprecated" all unused functions in SpiceUtils.
Removed include/utils.php
moved sugar_die() to SpiceUtils::sugarDie()
Removed UnifiedSearchAdvanced.php


The “Unicorn” release is out!
This release contains many little fixes and completion steps regarding 365 integration and marketing automation.

Full 365 Integration

In the last release we implemented the event calendar. Now the Integration covers address book contacts, tasks as well as mailing. Integrated with the 365 Single Sign On functionality, CRM users will have full synchronization with their 365 activities.

Marketing automation

SpiceCRM offers simple marketing automation capabilities that will suit small and medium companies. The combination of campaign & workflow modules is a powerful tool that can be used to manage the response of a marketing campaign. Send a mailing, define the actions to be triggered on incoming response, or automated reminders or the handling of bounced emails.

Event management & campaigns

A typical process when dealing with events is to invite targeted people, then check on who registered, who should get a reminder, hold the event and finally send a satisfaction survey to those who attended the event. The new feature makes it possible to create registrations from multiple target lists, and then manage mailings according to event registrations and their status within a campaign task.

Release Details 2022.03.001

CR1000763: Mandatory TOTP Authentication [feature request]

Generation of the TOTP authentication during the login process.

CR1000759: Homedashboard message handler for wizard [change request]

Included a case for "handleMessage" in homedashoard.ts, that should reload the Dashboard upon completing a wizard.

CR1000803: Fix currency administration [bug]

Save a currency in currency administration panel would not work because the route called was deprecated. The route is now updated from admin/writesettings to configuration/settings.

CR1000851: Save record for sysauthconfig in workbench does not work [bug]

Save logic would break since a check is made on id field which is not present in the table sysauthconfig. Added missing id field definition for table sysauthconfig.

Post deployment action: repair/rebuild, run add id field

CR1000649: View Module Folders [feature request]

CR1000832: Telephony - Herold Search [feature request]

Add herold.at search API on the telephony popup docked call.
If the caller number was not found in the CRM, the herold.at search will be done.

CR1000838: EWS handle Body value according to Text | HTML mapping [bug]

Outlook sends a full HTML file in event texts. We extract the content of the body tag, and when the field mapping for the event Body is set to "text", we strip tags so that text only is saved in the CRM.

CR1000814: System category tree: added option sort by translated name [change request]

Entries in the category levels have been sorted by key. Now it is possible to define in the fieldconfig of a "categories" field if the sorting shall be done by key(will be default) or by translated name

CR1000807: ServiceTickets: save prolongation reason to sladeviation_reason [bug]

Prolongation description is now saved to the ticket in field sladeviation_reason

CR1000689: Calendar - Search [feature request]

Added search input to calendar to filter the events based on the search term.

CR1000779: MS Graph - ToDo Tasks Integration [feature request]

Added microsoft graph ToDo Tasks integration. Please note that the tasks synchronization requires a login to the microsoft account. Use Single Sign On capability with 365 in the CRM to make it easier for the users.

CR1000822: Address Fields - Referencing Feature [feature request]

Added referencing feature to the address field, that enables the address fields for a bean to be referenced by other related bean. Like contact address could be referenced by the related account address. Each time the account address is updated, the contact address will be updated by the system.

CR1000830: new route to retrieve bean with external id [change request]

added new route /module/{beanName}/{externalId}/external to allow retrieval of Bean by ext_id if the module has an external id

CR1000818: Calendar translations for short version of weekdays and months [change request]

Translation capability was missing in some parts of the calendar: short day names and short month names in the views: day, 3 days, week, month and schedule.

CR1000775: Cleanup deprecated module CampaignTracker [change request]

Removed ./api/modules/CampaignTrackers folder ; removed tracked_urls link defined in Campaigns module

CR1000800: Agreements adaptations [feature request]

We moved account_id + consumer_id to a prent field capability.
We added many-to-many relationships with a role for accounts and contacts.
Drag&Drop of a file will generate an Agreement Revision. We also added agreement conditions from which we can trigger workflows like a sending a reminder when validity date of the agreement is approaching.

Post deployment action: UPDATE agreements SET parent_id = account_id, parent_type="Accounts" WHERE account_id IS NOT NULL AND account_id '' AND deleted=0;
UPDATE agreements SET parent_id = consumer_id, parent_type="Consumers" WHERE consumer_id IS NOT NULL AND consumer_id'' AND deleted=0;

CR1000793: Table name definition for dictionary SystemHolidayCalendar is wrong [bug]

Table name shall be systemholidaycalendars (not systemholidaycalendar)

Post deployment action: Migrate entries you might have in systemholidaycalendar table to systemholidaycalendars after the repair/rebuild action

CR1000809: LDAP Authentication fallback to default CRM Authentication [change request]

In case you have users that shall login through LDAP and other external user having no Active Directory user, login logic now calls the default CRM authentication when the user was not found in Active Directory. Please, note that the external user shall have external_auth_only set to 0.

CR1000778: Add popupHelper property to dictionary manager [change request]

It should be possible to define the helper label to use for a field defined in a dictionary item.

CR1000791: Set some default preferences during installation process [change request]

Additional installation step: set some important default preferences like date time formats, number format... so that users will no longer be prompted to set those after first login.

CR1000687: Spice EWS - Config Request Options [change request]

Added set curl options to EWS fetchEmails to enable overriding the request configuration from spice config.
Config can be passed in config table in JSON format.

CR1000808: LDAP Authentication fixes [bug]

Missing functions in LDAPAuthenticate class; added capability to add further ldap attributes that shall be retrieved. A new column ldap_fields was defined to that purpose in the table ldap_settings.
Enter fields as a json string like . An array of key value pairs corresponding to ldap attribute name and crm property name on user object.

CR1000860: ServiceTicket save function revisited [change request]

Old logic: status like In Process, Pending Input, Closed would remove the assigned user on save.
New logic: we keep the assigned user as set during "take on" or changed later in the process.

CR1000833: Phone numbers Parser functions not consistent [bug]

When Telephony package is in use, phone number formatting is checked on save and adapted for elastic search index. We harmonized the logic guessing the country code.

CR1000837: EWS sync only to exchange on critical change [change request]

Currently any change in a call triggers an update to Exchange. An update is only necessary when 1 of the mapped fields is changed. We added a check on those fields.

CR1000831: add option for ext auth only when adding user [change request]

added new option checkbox when creating user to set ext_auth_only flag so users can only login with LDAP or OAUTH. small cleanup in add user dialog.

CR1000852: select editor for email templates [change request]

It is now possible to set with which editor a template shall be edited: rich text editor, page builder or html.
Default is html.

CR1000835: Actionset Manager: fix edit mode after adding new actionset [bug]

After adding a new custom actionset to a module, we had to unselect/reselect the actionset so that edit mode would be turned on. The mode is now checked on change so that the workaround we just described is no longer necessary.

CR1000834: Repair a list of given dictionary names [feature request]

Make it possible to repair only a selected dictionary

CR1000796: MSGraph: clean html sent by 365 [change request]

MSGraph delivers the content for event description as a full html page with style tags and unnecessary overhead. We grab the content between the body tag to save to the CRM.

CR1000765: PDF Export of Entire Questionnaire Evaluation [feature request]

CR1000762: Added assigned user id to campaign log [change request]

The campaign log record now contains the assigned user id of the campaigntask.

CR1000824: Improve performance by settings additional table indexes [change request]

Tables involved:

CR1000776: MS Graph - Mailbox [feature request]

Added Microsoft Graph Mailbox Transport Handler. Now it is possible to add a Microsoft 365 global Mailbox and fetch emails to the CRM

CR1000795: Fix retrieve SpiceAttachments Categories [bug]

The where clause would only be applied correctly when the field is_system contains 0 or 1. The query fails when the value is null. Default value 0 is now defined in spiceattachments_categories table and the is_system flag can be set in workbench interface. Update existing data by setting 0 where is_system is null after you made your SpiceCRM update.

Post deployment action: Update existing data by setting 0 where is_system is null after you made your SpiceCRM update.
Reload core package to get proper field list in workbench.

CR1000799: MSGraph: encode microsoft ID when passed to graph api [bug]

Microsoft generates IDs that may contain a slash. We need to double encode the slash

CR1000787: Fix set all notifications as read [bug]

Set all notifications as read would set not only the current user's notification as read but also the notifiations of other users. Only the current user's notification shall be set as read.

CR1000806: Improved logic to set respond until and resolve until dates for ticket according to SLA [change request]

Logic now tries to find proper match in definitions before it falls back on default SLA.

CR1000774: Report Designer - Relationship & Audit Fields [feature request]

Added Relationship and Audit fields to report designer tree

CR1000745: Microsoft Graph Service Integration [feature request]

Added Microsoft Graph Service Integration to handle Microsoft Calendar and Email APIs integration.

CR1000849: add apiOnly as access option for REST Route [change request]

added the option to add apiOnly as validation option for a route so that only api users can access that endpoint.

CR1000768: add ExecuteCopyRules on Parent Field [change request]

add an option to set ExceuteCopyRules on a parent field similar to as it is set on a relate field.

CR1000816: ServiceTicketNotes: strip tags in subject [bug]

Added a strip_tags when extracting the value for the field name in ServiceTicketNotes; Changed extracting to mb_string in the truncateString util function.

CR1000836: SpiceTemplateCompiler: pass on compiler and bean to SystemTemplateFunctions [change request]

Make bean and compiler usable for the SystemTemplateFunctions.
With the compiler you can get additional data like "template" or "root_template".

CR1000859: update SOAP [change request]

upgraded the SOAP Implementation In SpiceCRM making this Support PHP 8.
- directories soap and service have been removed
- soap has been moved to include/soap and has been cleaned out
- the legacy version concept has been abandoned
- vendor/nusoap has been updated and legacy files removed
- new Soap Classes have been namespaced and cleaned up
- .htaccess has been amended to reflect the new redirect for SOAP
- composer.json has been updated to properly load classes for nusoap
- some legacy methods have been removed

CR1000828: Increased default min height for text fields [change request]

Fields of type text (usually a description field) used to have a minimum height of 38px. We increased to 80px.

CR1000811: Fix date valid from - to not considered in the numberrangeallocation search [bug]

Allocation ranges have a validity time period. This time priod was not considered in the search query meant to retrieve the applicable number range. Valid_from and valid_to dates are now required in table sysnumberrangeallocations.

Post deployment action: Set proper valid_from and valid_to dates in current sysnumberrangeallocations records before release update.

CR1000784: Angular Upgrade 14.2.0 [change request]

Upgraded Angular to 14.2.0. Upgraded typescript to 4.8.2 and other related libraries to the latest version.

CR1000794: Fix buildSQLQueries: check if repairtable SQL is empty [bug]

Do not execute the sql query generated by repairTable if there is no query to execute.

CR1000805: Improved ServiceTicket prolongation modal window [change request]

2 new parameters were added to the ServiceTicketProlongModal component:
componentset: define a component set in Service Prolongations module that will render a fieldset in the Service Prolongation Modal view. Backward compatiblity with versions previous to 2022.03.001 is ensured. Set the component set in ServiceTicketProlongModal component in your ServiceTicketProlongations module configuration.
prolongmaxdays: define the maximal number of days in the future that are selectable with the date picker. Default is 5.

Post deployment action: reload service package

CR1000721: Global Footer: Hidden Componentset [feature request]

Added a config option to the GlobalFooter component to allow rendering a dynamic hidden set of components in the application footer.

CR1000783: BugFix mark notification as read [bug]

It wans't possible to mark notifications as "read". They would appear on next login again. Route definition was under the deprecated KREST. Now updated to Folder api.

CR1000840: Validations rules: sort field lists by field name [change request]

For a better usability the field lists are now sorted by field name in alphabetical order as well as the rules list. We also fixed a display bug occuring after adding a new records. not saving but switching to an existing record.

CR1000820: Color for e-mail Send Button in Activity Side Bar [bug]

Added red color using slds-button--brand in sysactionsetitem EmailSendButton in actionset Emails ActivityTimelineAdd Actions

Post deployment action: reload emailhandling package

CR1000825: Modified Default FTS config for Accounts [change request]

Searchterm Analyzer "spice_ngram_all_search" is now set for Accounts. This enables search chars like & to be considered in search strings. The new setting will be retrieved on installation only. Set manually in existing instances since sysfts records are not updated on package core load (since it would overwrite possible customizations).

CR1000797: New field type fieldCountries for frontend [feature request]

load countries from syscountries table as enum field

CR1000777: Deployment Tool - Improvements phase 1 [change request]

Refactored the change requests tool.

CR1000812: Telephony API - Handle Incoming Call [feature request]

Added a new generic route to the telephony API to handle the incoming calls.
Also adjusted the frontend indicator component to enable using the generic feature.

CR1000823: Fix fieldCategories: reset deeper level values on change when less levels are selected [bug]

Values in deeper levels need to be reset in bean on update when new selected levels do not go as deep as older values.

CR1000842: Bug KReporter Pivot table [bug]

Pivot table was emoty due to empty results caused by a limit 0,0 in the query.

CR1000788: API log configuration deactivated on edit [bug]

When you edit an existing API log configuration, the activation status used to be set to null. It is now kept as it is. Activated status is now green and no longer yellow.

CR1000781: Event Campaign Management [feature request]

Handle campaign steps for event registrations management.
Fill the gap to handle campaign tasks according to a registration status.

CR1000857: store language translations to session variable [change request]

Language translations are loaded on login but also when dictionary domains are loaded which results in a lack of performance. As a first step in gaining performance, we now store the language translations in the session. In a second step (planned for 2023) we will cache the contents in files.
We also added a util method LanguageManager::getLabelTranslation() that returns the array containaing the various translations for a single label in a single language.

CR1000770: Admin shall be able to setup TOTP for a user [change request]

Users can turn on one time password authentication (TOTP) authentication in their User profile. An admin user shall be able to setup the TOTP for the users. An admin user shall also be able to turn off the TOTP for the user.

CR1000802: Check on systemvardefs before loading vardefs from database [change request]

Load vardefs from database only if system vardefs dictionary is on. This is important when migrating systems.

CR1000790: added checks when sending PDF [change request]

added checks in the dialog to send a PDF directly that the subject is set, the emailaddress is set a mailbox is selected. Otherwise the send button is disabled

CR1000815: Email To Object Modal - Optional Fieldset [feature request]

Added a new config optional email fieldset to enable displaying other email fields.

CR1000848: Calculate duration in activities [bug]

Fix for field types: fieldDateTimeSpan, fieldDateTimeDuration. Duration was n't calculated when Calll or Meeting is editied from calendar

CR1000829: Fix class name won't display in SchedulerJobTask [bug]

When opening a SchedulerJobTask the stored class name and method name would not appear in the display. This is now fixed.

CR1000827: add copy feature to componentset [change request]

add a copy option to the componentset editor

CR1000847: Editing Meeting, Call, Task directly in calendar misses start & end dates [bug]

Editing of activities from the calendar was not easy since start and end dates were not displayed.

CR1000810: Fix double formatting of ServiceTicket Number [bug]

Ticket number was formatted twice. No issue if Standard numbering with 10 chars was in use. But a range with 6 chars would have created 0000220034 instead of 220034

CR1000821: Fix number formatting in currency and float values [bug]

Entering correct large numbers was difficult because cursor position wasn't set right as soon as number group separator would appear.
Also added: the capability to override the user preference for decimal number precision when configuring the field in the fieldset. Applied to fields of type currency, float and quantity.

CR1000819: MS Exchange Sync: additional config parameter for port number [change request]

It is now possible to set a specific port which will be used to call the host of your exchange instance.
set $sugar_config['SpiceCRMExchange']['port'] in config_override.php or set in config table

CR1000789: Duplicate Check on related records [change request]

changed the logic for the duplicate check so that also related email addresses can be checked and are checked properly and not only records form the main bean

CR1000844: Cleanup old configurations including module Cases [change request]

We removed deprecated configurations defined for deprecated module Cases (removed from SpiceCRM by the end of 2020)

Post deployment action: reload core package

CR1000758: Reply to all email button [feature request]

The reply to all email button was added for the modules Mailbox and Emails. The modules are enhanced by the new button which allows the user to reply to all recipients of the message.

Post deployment action: Load the package emailhandling.

CR1000769: PDF Creation with Google Chrome [feature request]

CR1000817: Label for global search header dropdown list [bug]

A selected module from the list would set the technical module name in the display. Now corrected so that translation is displayed.

1000626: BeanFactory: Disabled Caching Module Data [change request]

Disabled caching module data by default in BeanFactory. Added config variable
['system']['module_cache_enabled'] to enable/disable caching.


Breaking changes


If you have any record in sysauthconfig, please add a guid in field id after deployment
id is not set as primary key to enable the update but it will be in the future.


The module no longer exists. Please, move it to custom if have it in use in any SpiceCRM instance


Migrate account_id and consumer_id to parent_id and parent_type in table agreements
Modify any copy rule or model validation you would have made in a customization


Migrate entries you might have in systemholidaycalendar table to systemholidaycalendars after the repair/rebuild action OR rename the tablemanually before you run repair/rebuild.


Please check you implementations. If you need the old behaviour. customize the ServiceTicket class and rewrite the save function


Field email_templates.via_spb of type boolean was renamed to editor_type of type enum with possible values richText, pageBuilder, html.
You will have to migrate your email templates. via_spb =1 shall be moved to editor_type = pageBuilder.
Remove column via_spb after migration.


Add params to all custom SystemTemplateFunctions.

Find all methods from the entries in syscustomtemplatefunctions

add the params "$compiler" and "$bean" to every method like in the core file SystemTemplateFunctions.php


In case you have the soap service n use (which is improbable) you will have to upgrade your cusotmizations if any or re-check the functionality with external systems


SpiceNumberRanges::getNextNumberForField() now requires the date fields in sysnumberrangeallocations to be filled. Set proper valid_from and valid_to dates in current sysnumberrangeallocations records before release update.


Field sysdictionarytablecontenttype was added to table sysdictionaryfields.
This will trigger an SQL error on login after you pulled.

Create the field manually:
ALTER TABLE `sysdictionaryfields`
ADD COLUMN `sysdictionarytablecontenttype` VARCHAR(16) NULL DEFAULT NULL AFTER `sysdomainfield_id`;


When listview is selected before pivot fiew, pivot view won'T successfully load
For a pivotview you need to start a fresh report


If you have any custom field that extends fieldCurrency, fieldFloat or fieldQuantity, please review your custom code

release 2022.02.001

We present SpiceCRM with its new logo and some great powerful features. This edition is more than a milestone. This is the realization of more than 10 years of experience in designing business processes. This release also contains an upgrade to Angular 14 which is in line with our philosophy to keep the framework up-to-date.

Workflow Designer

SpiceCRM is now equipped with a graphical interface to design workflows after proper Business Process Model and Notation. Define actions and tasks per mouse click, drag and drop the steps of the workflow and build your workflow as if you had a pen and a piece of paper. In the end the workflow configuration is comprehensible by anyone and can be used as a documentation of internal processes. Marketing experts will love this tool originated to lead to design marketing automation.

Workflow example

Company Organizational Charts

Picture your organization with the organization chart editor! You can now structure the CRM users within the organization and apply access permissions and workflows directly to these units. This makes the user administration much easier and makes it possible to involve teams / departments into the workflow processes.

Synchronize Outlook Calendar with MS Graph integration

After the successful integration for MS Exchange with Exchange Web Services, we are now introducing the MS Graph Integration. From a user point of view, this integration will not change that much. For companies using office365 or MS Exchange online with Microsoft Azure, however, this will make a difference. In this release we present the beta version of the integration with its 2-way event and contact synchronization.

Calendar Synchronization with MS Graph

Release Details 2022.02.001

1000108: vardefs to database (phase 1)

define custom fields and custom dropdown values in workbench dictionary interface; removed ./api/cache + ./api/language folders

1000337: Workflow designer using Business Process Model and Notation (BPMN)

https://github.com/bpmn-io as a modeling tool for BPM .. woudl bne nice to use as visualization for the Workflow engine

CR1000636: Re-structure workflow manager

This development is the prior work for 1000337. See 1000337 to learn about Workflow Graphical Interface feature.

CR1000719: DictionaryManager: check on reserved words

Added table containing keywords and reserved words. The current check now retrieves information from the table sysreservedwords.

CR1000732: Set Developer mode from Frontend on request

Added the option as an admin to set the developerMode flag on a request. Just set it from the user panel on the frontend and subsequent requests will be made with the developer mode set only for that requests. This is helpful to e.g. get full stacktraces back when requests fail.

CR1000735: CI Manager

added a new component and logic in the admin section that allows the user to change the images (login and headerimage in CRM) from the UI and also to set the colors adapting SpiceCRM to the customers CI.

CR1000736: Add username error message

Fix error message on username field during the registration of User

CR1000737: Create target group from module

Goal of the ticket: Creating a new Prospect List directly from a Bean (i.e. Accounts, Contacts, etc) with related Seeds.

CR1000739: Add Texteditor to CampaignTask of type mailmerge

Add Texteditor to CampaignTask of type mailmerge The subpanel LBL_MAILMERGE was extended by the text editor. When clicking on the D Tab, a tab for the Texteditor is visible. To see the preview, you need to save and click on the button Mailmerge in the upper right corner.

CR1000741: Make the display of sales document items more flexible

Make the display of sales document items more flexible so that depending on the sales document type you can decide how the list of items shall be displayed.

CR1000742: Leads Bug Fix link related account and opportunity

By converting the lead there wasn't set a relation for contact and account.

CR1000743: Relate an EventRegistration additionally to a consumer or a user

In this release we change the relationship to contacts to a parent relationship so that users or consumers can also be related to an event registration. Field contact_id is deprecated.

CR1000746: CKEditor Integration

CKEditor 5 was added to CRM. Now all fields where is possible to edit text work with CKEditor logic behind. This added new features for text editing such as creating and editing a table in text and others.

CR1000747: Opportunity cleanup

Field amount_usdollar is now set deprecated. Field amount_systemcurrency was added and shall take over the logic meant behind the amount_usdollar field in a proper way. We removed the n-2-n relationship to accounts and replaced it by a 1-2-n relationship since our experience shows that only 1 account triggers the opportunity. The table definition for accounts_opportunities was removed. Opportunity class was cleaned up. Please run breaking change migration statement after update!

CR1000748: KREST folder removed

Now that the KREST api is consolidated we dispatched the content of KREST folder to proper folders.
KREST legacy was removed
api/KREST/handlers/ModuleHandler.php moved to api/data/api/handlers/SpiceBeanHandler.php
api/KREST/controllers/ModuleController.php moved to api/data/api/controllers/SpiceBeanController.php
api/KREST/extensions/module.php moved to api/data/api/extensions/spicebean.php
CoreController::generateGuid moved to UtilsController::generateGuid
CoreController::getRedirection moved to UtilsController::getRedirection

api/KREST/controllers/CoreController.php to api/include/SpiceUI/controllers/CoreController.php
api/KREST/extensions/core.php to api/include/SpiceUI/extensions/core.php

if you have custom/KREST or custom/include/KREST or a KREST folder anywhere in custom, rename to api and adapt all namespaces containing KREST. Replace with api

CR1000750: Add Support to drop EML files

added support to also enable EML files (Outlook for MAC e.g.) to be dropped into activity stream and be parsed as Emails properly. Requires that mailparse extension is loaded on the backend server to work properly

CR1000751: PHP Upgrade: minimum requirement 7.4 + mailparse extension

Minimum requirements for PHP is now 7.4. Added the php extension mailparse as part of the required PHP extensions.

CR1000752: hide hidden fields in Auditlog

added field access check in the audit log so that hidden fields per ACL are not displayed there

CR1000753: async loading of Relatecontainer

changed the relate container so this only loads once the record ACL is available and we are sure we have a record and we can display the details. This is one a security measure but also saves on performance. This also ensures that hidden subpanels based on ACL control when links are disabled are not displayed and the data is not loaded.

CR1000754: Angular 14

Updated angular to 14.0.1

CR1000755: Fix in module configuration: display full role list

Role dropdown only contained the roles assigned to the current user. In this specific view all available roles shall be displayed.

CR1000757: Navigation paradigm i snow subtabbed only

The settings 'simple' and 'tabbed' were removed from navigation preferences. From this release on there is only 'subtabbed' paradigm.

CR1000760: Currency conversion rates cannot be administrated

When adding a new currency, the conversion rate is set to 0 which leads to division by zero error on save of a record using that currency (as an example in an opportunities). We added a check on the value for conversion rate and defined 1 as default value.

CR1000767: Orgunit/Assigned user dependency in administration tab

Added a component config variable "unlinkorgunit" in "ObjectRecordAdministrationTab" to be able to dissociate the dependency between selected assigned user and orgunit.

SpiceCRM 2022.01.001

Attention developers! We introduced webpack environment to speed up the compiling process and make live changes while working on frontend features. By using webpack we rely on an official bundling standard and reduce the complex maintenance of the gulpfiles. Please, check the webpack developer  guide  to learn how to generate the frontend app.
On backend side we made some refactoring in table column names, check the release notes below for details!

Marketing automation

New icon for reminders

Little design improvement to pleasure the eyes. Reminders may be set on any record in the CRM, helping remind you of some intentions you have.

The SpiceCRM partner network is growing!

We are happy to welcome sellmore (Germany) to our partner network, a 15 year experienced company in the field of CRM implementation. We also thank our partners  Bizlink (Bulgaria) and eVolpe (Poland) for their contribution to this release: improved language support for cyrillic alphabet in elasticsearch and optimized label handling.

Release Details 2022.01.001

1000619 : New button "save&send" for Activity Steam

Some activities have a save & send logic like Text Messages or Emails. New component ObjectActionSaveSendButton will display an action button that will trigger the save logic and display a 'data sent' toast back to the to screen.

CR1000682 : Template Variable Helper, Phase 3 (for SystemRichTextSourceModal)

CR1000685 : ACL for QuestionnaireManager

CR1000686 : Package Loader - Repair DB Popup

Open a confirm modal to execute repair db on error.

CR1000692 : fix maxlength in system-input-text

typo in parameter maxlengt which is now renamed to maxlength

CR1000695 : duplicate filter in fts config

added a new option in the fts module settings to also add a duplicate filter. This allows to e.g. configure that when checking a module like service tickets that only open tickets are considered as duplicates but not closed ones.

CR1000696 : Added type of Duplicate Check

added an option to the field duplicatecheck in sysmodules and syscustommodules.
- 0 means no check
- 1 checks continously online on any data change and holds the interaction with the user
- 2 only checks on save.
Option 2 was added for high volume modules where a check at the end is sufficient and a running check would potentially overload system resources

CR1000697 : Fix Repair cache and syntax in vardefs.ext.php file

Since singleton implementation of SpiceDictionaryHandler in 2021.03.001 custom/modules/[module]/Ext/Vardefs/vardefs.ext.php contain syntax errors (multiple appearances of 'use SpiceCRM\includes\SpiceDictionary\SpiceDictionaryHandler;' when multiple files are defined under custom/Extension/modules/[module]/Ext/Vardefs. We now catch the error by removing all lines containing 'use SpiceCRM\includes\SpiceDictionary\SpiceDictionaryHandler; ' and inserting this line only once at the top of the vardefs.ext.php file.

CR1000698 : new GlobalHeader reminder icon

add a new reminder icon in the global header tools to make reminders more visible also outside of the dashlet view.

CR1000699 : Added Shortcut CTRL-M to navigate to Menu

added a keyboard shortcut to CTRL-M to open the Menu and allow keyboard navigation to switch to another module using up and down keys and Enter

CR1000700 : Search Shortcut CRTL-S

added Shortcut CTRL-S to focus on the global search field

CR1000702 : Fix use email template in email combined with signatures enabled in richtext editor

When writing an email with the user signature turned on, the user signature will be removed if an email template is used. Fix was implemented so that existing inserted signatures will be kept within the text after selecting the email template.

CR1000703 : added option for acl check on global navigation manager route object

added a config option acl on Object GlobalNavigationMenuItemActionRoute. This allows adding an optional acl check on the item. Only if the user for the module and the acl has access the route item will be shown in the global module menu.

CR1000704 : new Component SystemPDFContainer

added a new Component SystemPDFContainer that can be used with the tag system-pdf-container. It accepts a base64 encoded string for a PDF content and renders this in a viewer.

CR1000705 : new options acl and requiredmodelstate on tab item components

added two new config options on the components ObjectTabContainerItem and ObjectVerticalTabContainerItem.
acl: checks that the user has access rights for the given acl on the model in scope
requiredmodelstate: checks that the model is in the required model state
If these conditions are not met the tab is not rendered.
This gives more options in configuration on tab containers and control better which tabs are being displayed.

CR1000707 : KnowledgeBooks Bug Fix edit Book

Edit Icon in Book selector won't react for edition.

CR1000710 : LMS modules setup

Basic modules to manage trainings, training units, contents and learning skills. Modules are packed to lms package (Learning Management) and are allocated to the 'LM' role

CR1000711 : Moved fts Initialize button

Moved the FTS initialize button to the fts status app and away from the setup. As this button several times caused confusion being placed in the fts setup app this was moved to the fts status.

CR1000712 : add new bulk index option

the bulk indexer allows to write a method indexBulk on a bean. The method will get the number of records to be indexed in the call and is expected to return the number of actual indexed beans. These methods need to handle the indexing then direct. Allowing this implementation make sense when very large set of data need to be indexed and the flexible modeling way from SpiceCRM will cause too long run times due to high frequent mass changes. The method can be implemented to read data right from the database and transform it into an elastic bulk index request that is submitted.

CR1000713 : Re-instate after_login hook for User login

Call the after_login hook

CR1000714 : Audit Log on text field displays empty values

Audit log did not display text changes when the field that is audited is of type 'text'. Now it does.

CR1000715 : MS Exchange: additional parameter to control update of participants

Currently update participants is always triggered on a save of the event bean in SpiceCRM even if the there was no change done that would affect participants. The additional property exchangeNotifyParticipants is created on the fly to the event spiceBean object and set to true. true means: update of participants will always be done after a save of the bean in the CRM. That is the behaviour we have been having all along.
The property exchangeNotifyParticipants value can be overridden in a custom event handler hook if necessary. You also may create a custom vardefs for exchangeNotifyParticipants to override the default setting we now have in SpiceCRMExchangeEvents constructor.

CR1000717 : SQL statements ticks cleanup

In the past it appears that some SQL statements were optimized for MySQL by using ticks on column names. This is now cleaned up to ensure database type compatilibity. This cleanup is step 1 of a larger column name refactoring that will be implemented in SpiceCRM.

CR1000718 : SQL cleanup of database type specific functions

Some SQL statements use MySQL related functions like NOW(), CURRENT_DATE(), DATE_SUB()... LIMIT parameter. These functions shall not be used to ensure database type compatilibity.

CR1000720 : Removed deprecated file containing of scheduler functions

The deprecated file modules/Schedulers/_AddJobsHere.php was removed.

CR1000722 : Fieldsets manager fix unlink global fieldset

After copying an original fieldset containing sub fieldsets itself it wasn't possible to remove a sub fieldset from the new created custom fieldset. Bug is now fixed

CR1000723 : Refactored columns names

Some column names in variable definitions are reserved words (in mysql, mssql or oracle). We refactored the names in the following tables:
- knowledgebooks.public to knowledgebooks.is_public
- accounts_potentials.role to accounts_potentials.account_role
- potentials.comment to potentials.commenttext
- servicefeedbacks.comment to servicefeedbacks.commenttext
- syscustomdomainfieldvalidationvalues.maxvalue to syscustomdomainfieldvalidationvalues.maxval
- sysdomainfieldvalidationvalues.maxvalue to sysdomainfieldvalidationvalues.maxval
- sysuicustomlibs.rank to sysuicustomlibs.libsequence
- sysuilibs.rank to sysuilibs.libsequence
- users_feeds.rank to users_feeds.feedsequence

CR1000724 : CleanUp Administration folder

Removed deprecated Administration class and its uses. Removed the sysmodules entry Adnistration from database reference. Removed old files that used to handle repair.

CR1000725 : New content package with default scheduler jobs

The content package 'Default Scheduler Jobs' will load a set of generic schedulerjobs that can be activated by the CRM administrator. Those jobs will cleanup log tables, take care of data indexing and process Spice imports.

CR1000726 : Cleanup deprecated tabs config in ObjectTabContainer

Lead converts into account but not contact. Convert lead modal does not close.

CR1000727 : Added Salesdoc item of type "Text" in convert sales doc core configuration

Package salesdocumentsconf contains now definitions to convert Text positions of type text when converted from a quote to a quote, a quote to an order, an order to a quote, an order to an invoice

CR1000728 : BugFix FTS search term encoding

Search with capital letters or cyrillic chars do not output expected results. Bizlink - SpiceCRM partner - implemented a fix.

CR1000729 : Allow the use of tranlation for combined labels

allows to use of tranlation for combined labels

release 2021.03.001

SpiceCRM 2021.03.001

We brought SpiceCRM to the next level! In this release we persisted in increasing security and backend code consistency by investing efforts in improving the administration of GDPR policy, the login & password security management & by refactoring the scheduled jobs management. We also reviewed entirely the email address management within the CRM dropping the last ballast of deprecated code in this area. Since SpiceCRM has now grown to reach a larger market we restructured the architecture so that  extensions  developed by partners are visible and can be easily integrated.  We also started investing time on details like improving the  usability of the template manager and by adding a mail merge functionality for print campaigns.

More flexibility in the Telephony Interface

Incoming number not recognized? Make a search before you create a new contact, update contact information on the fly and avoid creating duplicates.

Login management

Define the number of possible failed logins, administrate IP address blacklist, restrict login to specified IP addresses, set the password conditions by using the new interface.

Release Details 2021.03.001

1000570 : The core / extensions / custom structure

Restructure backend and frontend so that
- the core is easy to find & pack
- the more is identifiable
- partner extensions are visible
- customer developments have their area

1000605 : Copy Rules: Parsed Params in Metadata Service

Parsed Copy Rules Params Field as JSON in metadata Service on getCopyRules

1000606 : Calendar color for the past

Calendar entries in the past are now be greyed out.

1000607 : Incoming phone number from user extension

Phone extension may be stored in user information. Incoming call from internal extension will now be identified and displayed in call popup.

1000609 : Additional field for module ChangeRequests

New field techdescription. User may describe testing details related to the change request.

1000610 : New Module Agreements

Agreements with validity time frame. Define the agreement, allocate a category, upload one or more documents.

1000613 : Bug Fix - One2One Relationship - getJoin String with Alias

Reporter on one2one links the inner join link was not using the left side alias.
Change the getJoin Logic in One2OneBeanRelationship to consider the alias of the table if it was defined.

1000615 : Reports Designer - Added Custom SQL for Filters

Added two filter fields 'customSqlQuery', and 'overrideType'. customSqlQuery will replace to field name with the result of custom query and compare it with the field value. The overrideType helps to enable the desired operator options based on the override type.

1000616 : Gulp File - New Task Deploy

Added new task 'deploy' to gulpfile which execute the while packaging process tasks.

1000618 : TextMessage Templates

Administrate templates for text messages

1000620 : Email Address Handling - Refactored

Email addresses handling is changed to be done through the relationship between the specific module and the email address. A new function 'setPrimaryAddress' is created. Frontend is handling the email addresses through the relation link.

1000622 : CampaignTask status shall be planning on creation and not editable

Status of a campaign task is set dynamically by actions performed and can only be set 'planning' on creation.
A validation rule delievered by campaign management package makes sure of this.

1000627 : Remove cookie service

Remove the cookie service and the last usage for keeping the selected language of the user. So no cookies will be used any longer by spicecrm.

1000628 : List View - Infinite Scrolling Angular CDK

Integrated the Angular CDK Library in list view to improve the browser loading performance.

CR1000630 : Calendar - Bug Fix, Logic Improved.

Improved calendar sheets logic for better performance. Bug fixed on multi events display and zoom functionality.
Fixed rearrange the events in week and day sheets when show/hide other calendars.

CR1000631 : Status Network Buttons - Conditional Visibility

Added field 'required_model_state' to set the model state that required to display the action button. The model state is set by the model validation rules.

CR1000633 : Configuration for package blacklist compatible with config table entry

Until now the package blacklist could only be set config_override.php. Now it is possible to list packages in the config table by using a json string containing an array of packages.

CR1000635 : Refactor modules Jobs, JobTasks to SchedulerJobs, SchedulerJobTasks

Refactored modules names, some link names and corresponding UI config

CR1000637 : Exchange: make module handler customizable

Now it is possible to write your own module handler class for MS Exchange Sync by creating an entry is sysexchangemappingcustommodules table.

CR1000638 : AccountsCCDetails

Adding new field type for ccdetails

CR1000639 : Template Compiler - Enabled accssing the template class

Enabled accessing the template class by the the {template.key} syntax.

CR1000642 : Object Related List - Save to link only

Added 'saveToLinkOnly' flag to the ObjectRelatedList Component to prevent saving the relationship entry to the database. It just save the data in the model.data in the link object.

CR1000643 : Module Tasks - Set date start default interval

Added spice config variable ['task']['default_start_date_interval'] to be used to set the start date based on the due date subtracted the interval.
For interval syntax check PHP DateInterval.
Set due date field to required to prevent failing to load the tasks into the calendar.

CR1000645 : Validation Rules - Logic Improvement

Improved the logic of the validation rules. Cleaned up unnecessary option 'onChange'.
Changed 'on events' setting to a checkbox group.
Refactored the conditions and actions handling to field based inputs, where the value input type will be changed based on the field type.

CR1000646 : Add Tax Determination to CRM

Added the option to flexibly determine the sales tax applied to a salesdocitem. This is based on the company code country, the goods recipient country as well as a taxation indicator on the product. In additional on the product (and product variant) the option has been added to maintain prices as gross price rather than net price. This is catering to end consumer oriented businesses.

CR1000647 : Administration - Convert DB Charset

Added a convert db charset action in the workbench repair manager. This allows to convert the database charset or its tables to a certain charset type.

CR1000648 : Removed relationships cache file

/cache/Relationships is no longer needed. Removed, with the logic behind it. Relationships cache is now available in $_SESSION['relationships']

CR1000650 : Add option to hide empty subpanels

Added an option on the ObjectRelatedList component to hide the component if no related records are found. This is useful if related panels are not allowing records to be added but should only be listed if there are really records keeping the views cleaner

CR1000651 : Button for field email recipients

A button will be added to the field 'fieldemailrecipients'. It will enable to display email addresses from the parent related to the bean.

CR1000652 : Letters Module

Building a new module letters.
Aim of the module: writing a letter directly from the CRM.

The module will be allocated inside the activities from where the user can write the letter.
The following fields are needed: subject, reach text field, note, status.
Implementing two buttons save and send: Once send is triggered a modal opens where the user can choose Output Template from the dropdown.
A new action button 'Mark as send' will be added which generates the actual pdf. At the same time the letter will be visible inside the 'Activities'.

CR1000653 : Service Calendar Management

Added a new Workbench element to handle managing the service calendars.

CR1000654 : LDAP: map ldap settings to sysuirole

Allocate sysuiroles to user depending on its LDAP login group

CR1000657 : BonusCards - Improvements

Added an new module 'BonusCardExtensions' to audit the extensions separately.
Added a new field type 'bonus card validity date' to calculate the extension date with a custom API.
Added a 'validity_type' field on bonus program to enable selecting which method to use for the calculation.

CR1000658 : System Dropdown Trigger Directive - Added Trigger Button

Added the SystemDropdownTriggerButtonDirective. This can be used under the system-dropdown-trigger to handle the trigger click instead of the parent.

CR1000659 : System Input Date - Used System Dropdown Trigger

Used the system dropdown trigger directive to open the picker dropdown. This will display the picker on the top level in the dom.

CR1000660 : System Prompt - Added Input Date

Added an new system prompt type 'input:date' that renderes the system input date component and return the value on confirm.

CR1000661 : New module PartnerAgreements

Create partner agreements and visualize progress on negociations. Manage activities all around business talks and link to opportunities.

CR1000662 : Breaking Changes

Add Breaking changes field.

CR1000663 : Email - add multiple email addresses on drag and drop

Fixed that if an email that is dragged that all email addresses are added

CR1000664 : Link beans to emails

Added the logic if an email address is added that was linked to a bean, so the email is also added to that bean directly.

CR1000665 : Compiler - Added root_template

Added to Template Compiler an new template variable to enable access to the root template data by typing the following:
e.g. {root_template.name}
The above example will return the name of the root template in case we need to access its data from an embedded template.

CR1000666 : Security Settings Improvements

Manage password security settings, login channels, login attempts, block/unblock users.

CR1000667 : GDPR Retention Policy Manager

Added new feature with the GDPR Retention Policy Manager. Based on Filters, actions to set records invalid, mark them deleted or delete them permanently can be defined. In alignment with a company's GDPR Rules, thus, personal data can be proactively deleted if there is no interaction for some time. E.g. dead leads after a time span of 6 months.

CR1000669 : Auto Link Emails to objects

When email addresses are added in the email address search panel when sending an email, the beans identified with these email addresses will also be linked to the email sent. This ensures that the email trail when originating from another object still stays with the recipient's visible.

CR1000671 : Anonymous Questionnaire Participations (requested by KH Friesach)

Questionnaire Participations can now also be anonymous.

CR1000672 : Template Variable Helper, Phase 2

Phase 2: Compatibility with CampaignTasks and Parameter Fields for the Template Functions

CR1000673 : Special Characters in Passwords

In addition to letters and digits, special characters can now also be specified for the password.

CR1000675 : Memorize last set UI Role in preferences

Added the logic that the last selected user role is kept in the preferences and when the user logs on the last active role (if still available) is set as the user's active role.

CR1000676 : New user type: API User

New/additional user type: API user.

CR1000677 : Bean Mark Deleted - Check retrieve

Added retrieve before processing if needed to SugarBean::mark_deleted. This ensures having the necessary bean data before handling the delete hooks.

CR1000679 : Revision of the change/reset password forms

Improvement of the change/reset password form.

CR1000683 : Email Schedules Enhancements

Added an additional option to cancel an open EmailSchedule and also an enhanced detail view that list all related beans the email is being sent to.

release 2021.02.001

SpiceCRM 2021.02.001

After the Slim framework update performed in the Winter it was only logical to add the SpiceCRM REST API documentation. The objective is not only to make the REST API accessible for developers but also to add validation checks on variables passed and therefore ensure application security and stability. Beside backend changes and having in mind that a CRM is a communication tool, we added the SpiceCRM Page Builder to simplify the creation of newsletters and landing pages directly in the CRM. For the CRM users themselves we added a real time notifications, making it possible for users to subscribe on records and be informed right away about content changes. And finally we started a security offensive by implementing a Two-Factor Authentication (2FA) based on GoogleAuthenticator app.

The API Inspector

The API is directly documented in the CRM itself. The strict definition of the request parameters that can be sent to the CRM, matches the security requirements. Developers can try out the requests within the Inspector and check the results without needing any additional software.

APi Inspector

The SpiceCRM PageBuilder

The PageBuilder makes it possible to drag&drop content elements and generate full designed pages without any technical knowledge.

Release Details 2021.02.001

1000409 : Spice Page Builder

Spice Tool for building Html Landing Pages and Newsletter emails. Drag and drop elements into the page and configure the layout from the builder panel.

1000413 : Starface VOIP Integration

Integration Starface Telephony System.

1000415 : Generic telephony components

1000425 : Calendar Enhancements

Improve Calendar performance. Google Calendar Integration.

1000427 : Add Pipes to template compiler

Ability to change values using various functions before they are inserted.

1000469 : Calendar Show/Hide my own Events

Allow Users to show/hide their own calendar in the calendar monitor.

1000480 : Global Notifications

Display the user notifiactions in a dropdown.

1000509 : Backend: Get a collection of related beans

Modify get_linked_beans() to accept array of link names as first parameter

1000516 : Improved Code Quality on Backend

Moved $GLOBALS Class instances to singletons.

1000523 : Model List Service: Improvement. Disable Auto Loading

Move the get list data command from the model list service to the components that use the model list service.
Add a disableAutoLoad flag to the object list component for the list 'all'

1000526 : Mailbox Manager View Improvement

Added three different split options to the view. 'No split', 'Horizontal split' and 'Vertical Split'. With the possibility to configure a custom component set for the horizontal view.

1000527 : Object Related List Files Big Thumbnail

Added big thumbnail option to display the file tiles with big a thumbnail preview.
It can be toggled by the icon button on the panel header.

1000528 : System Richtext Editor Embedded Tools

Reserved the right corner of the toolbar for ng content to allow rendering custom tools embedded in the component.

1000529 : Field Richtext - Signature

Added a signature dropdown in the toolbar with the options (none, mailbox, my signature) and automatically write the signature in the content if exists.
Added email signature field for mailbox module to allow using the signaure of the mailbox.

1000530 : Mailboxes - Email Signature Field

Added a new field 'email_signature' to the mailbox to be used while sending emails.

1000531 : Bug Fix: Spice Importer: File Too Big Calculation

Corrected the fileTooBig value to calculate the count csv rows and not the file raws

1000532 : Emails - New Subject Field

Added a new field type email subject to display a status icon of the email and the subject beside. It also adds a line through the text when the email is closed and bold if the email is unread.

1000533 : Activity - New Field Activity Date

Added a new field type activity date to display a short formatted date based on the past, today, and the year.

1000534 : System Checkbox - added indeterminate option

Added indeterminate option to the system checkbox.

1000535 : Groupware Attachments - Toggle Select All

Added a select all checkbox for the attachment in groupware.
The attachment can be selected by default by a sugar config variable.

1000536 : Field Email Status - added status icon "send"

Added status icon send to the field type email status

1000538 : Questionnaire Field

Allows an entire questionnaire to be displayed as an input field.

1000539 : Richtext Editor: Improvements

- Added useMediaFile option to enable/disable using media file module
- improved the fullscreen logic
- added insert image from url tool

1000540 : Object Related List - Display Edit Modal

On save failure on object related list because of required fields are empty, edit modal will open to allow user to fill in the required fields.

1000541 : Assignable Vardefs - Assigned User ID Type Adjusted

Changed to assigned_user_id field type from 'relate' to 'varchar' length 36

1000542 : Address Field - Google Place fill with Current Language

When the Google Place API retrieves the address by the place id, the current language will be considered and the results will be returned with the current language.
This affects the AddressField Type when searching by google places.

1000544 : Email Schedules - Added Parent Fields

Added parent_id, parent_type to to the EmailSchedules module to allow displaying the Schedule in Activity Stream or in a related panel.
Displayed the EmailSchedules subpanel under TargetLists Campaign Tab.

1000545 : Field Email Addresses - Opt In Status, Improvment

Adjusted the usability for managing multiple email addresses. Added field opt_in_status to the email addresses relation table to display a status icon for an email address. Added singleMode option to allow using the field for only one email addresss.

1000546 : New dictionary type "shorttext"

Added a new dictionary type shorttext that also can hold a length. Used mainly for Oracle to hold fields with up to 4k and not create BLOBs since that siginifcant increases performance.

1000547 : Cleanup DB column removal

Updated the column removal tool to better usability. The tool allows to compare actual DB structure with the vardefs and remove columns in the Database that are no longer needed.

1000548 : Add Option to load more manually in Listviews

It is an option to allow the user to load more items manually rather than automatically loading when reaching the end of the list in an infinite list view

1000549 : Added an option for item numbers in the ObjectList

An option has been added to number the lines in a listview supporting the viewing and navigation in large datasets.

1000550 : Added count of selected item in List Header Details

Added Information on the number of selected items in the list view to the list header details. This makes it easier in case of selection scenarios to easily understand how many records are selected.

1000551 : DIsable Export Buttons if no record is selected

added the feature that the export buttons in the list header are disabled if there is no record selected. Increasins usability.

1000552 : Added Range select option to the list actions

Added a new option with the component ObjectListHeaderActionsSelectRangeButton allowing a user to select a number of records based on a range specified.

1000553 : Module Subscription Button

Added a subscription button in the header in details view to enable/disable subscribing on a specific record to get notifications if any field value was changed.

1000554 : New Field - Icon Condition

Added a new field icon condition which displays an icon based on the given module filter condition match. It can also be used to display a neutral icon without condition.

1000555 : New Field - Email Activity Openness

Adde a new field email activity openness to enable toggling the email openness status between 'open' and 'user_closed'.

1000556 : Added pagination buttons to the subpanel

Added a pagination button bar to the subpanels, so in additon to the view all there is now also a pagination bar.

1000557 : Properly set default currency

Changed logic in the currency field so the default currency is pulled properly from the user preferences. Also removed the default values in the generic copyrules for Opportunities and Salesdocs.

1000558 : Added length limit to text field

Added length indicator and limit to the text field if a length is set. This is also to accommodate ORACLE text fields (nvarchar) that have a length limitation of 4000 chrs before they become a blob.

1000559 : Proper Number formatting in list count and aggregates

Added number formatting for the items, totalcount and the aggregate item count in the list views

1000564 : FTS and Logger Transactional

Make FTS transactional and logging in separate DB connection

1000571 : Change Assitant to pull from Elastic

Changed the Assistant on the front page to retrieve the entries from the FTS engine with clear configurability using the module filters.

1000572 : Added Workflow Tasks to the Assistant

added Workflow Tasks to the Assistant on the home screen. This allows to also bring open Workflow Tasks to the assistant and thus to the user. Also added a separate view and field for the workflow task name that directly then links to the parent item.

1000573 : Meeting and Call reminders

Re-added the reminder field allowing the user to set a reminder on calls and meetings. This will prompt a popup with an alert in CRM and also a desktop notification when set and allowed the set duration before the event occurs.

1000574 : MS Exchange: improve response error handling

Some errors shall be returned to screen as exception before the logic falls into a php error.

1000575 : Disable Aggregate checkboxes when search is running

Minor change to disable the aggregate selection checkboxes when a search is running. This avoids conflicting and overlapping requests.

1000576 : Campaign Task - Send attachments with the email

Added attachment panel to Campaign Task to enable sending attachments with the campaign email

1000577 : Email Reply/Forward: Clone related entries from reference

Added field 'reference_id' to email.
Clone the reply/forward email related entries from the reference (original) email.

1000580 : Updated the Merge Feature

Amended the merge feature and dialog:
- Merge has been added to the list header actions. So entries can be selected from the list and merged from there
- In additon a check is made that the to be merged records can all be deleted
- Merge now also considers the attachments of a record
- The layout of the merge dialog has been amended. Also making it clearer from which record the merge has been triggered
- The merge als emits a message in the app internal broadcast channel and will trigger a reload of activities internally automatically showing the immediate results ater the merge in terms of related records.

1000581 : Handle delete event in navigation tabs

If a record is deleted (e.g. in a merge) and there is still a tab open with that record, the tab will be automatically closed (enforced) and also not prompting the user.

1000583 : Core Library Updates

Updated to
- Angular 12
- rxjs 6.6.7
- zone.js 12
- underscore.js 1.13.1

1000584 : FTS: config option for min and max ngram

Added the config options for min_ngram and max_ngram for the ngram analyzer and tokenizer.

$sugar_config['fts']['min_ngram'] = '2';
$sugar_config['fts']['max_ngram'] = '20';

enables customers to set min and max values

1000586 : Add connect now option to reconnect dialog

Added an option to reconnect manually right away in the reconnect await dialog. Also extended the default reconnect time to 10 seconds

1000587 : Checklists: Logic improved, Refactored.

FieldChecklist refactored to ObjectChecklist.
Focus/blur Logic improved.
Separated saving.
Temporary Backup fields added.

1000588 : Filter Panel - Multienum Type adjusted

Built an appropriate filter query for the fields from type multienum.

1000592 : Two-Factor Authentication (2FA)

Added 2Factor Authentication with TOTP Tools like google Authenticator

1000597 : API Log Enhancements

Consolidated the KREST log to the API log that now also captures the In and Outgoing Requests. This also captures incoming SOAP Requests. This also includes an update on the API Log viewer and the API Log config to have one central point to capture all events.

1000598 : CRM Log Viewer

Harmonize the CRM log viewer to be in line with the API Log viewer.

1000599 : Add embedded templates to template compiler

Added an option in the template syntax to add an embedded template in the syntax.

1000600 : Default navigation is now tabbed

Set the default navigation paradigm to tabbed view for the user preferences.

1000601 : Bug Fix: Audited text value was not saved properly

DBMananger was retireving the field type first from the type property which is not always the db type of the field.
Adjusted the DBManager class to retrieve the db type of the audited field to prevent saving the value in the wrong field in audit table.
Bug was discovered in workflow definition audit.

1000602 : New Component - System Checkbox Toggle

Added a new system component renders an input checkbox toggle and handle the value by angular two way binding.

1000603 : BeanFactory::getBean - Added "forceRetrieve" Option

Added 'forceRetrieve' Option on BeanFactory::getBean. This helps to ensure retrieving list items that are referenced to each other.

1000604 : Impersonation Login (ReIntroduction)

Only admin users may login as another user.

1000614 : Bug Fix: Reporter - Filter Reference Operator

Backend: In KReportQueryArray reference operator from type datetime fixed.
Frontend: ِFixed the reference dropdown values.

1000623 : HotFix Parameters description for route /configuration/spiceui/core/modelvalidations

CR1000634 : HotFix save validation rule für json string in action parameters

Save would not work when the parameter for an action is a json string

SpiceCRM 2021.01.001

“Spice is in the air” and we used the winter month to make further significant changes to the backend platform. After the removal of the legacy Frameworks this made room and space to prepare the full support for PHP8. PHP has grown to one of the major – if not THE – web programming languages on the planet over the last years. With Version 8 the php project also makes further significant steps in terms of stability, security but also performance. At SpiceCRM we strive to support the latest releases ensuring that in a fast changing world your systems are safe, secure and up to the latest standards.

The “all-new” Email Inbox

Email is all but dead. It still is one of the major forms of communications when it comes to sales, marketing and support. To make this even easier we made further changes to our inbox manager that makes the handling even more like you are used from regular web mail clients like GMail or Office 365.

Do we want to replace this clients – not necessarily, but it is all about UX, easy of use and giving users the choice.

Update on the REST Framework

A second big – but most likely for the regular user not noticable change – is the update of our REST/API Framework. Also there we did a major upgrade to SLIM4 as the base component. During the upcoming releases we will further harden and strengthen the API. Stay tuned for the upcoming releases that will deliver more and enhanced features here.

Bringing it together – the “All-in-One” package

When we started the development of SpiceCRM we on purpose separated the backend and the frontend. Both efforts meant separate technologies, separate technological standards and allowed us more flexibility in developing SpiceCRM and the new UI. With the bigger redesign of the SugarCRM based backend we are also bringing the two together in an all in one repository to make the installation process and deployment for our on premise customers and partners easier. You can find the all in one package in the original SpiceCRM repository on Github following this link https://github.com/spicecrm/spicecrm

Release Details 2021.01.001

1000500 : Cleanup entrypoint.php

Cleanup of entry point adding namespaces

1000517 : CTI Integration for five9

SpiceCRM inbound / outbound calls with five9

1000525 : Bug Fix: Set Primary Email Address in Edit Modal ist not working

Added a unique name in the field "email addresses" for the input radio button to prevent mixing up the radio button groups, if the field is rendered more than one time on the same view.

1000513 : Checklist funtionality for tasks

Create multiple checklists in a task.

1000522 : Add option for simple full name field

Added config option to full name field to display it "simple" without academic degrees before and after the name in edit view

1000524 : Field Google Places Search Street Name + Number

Added concat street name with number if the field number is hidden in the system.

1000520 : Bug fixed: Workflow Task Email was not sent

Bug fixed: Workflow Task Email was not sent.

1000515 : Authorization Refactoring & Ldap Improvements

Support for mandatory group membership with Ldap authentication
Link between authorization roles and Ldap groups

1000510 : Remove developerMode logic in VardefsManager

DeveloperMode shall no longer trigger a refresh of vardefs.

1000504 : Attachments: Feedback in case of deletion error

1000024 : UI re-login

when the session expires the user will be prompted to relogin using the same azuthentiyation method as the expired session had been. This will prevent users from loosing data that has not been saved in case the servr session expires. The same happens if the network conection is lost. the system will wait and try to reconnect and then continue where the session has been stopped.

1000502 : Oracle support

Oracle compatibility with SpiceCRM.

1000505 : Added new fts options for elastic

Added two new options for fts config to be set in the config table both on category fts:

- number_of_shards: defines the number of shards set when creating an index. Since our indexes typically are relaive small the default value is set to 2
- number_of_replicas: the default value for the number of replicas in a cluster: the default value is set to 1

1000514 : Slim 4 upgrade

REST library upgraded to Slim version 4

1000518 : Angular update to 11.1.0

Update to angular 11.1.0 & cdk 11.0.4

1000537 : Define cache folder for dompdf fonts

Fonts are currently cached unter vendor/dompdf/dompdf/lib/fonts during pdf process.
It is now possible to define your own cache folder under SpiceCRM existing cache Folder using config variable category = dompdf, name=fontDir. Default system value is dompdf/fonts/

1000511 : Improvements ProjectManagement tools

Additional fields for completion level in ProjectWBS module; Start and end date for plannedactivities; new module ProjectActivityTypes for billing purpose
refactoring of date fields in ProjectsWBSs: rename fields in projectswbss before running repair/rebuild after update or move you values from old fields to new fields after repair/rebuild

1000474 : Catch when login session dies

Return screen notification when session is dead so that user knows he/she should log in again

1000508 : MS Exchange integration: make participant policy related to module (Calls or Meetings)

Additional config variables: apply participant_policy on defined modules

1000512 : SLDS Update to 2.14.1

Updated lightning design to Version 2.14.1 (Spring 2021)

1000501 : Config Transfer: Ability to import despite unknown tables

1000507 : DB Column Cleanup

New feature to delete the old db-columns from the database for a module
- workbench -> Repair Database -> Database column cleaner
- opens a modal witlh all vardefs on the left side and all db-columns on the right side
- mark every field where one of both sides is missing
- a db-column with a missing vardef can be delete in the db

SpiceCRM 2020.01.002

Beginning of the year we did post our Roadmap and release plan. In accordance with this we just did release the spring Release (2020.01.001) of SpiceCRM delivering the majority of the planned features. However some of the features we felt had not been fully tested so we held them back and now releasing SpiceCRM 2020.01.002

Amongst a set of technical enhancements this release brings to major enhancements to SpiceCRM.

Tabbed Navigation

When we started the development of SpiceCRM we always had the single page concept in mind. This is state of the art in the current web application technology. However for business applications the disadvantage is at hand with the lack to manage multiple records at the same time. In some areas and a lot of usecases in CRM this might not be a problem but for the more versed user we very often heard the request to open multiple tabs, yet stay organized.

With this release we are introducing the capability fort the user to manage navigation paradigms and switch between three modes of navigation.
  • Simple: the classical one-page app view. Fast easy and focused on the current record
  • Tabbed: opening new record in a new tab. For those that handle multiple records are the same time
  • Tabbed with sub-tabs: enabling to open records in tabs and further related records in sub-tabs of the tab. Sounds complicated? Give it a try and you might even love it

This allows users to open multiple records at a time, organized in logical tabs and navigate easily from one to another record, also editing multiple records at a time.

Google Maps Integration

One still missing part with the port of our Reporter to the SpiceCRM UI was the Google Maps Integration in the Reporting tool as a data visualization plugin. Adding that we also added a set of new featuires to bring Maps and Geodata deeper into the application itself further completing the features with the google Integration we already had.

  • Integrated Google Search, autocomplete and geocode when creating records
  • Integrated Address Search and Completion
  • Geo based search of Records and easy visualization on a map
  • One click navigation info supporting easy routing helping you to plan visits
  • Proximity search enabling you to find other accounts next to the customer you are just viewing.

This certainly further support the usability from SpiceCRM and increases productivity and efficiency using SpiceCRM.

Technology Updates

Furthermore we updated some parts of the technology stack we are using to stay on top of the latest innovations and security considerations

  • updated to Angular 9.1.2
  • updated to Support Elastic Search 7.*
  • updated to support Highcharts 8
  • updated to Lightning Design 2.11.7

The Release in Details

1000028: Tabbed Features in line with Salesforce
Add functionality that opens on a click in new tab within the one-page app rather than always going back and forth. Similar to the implementation done by salesforce.

1000397: Angular 9.1.1 update

Update to angular 9.1.1

1000394: Added footer height

Added a footer height to the internal services allowing fixed footers to be displayed on the screen.

1000227: Update FTS Field handling

Change to FTS Manager Dialog

1000395: Responsive action menus

Changed buttons in small screen view for responsive design to render as button icon group.

1000405: Formatting of HTML code in Rich Text Editor

Added a new formatting option to the HTML source code in the rich text editor that allows proper formatting and indenting of the HTML code in the dual view making the HTML code more readable and easier to manage.

1000386: Elastic 7.* support

Support for Elastic 7.*

1000100: Service Enhancements

Added service functions

1000398: Lightning Design 2.11.7 update

Update to lightning design 2.11.7

1000385: FTS enable to aggregate on empty values

Enable to add aggregates on empty values. With the option also an aggregate for documents that have no value is built counting the number with empty values. The aggregate can also be set to filter the list.

1000388: Relate Field Filter

Added a new option to the related field and the ObjectActionSelectButton so relate filter can be applied. This allows to e.g. filter contacts in one relate field based on the value of e.g. accounts in another relate field. The relationship between the two fields can be set as optional or mandatory.

1000384: Collapsible FTS Aggregate Panels

Aggregates in the FTS can also be set as collapsed. If done so the aggregate will be rendered collapsed. The user can expand and set on demand. This optimized the screen layout if there are multiple aggregates and reduces the number of aggregates rendered on the screen.

1000339: Added new participants panel in calls & meetings

Added new panel for participants in calls and meetings including the participation status. Invited users can also set their attendance status.

1000383: System-label components

Added three components for , and to be used in templates and to optimize the change detection in Angular.

1000406: New view for Media Files

Added a new view for Media Files allowing a proper preview with thumbnails as part of the list view and also in the media file picker.

1000404: Output Templates Preview

Added a new component top the output templates enabling the user to easier change and manage the template and also to get a preview of the template for a bean the user can select and then render dynamically without saving the template.

1000304: Load full data on recent items

Added loading of full data for recent items so the custom field sets can be displayed in the recently view list.

1000377: Files Panel Header with Count
1000379: Refactor system-label component

Refactor the use of {{language.getLabel…}} in a template to use component… should reduce change detection cycles and improve performance.

1000330: Update Admin Screen

Update layout for admin screen.

1000314: Remove Renderer for Angular9 compatibility

Remove Renderer for Angular9 compatibility

1000403: Angular 9.1.2 update

Update to angular 9.1.2 also including angular cdk 9.2.1

1000378: Google Maps for List and Record View

New Generic Google Maps Component has been built.
Google maps view for list view to display the search results as pin markers on google maps with the possiblity to search the same was as in spice list view.
We have also added a record view tab to make it possible to search around the record with google map circle tool and get the direction infos from a cetrain address to the record location.

1000396: Full screen modals in small form factors

Changed modals to adopt full screen view in modals and small form factors according to responsive design

1000387: Highcharts 8 upgrade

Updates the embedded highcharts libraries to highcharts 8.0.4

SpiceCRM 2020.01.001

Beginning of the year we did post our Roadmap and release plan. In accordance with this we just did finalize and release the spring Release (2020.01.001) of SpiceCRM delivering the majority of the planned features.

List View

With the new Release we made major changes to the various forms of the List View. The standard list now allows free resizing, more flexible handling of Filters, Multiple Column sorting, Geo Search and much more. Also the Kanban Board did get a major rework allowing easy drag and drop, hidden Buckets (for e.g. closed Opportunities as in the Screenshot below). New Types of Vies (e.g. Maps based) did not yet make it into this release but will follow soon in a release targeted for end of April.

Reporting Engine

Another big effort has been completed in its first phase which is the port of our well known reporting engine from the backend UI on to the new Frontend. This now allows easy creation of reports in an intuitive UI for the end user with all the capabilities we built over the last years into our reporting Engine. It also marks a further milestone in the port of the complete legacy sugar based backend to our new UI.

We already did publish a short YouTube Video on the fast and easy way to generate reports and analyses all the data that resides in your CRM system. The video can be found on YouTube following this link.

There is of course a lot of further things that happened. We added new Features supporting agile project management following the SCRUM Methodology, took further steps to complete the quote to order to invoice process, further enhanced the service processes and much more.

Find the complete Release Notes below.

The Release in Details

1000328: Reports Designer
New user friendly platform to design Reports, it is easy and simple to use with drag and drop to select and filter on the desired reporting fields. It is also possible to add and manage data from multiple sources with the union modules feature. As soon as the reporting fields and filters are defined, you could also move to the presentation tab to choose and configure the presentation view for the report. The same for the visualization view. The Integration tab would be your last place to activate, deactivate and configure the possible Plug-ins like exporting report data and so on.

1000354: FTS sort aggregate bucket values by _key

Currently aggregate bucket values are sorted by _count desc. Now it is possible to define sorting by _key in FTS settings.

1000382: Sort Hook for get_linked_beans

sort_array parameter for retrieving linked beans is limited to fields present in corresponding database table.
Sometimes list shall be sorted by a non-db field. This is now possible with new method Link2::processSortHook() .
sort_array parameter now accepts additional key ‘sorthook’ containing an array with sortfield and optionally sortdirection.

1000375: Bug Fix: Duplicate Output Template

Output Templates module has the field “module_name” in its vardefs definition, which defines the module where the Output Template can be used.
This field is an already existing variable in sugar bean which is used to tell which bean should be cloned, but when the field “module_name” is set in OutputTemplate, it overrides the variable in sugar bean, which leads to a cloning failure.


In sugar bean, The variable “module_dir” is used instead of “module_name”.

this fix should not have any side effects, as long as all extended beans has the variable “module_dir” set.

1000366: SalesDocs refactoring

Removing unnecessary field definitions, adding n-2-n relations.

1000365: Move ProjectActivityDashlet Component to modellist.service standard

Upgrade of component ProjectActivityDashlet

1000359: New front-end module for SpiceAttachments

Added a new module for the SpiceAttachments in the front-end.

1000333: Improved release process

Create a release workflow for deployment.
Additional variables in back-end for ChangeRequests and Release modules are needed. Additional UI configs to be retrieved with “deployment” package.

1000358: New field to manage files from a bean

New field for uploaded files
– should look like “parent” field
– it should be possible to upload and remove files from a bean

1000343: FTS enrich bean data for indexing

Use custom method set in indexproperties to enrich values in index for a non-db field

1000268: Actionsetmanager

An interface is to be developed that enables the management of actionsets.
– It should be possible to create new actionsets
– Existing actionsets should be able to be copied
– The configuration of the items should be dynamically visible and editable
– The view should be based on the familiar Fieldset Manager

1000351: SCRUM/Agile components

Enables the users to organize their projects according to the agile project management paradigm by defining Themes, Epics and User Stories in the CRM system.

1000353: Fix Trashcan recovery

Associated relations were not recovered even if recover parameter was set.

1000350: Update on status network buttons

Added option for silent edit mode on model, this is also set from the status network button to avoid the “flickering” of the save buttons.

1000362: ServiceOrders: handle duration for Calendar

Handling duration is missing in ServiceOrder class.

1000355: Added auto resize to textfields

Added auto resize feature to text fields. The text box will auto adjust its size to the max size or default 300px when text is entered.

1000367: Package salesdocuments

Improve package definition for salesdocuemnts; introduced B2C; additional templates.

1000371: Fix Condition value for enums in OutputTemplate

Parse real value of enum when used in a condition and not the translated value.

1000352: Cloning of beans together with related beans

If a bean is cloned, the related beans can also be cloned automatically. This saves a lot of manual work. Or it makes cloning possible at all.

1000331: SpiceBeanGuide for release process

Create a guide for release process. Retrieve configuration changes using package loader (package “deployment”).

1000336: Releases: create parent relation

Make releases linkable to Accounts and Projects.

1000361: E-mail Reply Modal

Button which opens modal with e-mail reply logic.

1000360: OutputTemplates: integration of module filters

Enable the use of module filters in Output Templates and use additional parameters like limit or sort_array.

1000316: New Module QuestionnaireParticipations

The new module QuestionnaireParticipations allows better access to participations than QuestionSetParticipation does.

1000305: Redesign Activities Stream

Update Activity Stream items. Moving components from object components to activities and cleanup of deprecated components.

1000348: Angular Update
1000357: KREST add related bean with additional values

When participants are set in an activity directly in editview , relationship fields like accept_status is overwritten after saving the activity. If a value was set before editing, it is lost after save. Enriching values for relationship fields during link handling will prevent data loss.

1000338: Blacklist for packages to protect configuration

Disable loading of packages by setting package name in new array variable $sugar_config[‘packageloader’][‘blacklist’] n”}: uppercase;}.bean_report .logo {text-align: right;}.bean_report .logo img {height: 100px;}.bean_report .top_part td {vertical-align: bottom;}.bean_report .top_part {border-spacing: 0px;}.bean_report .report_title {font-size: x-large;}.bean_report .bean_name {font-weight: bold;}

SpiceCRM 2019.12.001

Amongst a set of smaller changes and additions we significantly enhanced the User Experience when dragging and dropping files and emails to SpiceCRM. Whenever a file is dragged over the UI the user will get visual feedback where the file can be dropped. Also the drop feature has been added to the activity stream.

Activity Stream

When dropping into the activity stream the system will also automatically recognize if an email has been dropped directly from Outlook. In this case the email will be converted to an email in terms of CRM and rendered as part of the stream with a full preview of the message. In all other cases the file will be added as regular note in the activity stream with the file attached.

The procedure allows easy archiving of emails without the need for any plugin or additional software on the exchange server or within Outlook.

Sales Planning Functions

Furthermore we also converted the Sales Planning functions from the old UI to SpiceCRM and the new UI. With the sales planning tool users are enabled to put a proper sales plan in place and plan hierarchically on a territory, product group, product level. This empowers sales management to plan on a yearly, quarterly or monthly basis. The plan can be rolled over regularly, it can be monitored and used for target setting.

For specific industries like CPG or others the tool can also be used to plan specific promotions. In manufacturing it can be utilized to link sales and logistics.

The Planning Tool can be freely customized to plan on different hierarchies, plan various key figures. It can be configured to read historical data like last years revenues or customers potentials and other info. I can evaluate formulas to calculate values and also can aggregate on all levels.

The integration and flexibility makes it the perfect sales and operational planning tool for larger organizations. Supporting them to enable the sales team to plan properly.

The Release in Details


A new config option (dual) has been added to the system date picker. when it’s set to true, the date picker will display two months underneath each other.


New table component like “object related list” to list all filtered entries of one module.


Optimistic locking check is based on audit table of module. Make sure that audit table exists before doing the check.


sales stages in dom need to have the same values as SpiceBeanGuides stages
BeanGuide STages have to be loaded in primary modules load: correction in config reference done.


After Changes from 27/10/2019 the ObjectEditModal has changed the emitted value from model.data to action string.
This was passed as return value for the addModel, where the expected value was model.data.
The fix:
in mode.service:
Line: 948 moved to line 951 and the retSubject.next value change “this.data” instead of “response”
And this will be only passed if the action is either “save” or “savegodetail”


Object Texts Components moved into a separated module Spice Texts and renamed by the module prefix. This requires a reload of the system configurations from the Reference Database.


E-Mails imported by Classic Sugar API won’t set any text in body property. Add fill in body content in Email::retrieve().


Fixed the date filter field in the Reporter for the dynamic filter fields to render properly when set in the filters and then set to editable.


Improvements in the upload of media files including an editor.


In “Object Related Duplicate Tile” a “Go to button” has been added which only appears in the edit modal


Added config option on parent field to hide module icon since in some cases this is not fitting the view.


Being able to define an action “create call” (or create meeting, or create task…) in actionset applied in each subpanel entry.
Modal Window with Activity detailView pops up after click.
Defined CopyRules preset field values in Activity form


This Directive will highlight the component which is used on and emits the dropped files on drop.


The SQL SELECT queries unifying tables (using “UNION”) often contain ‘*’ (asterisk) to query all columns. However, sometimes the columns in tables are sorted differently and thus the result of the unification may differ from the expected result. This was discovered namely when using the tables “sysmodules” and “syscustommodules”. Therefore in this case, the names of all the columns in the query should be enumerated (dynamically) instead of using the ‘*’ operator.


Added a modal popup allowing the user to select the fioelds toi be exported in the LIST Export. This can also be configured setting the properties for Component ObjectListHeaderActionsExportCSVSelectFields. Options are to define a separate fieldset that holds fields that can also be exported or to allow also exporting of all fields. This cna be of course be set role and module specific or application wide.


Handle dropped files in activity container and add an email if the file type is MSG


Displays delete icon on global notes for admin or note by creator.


Moves the dropdown element to the footer and re position it. This fixes the issue when the dropdown is within a container which has a hidden overflow, the dropdown will be truncated.


Fixed issues with the tree view for the reporter to proper render trees with enums and all kind of other values


Questionnaire Evaluation Field


System Prompt will interpret the “n” or “r” of the content text as a line break.


We have improved the Drag and Drop functionality. The System Tree Component is now integrated with the modern angular cdk drag and drop with extra handling for the assignment of the tree items parent.
We have done some other improvements for the template.

Now it’s possible to decide either to assign the item as a sub item of another one or just to change the sequence of the tree item.

The component will also take care for changing the parent of the tree item if it’s been dropped into another parent scope.


It allows defining event colors for specific modules and also it’s possible to define a filter for the module to set the event color depending on the matched condition.


Bug fixed: Passing the children configs when they are set in the defined componentset was not possible.


Move configuration way from including files to loading namespace


Sort direction added in the “Field Enum” config to enable sorting.


Object Import Components moved into a separated module Spice Imports and renamed by the module prefix. This requires a reload of the system configurations from the Reference Database.


Added a text rendered to the reporter so multiple text fields are properly displayed


changed SpiceNotes to make them also editable, moved them to a separate module in the code and also added a panel header component that allows to give an indicator if notes are available for the object.

SpiceCRM 2019.09.001

Reporting Module

Highlights of the Fall Release are updates on the Reporting Module. We ported the views for the Pivot Table, the grouped and grouped with summary view and also the TreeView to the SpiceUI. This is an ongoing effort where we are bringing the best in class reporting functionality to the lightning experience with SpiceCRM. As we believe that integrated analytics is a key necessity this is an important step on our roadmap.

We continued to develop additional functionality for Marketing adding a basic event management. This allows planning and tracking of events. Add partners that play specific roles in the event. Track invitations and registration. Add a self service registration to your website.

Close&New Button

Also the good old “close&new” button in activities made it back to the new UI. For some time we did think there would be a life without it. We accept we have been wrong. So back it is. Allowing an easy way to close one activity and add a new one. But it would not be SpiceCRM if we did not make it better. So we added flexibility to customize it and to also let the user choose which activity to add next. Allowing an easy closing of for example a call and scheduling a meeting.

Besides that, there are further features worth mentioning like an easy way to change the users time zone, enhancements in the Calendar and also with the FTS engine. We also added a bulk indexer that will allow fast indexing with the elastic search. And many more…

The Release in Details

Ability for admins to view/change foreign user preferences

Ability for admins to view/change foreign user preferences

Actionset menus refactored

Object list header action menu and object action menu should extend the object action container

Adapting Date Time Fields

Date time fields constantly adapt to the current time zone setting of the user.

Add Componentset to spicebeanguidestages

Added a componentset as configuration option to the spicebeanguides. This allows to render a componentset instead of the description in the beanguide with the path. e.g. fields relevant for the sales stage can be rendered there or other components that might deliver valuable information

Add sort parameters to the dashlet generic component

Add sort parameters to the dashlet generic component

Added adminonly flag to tabcontainer item components

Added a config option “adminonly” to the tab container items (regular and vertical). If you set the tab it will only be rendered if the user is an admin user. Mainly used for the user tabs to only show some tabs to the admin but not to the regular user.

Added new Reporter Views

Added Reporter Views for Summary, Grouped, Tree and Pivot View

All Character Analyzers in FTS

Added two new analyzers spice_standard_all and spice_ngram_all that can be set and will include all characters (including, whitespace, punctuation and symbols) in the tokens and the search. This makes sense for e.g. name fields where a company name or a release name or version name includes those characters and they should not be stripped when tokenizing and searching using elastic search.

Ask for important user preferences at startup

Ask for important user preferences at startup

Auto correct the sort query for the many to many relation table

When we pass a none-db sort field for a module which is a mapped field in the many to many table, the sort query will be auto adjusted.

Avoid duplicate user names

Avoid duplicate user names

Backend only for admins

Backend only for admins

Better determination of user roles (for app launcher dialog)

Better determination of user roles (for app launcher dialog)

Better role assignment

With an icon custom roles now are recognizable as custom roles. The same name for a global and for a custom role is no longer a problem. Furthermore: Alphabetically ordered list.

Bug fix : retrieve with sort failed in one to many bean relationship

Bug fix : retrieve with sort failed in one to many bean relationship

Button “Save HTML content” in “Rich Text Editor ” Toolbar

Save button in the Toolbar of “Rich Text Editor” Component, which pass the content to “Field Rich Text” component to handle the save process.

Close activity button
  • Button for activities (only unclosed and editable)
  • Opens modal with componentset (enter closing data)
  • Create new bean with copyrules (new add-modal for selected module)
CloseModal and ActionMenu merge

Implementing the closemodal with the new actionsetmenu

Colorenum color in read-mode

No color in read-mode by the fieldcolorenum field

CloseModal and ActionMenu merge

CloseModal and ActionMenu merge

default-sort ObjectList

ObjectList with default sort info (moduleconf)


Define a set of Dashboards to be displayed in sub tabs in home.

Event Management

This Module will be responsible for the Event Management. An event will be defined with some basic info like it’s url or it’s capacities and so on. It will also have a relation to some other modules like accounts and contacts as participants or organizers and so on. It will also be possible to have some assigned activities.

Field Grouped Enum

A Field which displays checkboxes grouped under specific categories

Field Multiple Enum Dropdown

The field multienumdropdown renders an enum field as a dropdown multiple select list using the SystemMultipleSelect component.

French language package

French language package

FTS Manager: add button index bulk

Trigger bulk indexing manually

Improved Scheduler Job Log

Improved Scheduler Job Log

Incorrect checkbox value interpretation

The checkbox values in the Administration Configurator components were being interpreted incorrectly. The values stored in the DB as both 0 and 1 were interpreted as true (checkbox checked). The only value interpreted as false was NULL. The correct interpretation was already implemented before. However, the value was converted only for “boolean” types whereas the field type used was “bool”. This was corrected in the bug fix

KnowledgeBase – Button Release All

“Button Release All” set the status to “Release” to the selected document and all its sub documents

KReporter: update where operators

Enable where operator for int when vardef type is bigint

Lightning Design update to 2.10.0

Lightning Design update to 2.10.0

Load date time user preferences on user login

Load default values when preference is not set

Output Templates II

The document (result of a output template) is now savable in the CRM system.

Reload button for the sub panel header

Sub panel: When no item is shown/available the footer – including the reload button – is hidden. Now also the header has an include button.

SalesDocs additional fields: incoterms, payer, invoice recipient

SalesDocs additional fields: incoterms, payer, invoice recipient

Scheduler field: Last SUCCESSFUL run

Scheduler field: Last SUCCESSFUL run

Scheduler: Test function (dummy)

Scheduler: Test function (dummy)

Select Custom Actionset in config option

It should be possible to select custom actionsets in the workbenchconfigoptionactionset!

System Multiple Enum Dropdown

A Field which renders a list of items grouped under specific categories in a dropdown with multiple selection functionality.

System Statistics

Added a component in the admin section to gather storage statistics on the database, elastic and the file system for uploads for the system.

Time Zone Field for the Global User Panel

Time Zone Field for the Global User Panel

Update Global Module Menus

Changed the handling of the module Menus of the global navigation items so menu now considered an action set and allows adding custom actions

Url rewrite for IIS: web.config files for config and proxy

Url rewrite for IIS: web.config files for config and proxy

UTC Offset added to UI Date Field Values

UTC Offset has been added to the UI Date Field Values to display the right date for the current UI Time Zone

Week Number for the System Date Picker

Added a Week Number in the System Date Picker

Where Clause on relationship_role_column not implemented

Fixed M2MRelationship::getRoleFilterForJoin() and make use of it

SpiceCRM 2019.07.001

Opportunity Management

Highlights of the July Release are updates on the Opportunity Management. With the new Option for Revenue Lines the revenue of an opportunity can easily be split into chunks for the revenue recognition. This supports better planning and forecasting. Typically deals that are closed are not invoiced immediately but are also built on a billing plan. That can either be a split or with recurring revenues a ramp up to the total amount. Revenue lines allow you to easily maintain that and add the lines to an opportunity building a more realistic picture of the opportunity in the system.

We also started to rework the template compiler used for the PDF and EMAIL Templates. First changes are rolling in and more changes on the templates are to come with the next releases. We will add more info when those changes are completed.
Furthermore, we added an optional support to the integration of Dun&Bradstreet in the Accounts module, added further functions to the Service Functionality with the Service Locations and added features with an NPS question type for the service feedbacks.
Technologically, we completed the changes to support PHP 7.3 and also upgraded internally to Angular 8.0.1.

The Release in Details

Actionsetitem singlebutton

Add flag to show the button outside the drop down box

Angular 8.0.1 update

Update to Angular 8.0.1, also update to Angular CDK 8.0.

Bonus Programs

Bonus Modules (BonusCards, BonusPrograms) Management

Changes to lead conversion

Improvements of lead conversion done by eVolpe

DUNS module

New module to interact with dnb API and retrieve DUNS data

FTS Bulk Indexer

Added a bulk indexer and a separate job to the bulk indexer. The bulk indexer is thought as a tool to load initially into the FTS. It does not check changed related records in FTS. And it uses the bulk interface of Elasticsearch. It still uses the full data mapping for FTS and thus, indexes beans properly. However, due to the bulk nature it does this significantly faster.

Missing language code in translation when no default language is set

Labels manager sets value of default language for first translation. Catch when empty and set first language found in languages list.

New Module ServiceLocations

Define locations and assign location to a piece of equipment.

ObjectRepositories deprecated flag

Add a deprecated flag to the “ObjectRepositories” Score out the deprecated objects Popup when somebody tries to add a deprecated object

Opportunity Revenue Lines

Adding an option to add revenue lines to Opportunities with different amounts and dates for the revenue recognition

OutputTemplate Compiler: render date time fields to user preference setting

OutputTemplate Compiler: render date time fields to user preference setting

PHP 7.3 support

PHP 7.3 support

Polish Language Files for Backend

Polish Language Files for Backend

Questionnaires: New question type “NPS”

New question type “Net Promoter Score” (NPS).

Reload configuration button

The button is located in the header and reloads the configuration, only displayed for admins.

ServiceFeedbacks: Results Tab for Questionnaire Participations

ServiceFeedbacks: Results Tab for Questionnaire Participations

SpiceBeanGuides to packages

Spice Bean Guides Definitions are now available in corresponding package (opportunity management, lead management…)

Update template compiler

New template tags were added to handle loop through list of records and to display the values conditionally. Also function call integration to retrieve data.

Login impossible with a user name containing utf8

Login impossible with a user name containing utf8

SpiceCRM 2019.05.001

Duplicate check

Highlights of the May Release are updates on the duplicate check that now happens online when creating records. This enables user to easily see while entering data and as they enter data to instantly get a response from the system if a duplicate record is found.

Further changes are smaller changes to enhance the User Experience and also some technological enhancements to further improve performance, stability and maintainability of the UI.

The Release in Details

Backend installation with provided database user not possible

Form gets stuck telling that password does not match re-entered password.

Date_entered id was deleted from fts indexer

When you create a bean over a relationship -date_entered id was deleted from fts indexer.

Memorize search terms and Results in ListView

Keep the searchterm. Selected aggregates and results in the listview when navigating away from a list and back

Progress Bar

A new system component displaying a universal progress bar

Get progress report from POST requests (uploads)

POST requests now can report their progress status, for displaying progress Bars

KReporter: vulnerability fixes

Add a check on values for start, limit and filter parameters and clean mislead values.

FTS ListView does not render for contacts

Fix: set sort flag for last_name since full_name sorts on last_name and is the first field in listview

Block navigating away if a model is editing

Added a check if any model on a page is currently in edit mode and if so prompt the user to check if the changes should be discarded

Placeholder for login form

The username and password fields of the login Form are better titled now.

HelpText icon component

A new component, which shows an icon next to the label. On hover a text is shown.


Added a version parameter for loaded jsfiles and included it in the build process. This should eliminate the need to refresh the browser cache after version updates.

Product Group Manager

The Product Group Manager is a new platform to manage the product groups in a hierarchical list. Which makes it easier to manage groups and their related attributes and products.

Outlook AddIn

An Add-In loaded directly in Outlook that can save the Emails in SpiceCRM and add related Beans to those Emails

On the fly Duplicate Check

Capture and show duplicates when adding a new record.

Update Field labels in Views

Label rendering is now included in field rendering

SpiceCRM 2019.04.001


Highlights of the April Release are updates on tagging. We made it significant easier to simply tag records. In the same style as in regular Web Applications just add Tags. As you type SpiceCRM will suggest existing tags. Choose them and reuse existing tags or simply create new ones.

Tags are also included in the Full Text search and can easily be selected as aggregates. With the next releases we will also add them to the target lists so you can build flexible lists simply be assigning tags to targetlists and all records tagged with that term will automatically be used when the targetlist is used.

Also exporting as been made much easier, so you can just select the records based on the tags and then simply export them to a CSV or a target list directly from the list view.
Asides that there have been quite some changes on the backend. A lot in preparation for the upcoming updated on ACL as well as the work in progress on our vardef/metadata manager.

The Release in Details

Backend: Merge Record configure records limit

Configure maximal count of selected records to be merged at the same time. Set config variable in config.php or config_override.php: Example: $sugar_config[‘default_max_mergeable_records’] = 2;

Backend: Schedulers – make use of Vardefmanager for Schedulers module

Code clean up: use vardefmanager to create Scheduler vardefs so that date_indexed field (for FTS capability) is created during SpiceCRM installation.

Backend: SpiceTheme: – support custom images for module icons

Added capability to retrieve images from custom path for module icons in side bar display

Backend: Subpanels – enable search within Subpanel and set max count of records to be displayed
  • New class include/SubPanel/SubPanelSearch.php under namespace SpiceCRMincludesSubPanel; Parameter ‚”tr_config” in former developments refactored to “search_config” $sugar_config variable containing dropdown values for max count of records: $sugar_config[twentyreasons][tr_subpanellimits] renamed to $sugar_config[subpanelsearch][limit_dd_values]
  • Example: $sugar_config[‘subpanelsearch’][‘limit_dd_values’] = array(‘5’ => ‘5’, ’10’ => ’10’, ’50’ => ’50’);
Backend: Subpanels – property value dependency for subpanel display

Make subpanel display dependent of a property set in focus bean. Set name of property in attribute “trdisplay_for” (array) in Layoutdefs setup of Subpanel. Subpanel wil be displayed if focus->$propery is true.

Backend: Fix Load Hooks from Database

Do not load Hooks from database when no global database instance is available. Also fixed hook_array structure for hooks retrieved from database.

Bug fix : Field Email validation

Field Email Validation on save action was always returning an error message “input required” even though the field was filled.

Catch and handle bean action state for UI

Store which action is being applied to bean: create, update

Field Relate List

For a predefined module Relation this field can retrieve a list of a related module and it’s possible to set a limit for the listed items.

Field Text ID

This field translates a ” text id” into a human readable value.

FTS: fix DB Query error during install process

Fix DB Query error during install process

File Download in Firefox

In some cases the download of generated files (CSV, PDF) or attachments did not work properly. This has been fixed and now it should also work as expected in Firefox. Tested successfully with Firefox 65.0.2 and 66.0.2.

Fix KReporter search and sort in bucket manager

Fix KReporter search and sort in bucket manager

KReporter capability with SpiceACL

New Access Management module SpiceACL shall be considered in KReporter-Queries.

Language Translation Manager

This component provides a platform to easily handle the untranslated labels for the default language.

Login name for UserAccessLogs

Added the field “login_name” to UserAccessLogs to store the login names of failed login attempts

Memorize search terms and Results in ListView

Keep the searchterm. selected aggregates and results in the listview when navigating away from a list and back.

Missing confirmation queries

Added confirmation queries for the deletion of attachments or the deletion of items in related lists.

Object Texts

This component handles the related texts of a module.

PDF Preview in print Output

PDF preview has been added to the output templates. So in the window where the user can choose an output template the user can also choose to display the rendered output as PDF or as HTML. PDF is preset. This renders the PDF in the PDF Reader embedded and shows right away the generated result. The PDF can then also be downloaded but is seen as it will be rendered on the screen.

Related Panel animations

Added animations to the related panels so when they collapse and expand are smoothly faded in and out with height and opacity

Sequenced ObjectRelatedListList (Drag & Drop)

Added the ability to order the items of a related list by drag & drop. Until now this was possible in subpanels, now it is also possible for the full list (“list all”).

Show link name as title of related lists

Added the ability to entitle subpanels or full related lists with specific title of the relation (instead of the title of the module).

Spicecrm_fe_factory: improve gulp jobs for deployment
  • Add delete dist folder in js:build job
  • Add check on file.ts exists when uglifying the .js counterpart. Throw error when not found
  • Set current year over a variable in comments instead of hard coded

This component use “two way binding” to handel a number value and reformats it to fit the system formatting and it also accepts the following parameters (precision, min, max).

Added animation to collapsible panel

Added animation to the collapsible card in the systems so it animates smoothly when collapsed or expanded

Added configuration option to global search result

Added an option to set fieldsets for the global search results (GlobalHeaderSearchResultsItem) so the fields displayed in the search box can be flexible defined.

Added elastic normalizers
  • Added the support to define own normalizers.
  • The standard ones are defined include/SpiceFTSManager/normalizers/spice_normalizers.php and can be overwritten in the custom directory, adding your own ones.
  • Default is a lowercase normalizer that is applied to raw fields for sorting- so sorting is not case sensitive
Added language filter support to FTS Indexer
  • In the fts connection settings a new option has been added- to add a language specific filter by default to the spicecrm standard analyzers and normalizers.
  • To better understand the language analyzers and their impact, check out https://www.elastic.co/guide/en/elasticsearch/reference/6.7/analysis-lang- analyzer.html.
  • A setting can e.,g. be german_normalization that then analyzes and normalizes specific to German language. If none is set, no specific language filter is applied
Added query types for duplicate check
  • Added the option for different query Types in the duplicate check
  • Match (or): matches any of the terms in the field. Also supports fuzziness
  • Match (and): matches all terms in the field. Also supports fuzziness
  • Term: requires an exact match, no fuzziness supported
Added sort field in FTS

In the metadata the sor_on property can be defined for a field. Added the support that this is also enabled and considered in the FTS search. This allows e.g. that in a list of contacts the full_name field can be displayed but the the list is sorted by the last_name of the contact.

update Loader Logic

Changes to the loader logic and cleanup of REST services

update Tags

Update on Tagging and Tag handling

CRM Log Viewer: Negative filtering

Added the ability to filter out log entries with specific text fragments.

Select field for modal input prompt

Select field for modal input prompt.

SpiceCRM 2019.02.001

Highlights of the January Release are updates on the search features, a new filter builder adding flexibility and reworks in many areas to start supporting full responsive design and the build of our mobile App.

Google Places Search

Who does not know the process when adding data of switching to google, looking up a companies details and then via copy & paste add the data to CRM. Rest assured that time is over now. With the latest changes we are tightly integrating the Google places search into SpiceCRM directly. Identify a field as a Google Places search field. As You type SpiceCRM will do a google search, present you the results and when selecting the record populate data found on google like the phone number, website or address to the record. This makes entering new data just much easier.

You can also watch a short YouTube video on this feature here.

File Attachments

Further updates are on the generic file attachments. As you are most likely aware SpiceCRM offers the functionality to simply attach files to a record. We further enhanced that switching internally to a truly HTML5 way of handling uploads. This also allows no the parallel upload of multiple files. Just select multiple files in the upload dialog or simply drag more than one file to the files panel. They will upload in parallel. Furthermore, we added a file preview. This will preview Images, PDFs, audio and video files. Other files will be downloaded and can then be viewed with the proper application on the local Computer or Tablet.

Mobile App

We are steaming along with our changes and the completion of the work to release the SpiceCRM mobile App. This is well on its way and the current release has further changes embedded already. See the following short video we compiled on the upcoming mobile release.

The Release in Details

ModelpopoverHeader configuration

added the option to add a componentset as config option to the modelpopover header. That allows to customize the popover with a custom header component. This is e.g. used for the users popover to have a separate component that also renders the image of the user

added option to lazy load Stylesheets

added the option to also load css files as libs that can be lazy loaded. Just add style sheets with file ‘.css’ to the sysuilibs (or syscustomuilibs) table and load them via the metadata service.


added Mobile configuration for SpiceCRM Mobile app.

Multiple Sources for package loader
  • Supporting multiple package repositories for the package loader a new table has been added in the backend. Table sysuipackagerepositories can hold more than one repository.
  • If none is maintained the package loader will by default pull packages from the default repository. If you maintain separate (e.g. customer) repositories with separate configuration those repositories can be added here. The package loader will consider them and then load packages from this source.
Application wide logger

It should be possible to have a different message for logging (sugarcrm.log) than the error message (brought to the user). New method: setMessageToLog()

Changed EmailAddress field to support responsive design

changed the email addresses field so it will render nicely on mobile phones

CronJob for sysftslogs table: delete entries older than configured time frame

new sugar_config variable delete_logs_older_than = “1 week” time frame value is INTERVAL syntax. Default is 1 week when config is not set”

KREST Log Viewer

added a new admin component that view the KREST log entrioes. This is usefuly for debugginbg and tracing if the REST logger is enabled on the backend and allows an easy viewing and seaarching of these entries

Overflow in activity add Container

in the activity add container the menuitems have been changed so on smaller screens with more activitiy types enabled an overflow item is rendered

added user notification on elastic error

now and then a user might encounter an elastic overload error. In case the backend elastic engine throws an error, that error is also communicated to the user indicating that this is not a problem with no search results found but a technical issue occurred prompting the user to repeat the search

Set config_override value on language load
  • Set $sugar_config[‘syslanguages’][‘spiceuisource’] to ‘db’ in config_override.php after successful retrieve of languages
  • thus far after installing the language source for the UI had to be set manually. This is now done whenever a language pack is downloaded
store login credentials

Changes to the login form so now the username and password shoudl be properly recognized by the browsers and allow the user to save the credentials when logging on

Rate limiter for REST calls
  • in scenarios where external systems use the REST API extensively the REST load from the external system might have a negative impact on the overall performance if there are too many REST calls at the same time
  • a new option has been added to configure a rate limit that defines a given number of REST calls per time unit (of a given method) as limit. If that limit is occurred not further REST calls are accepted from that user and source until the rate is cleared again.
Optimize vardef translation into column type on repair/rebuild

“To ensure multiple database types support vardefs will sometimes be defined with a basic dbType and a specific length to match another column Type. Example dbType=’text’ and a len=4294967295. This definition creates a longtext column in mysql. Column will be created properly in database but repair/rebuild will not recognize that vardef match with column type This function matches definition with table column type for specific column types”

User Image upload
  • add capability for users to upload a user image.
  • Also add a generic component to load an image and crop it.
angular 7.2.6 update

updated Angular to 7.2.6

Manage Schedulers in UI

New Workbench option to manage Schedulers with the following Features

  • List View
  • Custom Detail View with Scheduler Logs.
  • Default Actions with Run now button.
updated file upload and Preview
  • updated of the file attachments so multiple files can be uploaded at once.
  • Stopped the event in case a file is dropped outside a drop area.
  • File Preview has been added.
  • Upload has been changed to pure HTML5 FileReader.
Metadata Service New Methods

Methods added to metadata service:

  • updateModuleListType
  • getModuleFilters
  • getModuleFilter
  • setModuleFilter
  • removeModuleFilter
Google Places Search Field

Methods added to metadata service:

  • added a new field for google places search that can complete name, address, phone number etc. from the Google places API.
  • To be used as name field in e.g. accounts or other objects where google places are relevant.
ACLController compatibility with SpiceACLController

Refactor static methods to non -static in ACLController class; Create ACLControllerInterface

set autofocus in app launcher

when the app launcher is opened these search field is automatically focused.

SpiceCRM 2019.01.001

Highlights of the January Release are updates on the search features, a new filter builder adding flexibility and reworks in many areas to start supporting full responsive design and the build of our mobile App.

Search Update

The search field at the top of SpiceCRM has been amended to enable the user to filer by module in the quick search already. Also the search results and global search dialog has been updated. When typing a search term SpiceCRM now searches automatically. The same is true for the search within a module. Also the search Results screen has been adopted to be responsive and support the capability to use it easier on tablets or phones.

Filter Builder

A new Filter Builder has been added that allows easy definition of Filters that can be used top create custom dashlets for the dashboard, customize Subpanels in Views and much more. It is a further step forward in our mission to make SpiceCRM the most flexible CRM platform we know and deliver a user focused UX that will drive unique customer experiences with a Team that can rely on a CRM platform to serve customers as best as they can.

Mobile App

Those who follow the story how SpiceCRM was built know that we came from the mobile app. With the current release we are taking further steps to support mobile form factors and make SpiceCRM a “responsive designed” system that can be also used easily on mobile devices. That effort is still ongoing and will continue throughout the first half year 2019.

Technologically we also pushed to Angular 7.1 – which you should not notice but it is important to be compliant and in line with the latest standards when it comes to operability and it security. We also updated the Lightning Design to Release 2.8.0

The Release in Details

Add Fieldset to Object Page Header

added a fieldset to the component object page header so the display field in the page header of an object can be freely configured.

support for smaller screens on top header
  • In the top header row in smaller screens the logo is removed. Components like admin and others are also removed to fit in the smaller screen size on mobile devices.
  • On small screens (below a with of 768px the search field is also simplified and the module selector is removed.
responsive changes to search results
  • also search results are changed in a first step to enable use on mobile devices and responsive design.
  • If the screen with is medium or below the module selector is removed and the results take up the complete width.
Angular 7.1.3 update

update to Angular 7.1.3

Backend: consider loaded company logo in login screen

SpiceTheme ignores loaded logo in backend. Integrate check loaded image in login screen

Logging with Transaction ID
  • added the unique transaction id to the log algorithms
  • enable to track logs by transaction and roundtrip
CRM Log Viewer

built in viewer tools in the admin section to display logs

Load reference in backend core only
  • changed logic so only core configuration can be loaded in the backend
  • all further packages then to be loaded via the frontend package loader
Backend installation site_url config wrong if protcol is https

fix in the installation with https protocol so the backendurl is written properly

send error message when FTS has an overload
  • react to error 429 on elastic
  • send a toast to the user with the message that elastic has an overload
collapsible Subpanels

added functionality to collapse subpanels

Support for content packages in package loader
  • added Support to also allow loading of content packages in the package loader. This enables to create packages with varying content that is not necessarily related to configuration of the system but simply adds data that is useful and speeds up the configuration process of the system. Typical examples are email templates, prebuilt dashboards, reports and other data.
  • content package for email templates has been created
  • content package for fts default settings has been created
  • added the filter builder to the admin section
  • added filters to dashlets
  • added filters to subpanels
  • added filters to relate fields
  • added filters to popup relate containers
added Dashlet Manager

a new section in the admin area to manage and define dashlets that then can be easily used to build custom dashboards

config.php https option for ElasticSearch
  • added optional protocol for the elastic settings
  • useful if elastic is running on https protocol
Dashboard changes for responsive Design
  • separation of Assistant pane to only show on wide screens
  • for smaller screens render assistant as part of the Home Module Menu
  • render dashboards in a vertical grid on small screens
  • added menu to dashboard module rather than selection pane on smaller screens
Improvements of Global Search
  • improved the global Search Field to allow search filtered by module.
  • separated the global search in the header and the global search in the route.
  • enhanced the global search results to a better design and cleaned up.

SpiceCRM 2018.11.001

Integrated Calendar

Highlight s of the November Release is a major update of the integrated Calendar. This adds a timeline view, adds the feature to show other resources calendars. It pushes the integration of the Google Calendar. So, if you allow the login with Google you can also display your planned events in the google calendar that are not in CRM as part of the calendar view making planning your professional day easier.

We also updated to the Winter Release of Lightning Design, redesigned the activity stream. It comes in a newer and cleaner design in line with the lightning design guidelines. We also added more filter options and even more flexibility for the admin to configure and enhance the stream.

Package Manager

Also in its first version we are releasing the package manager. This will become a central part of SpiceCRM managing the extendibility and flexibility to load packages (configuration, templates languages) and also easily uninstall them again. More on that will come with the next releases as we are continuously working to enhance the easy of system management and configuration.

Technologically we also pushed to Angular 7 – which you should not notice but it is important to be compliant and in line with the latest standards when it comes to operability and it security.

The Release in Details

Adapt code for KREST as standalone package

Separation and cleanup of the latest KREST package to allow Standalone Installation for those useres using Tools like KReporter standalone on SuiteCRM or SugarCRM

Backend Cleanup KDeployment* modules javascript/ gruntjob/ KREST calls
  • remove any trace of deprecated modules KDeploymentCRs,KDeploymentSystems, KReleasePackages
  • check the destiny of KDeploymentMWs in backend.
Backend ProjectWBSs label for parent_name


Backend repair/rebuild for audit tables
  • Creation is considered but not update when additional fields are defined.
  • Update shall be considered by repair/rebuild.
  • Make index names unique database wide
Better portal user creation/modification

Revision of the logic/code/ui for more user comfort and better error handling.

Calendar rework
  • Added additional views for timeline.
  • Added support for multi day events in all views.
  • Restyle on popovers.
  • Integration into Google Calendars< displaying also non SpiceCRM Events
  • added capability to display other users calendars
GSuite Integration
  • finetuning and updates on login with Google
  • Integrate Meetings and Calls with added logic hook definition
Google Cloud natrular Language API
  • added support for link with Natural language API
  • added email processor to process received emails and get sentiment on email
  • added integration of sentiment into email inbox display to highlight positive and negative emails for service processes
KReporter Fix custom function in select

Fix for KReporter 4.4

KReporter fix SuiteCRM Subpanel compatibility
  • ParentID is ignored in query: proper values could not be passed since variable currentRecord in JS is only in SpiceTheme.
  • Added correction to consider SugarCRM CE / SuiteCRM.
Lost password via EmailTemplate+Compiler
  • updated lost password email logic so it complies with the SpcieCRM email Template Compiler
  • added logic to the email template compiler so additional parameters can be passed in
MediaFiles: Automatic creation of required folders
  • changed logic so default folders for storage for media files are automatically created
  • minor coding changes and cleanup
  • Possibility to turn off trash bin
Name Formatting
  • added name formatting to the user preferences
  • rework on full name field to properly interpret user preferences
Assignment Notifications
  • enable creation of module specific assignment templates so for each module an individual styled and defined template can be used to notify a user that a record has been assigned. Including information on the record assigned.
  • respect users language and send in the language of the user
Optimistic Locking
  • changed the audit log so by default all fields are audited
  • changed the ui logic so only changed fields are sent to the backend
  • added a backend check for the changed fields since the last load on the frontend
  • added an optimistic locking resolution dialog in the frontend to let the user handle such a situation
Redesign Lookup & Relate Fields
  • redesigned the lookup and relate fields
  • changed the component structure
retrieve real values after POST
  • added a config parameter so real values on the db can be returned from a POST call
  • can be configured since it has a potential negative performance impact in high volume installations
Speech Recognition
  • added a fix in the speech recognition dialog
  • System potentially did hang after pausing and continuing on
Angular 7 update

updated core Angular to 7.0.1

Lightning Design Update
  • updated Lightning Design to 2.7.4 (Winter ’19)
  • updated the role picker dialog
User Preferences

fixed user preferences bug for admins

Role Loading

in some situations after a logoff and login the user might have had the wrong role

added config table syscustomhooks
  • added the package and version fields to table syshooks so hooks can be distributed as part of packages from the reference config.
  • Additionally a table syscustomhooks has been added to add customer specific hooks in the configuration of the database.
added transaction control in REST Calls
  • added an option to handle Database updates transactional on REST Calls
  • enabling commits and rollbacks in case of handling of more critical and transactional data
UI Add User & User reset password button
  • Button Reset Password for user details view added.
  • Auto generate password converted to a checkbox, which will be filling the password field with the auto generated password and showing a copy button when it’s checked.
  • by Email option added. to automatically generate password and send it via email
  • Hide password button added for regular users
new field type components
  • color Enum: display a color indicator with an enum value
  • multiselect MultiEnum: list an select with multi select option
update Actionsets
  • change in rendering actionsets so the only the first button is shown and the remaining buttons are in an overflow
  • changed the way how custom action item components are developed