<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://sugarclub.sugarai.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Sugar 14.2 (Q4 2024) Customization Guide</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/979/sugar-14-2-q4-2024-customization-guide</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Sugar 14.2 (Q4 2024) Customization Guide</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/979/sugar-14-2-q4-2024-customization-guide</link><pubDate>Mon, 07 Oct 2024 19:06:21 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:ecaaeea5-fb69-49ef-8fc7-268287e86c50</guid><dc:creator>Rafael Fernandes</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/979/sugar-14-2-q4-2024-customization-guide#comments</comments><description>Current Revision posted to Dev Tutorials by Rafael Fernandes on 10/7/2024 7:06:21 PM&lt;br /&gt;
&lt;div class="content"&gt;
&lt;div class="content"&gt;
&lt;p&gt;The purpose of this document is to provide insight to Sugar Developers for upgrading custom Sugar code, extensions, and integrations to the Sugar 14.2 (Q4 2024) release. This guide focuses on changes in Sugar&amp;nbsp;&lt;span&gt;14.2 (Q&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2024) that could cause an immediate impact on Sugar customizations and integrations built for earlier Sugar versions.&lt;/p&gt;
&lt;p&gt;Please check out the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="/dev-club/m/event-recaps/2861"&gt;Q4 2024 Developer Webinar recording&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for more developer highlights.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;For Admin and End User release notes, please visit the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="https://support.sugarcrm.com/SmartLinks/Release_Notes/14.2.0_Release_Notes/"&gt;Sugar 14.2.0 Release Notes&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1ff80k9i32"&gt;User Experience Updates&lt;/h2&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;UI Modernization&lt;/h3&gt;
&lt;p&gt;We are very excited to announce that w&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;e&amp;rsquo;ve implemented a comprehensive UI redesign to modernize and enhance the platform&amp;#39;s appearance. We replaced the previous color palette with Tailwind CSS colors, which are not only more vibrant but also designed to be easier on the eyes, including in dark mode. This new palette improves accessibility and visual appeal, making the interface more engaging and inclusive.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="TextRun SCXW203504768 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW203504768 BCX0"&gt;Several specific improvements were made: we added a distinct border to flyout menus to prevent them from blending into the background, replaced the blue sidebar background with a white one to enhance icon visibility, and rounded the corners of input fields, dashboards, and dashlets for a more polished look. Additionally, the main pane now floats from the sidebar navigation, achieved through minor CSS and class tweaks that ensure a seamless experience for users. We retained the top-down drawers to maintain ample real estate for tasks such as taking calls in SugarLive and converting leads.&lt;/span&gt;&lt;/span&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We have compiled a throughout&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="/dev-club/w/dev-tutorials/967/modern-ui-technical-guide"&gt;Technical Guide&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;with everything you need to know about this change.&lt;/p&gt;
&lt;h3 id="mcetoc_1i7u16d9e0"&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;Sorting&lt;/span&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;Columns Within &amp;quot;Drilling Through Report Charts&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;In this release, we&amp;#39;re&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span data-contrast="auto"&gt;introducing the sorting capability in the data table of the drill through experience.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;For example, I&amp;rsquo;m analyzing data from Pipeline by Type by Team report. I see the likely sum of the opportunities for existing and new business, for one of the teams and decide to see what opps are in the &amp;ldquo;New business&amp;rdquo; section for West team. I click the respective chart element and visualize the list.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1i7u16d9e1"&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;SugarLive for Enterprise&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;In this release,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span data-contrast="none"&gt;we will include the SugarLive feature for Enterprise customers. Main feature available for SugarLive are:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="1" data-aria-posinset="1" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;Inbound routing and Contact lookup&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;This integration provides browser-based contact control panel (CCP) within Sugar, where an agent will use for real-time communication with customers. When a customer dials in for support, the inbound call will be routed to an available agent. SugarLive matches the customer call against existing contact records and brings up the contact profile upon successful lookup. The agent can then quickly access relevant details (e.g., open cases, call history) about the customer.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li data-font="Symbol" data-listid="1" data-aria-posinset="2" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;Outbound Dialing&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;This integration also enables agents to initiate outbound dialing calls to customers. For example, a seller can look up contacts that are overdue for follow-ups and click on the phone number directly to start a call with the customer.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li data-font="Symbol" data-listid="1" data-aria-posinset="3" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;Call Transcript and Recording&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;When a call is completed, a new entry will be created automatically under the Calls tab where an agent can expand to review conversation history. Each line of communication between agent and customer is recorded with a sentiment score. The agent will also have access to the original recording for cross-validation.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li data-font="Symbol" data-listid="1" data-aria-posinset="4" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;Embedded Chat in Sugar Portal&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Sugar Self-Service center offers an interface for end customers to log in and receive post-sale support. Here a customer can initiate a chat session for service through Sugar Self-Service center.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1i7u16d9e2"&gt;Predict Scores for Leads and Opportunities&lt;/h3&gt;
&lt;p&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;In this release,&amp;nbsp;we added a &amp;quot;Win Prediction Score&amp;quot; field to Opportunities and a &amp;quot;Conversion Prediction Score&amp;quot; field to Leads in version 14.2. This update stores the complete set of scoring details, including Prediction Bin, Decimal Score, accuracy, multiplier, and features used, directly within CRM records. This allows the full scoring information to be displayed on the dashlet (the CRM dashboard widget) without needing additional backend requests, streamlining data access and enhancing the efficiency of score display.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1i7u16d9e3"&gt;&lt;span&gt;&lt;span class="TextRun SCXW222456944 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;Additional License Information&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;in&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SpellingErrorV2Themed SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;Su&lt;/span&gt;&lt;/span&gt;&lt;span class="TextRun SCXW222456944 BCX0" lang="EN" data-contrast="auto"&gt;&lt;span class="NormalTextRun SpellingErrorV2Themed SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;garCl&lt;/span&gt;&lt;span class="NormalTextRun SpellingErrorV2Themed SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;o&lt;/span&gt;&lt;span class="NormalTextRun SpellingErrorV2Themed SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;u&lt;/span&gt;&lt;span class="NormalTextRun SpellingErrorV2Themed SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;d&lt;/span&gt;&lt;span class="NormalTextRun SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;&amp;nbsp;Insights&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;In this release, SugarCloud Insights will show a breakdown of the number of active users independent of license assigned and includes information about any legacy add-on licenses (Automate, Hint, Maps).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Measures:&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Customers will now be able to see more detailed license information for the CRM and quickly determine how many active users are in a multi-license environment.&lt;/p&gt;
&lt;h2 id="mcetoc_1g4djj0su0"&gt;Artificial Intelligence&lt;/h2&gt;
&lt;h3 id="mcetoc_1i7u16d9e4"&gt;Case and Opportunity Summary Improvements&lt;/h3&gt;
&lt;p&gt;Since its release in 14.1, various improvements have been made in the contents of the summary. Participants are more segmented, and Suggested Actions clearly defined for the Opportunity summary. Case summary contains the Sentiment (positive/neutral/negative), context and reasoning for it. Both Case and Opportunity summary are available in all languages supported in SugarCRM, and they are displayed in the language the user logged in with, regardless of the language records are in.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1i7u16d9e5"&gt;&lt;span&gt;&lt;span class="TextRun SCXW118627354 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW118627354 BCX0" data-ccp-parastyle="heading 2"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="NormalTextRun SCXW249156672 BCX0"&gt;&lt;/span&gt;&lt;/span&gt;Sugar REST API updates&lt;/h2&gt;
&lt;h3 id="mcetoc_1gjpkca900"&gt;Find the email by email address&lt;/h3&gt;
&lt;p&gt;Find email object by email address.&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;GET &amp;lt;sugar instance&amp;gt;/rest/v11_25/Mail/findByEmail?email=&amp;lt;email address&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;&lt;code&gt;&lt;/code&gt;&lt;/h3&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;&lt;code&gt;&lt;/code&gt;&lt;/h3&gt;
&lt;h2 id="mcetoc_1ftl03hrg6"&gt;&lt;span style="font-size:inherit;"&gt;PHP Library Upgrades&lt;/span&gt;&lt;/h2&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Guzzle (guzzlehttp/guzzle)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes a&amp;nbsp;PHP library called&amp;nbsp;&lt;a href="https://github.com/guzzle/guzzle"&gt;Guzzle&lt;/a&gt;. Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In this release, we are upgrading its version to ^7.8.1.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There are breaking changes that may affect&amp;nbsp;your customizations documented on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/guzzle/guzzle/blob/7.8/UPGRADING.md"&gt;Guzzle&amp;#39;s official upgrade notes&lt;/a&gt;.&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;guzzlehttp/guzzle &amp;rarr; ^v7.8.1&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;&lt;span&gt;Laminas Components (laminas/laminas-escaper)&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes a&amp;nbsp;PHP library called&amp;nbsp;&lt;a href="https://github.com/laminas/laminas-escaper"&gt;Laminas Escaper&lt;/a&gt;. Laminas Escaper&amp;nbsp;&lt;/span&gt;Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There are no known breaking changes in this upgrade.&lt;/p&gt;
&lt;pre&gt;laminas/laminas-escaper &amp;rarr; ^v2.13.0&lt;/pre&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Monolog (monolog/monolog)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes a&amp;nbsp;PHP library called&amp;nbsp;&lt;a href="https://github.com/Seldaek/monolog.git"&gt;Monolog&lt;/a&gt;&amp;nbsp;Monolog sends your logs to files, sockets, inboxes, databases, and various web services&lt;/span&gt;&lt;span&gt;. In this release, we are upgrading its version to 2.8.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There are breaking changes that may affect&amp;nbsp;your customizations documented on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/Seldaek/monolog/blob/main/UPGRADE.md"&gt;Monolog&amp;#39;s official upgrade notes&lt;/a&gt;.&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;monolog/monolog &lt;span&gt;&amp;rarr;&lt;/span&gt;  ^3.7.0&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="mcetoc_1ff80k9i33"&gt;&lt;span style="font-size:inherit;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;JS Library Upgrades&lt;/h2&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Backbone.JS&amp;nbsp;(backbone)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes a&amp;nbsp;JS library called&amp;nbsp;&lt;a href="https://backbonejs.org/"&gt;Backbone.js&amp;nbsp;&lt;/a&gt;Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;jashkenas/backbone &lt;span&gt;&amp;rarr;&lt;/span&gt;  ^1.6.0&lt;/pre&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Sugar Sucrose&amp;nbsp;(@sugarcrm/sucrose-sugar)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes its own JS library called&amp;nbsp;&lt;a href="https://github.com/sugarcrm/sucrose"&gt;Sucrose&lt;/a&gt;. Sucrose is SugarCRM&amp;#39;s Chart Library: based on D3 and derived from NVD3.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;@sugarcrm/sucrose-sugar &lt;span&gt;&amp;rarr;&lt;/span&gt;  0.9.0&lt;/pre&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Handlebars&amp;nbsp;(sugarcrm/handlebars.js)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes a fork version of JS library called&amp;nbsp;&lt;a href="https://github.com/sugarcrm/handlebars.js"&gt;Handlebars.js&lt;/a&gt;. Handlebars provides the power necessary to let you build semantic templates effectively with no frustration.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;sugarcrm/handlebars.js &lt;span&gt;&amp;rarr;&lt;/span&gt;  ^4.7.8&lt;/pre&gt;
&lt;/div&gt;
&lt;h3 id="mcetoc_1h8k0rdqt5"&gt;Upgrade Yahoo! UI Library 3&lt;/h3&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;p&gt;In this release, we are upgrading some transient libs required by yui3 as part of its latest pull.&lt;/p&gt;
&lt;p&gt;There are no known breaking changes in this upgrade, they are mostly bug fixes in this release.&lt;/p&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Ventana&amp;nbsp;(sugarcrm/ventana)&lt;/h3&gt;
&lt;p dir="auto"&gt;&lt;a href="https://github.com/sugarcrm/ventana"&gt;Ventana&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a client to help connecting and making requests to a SugarCRM REST API on multiple versions. Currently this library provides a JavaScript connector.&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;sugarcrm/ventana &lt;span&gt;&amp;rarr;&lt;/span&gt;  1.1.15&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="mcetoc_1gj9pc6si0"&gt;&lt;span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;code&gt;&lt;/code&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1ff80k9i33"&gt;Configurability&amp;nbsp;updates&lt;/h2&gt;
&lt;h3 id="mcetoc_1f7c87abe2"&gt;&lt;/h3&gt;
&lt;h3 id="mcetoc_1i87un0750"&gt;&lt;span style="font-size:inherit;"&gt;Process emails in parallel to ungzip (default)&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;In this release, we are providing a new command as part of Sugar CLI to decompress those emails and make them readable:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="batchfile"&gt;  SugarCRM Console version &amp;lt;version&amp;gt;

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable 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

