The purpose of this document is to provide insight to Sugar Developers for upgrading custom Sugar code, extensions, and integrations to the Sugar 12.3 (Q1 2023) release. This guide focuses on changes in Sugar 12.3 (Q1 2023) that could cause an immediate impact on Sugar customizations and integrations built for earlier Sugar versions.
Please check out the Q1 2023 Developer Webinar recording for more developer highlights. For Admin and End User release notes, please visit the Sugar 12.3.0 Release Notes.
User Experience Updates
Sidebar Navigation (UI Redesign)
Sugar is implementing a customer-inspired, research-based redesign of the user interface and navigation. This redesign gives you more visual real estate, serving up more relevant data at your fingertips to help increase your productivity and accelerate goal achievements. For that, Sugar has relocated MegaMenu from the top header to the left navigation, removed the footer, and updated module icons. All module icons are now consistent throughout the App and users can choose to display icons or letters for each module.
We have compiled a throughout Technical Guide with everything you need to know about this change.
Focus Drawer Tabs
With this release, we are introducing a new and improved way of working with focus drawers in Sugar i.e. “Focus Drawer Tabs
”. Focus drawer tabs are a better way for Serve/Sell agents to easily view and obtain all the information related to any record within the focus drawers.
With this new feature, each record link clicked in a focus drawer opens a new tab within the same focus drawer showing the record information in the record view. Clicking on the focus drawer icon in the focus drawer will also open a new tab with the focus dashboard view. Each focus drawer tab is identified with the corresponding module name and the name of the corresponding record.
This new feature is a great way to increase productivity for Serve/Sell agents as they now can quickly view the details of any record link within the focus drawer without having to leave the focus drawer screen. Also, with the new focus drawer tabs, users can easily navigate to and fro across the tabs within the focus drawer without closing any of the opened focus drawer tabs.
Console Usability Improvements
In this release, we have done a number of console usability enhancements in order to improve the service and sell agent’s experience and our customer's ability to deliver superior sales & service experiences to their customers by bringing data to the agent instead of agents having to click around to find the information they need.
- Agents will be able to resize the columns as per their needs whenever they want.
- They will be able to click on any of the record links on the multiline list view & Overview tab to open the record view within the focus drawer on the console.
- Enhanced the record view dashlets on the consoles such that the dashlet title is now clickable and clicking on the title opens the corresponding record view within the focus drawer on the consoles.
- We have also enabled case number as a clickable link on the Service console case list view to make it easy for the service agent to access all the cases when they are working on the focus drawer on the service console.
Reports Viewer Improvements
In this release, we are implementing multiple feedbacks gathered since Sugar has introduced the Reports Viewer. The report improvements work consisted of:
- Resizable columns for Summation-type and Rows and Columns-type reports
- Improving User Interface based on customer requests
- Improving the performance of the reports
- Increasing consistency across the Reports Viewer and Reports Dashlet
- Backporting the important issues to earlier versions
Module Names and Icons Improvements
In this release, we are introducing an improved module renaming functionality that improves our previous "Rename Modules" module in Sugar.
Aligning with Sugar's UI Redesign, Module Names and Icons, provides administrators with a new way of renaming modules by language and displaying icons or abbreviations in the new Sidebar/Rail menu.
SugarIcon Library Updates
SugarIcon library has been updated to include more icons. Those icons are also available in our Styleguide documentation. Developers should be able to reference the list of supported icons and usage instructions under Admin > Styleguide > Base CSS > Icons.ssicon-sugar-u
sicon-document-lg
sicon-knowledgebase-xl
sicon-sugar-club
Sugar REST API updates
This Sugar release introduces REST v11_19.
Module Names and Icons Rest API endpoints
Added new endpoints to maintain Module Names and Icons (former Rename Modules) per language.
GET <sugar instance>/rest/v11_19/Administration/module-names-and-icons/:language PUT <sugar instance>/rest/v11_19/Administration/module-names-and-icons/:language
PHP Library Upgrades
Prepare for the Library Upgrades coming in 12.3 (Q1 2023)
We have put together a technical blog post with significant insights for you to prepare for those upgrades.
Doctrine DBAL (doctrine/dbal)
Doctrine DBAL provides Sugar with a powerful database abstraction layer with many features for database schema introspection, schema management, and PDO abstraction. There are breaking changes that may affect your customizations documented on DBAL's official upgrade notes.
doctrine/dbal ^2.13.2 → 3.3.7
Note: We are adding a new Health Check to prevent upgrades for DBAL customizations.
Monolog (monolog/monolog)
Sugar utilizes a PHP library called Monolog Monolog sends your logs to files, sockets, inboxes, databases, and various web services. In this release, we are upgrading its version to 2.8.
There are breaking changes that may affect your customizations documented on DBAL's official upgrade notes.
monolog/monolog 1.22.0 → ^2.8.0
Moontoast Math (moontoast/math)
Sugar utilizes a PHP library called Moontoast Math. Moontoast\Math is useful for working with integers that are larger than (or may become larger than, through mathematical computations) PHP's max integer value for a given system. In this release, we are replacing Moontoast\Math with Brick\Math as Moontoast has no support for the latest versions of PHP.
moontoast/math 1.22.0 → brick/math@0.9.3
Guzzle (guzzlehttp/guzzle)
Sugar utilizes a PHP library called Guzzle. Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services.
There are no known breaking changes in this upgrade, they are mostly newly generated modes and PHP version support.
guzzlehttp/guzzle 6.3.3 → ^6.5.8
Smarty (smarty/smarty)
Sugar utilizes a PHP library called Smarty for rendering PDFs in PDF Manager and also for rendering HTML pages used by Backwards Compatibility (BWC) modules. In this release, we will be upgrading that library to version 4. There are breaking changes that may affect your customizations documented on Smarty's official upgrade notes. Sugar has managed to keep compatibility with previous versions, however, you should upgrade your customizations to be compatible with Smarty 4.x.
smarty/smarty 3.1.45 → ^4.2.0
Google PHP Client (google/apiclient)
Google API Client library enables Sugar to work with Google APIs such as Gmail, Drive or YouTube. There are major internal changes in this library, if you use them, please refer to this library’s upgrade procedure here.
google/apiclient 2.9.2 → ^2.10.1
AWS SDK PHP (aws/aws-sdk-php)
AWS SDK PHP library enables Sugar to interact with AWS web services has been upgraded. Check out the CHANGELOG for more details.
aws/aws-sdk-php 3.183.13 → ^3.238.6
Laminas Mail (laminas/laminas-mail)
Laminas\Mail enables Sugar to compose and send both text and MIME-compliant multipart email messages. We've updated these libraries to the latest patch, there are no known breaking changes in this upgrade.
laminas/laminas-mail ^2.14.0 → ^2.16.0
The following packages were upgraded as transitive dependencies.
laminas/laminas-mime 2.7.4 → 2.10.0
laminas/laminas-stdlib 3.2.1 → 3.13.0
laminas/laminas-validator 2.13.4 → 2.25.0
PhpMailer (phpmailer/phpmailer)
PhpMailer provides Sugar with a full-featured email transfer class for PHP. We've updated these libraries to the latest patch, there are no known breaking changes in this upgrade, changes are documented in the CHANGELOG.
phpmailer/phpmailer v6.5.0 → ^6.6.4
Ramsey UUID (ramsey/uuid)
ramsey/uuid enables Sugar to generate and work with universally unique identifiers (UUIDs). We've updated these libraries to the latest patch, there are no known breaking changes in this upgrade.
ramsey/uuid 3.8.0 → ^3.8.0 (3.9.6)
Ultra-lite Container (ultra-lite/container)
ultra-lite/container is a PHP library for the dependency injection container. We've updated these libraries to the latest patch, there are no known breaking changes in this upgrade.
ultra-lite/container 6.2.0 → ^7.0.2
Beberlei Assert (beberlei/assert)
A simple PHP library that contains assertions and guard methods for input validation (not filtering!) in business- models, libraries, and application low-level code. We've updated these libraries to the latest patch, there are no known breaking changes in this upgrade changes are documented in the CHANGELOG.
beberlei/assert ^2.9.9 → ^v3.3.2
JS Library Upgrades
jQuery
In this release, we've updated jQuery to the latest patch, there are no known breaking changes in this upgrade.
jquery 3.6.0 → ^3.6.0
Underscore.js
In this release, we've updated Underscore.js to the latest patch, there are no known breaking changes in this upgrade.
underscore 1.13.1 → ^1.13.6
Moment.js
In this release, we've updated Moment.js to the latest patch, there are no known breaking changes in this upgrade.
moment 2.10.6 → ^2.29.0
Chart.js
In this release, we've updated Chart.js to the latest patch, there are no known breaking changes in this upgrade.
chartjs 3.6.1 → 3.9.1
TinyMCE
In this release, we've upgraded TinyMCE to its latest supported version. There were a considerable amount of changes taken care of by our team.
The list of changes can be found in this comparison between versions.
tinymce 4.9.11 → 6.2.0
SugarCRM Ventana
Ventana is being bumped up to 1.1.14 and it has been upgraded to Sugar 12.3 as well.
Supported Platforms Update
DocMerge Deployed on Supported Regions
DocMerge services have been deployed in EU, APAC, and CAC regions for better performance and compliance.
Configurability updates
Calculated Dropdown Fields
In this release, we added the ability to use Sugar Logic on fields of data type “Dropdown” by making these fields Calculated.
Admins will be able to streamline different business processes without the need to write any code or use SugarBPM.
Results coming out SugarLogic will be written to the database and Sugar will not validate the result, if the result isn't a valid option in the DOM for that dropdown list, it will display as a blank field in the record view due to no matches.
Sugar Config Settings
Setting Name |
Default |
Override Example |
Description |
maxPinnedModules | 4 | $sugar_config['maxPinnedModules'] = 6; | admins can change the config property to show more/less number of icons in the sidebar-nav |
Removed Functions / Libraries / Features
Removal of Laminas Bridge
The Laminas Zendframework Bridge (laminas/laminas-zendframework-bridge
) has been removed as it was a dependency from laminas mail and no longer is in use.
Multiple Dead code were removed from Sugar Core
As part of our ongoing efforts to keep Sugar clean, fast, reliable, and secure, we are removing dead code from Sugar Core.
Platform Updates
SugarAutomate has migrated from an MLP to core sugar code.
In this release, SugarAutomate (formerly CJP) is no longer an MLP and is now officially part of the core code in Sugar Sell, Serve, and Enterprise.
The upgrade script when migrating the 12.3 will remove the old Automate MLP so that there are no conflicts with the new 12.3 code. The experience for Automate MLP users and Automate 12.3 and higher users will be identical. Additionally, users without the Automate license enabled will not see any difference in the Sugar user interface. Smart Guide modules/fields are not available for Non-Automate users.
MySQL 8.0.31 Compatibility Fix
In this release, we are fixing a parenthesis compatibility issue specific to MySQL v8.0.31 that would fail with error: MySQL error 1250: Table 'job_queue' from one of the SELECTs cannot be used in global ORDER clause.
Note: This fix will be backported to versions 11.0.x and 12.0.x of Sugar.
SugarOutfitters Links
In this release, we are adding links to SugarOutfitters for administrators and end-users.
As an administrator, I would like to be aware of and discover the SugarOutfitters marketplace as an easy way to extend, configure, or customize my Sugar instance (Added a new Link for SugarOutfitters to the Developer Tools panel)
As a Sugar user, I would like to know how to find add-ons and extensions that can help me get my work done and make Sugar more valuable to me so we would like to add the SugarOutfitters link to the Help icon in the sidebar nav
Profile and Browser Time Zones Always in Sync
When browser and user profile timezone are different, we’ll automatically update profile timezone to match browser timezone.
User’s will no longer see discrepancies between their browser and user profile timezone. When users log into their Sugar instance and their browser time differs from their user profile timezone, we will automatically update their profile timezone and notify the user of this change.
More information about scheduled jobs
In order to provide more information to admins and developers, additional columns have been added to the Schedulers module. The additional columns will surface details about scheduled jobs successes or failures.
Add language dropdown to Sugar's login Screen
With the removal of the footer, the language dropdown has been removed and moved to the Login screen and the Mobile web link was added to the left of it.
Add support of Strict RFC compliant redirects to ExternalResourceClient
Strict RFC-compliant redirects mean that POST redirect requests are sent as POST requests vs. doing what most browsers do (for 301 and 302) which is redirect POST requests with GET requests. There are multiple types of redirects:
301 Moved Permanently
302 Found
303 See Other
307 Temporary Redirect
08 Permanent Redirect
Note: For 307 and 308 redirects browsers follow RFC while ExtrernalResourceClient treats them similarly to 301 and 302.
Compile list of boost values for all fields across all modules
In order to assess how to adjust the out-of-the-box global search boost values, we need a comprehensive list of all the fields currently configured for search and what the boost value is.
new Sugar CLI command, "elastic:show_boost_values", to show boost values for fts enabled fields for modules. usage: bin/sugarcrm elastic:show_boost_values -h Description: show boost values for fts enabled fields for modules Usage: elastic:show_boost_values [options] Options: --modules=MODULES Comma separated list of modules to search. -h, --help Display help for the given command. When no command is given display help for the list command -q, --quiet Do not output any message -V, --version Display this application version --ansi|--no-ansi Force (or disable --no-ansi) ANSI output -n, --no-interaction Do not ask any interactive question --profile Display timing and memory usage information -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Reset password email with a reset link it instead of a temporary password
In this release, we fixed an issue when resetting a password for a user, for instances that are not IDM enabled, they are receiving a temporary password instead.
Path Validation when including PHP files
In this release, we started the process to replace direct include files to use FileLoader::
validateFilePath
as part of our larger commitment to have a central place of control on all direct file inclusions, where the filename is not literal, for example:
// With
require FileLoader::validateFilePath("{$foo}/bar.php");
require_once FileLoader::validateFilePath("{$foo}/bar.php");
// Replace.
include "{$foo}/bar.php";
include_once "{$foo}/bar.php";
// With
try {
include FileLoader::validateFilePath("{$foo}/bar.php");
} catch (\Throwable $e) {
LoggerManager::getLogger()->fatal("'include' failed with error: " . $e->getMessage());
}
try {
include_once FileLoader::validateFilePath("{$foo}/bar.php");
} catch (\Throwable $e) {
LoggerManager::getLogger()->fatal("'include' failed with error: " . $e->getMessage());
}