Release
2023.01.001
Announced on

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.
Config:
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
Testing:
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
CR1000903
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.
CR1000882
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`;
CR1000858
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.
CR1000869
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`;
CR1000916
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.
CR1000941
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.
Deprecation
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
Questions about this version? Write to us.