Available commands:
  help             Displays help for a command
  list             Lists commands
 email
  email:process                Process emails in parallel
  email:process-batch          Process a single email batch
&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f7c87abe2"&gt;&lt;/h3&gt;
&lt;h2 id="mcetoc_1g4djj0su0"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1g5m8lc4s1"&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1f77psegvl"&gt;Platform Updates&lt;/h2&gt;
&lt;h3 id="mcetoc_1gqa6vaoc8"&gt;&lt;span&gt;Add rector scanner step into PackageScanner during MLP installation&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;We are enabling this feature, introduced in 14.1, by default in 14.2, as a reminder what it is, here&amp;#39;s the announcement we did in the last quarter.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;As part of our ongoing efforts to help our customers to install MLPs compatible with PHP 8.2+, we are introducing Rector (compatibility tool) checks to our installation process.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;PackageScanner will execute a dry-run of rector looking for incompatibilities on the package being installed and will deny the install if incompatible, if denied, an option to download the Rector report will be available to download the diff file for further investigation.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;Predict scores for Leads &amp;amp; Opportunities&lt;/h3&gt;
&lt;p&gt;In this release, we&amp;nbsp;a&lt;span&gt;dded two new JSON fields, one to Opportunities and one to Leads to store complex score attributes. These fields will only work with instances that have Predict enabled.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;For Opportunities module:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;LBL_AI_OPP_WON_SCORE&amp;#39; =&amp;gt; &amp;#39;Win Prediction Score&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;For Leads module:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;LBL_AI_LEAD_CONV_SCORE&amp;#39; =&amp;gt; &amp;#39;Conversion Prediction Score&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;New default collation of MySQL 8 &amp;quot;utf8mb4_0900_ai_ci&amp;quot;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;We are&amp;nbsp;updating the default collation for MySQL 8 to&amp;nbsp;&lt;code&gt;utf8mb4_0900_ai_ci&lt;/code&gt;&amp;nbsp;in this release.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;you can still override this config by updating sugar_config option&amp;nbsp;&lt;code&gt;dbconfigoption.collation&lt;/code&gt;, here&amp;#39;s an example for German Collation.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span&gt;$sugar_config['dbconfigoption']['collation'] = &amp;#39;utf8mb4_de_pb_0900_ai_ci&amp;#39;;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1i7u21nu26" class="_1wyb1tcg _vwz41f4h _k48pbfng _1dyzz5jk _1bsb1osq _19pkidpf _2hwxidpf _otyridpf _18u0idpf _ca0qidpf _u5f3idpf _n3tdidpf _19bvidpf _syaz1fxt _osi5fg65 _mc2h1hna _14fy1hna" data-testid="issue.views.issue-base.foundation.summary.heading"&gt;Email Data Compression Issue After Migrating from Sugar Cloud to On-Premise&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The Email data compression feature introduced in Sugar 13.3 and detailed in the&amp;nbsp;&lt;a href="https://support.sugarcrm.com/documentation/sugar_versions/14.0/ent/sugar_14.0.0_release_notes/#Administration"&gt;Sugar 14.0.0 release notes&lt;/a&gt;&lt;/span&gt;&lt;span&gt;, automatically compresses archived email data for instances on Sugar Cloud. However, the decompression functionality, governed by the `Email::supportsGzip` method in `modules/Emails/Email.php`, fails to decompress email data for on-premise instances post-migration from Sugar Cloud.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In this release, we are providing a new command as part of Sugar CLI to decompress those emails and make them readable in that particular scenario:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;command:&lt;/strong&gt;&amp;nbsp;&lt;code&gt;php bin/sugarcrm email:process&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;description:&lt;/strong&gt;&amp;nbsp;Process emails to ungzip (default) or gzip&amp;nbsp;&lt;code&gt;description&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;decription_html&lt;/code&gt;&amp;nbsp;fields&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;Prune Old Record Lists scheduler improvements&lt;/h3&gt;
&lt;p&gt;In this release, we are updating the &amp;ldquo;Prune Old Record Lists&amp;rdquo; scheduler. This scheduler not only prunes records but also includes code to perform a table optimization. In order to ensure better performance, the optimize table component should only run if the number of affected rows is higher than a certain threshold, and the default frequency of the scheduler should be set to run once daily. We are updating that scheduler during upgrade.&lt;/p&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;Display plaintext version of an email in the recordview of the Emails module&lt;/h3&gt;
&lt;p&gt;In this release, we&amp;#39;ve enhanced the Emails module to display the plain-text version of an email in the record view. This improvement allows users to view the description field of multi-part replies, including those with both HTML and plain-text content.&lt;/p&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;Deleting and recreating a record removes the opt-out status of the email address&lt;/h3&gt;
&lt;div class="flex max-w-full flex-col flex-grow"&gt;
&lt;div dir="auto" data-message-author-role="assistant" data-message-id="23fab26f-a4f4-4419-883f-711fe2d693a0"&gt;
&lt;div class="markdown prose w-full break-words dark:prose-invert dark"&gt;
&lt;p&gt;We&amp;rsquo;ve addressed an issue in this release regarding contact and email removal. Previously, when a contact was deleted, its associated email address, if marked as opted-out, remained in the database. As a result, the email address row&amp;nbsp;remained undeleted with the opt-out flag set to 1. When a new contact&amp;nbsp;is created with the same email address, the opt-out flag was incorrectly reset to 0. This release fixes the issue so that Sugar now correctly respects the opt-out flag when reusing email addresses.&lt;/p&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;&lt;span&gt;Make Sugar_Smarty alternative autoloadable in patches&lt;/span&gt;&lt;/h3&gt;
&lt;div class="flex max-w-full flex-col flex-grow"&gt;
&lt;div dir="auto" data-message-author-role="assistant" data-message-id="6aec15a4-ff85-4964-b1d6-8d5bef446f54"&gt;
&lt;div&gt;
&lt;div class="markdown prose w-full break-words dark:prose-invert dark"&gt;
&lt;p&gt;In this release, we are updating the Sugar_Smarty class by relocating it to better align with naming conventions for secure alternatives and to ensure it is autoloaded properly after patches. The class has been moved from&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;sugarcrm/include/SugarSmarty/SecureSmarty.php&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;sugarcrm/src/Security/MLP/Alternatives/Sugar_Smarty.php&lt;/code&gt;. This change eliminates the need to manually dump the composer autoloader.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;Sugar Core Security Updates&lt;/h3&gt;
&lt;p&gt;As part of our ongoing efforts to keep Sugar clean, fast, reliable, and most importantly secure, we have updated&amp;nbsp;Sugar Core code in different areas of the application such as Package Scanner, Module Installer, UI rendering, API endpoints, File Uploads, BWC modules and CSP default domains. Not only those changes but we&amp;#39;ve cleaned up and improve our logging messages around deprecations.&lt;/p&gt;
&lt;p&gt;An important update to the Module Loader was the introduction of a patching mechanism to ensure that&amp;nbsp;&lt;span&gt;&lt;code&gt;unserialize()&lt;/code&gt;&amp;nbsp;function utilized Sugar&amp;#39;s Alternative and more secure version.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The contents of MLP are patched at the upload stage if MLP contains calls to the unserialize() function. All the calls to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;unserialize()&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;will be replaced with the secure alternative&amp;nbsp;&lt;code&gt;\Sugarcrm\Sugarcrm\Security\MLP\Alternatives\unserialize().&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="php"&gt;//Given the original script
&amp;lt;?php
unserialize(&amp;#39;a:1:{s:4:&amp;quot;test&amp;quot;;s:4:&amp;quot;test&amp;quot;;}&amp;#39;, [&amp;#39;max_depth&amp;#39; =&amp;gt; 42]);
unserialize($_GET[&amp;#39;cmd&amp;#39;]);
unserialize($_REQUEST[&amp;#39;bar&amp;#39;], [&amp;#39;allowed_classes&amp;#39; =&amp;gt; false]);
unserialize($_REQUEST[&amp;#39;bar&amp;#39;], [&amp;#39;allowed_classes&amp;#39; =&amp;gt; &amp;#39;Foobar&amp;#39;]);
?&amp;gt;

//It will be patched (replaced) with
&amp;lt;?php
\Sugarcrm\Sugarcrm\Security\MLP\Alternatives\unserialize(&amp;#39;a:1:{s:4:&amp;quot;test&amp;quot;;s:4:&amp;quot;test&amp;quot;;}&amp;#39;, [&amp;#39;max_depth&amp;#39; =&amp;gt; 42]);
\Sugarcrm\Sugarcrm\Security\MLP\Alternatives\unserialize($_GET[&amp;#39;cmd&amp;#39;]);
\Sugarcrm\Sugarcrm\Security\MLP\Alternatives\unserialize($_REQUEST[&amp;#39;bar&amp;#39;], [&amp;#39;allowed_classes&amp;#39; =&amp;gt; false]);
\Sugarcrm\Sugarcrm\Security\MLP\Alternatives\unserialize($_REQUEST[&amp;#39;bar&amp;#39;], [&amp;#39;allowed_classes&amp;#39; =&amp;gt; &amp;#39;Foobar&amp;#39;]);
?&amp;gt;&lt;/pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The alternative function acts as a wrapper to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;unserialize()&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;enforcing the usage of the second parameter with &amp;#39;allowed_classes&amp;#39; option, by default it doesn&amp;#39;t allow unserializing classes, the behavior is equal to calling \unserialize() with the &amp;quot;['allowed_classes' =&amp;gt; false]&amp;quot; as a second param. You can allow specific classes in two ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add the target classes to config_override.php&lt;br /&gt;&lt;code&gt;$sugar_config['moduleInstaller']['unserialize']['allowed_classes'] = ['MyClass', 'MyOtherClass'];&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pass the second parameter to unserialize() explicitly&lt;br /&gt;&lt;code&gt;unserialize($string, [&amp;#39;allowed_classes&amp;#39; =&amp;gt; ['CustomClass']])&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The second variant takes precedence, so in case you are explicitly passing a list of classes while you have a preconfigured list in&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;config.php&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;your preconfigured list will be completely ignored - lists will not be merged.&lt;/p&gt;
&lt;p&gt;The following classes are not allowed in the allowed_classes config, which means they will be ignored if you pass them as a parameter or specify them in config.php:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GuzzleHttp\Cookie\FileCookieJar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GuzzleHttp\Psr7\FnStream&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GuzzleHttp\HandlerStack&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Doctrine\Common\Cache\Psr6\CacheAdapter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Laminas\Http\Response\Stream&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Laminas\Cache\Storage\Adapter\Filesystem&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Laminas\Cache\Psr\CacheItemPool\CacheItem&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\GroupHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\SyslogUdpHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\BufferHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\NativeMailerHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\RollbarHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\FingersCrossedHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Smarty_Internal_Template&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Smarty_Internal_Templateparser&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Smarty_Internal_Configfileparser&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1f77psegv7"&gt;&lt;/h2&gt;
&lt;div class="code-block sc-ezYOhE gBYPJJ"&gt;
&lt;h2 id="mcetoc_1hgt5tqlsa"&gt;Denylist Updates&lt;/h2&gt;
&lt;div class="code-block sc-ezYOhE gBYPJJ"&gt;
&lt;div class="code-block sc-ezYOhE gBYPJJ"&gt;&lt;span&gt;In this release, we are adding the following classes to the PackageScanner&amp;#39;s denylist:&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class="code-block sc-ezYOhE gBYPJJ"&gt;Symfony\Component\Filesystem\Filesystem&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Sugar 14.2, Sugar Q4 2024&lt;/div&gt;
</description></item><item><title>Sugar 14.2 (Q4 2024) Customization Guide</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/979/sugar-14-2-q4-2024-customization-guide/revision/2</link><pubDate>Mon, 07 Oct 2024 19:05:50 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:ecaaeea5-fb69-49ef-8fc7-268287e86c50</guid><dc:creator>Rafael Fernandes</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/979/sugar-14-2-q4-2024-customization-guide#comments</comments><description>Revision 2 posted to Dev Tutorials by Rafael Fernandes on 10/7/2024 7:05:50 PM&lt;br /&gt;
&lt;div class="content"&gt;
&lt;div class="content"&gt;
&lt;p&gt;The purpose of this document is to provide insight to Sugar Developers for upgrading custom Sugar code, extensions, and integrations to the Sugar 14.2 (Q4 2024) release. This guide focuses on changes in Sugar&amp;nbsp;&lt;span&gt;14.2 (Q&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2024) that could cause an immediate impact on Sugar customizations and integrations built for earlier Sugar versions.&lt;/p&gt;
&lt;p&gt;Please check out the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="/dev-club/m/event-recaps/2861"&gt;Q3 2024 Developer Webinar recording&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for more developer highlights.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;For Admin and End User release notes, please visit the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="https://support.sugarcrm.com/SmartLinks/Release_Notes/14.2.0_Release_Notes/"&gt;Sugar 14.2.0 Release Notes&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1ff80k9i32"&gt;User Experience Updates&lt;/h2&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;UI Modernization&lt;/h3&gt;
&lt;p&gt;We are very excited to announce that w&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;e&amp;rsquo;ve implemented a comprehensive UI redesign to modernize and enhance the platform&amp;#39;s appearance. We replaced the previous color palette with Tailwind CSS colors, which are not only more vibrant but also designed to be easier on the eyes, including in dark mode. This new palette improves accessibility and visual appeal, making the interface more engaging and inclusive.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="TextRun SCXW203504768 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW203504768 BCX0"&gt;Several specific improvements were made: we added a distinct border to flyout menus to prevent them from blending into the background, replaced the blue sidebar background with a white one to enhance icon visibility, and rounded the corners of input fields, dashboards, and dashlets for a more polished look. Additionally, the main pane now floats from the sidebar navigation, achieved through minor CSS and class tweaks that ensure a seamless experience for users. We retained the top-down drawers to maintain ample real estate for tasks such as taking calls in SugarLive and converting leads.&lt;/span&gt;&lt;/span&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We have compiled a throughout&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="/dev-club/w/dev-tutorials/967/modern-ui-technical-guide"&gt;Technical Guide&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;with everything you need to know about this change.&lt;/p&gt;
&lt;h3 id="mcetoc_1i7u16d9e0"&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;Sorting&lt;/span&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;Columns Within &amp;quot;Drilling Through Report Charts&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;In this release, we&amp;#39;re&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span data-contrast="auto"&gt;introducing the sorting capability in the data table of the drill through experience.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;For example, I&amp;rsquo;m analyzing data from Pipeline by Type by Team report. I see the likely sum of the opportunities for existing and new business, for one of the teams and decide to see what opps are in the &amp;ldquo;New business&amp;rdquo; section for West team. I click the respective chart element and visualize the list.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1i7u16d9e1"&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;SugarLive for Enterprise&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;In this release,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span data-contrast="none"&gt;we will include the SugarLive feature for Enterprise customers. Main feature available for SugarLive are:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="1" data-aria-posinset="1" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;Inbound routing and Contact lookup&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;This integration provides browser-based contact control panel (CCP) within Sugar, where an agent will use for real-time communication with customers. When a customer dials in for support, the inbound call will be routed to an available agent. SugarLive matches the customer call against existing contact records and brings up the contact profile upon successful lookup. The agent can then quickly access relevant details (e.g., open cases, call history) about the customer.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li data-font="Symbol" data-listid="1" data-aria-posinset="2" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;Outbound Dialing&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;This integration also enables agents to initiate outbound dialing calls to customers. For example, a seller can look up contacts that are overdue for follow-ups and click on the phone number directly to start a call with the customer.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li data-font="Symbol" data-listid="1" data-aria-posinset="3" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;Call Transcript and Recording&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;When a call is completed, a new entry will be created automatically under the Calls tab where an agent can expand to review conversation history. Each line of communication between agent and customer is recorded with a sentiment score. The agent will also have access to the original recording for cross-validation.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li data-font="Symbol" data-listid="1" data-aria-posinset="4" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;Embedded Chat in Sugar Portal&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Sugar Self-Service center offers an interface for end customers to log in and receive post-sale support. Here a customer can initiate a chat session for service through Sugar Self-Service center.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1i7u16d9e2"&gt;Predict Scores for Leads and Opportunities&lt;/h3&gt;
&lt;p&gt;&lt;span class="TextRun SCXW71217995 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW71217995 BCX0"&gt;&lt;span class="EOP SCXW203504768 BCX0"&gt;&lt;span class="NormalTextRun SCXW218466316 BCX0" data-ccp-parastyle="heading 2"&gt;In this release,&amp;nbsp;we added a &amp;quot;Win Prediction Score&amp;quot; field to Opportunities and a &amp;quot;Conversion Prediction Score&amp;quot; field to Leads in version 14.2. This update stores the complete set of scoring details, including Prediction Bin, Decimal Score, accuracy, multiplier, and features used, directly within CRM records. This allows the full scoring information to be displayed on the dashlet (the CRM dashboard widget) without needing additional backend requests, streamlining data access and enhancing the efficiency of score display.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1i7u16d9e3"&gt;&lt;span&gt;&lt;span class="TextRun SCXW222456944 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;Additional License Information&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;in&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SpellingErrorV2Themed SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;Su&lt;/span&gt;&lt;/span&gt;&lt;span class="TextRun SCXW222456944 BCX0" lang="EN" data-contrast="auto"&gt;&lt;span class="NormalTextRun SpellingErrorV2Themed SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;garCl&lt;/span&gt;&lt;span class="NormalTextRun SpellingErrorV2Themed SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;o&lt;/span&gt;&lt;span class="NormalTextRun SpellingErrorV2Themed SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;u&lt;/span&gt;&lt;span class="NormalTextRun SpellingErrorV2Themed SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;d&lt;/span&gt;&lt;span class="NormalTextRun SCXW222456944 BCX0" data-ccp-parastyle="heading 2"&gt;&amp;nbsp;Insights&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;In this release, SugarCloud Insights will show a breakdown of the number of active users independent of license assigned and includes information about any legacy add-on licenses (Automate, Hint, Maps).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Measures:&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Customers will now be able to see more detailed license information for the CRM and quickly determine how many active users are in a multi-license environment.&lt;/p&gt;
&lt;h2 id="mcetoc_1g4djj0su0"&gt;Artificial Intelligence&lt;/h2&gt;
&lt;h3 id="mcetoc_1i7u16d9e4"&gt;Case and Opportunity Summary Improvements&lt;/h3&gt;
&lt;p&gt;Since its release in 14.1, various improvements have been made in the contents of the summary. Participants are more segmented, and Suggested Actions clearly defined for the Opportunity summary. Case summary contains the Sentiment (positive/neutral/negative), context and reasoning for it. Both Case and Opportunity summary are available in all languages supported in SugarCRM, and they are displayed in the language the user logged in with, regardless of the language records are in.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1i7u16d9e5"&gt;&lt;span&gt;&lt;span class="TextRun SCXW118627354 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW118627354 BCX0" data-ccp-parastyle="heading 2"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="NormalTextRun SCXW249156672 BCX0"&gt;&lt;/span&gt;&lt;/span&gt;Sugar REST API updates&lt;/h2&gt;
&lt;h3 id="mcetoc_1gjpkca900"&gt;Find the email by email address&lt;/h3&gt;
&lt;p&gt;Find email object by email address.&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;GET &amp;lt;sugar instance&amp;gt;/rest/v11_25/Mail/findByEmail?email=&amp;lt;email address&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;&lt;code&gt;&lt;/code&gt;&lt;/h3&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;&lt;code&gt;&lt;/code&gt;&lt;/h3&gt;
&lt;h2 id="mcetoc_1ftl03hrg6"&gt;&lt;span style="font-size:inherit;"&gt;PHP Library Upgrades&lt;/span&gt;&lt;/h2&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Guzzle (guzzlehttp/guzzle)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes a&amp;nbsp;PHP library called&amp;nbsp;&lt;a href="https://github.com/guzzle/guzzle"&gt;Guzzle&lt;/a&gt;. Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In this release, we are upgrading its version to ^7.8.1.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There are breaking changes that may affect&amp;nbsp;your customizations documented on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/guzzle/guzzle/blob/7.8/UPGRADING.md"&gt;Guzzle&amp;#39;s official upgrade notes&lt;/a&gt;.&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;guzzlehttp/guzzle &amp;rarr; ^v7.8.1&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;&lt;span&gt;Laminas Components (laminas/laminas-escaper)&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes a&amp;nbsp;PHP library called&amp;nbsp;&lt;a href="https://github.com/laminas/laminas-escaper"&gt;Laminas Escaper&lt;/a&gt;. Laminas Escaper&amp;nbsp;&lt;/span&gt;Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There are no known breaking changes in this upgrade.&lt;/p&gt;
&lt;pre&gt;laminas/laminas-escaper &amp;rarr; ^v2.13.0&lt;/pre&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Monolog (monolog/monolog)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes a&amp;nbsp;PHP library called&amp;nbsp;&lt;a href="https://github.com/Seldaek/monolog.git"&gt;Monolog&lt;/a&gt;&amp;nbsp;Monolog sends your logs to files, sockets, inboxes, databases, and various web services&lt;/span&gt;&lt;span&gt;. In this release, we are upgrading its version to 2.8.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There are breaking changes that may affect&amp;nbsp;your customizations documented on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/Seldaek/monolog/blob/main/UPGRADE.md"&gt;Monolog&amp;#39;s official upgrade notes&lt;/a&gt;.&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;monolog/monolog &lt;span&gt;&amp;rarr;&lt;/span&gt;  ^3.7.0&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="mcetoc_1ff80k9i33"&gt;&lt;span style="font-size:inherit;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;JS Library Upgrades&lt;/h2&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Backbone.JS&amp;nbsp;(backbone)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes a&amp;nbsp;JS library called&amp;nbsp;&lt;a href="https://backbonejs.org/"&gt;Backbone.js&amp;nbsp;&lt;/a&gt;Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;jashkenas/backbone &lt;span&gt;&amp;rarr;&lt;/span&gt;  ^1.6.0&lt;/pre&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Sugar Sucrose&amp;nbsp;(@sugarcrm/sucrose-sugar)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes its own JS library called&amp;nbsp;&lt;a href="https://github.com/sugarcrm/sucrose"&gt;Sucrose&lt;/a&gt;. Sucrose is SugarCRM&amp;#39;s Chart Library: based on D3 and derived from NVD3.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;@sugarcrm/sucrose-sugar &lt;span&gt;&amp;rarr;&lt;/span&gt;  0.9.0&lt;/pre&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Handlebars&amp;nbsp;(sugarcrm/handlebars.js)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sugar utilizes a fork version of JS library called&amp;nbsp;&lt;a href="https://github.com/sugarcrm/handlebars.js"&gt;Handlebars.js&lt;/a&gt;. Handlebars provides the power necessary to let you build semantic templates effectively with no frustration.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;sugarcrm/handlebars.js &lt;span&gt;&amp;rarr;&lt;/span&gt;  ^4.7.8&lt;/pre&gt;
&lt;/div&gt;
&lt;h3 id="mcetoc_1h8k0rdqt5"&gt;Upgrade Yahoo! UI Library 3&lt;/h3&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;p&gt;In this release, we are upgrading some transient libs required by yui3 as part of its latest pull.&lt;/p&gt;
&lt;p&gt;There are no known breaking changes in this upgrade, they are mostly bug fixes in this release.&lt;/p&gt;
&lt;h3 id="mcetoc_1gj2kiufk0"&gt;Ventana&amp;nbsp;(sugarcrm/ventana)&lt;/h3&gt;
&lt;p dir="auto"&gt;&lt;a href="https://github.com/sugarcrm/ventana"&gt;Ventana&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a client to help connecting and making requests to a SugarCRM REST API on multiple versions. Currently this library provides a JavaScript connector.&lt;/p&gt;
&lt;div class="content-scrollable-wrapper"&gt;
&lt;pre&gt;sugarcrm/ventana &lt;span&gt;&amp;rarr;&lt;/span&gt;  1.1.15&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="mcetoc_1gj9pc6si0"&gt;&lt;span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;code&gt;&lt;/code&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1ff80k9i33"&gt;Configurability&amp;nbsp;updates&lt;/h2&gt;
&lt;h3 id="mcetoc_1f7c87abe2"&gt;&lt;/h3&gt;
&lt;h3 id="mcetoc_1i87un0750"&gt;&lt;span style="font-size:inherit;"&gt;Process emails in parallel to ungzip (default)&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;In this release, we are providing a new command as part of Sugar CLI to decompress those emails and make them readable:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="batchfile"&gt;  SugarCRM Console version &amp;lt;version&amp;gt;

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable 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

Available commands:
  help             Displays help for a command
  list             Lists commands
 email
  email:process                Process emails in parallel
  email:process-batch          Process a single email batch
&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f7c87abe2"&gt;&lt;/h3&gt;
&lt;h2 id="mcetoc_1g4djj0su0"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1g5m8lc4s1"&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1f77psegvl"&gt;Platform Updates&lt;/h2&gt;
&lt;h3 id="mcetoc_1gqa6vaoc8"&gt;&lt;span&gt;Add rector scanner step into PackageScanner during MLP installation&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;We are enabling this feature, introduced in 14.1, by default in 14.2, as a reminder what it is, here&amp;#39;s the announcement we did in the last quarter.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;As part of our ongoing efforts to help our customers to install MLPs compatible with PHP 8.2+, we are introducing Rector (compatibility tool) checks to our installation process.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;PackageScanner will execute a dry-run of rector looking for incompatibilities on the package being installed and will deny the install if incompatible, if denied, an option to download the Rector report will be available to download the diff file for further investigation.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;Predict scores for Leads &amp;amp; Opportunities&lt;/h3&gt;
&lt;p&gt;In this release, we&amp;nbsp;a&lt;span&gt;dded two new JSON fields, one to Opportunities and one to Leads to store complex score attributes. These fields will only work with instances that have Predict enabled.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;For Opportunities module:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;LBL_AI_OPP_WON_SCORE&amp;#39; =&amp;gt; &amp;#39;Win Prediction Score&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;For Leads module:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;LBL_AI_LEAD_CONV_SCORE&amp;#39; =&amp;gt; &amp;#39;Conversion Prediction Score&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;New default collation of MySQL 8 &amp;quot;utf8mb4_0900_ai_ci&amp;quot;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;We are&amp;nbsp;updating the default collation for MySQL 8 to&amp;nbsp;&lt;code&gt;utf8mb4_0900_ai_ci&lt;/code&gt;&amp;nbsp;in this release.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;you can still override this config by updating sugar_config option&amp;nbsp;&lt;code&gt;dbconfigoption.collation&lt;/code&gt;, here&amp;#39;s an example for German Collation.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span&gt;$sugar_config['dbconfigoption']['collation'] = &amp;#39;utf8mb4_de_pb_0900_ai_ci&amp;#39;;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1i7u21nu26" class="_1wyb1tcg _vwz41f4h _k48pbfng _1dyzz5jk _1bsb1osq _19pkidpf _2hwxidpf _otyridpf _18u0idpf _ca0qidpf _u5f3idpf _n3tdidpf _19bvidpf _syaz1fxt _osi5fg65 _mc2h1hna _14fy1hna" data-testid="issue.views.issue-base.foundation.summary.heading"&gt;Email Data Compression Issue After Migrating from Sugar Cloud to On-Premise&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The Email data compression feature introduced in Sugar 13.3 and detailed in the&amp;nbsp;&lt;a href="https://support.sugarcrm.com/documentation/sugar_versions/14.0/ent/sugar_14.0.0_release_notes/#Administration"&gt;Sugar 14.0.0 release notes&lt;/a&gt;&lt;/span&gt;&lt;span&gt;, automatically compresses archived email data for instances on Sugar Cloud. However, the decompression functionality, governed by the `Email::supportsGzip` method in `modules/Emails/Email.php`, fails to decompress email data for on-premise instances post-migration from Sugar Cloud.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In this release, we are providing a new command as part of Sugar CLI to decompress those emails and make them readable in that particular scenario:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;command:&lt;/strong&gt;&amp;nbsp;&lt;code&gt;php bin/sugarcrm email:process&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;description:&lt;/strong&gt;&amp;nbsp;Process emails to ungzip (default) or gzip&amp;nbsp;&lt;code&gt;description&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;decription_html&lt;/code&gt;&amp;nbsp;fields&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;Prune Old Record Lists scheduler improvements&lt;/h3&gt;
&lt;p&gt;In this release, we are updating the &amp;ldquo;Prune Old Record Lists&amp;rdquo; scheduler. This scheduler not only prunes records but also includes code to perform a table optimization. In order to ensure better performance, the optimize table component should only run if the number of affected rows is higher than a certain threshold, and the default frequency of the scheduler should be set to run once daily. We are updating that scheduler during upgrade.&lt;/p&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;Display plaintext version of an email in the recordview of the Emails module&lt;/h3&gt;
&lt;p&gt;In this release, we&amp;#39;ve enhanced the Emails module to display the plain-text version of an email in the record view. This improvement allows users to view the description field of multi-part replies, including those with both HTML and plain-text content.&lt;/p&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;Deleting and recreating a record removes the opt-out status of the email address&lt;/h3&gt;
&lt;div class="flex max-w-full flex-col flex-grow"&gt;
&lt;div dir="auto" data-message-author-role="assistant" data-message-id="23fab26f-a4f4-4419-883f-711fe2d693a0"&gt;
&lt;div class="markdown prose w-full break-words dark:prose-invert dark"&gt;
&lt;p&gt;We&amp;rsquo;ve addressed an issue in this release regarding contact and email removal. Previously, when a contact was deleted, its associated email address, if marked as opted-out, remained in the database. As a result, the email address row&amp;nbsp;remained undeleted with the opt-out flag set to 1. When a new contact&amp;nbsp;is created with the same email address, the opt-out flag was incorrectly reset to 0. This release fixes the issue so that Sugar now correctly respects the opt-out flag when reusing email addresses.&lt;/p&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;&lt;span&gt;Make Sugar_Smarty alternative autoloadable in patches&lt;/span&gt;&lt;/h3&gt;
&lt;div class="flex max-w-full flex-col flex-grow"&gt;
&lt;div dir="auto" data-message-author-role="assistant" data-message-id="6aec15a4-ff85-4964-b1d6-8d5bef446f54"&gt;
&lt;div&gt;
&lt;div class="markdown prose w-full break-words dark:prose-invert dark"&gt;
&lt;p&gt;In this release, we are updating the Sugar_Smarty class by relocating it to better align with naming conventions for secure alternatives and to ensure it is autoloaded properly after patches. The class has been moved from&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;sugarcrm/include/SugarSmarty/SecureSmarty.php&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;sugarcrm/src/Security/MLP/Alternatives/Sugar_Smarty.php&lt;/code&gt;. This change eliminates the need to manually dump the composer autoloader.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="mcetoc_1gb30ctl1e"&gt;Sugar Core Security Updates&lt;/h3&gt;
&lt;p&gt;As part of our ongoing efforts to keep Sugar clean, fast, reliable, and most importantly secure, we have updated&amp;nbsp;Sugar Core code in different areas of the application such as Package Scanner, Module Installer, UI rendering, API endpoints, File Uploads, BWC modules and CSP default domains. Not only those changes but we&amp;#39;ve cleaned up and improve our logging messages around deprecations.&lt;/p&gt;
&lt;p&gt;An important update to the Module Loader was the introduction of a patching mechanism to ensure that&amp;nbsp;&lt;span&gt;&lt;code&gt;unserialize()&lt;/code&gt;&amp;nbsp;function utilized Sugar&amp;#39;s Alternative and more secure version.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The contents of MLP are patched at the upload stage if MLP contains calls to the unserialize() function. All the calls to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;unserialize()&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;will be replaced with the secure alternative&amp;nbsp;&lt;code&gt;\Sugarcrm\Sugarcrm\Security\MLP\Alternatives\unserialize().&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="php"&gt;//Given the original script
&amp;lt;?php
unserialize(&amp;#39;a:1:{s:4:&amp;quot;test&amp;quot;;s:4:&amp;quot;test&amp;quot;;}&amp;#39;, [&amp;#39;max_depth&amp;#39; =&amp;gt; 42]);
unserialize($_GET[&amp;#39;cmd&amp;#39;]);
unserialize($_REQUEST[&amp;#39;bar&amp;#39;], [&amp;#39;allowed_classes&amp;#39; =&amp;gt; false]);
unserialize($_REQUEST[&amp;#39;bar&amp;#39;], [&amp;#39;allowed_classes&amp;#39; =&amp;gt; &amp;#39;Foobar&amp;#39;]);
?&amp;gt;

//It will be patched (replaced) with
&amp;lt;?php
\Sugarcrm\Sugarcrm\Security\MLP\Alternatives\unserialize(&amp;#39;a:1:{s:4:&amp;quot;test&amp;quot;;s:4:&amp;quot;test&amp;quot;;}&amp;#39;, [&amp;#39;max_depth&amp;#39; =&amp;gt; 42]);
\Sugarcrm\Sugarcrm\Security\MLP\Alternatives\unserialize($_GET[&amp;#39;cmd&amp;#39;]);
\Sugarcrm\Sugarcrm\Security\MLP\Alternatives\unserialize($_REQUEST[&amp;#39;bar&amp;#39;], [&amp;#39;allowed_classes&amp;#39; =&amp;gt; false]);
\Sugarcrm\Sugarcrm\Security\MLP\Alternatives\unserialize($_REQUEST[&amp;#39;bar&amp;#39;], [&amp;#39;allowed_classes&amp;#39; =&amp;gt; &amp;#39;Foobar&amp;#39;]);
?&amp;gt;&lt;/pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The alternative function acts as a wrapper to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;unserialize()&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;enforcing the usage of the second parameter with &amp;#39;allowed_classes&amp;#39; option, by default it doesn&amp;#39;t allow unserializing classes, the behavior is equal to calling \unserialize() with the &amp;quot;['allowed_classes' =&amp;gt; false]&amp;quot; as a second param. You can allow specific classes in two ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add the target classes to config_override.php&lt;br /&gt;&lt;code&gt;$sugar_config['moduleInstaller']['unserialize']['allowed_classes'] = ['MyClass', 'MyOtherClass'];&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pass the second parameter to unserialize() explicitly&lt;br /&gt;&lt;code&gt;unserialize($string, [&amp;#39;allowed_classes&amp;#39; =&amp;gt; ['CustomClass']])&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The second variant takes precedence, so in case you are explicitly passing a list of classes while you have a preconfigured list in&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;config.php&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;your preconfigured list will be completely ignored - lists will not be merged.&lt;/p&gt;
&lt;p&gt;The following classes are not allowed in the allowed_classes config, which means they will be ignored if you pass them as a parameter or specify them in config.php:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GuzzleHttp\Cookie\FileCookieJar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GuzzleHttp\Psr7\FnStream&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GuzzleHttp\HandlerStack&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Doctrine\Common\Cache\Psr6\CacheAdapter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Laminas\Http\Response\Stream&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Laminas\Cache\Storage\Adapter\Filesystem&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Laminas\Cache\Psr\CacheItemPool\CacheItem&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\GroupHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\SyslogUdpHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\BufferHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\NativeMailerHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\RollbarHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Monolog\Handler\FingersCrossedHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Smarty_Internal_Template&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Smarty_Internal_Templateparser&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Smarty_Internal_Configfileparser&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1f77psegv7"&gt;&lt;/h2&gt;
&lt;div class="code-block sc-ezYOhE gBYPJJ"&gt;
&lt;h2 id="mcetoc_1hgt5tqlsa"&gt;Denylist Updates&lt;/h2&gt;
&lt;div class="code-block sc-ezYOhE gBYPJJ"&gt;
&lt;div class="code-block sc-ezYOhE gBYPJJ"&gt;&lt;span&gt;In this release, we are adding the following classes to the PackageScanner&amp;#39;s denylist:&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class="code-block sc-ezYOhE gBYPJJ"&gt;Symfony\Component\Filesystem\Filesystem&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Sugar 14.2, Sugar Q4 2024&lt;/div&gt;
</description></item><item><title>Sugar 14.2 (Q4 2024) Customization Guide</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/979/sugar-14-2-q4-2024-customization-guide/revision/1</link><pubDate>Mon, 23 Sep 2024 20:15:44 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:ecaaeea5-fb69-49ef-8fc7-268287e86c50</guid><dc:creator>Rafael Fernandes</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/979/sugar-14-2-q4-2024-customization-guide#comments</comments><description>Revision 1 posted to Dev Tutorials by Rafael Fernandes on 9/23/2024 8:15:44 PM&lt;br /&gt;
&lt;p&gt;Sugar 14.2 (Q4 2024) Customization Guide&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item></channel></rss>