Squashed 'public/legacy/' changes from 92c30d9960..ee41ae127f

ee41ae127f SuiteCRM 7.13.3 Release
710b977fe9 Fix #10009 - Cannot configure Module Menu Filters on PHP8+
096b87c982 Fix #9153 - Adding dynamicenum case option for export
0cf566c131 Fix #8897 - Adding missing relationship for SurveyResponses module
c25ec3546c Fix #9470 - Set fdow in Calendar popup date selector
1d8ee63779 Fix #9326 - Adding decimal and float case option for export to use user-defined decimal separator
8ecc413cea Fix #9476 - Mass assign security groups only assigns selected on current page
8c8dacb256 Fix #9542 - added checks for count methods
c7eeca8db8 Fix #7759, #8273 - Double compose button in subpanels
e022f2e094 Fix #9621 - Workflows Calculate Field Actions don't translate dynamicenum fields
461f50a089 Fix #9764 - Add extra To addresses to CC field
4cf46d154d Fix salesagility#9768 - Do not convert link URLs in TinyMCE
c5ad471977 Fix #9783 - Compose view quick search
45c5c2a8d0 Fix #9780 - Popup does not show after creating a user
637c15e048 Fix #9812 - Decimal number calculations workflows
c025ca0659 Fix #9817 - Typo
a8cc7d8d5c Fix #9828 - $mod_strings not in scope for line 395 of the same file
41ef82116b Fix #9849 - allowed_preview is defined twice in the array
646d655e8e Fix #9875 SugarFeed shows 0 seconds ago and negative interval for certain datetime formats
f2fa7c3940 Fix #9902 - Workflow - Some Date calculations fail with certain formats
e28458a79d Fix #9930 - Recurrent calendar items
7a9c5f2490 Fix #9602 - ProspectLists save function has a duplication issue
b3e757172a Fix #9963 - Upgrade league/oauth2-server to latest version
6e61173aa3 Fix #9974 - External Providers saving with no type
1b0b5d6007 Fix #9974 - inbound emails saving with no type

git-subtree-dir: public/legacy
git-subtree-split: ee41ae127ff74a9182c42af4e1c63db32e2f1fec
This commit is contained in:
Clemente Raposo 2023-05-08 12:35:02 +01:00
parent 444c2169fe
commit 601c0c039b
43 changed files with 356 additions and 201 deletions

16
.github/SECURITY.md vendored
View file

@ -2,20 +2,8 @@
## Supported Versions
For a complete compatibility matrix, please see the documentation [here](https://docs.suitecrm.com/admin/compatibility-matrix/).
| Version | Supported |
| ------- | ------------------ |
| 7.11.x | :heavy_check_mark: |
| 7.10.x | :heavy_check_mark: |
| ≤7.8.x | :x: |
For a list of supported versions, please see the documentation [Supported Versions](https://docs.suitecrm.com/community/supported-versions/) page.
## Reporting a Vulnerability
We take Security seriously here at SuiteCRM so if you have discovered a security risk report it by
emailing [security@suitecrm.com](mailto:security@suitecrm.com). This will be delivered to the product team who handle security issues.
Please don't disclose security bugs publicly until they have been handled by the security team.
Your email will be acknowledged within 24 hours during the business week (Mon - Fri), and youll receive a more
detailed response to your email within 72 hours during the business week (Mon - Fri) indicating the next steps in
handling your report.
For details on how to report a vulnerability please check our [Security Policy](https://docs.suitecrm.com/community/security-policy/) page.

View file

@ -26,6 +26,14 @@ return CustomLoader::mergeCustomArray([
$shouldCheckPermissions = OsHelper::getOS() !== OsHelper::OS_WINDOWS;
$oauth2EncKey = $GLOBALS['sugar_config']['oauth2_encryption_key'] ?? '';
if (empty($oauth2EncKey)) {
$oauth2EncKey = 'SCRM-DEFK';
if (isset($GLOBALS['log'])) {
$GLOBALS['log']->fatal('WARNING: `oauth2_encryption_key` not set in config.php');
}
}
$server = new AuthorizationServer(
new ClientRepository(
new ClientEntity(),
@ -41,24 +49,9 @@ return CustomLoader::mergeCustomArray([
null,
$shouldCheckPermissions
),
new CryptKey(
sprintf('file://%s/%s', $baseDir, ApiConfig::OAUTH2_PUBLIC_KEY),
null,
$shouldCheckPermissions
)
$oauth2EncKey
);
$oauth2EncKey = isset($GLOBALS['sugar_config']['oauth2_encryption_key'])
? $GLOBALS['sugar_config']['oauth2_encryption_key'] : '';
if (empty($oauth2EncKey)) {
$oauth2EncKey = 'SCRM-DEFK';
if (isset($GLOBALS['log'])) {
$GLOBALS['log']->fatal('WARNING: `oauth2_encryption_key` not set in config.php');
}
}
$server->setEncryptionKey($oauth2EncKey);
// Client credentials grant
$server->enableGrantType(
new ClientCredentialsGrant(),

View file

@ -24,4 +24,9 @@ class ClientEntity implements ClientEntityInterface
{
$this->redirectUri = $uri;
}
public function setIsConfidential($confidential)
{
$this->isConfidential = $confidential;
}
}

View file

@ -30,18 +30,24 @@ class ClientRepository implements ClientRepositoryInterface
/**
* @inheritdoc
*/
public function getClientEntity($clientIdentifier, $grantType, $clientSecret = null, $mustValidateSecret = true)
public function getClientEntity($clientIdentifier)
{
/** @var \OAuth2Clients $client */
$client = $this->beanManager->getBeanSafe(\OAuth2Clients::class, $clientIdentifier);
if ($mustValidateSecret && hash('sha256', $clientSecret) !== $client->secret) {
return null;
}
$this->clientEntity->setIdentifier($clientIdentifier);
$this->clientEntity->setName($client->name);
$this->clientEntity->setRedirectUri(isset($client->redirect_uri) ? $client->redirect_uri : '');
$this->clientEntity->setRedirectUri($client->redirect_uri ?? '');
$this->clientEntity->setIsConfidential($client->is_confidential ?? false);
return $this->clientEntity;
}
public function validateClient($clientIdentifier, $clientSecret, $grantType)
{
/** @var \OAuth2Clients $client */
$client = $this->beanManager->getBeanSafe(\OAuth2Clients::class, $clientIdentifier);
return hash('sha256', $clientSecret) === $client->secret && $grantType === $client->allowed_grant_type;
}
}

View file

@ -2,7 +2,7 @@
<img width="180px" height="41px" src="https://suitecrm.com/wp-content/uploads/2017/12/logo.png" align="right" />
</a>
# SuiteCRM 7.13.2
# SuiteCRM 7.13.3
[![LICENSE](https://img.shields.io/github/license/suitecrm/suitecrm.svg)](https://github.com/salesagility/suitecrm/blob/hotfix/LICENSE.txt)
[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/salesagility/SuiteCRM-Core/issues)

12
composer.lock generated
View file

@ -2634,16 +2634,16 @@
},
{
"name": "phpseclib/phpseclib",
"version": "3.0.17",
"version": "3.0.19",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "dbc2307d5c69aeb22db136c52e91130d7f2ca761"
"reference": "cc181005cf548bfd8a4896383bb825d859259f95"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/dbc2307d5c69aeb22db136c52e91130d7f2ca761",
"reference": "dbc2307d5c69aeb22db136c52e91130d7f2ca761",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cc181005cf548bfd8a4896383bb825d859259f95",
"reference": "cc181005cf548bfd8a4896383bb825d859259f95",
"shasum": ""
},
"require": {
@ -2724,7 +2724,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.17"
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.19"
},
"funding": [
{
@ -2740,7 +2740,7 @@
"type": "tidelift"
}
],
"time": "2022-10-24T10:51:50+00:00"
"time": "2023-03-05T17:13:09+00:00"
},
{
"name": "pimple/pimple",

View file

@ -1,5 +1,5 @@
<?php
// created: 2023-02-27 17:00:00
// created: 2023-04-18 17:00:00
$md5_string = array (
'./Api/Core/Config/ApiConfig.php' => '69a1e7b3d7755a2a63499a16ddae81cf',
'./Api/Core/Config/slim.php' => 'b134e68765e6a1403577e2a5a06322b8',
@ -17,7 +17,7 @@ $md5_string = array (
'./Api/V8/Config/services/factories.php' => 'abedc3b0445f9076cf55fb81f922999b',
'./Api/V8/Config/services/globals.php' => 'd1bdcccf5150b16b84fc8192f63affdd',
'./Api/V8/Config/services/helpers.php' => 'd15737677999e4f7307443aa83da8afa',
'./Api/V8/Config/services/middlewares.php' => 'a7e3340374c5bfb6b26b4d99e61a8935',
'./Api/V8/Config/services/middlewares.php' => '29a5b5660def75ac119fe9bc7bdb9a53',
'./Api/V8/Config/services/params.php' => '9fd77ca190fbcea45ad11f156d5db9b7',
'./Api/V8/Config/services/services.php' => '1c6d1cc19c087015430b4b965705e2fb',
'./Api/V8/Config/services/validators.php' => '884d713ad8ed932500039acaf285fa45',
@ -52,11 +52,11 @@ $md5_string = array (
'./Api/V8/JsonApi/Response/RelationshipResponse.php' => '8a9824924da4a9ef5640ce9ec1e9c7cb',
'./Api/V8/Middleware/ParamsMiddleware.php' => 'd05b267a88e6a36a2558cd8931961861',
'./Api/V8/OAuth2/Entity/AccessTokenEntity.php' => '1b53023bd78223ddac6400d29af48d96',
'./Api/V8/OAuth2/Entity/ClientEntity.php' => '248eb82b0426a4671e3cd64693f8527d',
'./Api/V8/OAuth2/Entity/ClientEntity.php' => '8a948d82e84eaf8f32e3ad5c46cea9dd',
'./Api/V8/OAuth2/Entity/RefreshTokenEntity.php' => '64d0cf96978dd4bf7e8bc837580eed7c',
'./Api/V8/OAuth2/Entity/UserEntity.php' => 'a44c52eb54ef1372d513f3e109f3d108',
'./Api/V8/OAuth2/Repository/AccessTokenRepository.php' => 'de0a2861e710deb9fdfa961c1d02ad3e',
'./Api/V8/OAuth2/Repository/ClientRepository.php' => '6ffd84f5fb058688af763b4988afd270',
'./Api/V8/OAuth2/Repository/ClientRepository.php' => '090628beafc7a308aeaf83b20f81cb18',
'./Api/V8/OAuth2/Repository/RefreshTokenRepository.php' => '48555f23e91d557b41a1f9c7baa6425d',
'./Api/V8/OAuth2/Repository/ScopeRepository.php' => 'd659a64126adaef03952a8187d76608f',
'./Api/V8/OAuth2/Repository/UserRepository.php' => '91fef170d05002a8215747e0365e67d7',
@ -116,7 +116,7 @@ $md5_string = array (
'./ModuleInstall/PackageManager/tpls/PackageManagerLicense.tpl' => 'df5e267d1df5ce08fb9406e42d5b4816',
'./ModuleInstall/PackageManager/tpls/PackageManagerScripts.tpl' => '98e396c0aa57329731fda19c790fffb2',
'./ModuleInstall/extensions.php' => 'de30837895f67175b7fbc04274a837a6',
'./README.md' => '92d28c27542d1ec479f07123ef7231cf',
'./README.md' => 'b20a248fa6702bc317e0b5db7d784a01',
'./RoboFile.php' => '045b82c1df69553824d0e4ffcce6e03c',
'./SugarSecurity.php' => '47e316b2d408e8c5192c8ea4a4f921b3',
'./TreeData.php' => '32873e20cb5fd33f9d1cdaf18c3cac5c',
@ -507,8 +507,8 @@ $md5_string = array (
'./build/push_output.sh' => 'cde8cd38e3b0c4e988ec4be7d81faa89',
'./build/travis-ci-apache' => 'e1e212c4eaf679b6ec620cd0b12f4571',
'./campaign_tracker.php' => '321e43ca8b664e6ca57ae5589e8c0667',
'./composer.json' => '6bd6f8c467d45fa7b42f41a565c3c15b',
'./composer.lock' => '0fe6766d5b5428b16abaa4da96e2af12',
'./composer.json' => '2823f5a7f99159cec8dab6b36249e0fb',
'./composer.lock' => 'ad7c44c6eb91e2484a68386053ada8a8',
'./cron.php' => '0b8b6bd839a2232a8da074b31feaa708',
'./crossdomain.xml' => '24b7711640c652b21aa89c9d83d6ec13',
'./data/BeanFactory.php' => '3007bf65ebc77baa76c338ce6a068790',
@ -665,7 +665,7 @@ $md5_string = array (
'./include/MVC/View/views/view.vcard.php' => 'e7bddb455a4f14ad36ecde6470c71b68',
'./include/MVC/View/views/view.xml.php' => '2a7ed1f6384a9c362c4a61f5d7d8b8d2',
'./include/MVC/preDispatch.php' => 'f1720fa7dea86c02e0663227c2c08203',
'./include/MassUpdate.php' => 'e1e7bb76e9479209bc9fdb54411eae97',
'./include/MassUpdate.php' => '31962debf6e06728dff2e7e8f1b59310',
'./include/MySugar/DashletsDialog/DashletsDialog.php' => '0b7c1af1bb21b3af9b735178de2f3a89',
'./include/MySugar/MySugar.php' => 'eaffdea2231df9ec4a457fb57d499ca4',
'./include/MySugar/dashboardstyle.css' => '4cce65e52281263e484140a1d4b8d2e2',
@ -913,7 +913,7 @@ $md5_string = array (
'./include/SugarFields/Fields/Datetime/SugarFieldDatetime.php' => 'b8af991b751ff491d59598e131496081',
'./include/SugarFields/Fields/Datetimecombo/Datetimecombo.js' => '943fe4f97ca790d58abeedcfb704d3e4',
'./include/SugarFields/Fields/Datetimecombo/EditView.tpl' => '08ec47bdf15639c759cab09a00b09070',
'./include/SugarFields/Fields/Datetimecombo/RangeSearchForm.tpl' => '8c2e3b3d4ba9a274bac3cec52d8ab452',
'./include/SugarFields/Fields/Datetimecombo/RangeSearchForm.tpl' => 'c1e863e4edb0152dfb3936bb6bf7ae90',
'./include/SugarFields/Fields/Datetimecombo/SearchView.tpl' => 'ed305267b63968f4f603154ad7344a79',
'./include/SugarFields/Fields/Datetimecombo/SugarFieldDatetimecombo.php' => '73008c0cdd41970570617b3f5a5dbfd0',
'./include/SugarFields/Fields/Download/DetailView.tpl' => 'e05dbaa1b573284715b870612087e6cb',
@ -1227,7 +1227,7 @@ $md5_string = array (
'./include/Sugarpdf/sugarpdf/sugarpdf.smarty.php' => '3123177f2bb0240b00e37c433d149c66',
'./include/Sugarpdf/sugarpdf_config.php' => '01452207250f2f90396b4543eeecfde6',
'./include/Sugarpdf/sugarpdf_default.php' => 'ed59f131878639034df56183b7a121a2',
'./include/SuiteEditor/SuiteEditorConnector.php' => '30ded6167f0dd3abda0f18487659633b',
'./include/SuiteEditor/SuiteEditorConnector.php' => 'a776d9b9a8512fa5f5b00c4c9c417698',
'./include/SuiteEditor/SuiteEditorDirectHTML.php' => 'b5f7f66a383397e4a541e0ce51fef039',
'./include/SuiteEditor/SuiteEditorInterface.php' => 'cdf72097a74c1ca0bf8cbd2f4b5cdb8e',
'./include/SuiteEditor/SuiteEditorMozaik.php' => 'a44e4f678cbcaf8c823486be62ab98a3',
@ -1305,7 +1305,7 @@ $md5_string = array (
'./include/SuiteGraphs/rgraph/scripts/jsmin' => '9631c7fbf2f120539f148a7550209634',
'./include/SuiteGraphs/rgraph/scripts/jsmin.txt' => '9d43948e40a94c857c47a869da01d385',
'./include/SuiteMozaik.php' => '8060bf6d838174cfa0df04e311a6f8a7',
'./include/TemplateHandler/TemplateHandler.php' => '80f3e44aebe28d25481f3a45f24c1926',
'./include/TemplateHandler/TemplateHandler.php' => 'f815b572b2c4db21a58c9ab698416a21',
'./include/TestCaseAbstract.php' => '4a9fb42e6c0229f8c8101183320e17bf',
'./include/TimeDate.php' => '7dabddc78edd8048ed129b080a488579',
'./include/URIFilter.php' => 'bafc11e1aab5f2eb3839569f5109ee63',
@ -1350,7 +1350,7 @@ $md5_string = array (
'./include/dir_inc.php' => '4ec954313ef7c8b164ec1232a1ec1bd7',
'./include/entryPoint.php' => '6c03ccc488eae94ac702743421951115',
'./include/entryPointConfirmOptInConnector.php' => '66fed04564c4f4182f3b277d5b6dfafc',
'./include/export_utils.php' => '5f539efced9a07f53e78663126d1fc5d',
'./include/export_utils.php' => '1e623019f674e2a29b4039768ec6f92f',
'./include/externalAPI/Base/ExternalAPIBase.php' => 'e52639773bbdaa1d9e3308fd7a41e392',
'./include/externalAPI/Base/ExternalAPIPlugin.php' => '9f8d318d518a9f950fd0d80a6bac7c20',
'./include/externalAPI/Base/ExternalOAuthAPIPlugin.php' => 'fd065e2de29e6fa0dfc86956e2c86230',
@ -1443,7 +1443,7 @@ $md5_string = array (
'./include/generic/SugarWidgets/SugarWidgetSubPanelTopButton.php' => '73ebbe4637525a45798ba4e0d5c365d9',
'./include/generic/SugarWidgets/SugarWidgetSubPanelTopButtonQuickCreate.php' => '6946d51342aebdc39995af316bea01c5',
'./include/generic/SugarWidgets/SugarWidgetSubPanelTopButton_c.php' => '4ac7dc01f8edc3ba751645cd14c11da5',
'./include/generic/SugarWidgets/SugarWidgetSubPanelTopComposeEmailButton.php' => '8b4d187c36d140ad08bcf9675d3ec750',
'./include/generic/SugarWidgets/SugarWidgetSubPanelTopComposeEmailButton.php' => '7067242d738d9fa30c6a1ef575f30984',
'./include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateAccountNameButton.php' => '7c8026d84033b772fb86a537e5f5220f',
'./include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateCampaignLogEntryButton.php' => 'ec6f42ed41fdba39de226e44a0041aec',
'./include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateCampaignMarketingEmailButton.php' => 'abe7be4f90fdf815b3d59687dd0823b5',
@ -1505,7 +1505,7 @@ $md5_string = array (
'./include/images/tour/profile_link.png' => '672c8e5595b6beb00b29d4cf7360ca59',
'./include/images/university.png' => 'd779a477591af9d7236120e86647e7df',
'./include/images/university2.png' => '346083109b89352e3a4b77cc249c56df',
'./include/javascript/EmailsComposeViewModal.js' => 'f3e5e7623ee85de221dd60d3c7cfcb3f',
'./include/javascript/EmailsComposeViewModal.js' => '18ba828fcff89d1e5828eb7f7f0fd940',
'./include/javascript/ajaxUI.js' => '35ec428357ec0b09e18594c631fa7e3f',
'./include/javascript/alerts.js' => '5c5a51e2923a0977b83eaa2548382f8d',
'./include/javascript/bindWithDelay.js' => '9e9858d872371595cc135dad5ae079ee',
@ -1684,7 +1684,7 @@ $md5_string = array (
'./include/javascript/quickCompose.js' => '047d7eea0263fa0c2cd9bdb53ecf6258',
'./include/javascript/quicksearch.js' => '97475c83c2614b54f3a0dd63edb2dfb2',
'./include/javascript/report_additionals.js' => '094fef2462c9d640ee3ef4dc7af613d0',
'./include/javascript/sugar_3.js' => '1648c3c6a4f2e6ba8eecb9425f897251',
'./include/javascript/sugar_3.js' => '3be088993cbe4b3d3a733d4b758b8acc',
'./include/javascript/sugar_connection_event_listener.js' => 'c8a148e865988e17f9b0328de44803a7',
'./include/javascript/sugar_yui_overrides.js' => 'd99ea792b967d53cef54e0b870acdd88',
'./include/javascript/sugarwidgets/SugarYUILoader.js' => '959d552199b65eab09ed534ade65b064',
@ -2400,7 +2400,7 @@ $md5_string = array (
'./include/utils/recaptcha_utils.php' => '73f5eddf707788c1dff4b7d07dc82656',
'./include/utils/security_utils.php' => 'e953d0b673df3df313ecf1ac975e8f57',
'./include/utils/sugar_file_utils.php' => '1c1915cad8c88feb0edbf5bbaee106c4',
'./include/utils.php' => 'c480479dc541aa24577afd445574a9d5',
'./include/utils.php' => '1e3e93fc5e6ea40782efdb5aaf7b5f8c',
'./include/vCard.php' => '44052bbedcdaba3fdf67cfc10a112e75',
'./include/ytree/ExtNode.php' => '000d4ccbdb6e0a7628c636128781b5e3',
'./include/ytree/JQueryTree.php' => '3712d2224b93818b990b876f8405b745',
@ -2550,7 +2550,7 @@ $md5_string = array (
'./jssource/src_files/include/SugarFields/Fields/File/SugarFieldFile.js' => '5673fcbe388ef5af0fe7eca8dddf68d9',
'./jssource/src_files/include/SugarFields/Fields/Time/Time.js' => '22a9dadf3e02d6c7ee71b3d50639fc10',
'./jssource/src_files/include/connectors/formatters/default/company_detail.js' => 'c0225f1761182495ea499b5dcbc60efa',
'./jssource/src_files/include/javascript/EmailsComposeViewModal.js' => '51b2ed7cb42b4198e4c5ecb438c56bcb',
'./jssource/src_files/include/javascript/EmailsComposeViewModal.js' => '74dd4532c759be8c557b5acc3d777159',
'./jssource/src_files/include/javascript/ajaxUI.js' => 'fd171bf28ec63478d1518753b48d1a6f',
'./jssource/src_files/include/javascript/alerts.js' => '4cc19550e5d856a240b80c6317666eee',
'./jssource/src_files/include/javascript/calendar.js' => 'ca77fc30f0070b4ffbfa48cef294a76f',
@ -2573,7 +2573,7 @@ $md5_string = array (
'./jssource/src_files/include/javascript/quickCompose.js' => '31c8e3efcf325c0c805018587fa585cb',
'./jssource/src_files/include/javascript/quicksearch.js' => '0329400df3d1b8e4eab0765f8fe9f2e4',
'./jssource/src_files/include/javascript/report_additionals.js' => 'baca991df446eaf401dda47d1685fad1',
'./jssource/src_files/include/javascript/sugar_3.js' => '6dc9b5bab2dd6bf363cec7dff16aa248',
'./jssource/src_files/include/javascript/sugar_3.js' => '771fe4c868309601b2349fb1367cac2e',
'./jssource/src_files/include/javascript/sugar_connection_event_listener.js' => '431e88e62c5a7005693189d1e9d8e916',
'./jssource/src_files/include/javascript/sugar_yui_overrides.js' => 'efbf74aa5e7d0af070ae7faab7725538',
'./jssource/src_files/include/javascript/sugarwidgets/SugarYUILoader.js' => 'abc59adf77cf85c0424dbcb6c356bee8',
@ -2602,7 +2602,7 @@ $md5_string = array (
'./jssource/src_files/modules/Accounts/Account.js' => '6d64bb3ea8c66d71c154ba70cca2e118',
'./jssource/src_files/modules/Administration/javascript/Administration.js' => 'd6ceb885790e2541eecfec634e6ab255',
'./jssource/src_files/modules/Administration/javascript/Async.js' => 'f062dbc229f6307d094319abaebb2c7c',
'./jssource/src_files/modules/Calendar/Cal.js' => '3b871a0b63105ae7a682fb4bfa2fc523',
'./jssource/src_files/modules/Calendar/Cal.js' => '4a93979d5a83795c93084c548e476d3a',
'./jssource/src_files/modules/Campaigns/DetailView.js' => '1396aec60d5e7a6737c455c4d8b39200',
'./jssource/src_files/modules/Campaigns/WebToLead.js' => 'e64509ddd0e0ff5bc5cfbeaaae358883',
'./jssource/src_files/modules/Campaigns/wizard.js' => 'a4f7ae104e285c343542a99ce42b7770',
@ -2682,7 +2682,7 @@ $md5_string = array (
'./lib/API/OAuth2/.htaccess' => '4fe6db46ff1074349c8ffbb840c30de9',
'./lib/API/OAuth2/Entities/AccessTokenEntity.php' => '7ae1d3fb58d93978e8802c6107c9b593',
'./lib/API/OAuth2/Entities/AuthCodeEntity.php' => 'a706d552fe2a097564054bb53ba395dd',
'./lib/API/OAuth2/Entities/ClientEntity.php' => 'e34f5af49b6cb98c39bd54c7efc4f3ef',
'./lib/API/OAuth2/Entities/ClientEntity.php' => '80670314ff11b61a041927ba0b56c616',
'./lib/API/OAuth2/Entities/RefreshTokenEntity.php' => '6cb5c21827a7e9cc2d1f7daf4f3e85c7',
'./lib/API/OAuth2/Entities/ScopeEntity.php' => '195f52de4555f43b9e7acdedfe0813f8',
'./lib/API/OAuth2/Entities/UserEntity.php' => '48c5de4290e11e0138eed5c24373425c',
@ -2694,7 +2694,7 @@ $md5_string = array (
'./lib/API/OAuth2/README.md' => '234c6e1b678f70e885d02420b9c455ff',
'./lib/API/OAuth2/Repositories/AccessTokenRepository.php' => '88a3f5a9e3869759af0cae5ee520f288',
'./lib/API/OAuth2/Repositories/AuthCodeRepository.php' => 'be361c081aff6b102eaf5e2b8d1a5389',
'./lib/API/OAuth2/Repositories/ClientRepository.php' => 'ddd015a458c983f24eccc3c11aeb22d2',
'./lib/API/OAuth2/Repositories/ClientRepository.php' => '0abcf1553d09aa0409c4fdceede7c034',
'./lib/API/OAuth2/Repositories/RefreshTokenRepository.php' => '74b1dbf688ac3ef7289b324400a69bed',
'./lib/API/OAuth2/Repositories/ScopeRepository.php' => '7040aafea10ace42cc275adc44a2515f',
'./lib/API/OAuth2/Repositories/UserRepository.php' => '8ff1a576ddad72f26edb2ed21ab3370d',
@ -3557,13 +3557,13 @@ $md5_string = array (
'./modules/AOS_Quotes/views/view.detail.php' => '7050a7beda6b696f1bc19dc5da86d2bd',
'./modules/AOS_Quotes/views/view.edit.php' => 'd7febe2bec502ba7d36aa5d4d8d6207c',
'./modules/AOW_Actions/AOW_Action.php' => '4dbe91f2bac732292e9992f89a73b852',
'./modules/AOW_Actions/FormulaCalculator.php' => 'b8e36954646d4716949264e2fc2808af',
'./modules/AOW_Actions/FormulaCalculator.php' => 'ca0ad3d6019656144ae5666f79067790',
'./modules/AOW_Actions/actionLines.js' => 'de3626663801a14f67f46649d6983fd6',
'./modules/AOW_Actions/actionLines.php' => '6bb52c4830237a808c51e18b8c7e954c',
'./modules/AOW_Actions/actions/actionBase.php' => 'cc44a21a3198ee703b0390c7df0bcf49',
'./modules/AOW_Actions/actions/actionComputeField.css' => '4f63069fbf5aee464d8b0f24e7049276',
'./modules/AOW_Actions/actions/actionComputeField.js' => '2f39d2288a3dbe7dc85b3b185ce1fdc5',
'./modules/AOW_Actions/actions/actionComputeField.php' => '81159ddc7e2d91425e9db4fbea2ef075',
'./modules/AOW_Actions/actions/actionComputeField.php' => '680aa3489a3af38d4586f9d57a04fe9f',
'./modules/AOW_Actions/actions/actionCreateRecord.js' => 'd74993b3fd078cbd54a445c6b3470eda',
'./modules/AOW_Actions/actions/actionCreateRecord.php' => '537fbede6eeb62ac3ba1e5e77c6e4ada',
'./modules/AOW_Actions/actions/actionModifyRecord.php' => 'a382c7b13f2896df64d70055ad92b2d0',
@ -3844,7 +3844,7 @@ $md5_string = array (
'./modules/Bugs/vardefs.php' => '855c5012b57a7060f7c62cd437532019',
'./modules/Bugs/views/view.detail.php' => 'cf1a69a74ff14047728196953d63e53b',
'./modules/Bugs/views/view.edit.php' => 'f406f3c7f19e15cd646373151994fa1c',
'./modules/Calendar/Cal.js' => '106379c83260c2472f7c65114d7a9fdb',
'./modules/Calendar/Cal.js' => 'bc6138c43cd476b7b51b084745f54cf5',
'./modules/Calendar/Calendar.php' => '8b5970e1adbf735e0d7f5222012f48ec',
'./modules/Calendar/CalendarActivity.php' => '9e55048969b6abcb58443296057f8fce',
'./modules/Calendar/CalendarDisplay.php' => 'fd05f849dff1db7bb47713be26e6a3d2',
@ -4022,7 +4022,7 @@ $md5_string = array (
'./modules/CampaignLog/metadata/subpanels/default.php' => '9383d139ae417578b7c03083b9e6ba2a',
'./modules/CampaignLog/vardefs.php' => '0279a427e36779734ca01a0e5cbe0cc5',
'./modules/CampaignTrackers/CampaignTracker.php' => 'da574620bcf7b37822c4e6bb581f1f08',
'./modules/CampaignTrackers/DetailView.html' => 'ada3001b4092fc1dabbce8b8e7ac1452',
'./modules/CampaignTrackers/DetailView.html' => '8cb6bb4cd9751f106908cde8530b857e',
'./modules/CampaignTrackers/DetailView.php' => '6c3394e0140f5f5f0db95d392a4deb55',
'./modules/CampaignTrackers/EditView.html' => '3487ab500ce49be8c7bca18661aae85b',
'./modules/CampaignTrackers/EditView.php' => '32b4ad96e104b9ef6c8de33941a44b94',
@ -4166,27 +4166,27 @@ $md5_string = array (
'./modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.data.php' => 'db145e4a88bb0123a85711fc11086944',
'./modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.en_us.lang.php' => '37653e556058a7d870d9068d0cb6ba66',
'./modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.meta.php' => '653575a48fa00ea0f255b77d1c71b1cf',
'./modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.php' => 'a15176af7907c7bb663ef129dfd9480e',
'./modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.php' => '9657e9b2f8a1c7f22ace761b9ac7d7bb',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeConfigure.tpl' => 'fc2d41ca60cc48e8aaadeff33b86a382',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.data.php' => 'f48481748e948d7e34f5f4d107337cf0',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.en_us.lang.php' => '2cd6f4ad46a1ab7d5eda7fd7b0fc74ac',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.meta.php' => 'bcf1fd2ac113bdc8fcd2f6e96c51a003',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.php' => 'd10584b71ecae05337e09416a8e6d5bd',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.php' => '05b29826395af568d7e4ee5c835c0438',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceConfigure.tpl' => '2cf2e807cc447c1598aea3d505cc75ab',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.data.php' => '0218cf7d787951c29c1f3b04dca27951',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.en_us.lang.php' => 'edd88945059f81c532d016f95444a98a',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.meta.php' => 'bf1bb6cd51103d14eeacaff384e40b8f',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.php' => 'a04d3590123fedf06307669ae9532645',
'./modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.php' => '02e47ce89a90cf141b5454dcfd5074d8',
'./modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthConfigure.tpl' => '7ad6e7c4257461f7feee56097396246c',
'./modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.data.php' => '16949b783f0a69792b6835e71c5c9603',
'./modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.en_us.lang.php' => 'eee5d2fd10a5dcb2894534c62a76e8ad',
'./modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.meta.php' => '70ea288301c466bb9ee60f20d51b8d41',
'./modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.php' => '39825a53b6d4bb9be403cd3f352fc80a',
'./modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.php' => 'b0111e98d1b6fc34f28839ae8f80d002',
'./modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageConfigure.tpl' => '3c086ab793adc64ffff1bbbcf18ee44f',
'./modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.data.php' => '98c44d741c97fa63549c1177c063c582',
'./modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.en_us.lang.php' => '126f0a5dcb381d4f7fc057cd7bb7fc45',
'./modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.meta.php' => '4ae341b9fb86bae9af35a6025a212bdc',
'./modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.php' => '394769d6159a0e3ff8ab077193ba94b8',
'./modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.php' => 'd0eae425809765cabaf12ebe4e4bc09c',
'./modules/Charts/Dashlets/PredefinedChartDashletScript.tpl' => 'a84073e4b5722d39e693f023eb7813b1',
'./modules/Charts/DynamicAction.php' => '6c9664747a453c6ee31a4fd782e9b485',
'./modules/Charts/PredefinedChart.php' => 'd0dda7dc2f45335974c808153a5a8eed',
@ -4585,7 +4585,7 @@ $md5_string = array (
'./modules/Emails/EmailUI.php' => '7cc23aa2caa633911ea7db193a6f2a70',
'./modules/Emails/EmailUIAjax.php' => '474940d575ae666cd0b00437f75e76d4',
'./modules/Emails/EmailValidatorException.php' => 'cb225382f8842456d005769be4f3752d',
'./modules/Emails/EmailsController.php' => 'f65ff3b077e89ce9d3e4d9002d8d89ed',
'./modules/Emails/EmailsController.php' => '28c277df9e14bc1235dbd6605fa3e8c9',
'./modules/Emails/EmailsControllerActionGetFromFields.php' => '79f7a51f4969318d92e273efd42c961f',
'./modules/Emails/EmailsDataAddress.php' => 'a5f8b75980e59788f7eb2a8339e7703f',
'./modules/Emails/EmailsDataAddressCollector.php' => 'ac58f57fb9df4b7dd52d4cff78cbc59c',
@ -4608,10 +4608,10 @@ $md5_string = array (
'./modules/Emails/controller.php' => '65d6d5ad5e977930403a2b89cb15004a',
'./modules/Emails/field_arrays.php' => 'f8ad985446f13141ea7365aa8565c500',
'./modules/Emails/include/ComposeView/ComposeView.php' => '45b1a69671ca5c5f2a8ab1455e9f730c',
'./modules/Emails/include/ComposeView/ComposeView.tpl' => '02a1b64bfde0a319fcac90b1b9ebda13',
'./modules/Emails/include/ComposeView/ComposeView.tpl' => 'c84113fe9c29883d6722824c32111a71',
'./modules/Emails/include/ComposeView/ComposeViewBlank.tpl' => '22365ce6727ffb560e5ad3fc187f13f2',
'./modules/Emails/include/ComposeView/ComposeViewToolbar.tpl' => '656b26827857375278124e4610b9ff06',
'./modules/Emails/include/ComposeView/EmailsComposeView.js' => '38f9a7aefa68cb1c453cf39e3a7bf54d',
'./modules/Emails/include/ComposeView/EmailsComposeView.js' => '65fcff78a6d86eb59bf4fe841df3b79e',
'./modules/Emails/include/DetailView/EmailsDetailView.php' => 'f95937f398f37afe3927ecc035b8b743',
'./modules/Emails/include/DetailView/EmailsDraftDetailView.php' => 'baafca815e89a4c0ec3df8b6192552ea',
'./modules/Emails/include/DetailView/EmailsNonImportedDetailView.php' => 'ef9ecbcf65fa6f03e32f94b6a9805b2f',
@ -4750,7 +4750,7 @@ $md5_string = array (
'./modules/Employees/views/view.list.php' => '3fac70b690d87e7e7dd95f5e2602d129',
'./modules/ExternalOAuthConnection/ExternalOAuthConnection.php' => 'cbb2e64b88e64434b92fd0fcbd8e2ac4',
'./modules/ExternalOAuthConnection/Menu.php' => '6ae8433d8a70354ed103bf6c9c227b8a',
'./modules/ExternalOAuthConnection/controller.php' => 'bfc8e833c3a36ac58f6ffa562573ae55',
'./modules/ExternalOAuthConnection/controller.php' => 'f2b4e030365c48b92d08be2210e8cf3a',
'./modules/ExternalOAuthConnection/entrypoint/redirectToExternalOAuth.php' => '5c7689fab50bbb50b2b10c9a5bf497c8',
'./modules/ExternalOAuthConnection/entrypoint/setExternalOAuthToken.php' => '7b079da4660ddb159a9b529bd05905f8',
'./modules/ExternalOAuthConnection/js/authenticate.js' => '2f9c2092d9fe9735c3b860d693d87969',
@ -4773,7 +4773,7 @@ $md5_string = array (
'./modules/ExternalOAuthConnection/views/view.list.php' => 'bf6a7674a1b649099afa941fb7d2e0ba',
'./modules/ExternalOAuthProvider/ExternalOAuthProvider.php' => 'ff4f5725e6ea98b07c06317087b54d30',
'./modules/ExternalOAuthProvider/Menu.php' => '1d5f42e855c60778bb371e2451bd7c44',
'./modules/ExternalOAuthProvider/controller.php' => '4092c7ff3987c1df62c2180a0708c7de',
'./modules/ExternalOAuthProvider/controller.php' => 'ca4c0caf7ab8de22f2ccb3d49c7b4e91',
'./modules/ExternalOAuthProvider/language/en_us.lang.php' => '250b259d406bce7a9bf834e1b9a4c936',
'./modules/ExternalOAuthProvider/metadata/SearchFields.php' => '0238216ef6c3eb39b0a71e70bb58d592',
'./modules/ExternalOAuthProvider/metadata/detailviewdefs.php' => 'de6eaf9ac35fe3ae956553769281345d',
@ -5332,7 +5332,7 @@ $md5_string = array (
'./modules/Notes/tpls/QuickCreate.tpl' => '329a21edbab2d4181cf6db7fc28edd3a',
'./modules/Notes/vardefs.php' => 'b9ef43050cd204496c101efbb2bac717',
'./modules/OAuth2Clients/Menu.php' => '543ff4403826bdf5cb75db86bfb26530',
'./modules/OAuth2Clients/OAuth2Clients.php' => 'c8d96775b766e4c90fa78f1c23688a09',
'./modules/OAuth2Clients/OAuth2Clients.php' => '04a5864daa02df2919507b2ac16f8eb3',
'./modules/OAuth2Clients/controller.php' => 'bf680521d60e7e64e7966415f1a3e79c',
'./modules/OAuth2Clients/js/ClientCredentialsValidation.js' => 'f8652093bb42e1082e8a1b69a6a73f74',
'./modules/OAuth2Clients/js/PasswordCredentialsValidation.js' => 'd20b36468c15522c07606ddfe6204c64',
@ -5574,7 +5574,7 @@ $md5_string = array (
'./modules/ProspectLists/Popup_picker.html' => '242e9467d08481a15f24f9dc62663a94',
'./modules/ProspectLists/ProspectList.php' => '4b34527c253a2637e2f6b4ff72990bb8',
'./modules/ProspectLists/ProspectListFormBase.php' => '36adb8d278a608299c2d6ff183af7fd2',
'./modules/ProspectLists/Save.php' => '9b3bad7aff47a312451e34a44f63fee8',
'./modules/ProspectLists/Save.php' => '80045359c8b035593ab8197bbc7f985c',
'./modules/ProspectLists/SubPanelView.html' => '12a8e783bd44a156e193bc1be8247cda',
'./modules/ProspectLists/SubPanelView.php' => 'c2f9c067fc5a8b04272ea96b2b865ddc',
'./modules/ProspectLists/TargetListUpdate.php' => 'fb273882f80b2dacdcb28239ddfe8e97',
@ -5710,7 +5710,7 @@ $md5_string = array (
'./modules/SchedulersJobs/language/en_us.lang.php' => '213c773d3b36dfdc0b2932d936fe091b',
'./modules/SchedulersJobs/metadata/subpanels/default.php' => '40952b491d66cd328be1237e7dc0750c',
'./modules/SchedulersJobs/vardefs.php' => 'd0606930f15664bf4b40846afead6d3d',
'./modules/SecurityGroups/AssignGroups.php' => 'd27ab498ec58d4e232b7f7ec607e410c',
'./modules/SecurityGroups/AssignGroups.php' => '36a0479e931f51d46c5fb8c16aaffe2f',
'./modules/SecurityGroups/Forms.php' => 'd41d8cd98f00b204e9800998ecf8427e',
'./modules/SecurityGroups/MassAssign.php' => '12fe7e2a54311bba14fba390fda8a523',
'./modules/SecurityGroups/Menu.php' => '17fdeb091b747acd1b2a698bc3a88bbc',
@ -5778,7 +5778,7 @@ $md5_string = array (
'./modules/Studio/DropDowns/EditView.tpl' => '1daa9d2575cfd5788576f7c8f06940a5',
'./modules/Studio/Forms.php' => 'f1b9c09d71cbf6919f46b99b9a0286d3',
'./modules/Studio/JSTransaction.js' => '54c0f25b68890452424d8819eeead469',
'./modules/Studio/SaveTabs.php' => '75d018757e60ea2eaf6439edae57b1ea',
'./modules/Studio/SaveTabs.php' => 'c094c676c1e7b64b9f2d2f393724c280',
'./modules/Studio/TabGroups/EditViewTabs.php' => '0d3792d18876f5dfbf3599510dc04bb3',
'./modules/Studio/TabGroups/EditViewTabs.tpl' => '943135f9e634454cbcc1a7d678d054a7',
'./modules/Studio/TabGroups/TabGroupHelper.php' => 'c56673375908c7ceb08d28a23204b572',
@ -5803,7 +5803,7 @@ $md5_string = array (
'./modules/SugarFeed/Dashlets/SugarFeedDashlet/UserPostForm.tpl' => 'ef42d6abc5fd5f672d6540224aa3730e',
'./modules/SugarFeed/Forms.php' => 'd41d8cd98f00b204e9800998ecf8427e',
'./modules/SugarFeed/Menu.php' => '22842b6d2806ee33c75378a3ce284121',
'./modules/SugarFeed/SugarFeed.php' => 'c2587f755157c000474ed565a0253e42',
'./modules/SugarFeed/SugarFeed.php' => 'ae0dfdefaa62cf798f9e1603fc9cdf46',
'./modules/SugarFeed/SugarFeedFlush.php' => 'c5861f849a67f9129ddd03006f336ea3',
'./modules/SugarFeed/action_view_map.php' => 'ef827ccc71707c55e2f4aeee52a3ea38',
'./modules/SugarFeed/feedLogicBase.php' => 'bfb4cbeba25d3e81b7acfc1316aef90b',
@ -5893,7 +5893,7 @@ $md5_string = array (
'./modules/SurveyResponses/metadata/studio.php' => 'd1a4aee4586f29bc1d22f2719b156bd1',
'./modules/SurveyResponses/metadata/subpanels/default.php' => 'fcece223dc6df7455f9d979e50d17ef1',
'./modules/SurveyResponses/tpls/detailquestionresponses.tpl' => 'e721176cde9db9ee091ae29b11e68ac8',
'./modules/SurveyResponses/vardefs.php' => '0282afec38f3202a4227f3596e3e9b2c',
'./modules/SurveyResponses/vardefs.php' => '19965a10a71f556459d978ed5a52990c',
'./modules/Surveys/Dashlets/SurveysDashlet/SurveysDashlet.meta.php' => '8a0be697554c54281b29bd9bc8facfd8',
'./modules/Surveys/Dashlets/SurveysDashlet/SurveysDashlet.php' => '533474ccb58910c160091f6898494202',
'./modules/Surveys/Entry/Survey.php' => '61d81ae614ff0e25a75763a52ef1eeb6',
@ -6093,7 +6093,7 @@ $md5_string = array (
'./modules/Users/authentication/SugarAuthenticate/FactorAuthEmailCode.tpl' => '7d47d05738a22f219f9a96ee5393792c',
'./modules/Users/authentication/SugarAuthenticate/FactorAuthFactory.php' => '02b5b7c4588faf6268b79741850379c4',
'./modules/Users/authentication/SugarAuthenticate/FactorAuthInterface.php' => '01bb1e373dcf4cc53dc3ff41f0040d00',
'./modules/Users/authentication/SugarAuthenticate/SugarAuthenticate.php' => 'b4b7219975758e1c1ef4d10725e5c495',
'./modules/Users/authentication/SugarAuthenticate/SugarAuthenticate.php' => '7844f2aa29e40d890a7ecd80605e060b',
'./modules/Users/authentication/SugarAuthenticate/SugarAuthenticateUser.php' => 'c59bb9e71e48bed5bb9322ec9416e7b9',
'./modules/Users/controller.php' => '65021ed13247766dc3353cdbf8e8dada',
'./modules/Users/entryPointSaveGoogleApiKey.php' => 'af2395a659fbe4c935ac555e4f3b592b',
@ -6355,7 +6355,7 @@ $md5_string = array (
'./soap.php' => 'e28988c2e0b8e2c484587b537a710525',
'./sugar_version.json' => 'bdfbcefae2f9af559bef6a36367df7bb',
'./sugar_version.php' => 'db7b6c8d51f87879fce1e6172eedfbed',
'./suitecrm_version.php' => 'b94f5eb3153f82f1259c2f4b62d036d9',
'./suitecrm_version.php' => 'b2203e609053399bc053aa7df09524eb',
'./themes/SuiteP/css/Dawn/color-palette.scss' => 'e64677d79e1d68c069bdc2dc661c4f99',
'./themes/SuiteP/css/Dawn/icons.scss' => 'd59f8c5855e7a8df09542a663835a196',
'./themes/SuiteP/css/Dawn/select.ico' => '22393ad23f16c3f1462455bae8f20279',

View file

@ -1238,17 +1238,17 @@ EOQ;
*/
public function addDate($displayname, $varname)
{
global $timedate;
global $timedate, $app_strings, $app_list_strings, $theme, $current_user;
//letrium ltd
$displayname = addslashes($displayname);
$userformat = '(' . $timedate->get_user_date_format() . ')';
$cal_dateformat = $timedate->get_cal_date_format();
global $app_strings, $app_list_strings, $theme;
$cal_fdow = $current_user->get_first_day_of_week() ? $current_user->get_first_day_of_week() : '0';
$javascriptend = <<<EOQ
<script type="text/javascript">
Calendar.setup ({
inputField : "${varname}jscal_field", daFormat : "$cal_dateformat", ifFormat : "$cal_dateformat", showsTime : false, button : "${varname}jscal_trigger", singleClick : true, step : 1, weekNumbers:false
inputField : "${varname}jscal_field", daFormat : "$cal_dateformat", ifFormat : "$cal_dateformat", showsTime : false, button : "${varname}jscal_trigger", singleClick : true, step : 1, startWeekday: $cal_fdow, weekNumbers:false
});
</script>
EOQ;
@ -1296,10 +1296,10 @@ EOQ;
*/
public function addDatetime($displayname, $varname)
{
global $timedate;
global $timedate, $app_strings, $app_list_strings, $theme, $current_user;
$userformat = $timedate->get_user_time_format();
$cal_dateformat = $timedate->get_cal_date_format();
global $app_strings, $app_list_strings, $theme;
$cal_fdow = $current_user->get_first_day_of_week() ? $current_user->get_first_day_of_week() : '0';
$javascriptend = <<<EOQ
@ -1337,6 +1337,7 @@ EOQ;
button : "{$varname}_trigger",
singleClick : true,
step : 1,
startWeekday: $cal_fdow,
weekNumbers:false
});

View file

@ -101,6 +101,7 @@ button : "start_range_{$id}_trigger",
singleClick : true,
dateStr : "{$date_value}",
step : 1,
startWeekday: {$CALENDAR_FDOW|default:'0'},
weekNumbers:false
{rdelim}
);
@ -126,6 +127,7 @@ button : "end_range_{$id}_trigger",
singleClick : true,
dateStr : "{$date_value}",
step : 1,
startWeekday: {$CALENDAR_FDOW|default:'0'},
weekNumbers:false
{rdelim}
);

View file

@ -78,6 +78,7 @@ class SuiteEditorConnector
height : '480',
plugins: ['code', 'table', 'link', 'image'],
toolbar: ['fontselect | fontsizeselect | bold italic underline | forecolor backcolor | styleselect | outdent indent | link image'],
convert_urls: false,
}"
);
}

View file

@ -171,7 +171,7 @@ class TemplateHandler
);
$contents = $this->ss->fetch($tpl);
// Insert validation and quick search stuff here
if ($view === 'EditView' || $ajaxSave || $view === 'ConvertLead' || strpos($view, 'QuickCreate')) {
if ($view === 'EditView' || $ajaxSave || $view === 'ConvertLead' || $view === 'ComposeView' || strpos($view, 'QuickCreate')) {
global $dictionary, $beanList, $app_strings, $mod_strings;
$mod = $beanList[$module];

View file

@ -278,6 +278,13 @@ function export($type, $records = null, $members = false, $sample=false)
require_once('modules/Currencies/Currency.php');
$value = currency_format_number($value);
break;
// Fix Issue 9326 - Adding Decimal and Float case to retrieve user-defined decimal separator
case 'decimal':
case 'float':
$user_dec_sep = (!empty($current_user->id) ? $current_user->getPreference('dec_sep') : null);
$dec_sep = empty($user_dec_sep) ? $sugar_config['default_decimal_seperator'] : $user_dec_sep;
$value = str_replace('.', $dec_sep, $value);
break;
//if our value is a datetime field, then apply the users locale
case 'datetime':
@ -305,7 +312,9 @@ function export($type, $records = null, $members = false, $sample=false)
$value = implode(",", $valueArray);
break;
// Fix Issue 9153 - Exporting DynamicDropdown fields return keys
case 'dynamicenum':
case 'enum':
if (isset($focus->field_name_map[$fields_array[$key]]['options']) &&
isset($app_list_strings[$focus->field_name_map[$fields_array[$key]]['options']]) &&

View file

@ -101,13 +101,12 @@ class SugarWidgetSubPanelTopComposeEmailButton extends SugarWidgetSubPanelTopBut
$emailUI = new EmailUI();
$emailUI->appendTick = false;
$button = '<a class="email-link" onclick="$(document).openComposeViewModal(this);" data-module="'
. $bean->module_name . '" data-record-id="'
. $bean->id . '" data-module-name="'
. $bean->name .'" data-email-address="'
. $bean->email1 .'">'
. $app_strings['LBL_COMPOSE_EMAIL_BUTTON_LABEL']
. '</a>';
$button = '<div type="hidden" onclick="currentModule=\''
. $bean->module_name . '\';$(document).openComposeViewModal(this);" data-module="'
. $bean->module_name . '" data-record-id="'
. $bean->id . '" data-module-name="'
. $bean->name .'" data-email-address="'
. $bean->email1 .'">';
}
return $button;

View file

@ -36,7 +36,7 @@
* reasonably feasible for technical reasons, the Appropriate Legal Notices must
* display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM".
*/(function($){$.fn.EmailsComposeViewModal=function(options){"use strict";var self=this;var opts=$.extend({},$.fn.EmailsComposeViewModal.defaults,options);self.handleClick=function(e){"use strict";var self=this;self.emailComposeView=null;var opts=$.extend({},$.fn.EmailsComposeViewModal.defaults);var composeBox=$('<div></div>').appendTo(opts.contentSelector);composeBox.messageBox({"showHeader":false,"showFooter":false,"size":'lg'});composeBox.setBody('<div class="email-in-progress"><img src="themes/'+SUGAR.themes.theme_name+'/images/loading.gif"></div>');composeBox.show();$.ajax({type:"GET",cache:false,url:'index.php?module=Emails&action=ComposeView&in_popup=1'}).done(function(data){if(data.length===0){console.error("Unable to display ComposeView");composeBox.setBody(SUGAR.language.translate('','ERR_AJAX_LOAD'));return;}
composeBox.setBody(data);self.emailComposeView=composeBox.controls.modal.body.find('.compose-view').EmailsComposeView();$(self.emailComposeView).on('sentEmail',function(event,composeView){composeBox.hide();composeBox.remove();});$(self.emailComposeView).on('disregardDraft',function(event,composeView){if(typeof messageBox!=="undefined"){var mb=messageBox({size:'lg'});mb.setTitle(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_DRAFT_TITLE'));mb.setBody(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_DRAFT_BODY'));mb.on('ok',function(){mb.remove();composeBox.hide();composeBox.remove();});mb.on('cancel',function(){mb.remove();});mb.show();}else{if(confirm(self.translatedErrorMessage)){composeBox.hide();composeBox.remove();}}});composeBox.on('cancel',function(){composeBox.remove();});composeBox.on('hide.bs.modal',function(){composeBox.remove();});}).fail(function(data){composeBox.controls.modal.content.html(SUGAR.language.translate('','LBL_EMAIL_ERROR_GENERAL_TITLE'));});return $(self);};self.construct=function(){"use strict";$(opts.buttonSelector).click(self.handleClick)};self.destruct=function(){};self.construct();return $(self);};$.fn.openComposeViewModal=function(source){"use strict";window.event.preventDefault();window.event.stopImmediatePropagation();var self=this;self.emailComposeView=null;var opts=$.extend({},$.fn.EmailsComposeViewModal.defaults);var composeBox=$('<div></div>').appendTo(opts.contentSelector);composeBox.messageBox({"showHeader":false,"showFooter":false,"size":'lg'});composeBox.setBody('<div class="email-in-progress"><img src="themes/'+SUGAR.themes.theme_name+'/images/loading.gif"></div>');composeBox.show();var relatedId=$('[name="record"]').val();var ids='&ids=';if($(source).attr('data-record-id')!==''){ids=ids+$(source).attr('data-record-id');relatedId=$(source).attr('data-record-id');}
composeBox.setBody(data);self.emailComposeView=composeBox.controls.modal.body.find('.compose-view').EmailsComposeView();$(self.emailComposeView).on('sentEmail',function(event,composeView){composeBox.hide();composeBox.remove();});$(self.emailComposeView).on('disregardDraft',function(event,composeView){if(typeof messageBox!=="undefined"){var mb=messageBox({size:'lg'});mb.setTitle(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_DRAFT_TITLE'));mb.setBody(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_DRAFT_BODY'));mb.on('ok',function(){mb.remove();composeBox.hide();composeBox.remove();});mb.on('cancel',function(){mb.remove();});mb.show();}else{if(confirm(self.translatedErrorMessage)){composeBox.hide();composeBox.remove();}}});composeBox.on('cancel',function(){composeBox.remove();});composeBox.on('hide.bs.modal',function(){composeBox.remove();});$("#emails_email_templates_name").change(function(){$.fn.EmailsComposeView.onTemplateChange()});}).fail(function(data){composeBox.controls.modal.content.html(SUGAR.language.translate('','LBL_EMAIL_ERROR_GENERAL_TITLE'));});return $(self);};self.construct=function(){"use strict";$(opts.buttonSelector).click(self.handleClick)};self.destruct=function(){};self.construct();return $(self);};$.fn.openComposeViewModal=function(source){"use strict";window.event.preventDefault();window.event.stopImmediatePropagation();var self=this;self.emailComposeView=null;var opts=$.extend({},$.fn.EmailsComposeViewModal.defaults);var composeBox=$('<div></div>').appendTo(opts.contentSelector);composeBox.messageBox({"showHeader":false,"showFooter":false,"size":'lg'});composeBox.setBody('<div class="email-in-progress"><img src="themes/'+SUGAR.themes.theme_name+'/images/loading.gif"></div>');composeBox.show();var relatedId=$('[name="record"]').val();var ids='&ids=';if($(source).attr('data-record-id')!==''){ids=ids+$(source).attr('data-record-id');relatedId=$(source).attr('data-record-id');}
else{var inputs=document.MassUpdate.elements;for(var i=0;i<inputs.length;i++){if(inputs[i].name==='mass[]'&&inputs[i].checked){ids=ids+inputs[i].value+',';}}}
var targetModule=currentModule;if($(source).attr('data-module')!==''){targetModule=$(source).attr('data-module');}
var url='index.php?module=Emails&action=ComposeView&in_popup=1&targetModule='+targetModule+ids+'&relatedModule='+currentModule+'&relatedId='+relatedId;$.ajax({type:"GET",cache:false,url:url}).done(function(data){if(data.length===0){console.error("Unable to display ComposeView");composeBox.setBody(SUGAR.language.translate('','ERR_AJAX_LOAD'));return;}
@ -47,4 +47,4 @@ populateEmailAddress=$(this).attr('data-record-email');if(dataEmailAddress!=='')
if(populateEmailAddress!==''){if(targetCount>0){targetList=targetList+',';}
targetList=targetList+dataEmailName+' <'+populateEmailAddress+'>';targetCount++;}});if(targetCount>0){$(self.emailComposeView).find('#to_addrs_names').val(targetList);}
if(targetCount<2){$(self.emailComposeView).find('#parent_type').val(populateModule);$(self.emailComposeView).find('#parent_name').val(populateModuleName);$(self.emailComposeView).find('#parent_id').val(populateModuleRecord);}
$(self.emailComposeView).on('sentEmail',function(event,composeView){composeBox.hide();composeBox.remove();});$(self.emailComposeView).on('disregardDraft',function(event,composeView){if(typeof messageBox!=="undefined"){var mb=messageBox({size:'lg'});mb.setTitle(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_DRAFT_TITLE'));mb.setBody(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_DRAFT_BODY'));mb.on('ok',function(){mb.remove();composeBox.hide();composeBox.remove();});mb.on('cancel',function(){mb.remove();});mb.show();}else{if(confirm(self.translatedErrorMessage)){composeBox.hide();composeBox.remove();}}});composeBox.on('cancel',function(){composeBox.remove();});composeBox.on('hide.bs.modal',function(e){e.preventDefault();var mb=messageBox({size:'lg'});mb.setTitle(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_EMAIL_TITLE'));mb.setBody(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_EMAIL_BODY'));mb.on('ok',function(){mb.remove();composeBox.hide();composeBox.remove();});mb.on('cancel',function(){mb.remove();});mb.show();});}).fail(function(data){composeBox.controls.modal.content.html(SUGAR.language.translate('','LBL_EMAIL_ERROR_GENERAL_TITLE'));});return $(self);};$.fn.EmailsComposeViewModal.defaults={'selected':'INBOX','buttonSelector':'[data-action=emails-show-compose-modal]','contentSelector':'#content'};}(jQuery));
$(self.emailComposeView).on('sentEmail',function(event,composeView){composeBox.hide();composeBox.remove();});$(self.emailComposeView).on('disregardDraft',function(event,composeView){if(typeof messageBox!=="undefined"){var mb=messageBox({size:'lg'});mb.setTitle(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_DRAFT_TITLE'));mb.setBody(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_DRAFT_BODY'));mb.on('ok',function(){mb.remove();composeBox.hide();composeBox.remove();});mb.on('cancel',function(){mb.remove();});mb.show();}else{if(confirm(self.translatedErrorMessage)){composeBox.hide();composeBox.remove();}}});composeBox.on('cancel',function(){composeBox.remove();});composeBox.on('hide.bs.modal',function(e){e.preventDefault();var mb=messageBox({size:'lg'});mb.setTitle(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_EMAIL_TITLE'));mb.setBody(SUGAR.language.translate('','LBL_CONFIRM_DISREGARD_EMAIL_BODY'));mb.on('ok',function(){mb.remove();composeBox.hide();composeBox.remove();});mb.on('cancel',function(){mb.remove();});mb.show();});$("#emails_email_templates_name").change(function(){$.fn.EmailsComposeView.onTemplateChange()});}).fail(function(data){composeBox.controls.modal.content.html(SUGAR.language.translate('','LBL_EMAIL_ERROR_GENERAL_TITLE'));});return $(self);};$.fn.EmailsComposeViewModal.defaults={'selected':'INBOX','buttonSelector':'[data-action=emails-show-compose-modal]','contentSelector':'#content'};}(jQuery));

View file

@ -573,8 +573,9 @@ URL+='&create='+create;if(metadata!=''&&metadata!=undefined){URL+='&metadata='+m
if(popup_request_data.jsonObject){var request_data=popup_request_data.jsonObject;}else{var request_data=popup_request_data;}
var field_to_name_array_url='';if(request_data&&request_data.field_to_name_array!=undefined){for(var key in request_data.field_to_name_array){if(key.toLowerCase()!='id'){field_to_name_array_url+='&field_to_name[]='+encodeURIComponent(key.toLowerCase());}}}
if(field_to_name_array_url){URL+=field_to_name_array_url;}
win=SUGAR.util.openWindow(URL,windowName,windowFeatures);if(window.focus){win.focus();}
win=SUGAR.util.openWindow(URL,windowName,windowFeatures);if(win){if(win.focus){win.focus();}
win.popupCount=popupCount;return win;}
return;}
var from_popup_return=false;function replaceHTMLChars(value){return value.replace(/&amp;/gi,'&').replace(/&lt;/gi,'<').replace(/&gt;/gi,'>').replace(/&#039;/gi,'\'').replace(/&quot;/gi,'"');}
function set_return_basic(popup_reply_data,filter){var form_name=popup_reply_data.form_name;var name_to_value_array=popup_reply_data.name_to_value_array;for(var the_key in name_to_value_array){if(the_key=='toJSON'){}
else if(the_key.match(filter)){var displayValue=replaceHTMLChars(name_to_value_array[the_key]);if(window.document.forms[form_name]&&window.document.forms[form_name].elements[the_key]){if(window.document.forms[form_name].elements[the_key].tagName=='SELECT'){var selectField=window.document.forms[form_name].elements[the_key];for(var i=0;i<selectField.options.length;i++){if(selectField.options[i].text==displayValue){selectField.options[i].selected=true;SUGAR.util.callOnChangeListers(selectField);break;}}}else{window.document.forms[form_name].elements[the_key].value=displayValue;SUGAR.util.callOnChangeListers(window.document.forms[form_name].elements[the_key]);}}}}}

View file

@ -504,13 +504,6 @@ function get_sugar_config_defaults(): array
'jpg'
],
'upload_maxsize' => 30000000,
'allowed_preview' => [
'pdf',
'gif',
'png',
'jpeg',
'jpg'
],
'import_max_execution_time' => 3600,
// 'use_php_code_json' => returnPhpJsonStatus(),
'verify_client_ip' => true,

View file

@ -97,6 +97,9 @@
composeBox.on('hide.bs.modal', function () {
composeBox.remove();
});
$( "#emails_email_templates_name" ).change(function() {
$.fn.EmailsComposeView.onTemplateChange()
});
}).fail(function (data) {
composeBox.controls.modal.content.html(SUGAR.language.translate('', 'LBL_EMAIL_ERROR_GENERAL_TITLE'));
});
@ -252,6 +255,9 @@
});
mb.show();
});
$( "#emails_email_templates_name" ).change(function() {
$.fn.EmailsComposeView.onTemplateChange()
});
}).fail(function (data) {
composeBox.controls.modal.content.html(SUGAR.language.translate('', 'LBL_EMAIL_ERROR_GENERAL_TITLE'));
});

View file

@ -4510,17 +4510,15 @@ function open_popup(module_name, width, height, initial_filter, close_popup, hid
if (field_to_name_array_url) {
URL += field_to_name_array_url;
}
win = SUGAR.util.openWindow(URL, windowName, windowFeatures);
if (window.focus) {
// put the focus on the popup if the browser supports the focus() method
win.focus();
if(win) {
$(win).focus(function(){
win.focus();
});
win.popupCount = popupCount;
return win;
}
win.popupCount = popupCount;
return win;
return '';
}
/**

View file

@ -288,6 +288,8 @@ CAL.repeat_type_selected = function () {
}
CAL.load_form = function (module_name, record, edit_all_recurrences, cal_event) {
CAL.disable_creating = true;
CAL.reset_edit_dialog();
CAL.disable_buttons();
var e;
var to_open = true;

View file

@ -63,4 +63,9 @@ class ClientEntity implements ClientEntityInterface
{
$this->redirectUri = $uri;
}
public function setIsConfidential($confidential)
{
$this->isConfidential = $confidential;
}
}

View file

@ -42,7 +42,6 @@ namespace SuiteCRM\API\OAuth2\Repositories;
use League\OAuth2\Server\Repositories\ClientRepositoryInterface;
use SuiteCRM\API\OAuth2\Entities\ClientEntity;
use SuiteCRM\API\OAuth2\Exception\GrantTypeNotAllowedForClient;
class ClientRepository implements ClientRepositoryInterface
{
@ -50,7 +49,7 @@ class ClientRepository implements ClientRepositoryInterface
* {@inheritdoc}
* @return null|ClientEntity
*/
public function getClientEntity($clientIdentifier, $grantType, $clientSecret = null, $mustValidateSecret = true)
public function getClientEntity($clientIdentifier)
{
$client = new \OAuth2Clients();
$client->retrieve($clientIdentifier);
@ -58,25 +57,23 @@ class ClientRepository implements ClientRepositoryInterface
return null;
}
if ($client->allowed_grant_type !== $grantType) {
throw new GrantTypeNotAllowedForClient();
}
if (
$mustValidateSecret === true
&& (bool)$client->is_confidential === true
&& hash('sha256', $clientSecret) !== $client->secret
) {
return null;
}
$clientEntity = new ClientEntity();
$clientEntity->setIdentifier($clientIdentifier);
$clientEntity->setName($client->name);
$redirect_url = isset($client->redirect_uri) ? $client->redirect_uri : '';
$clientEntity->setRedirectUri($redirect_url);
$clientEntity->setRedirectUri($client->redirect_uri ?? '');
$clientEntity->setIsConfidential($client->is_confidential ?? false);
return $clientEntity;
}
public function validateClient($clientIdentifier, $clientSecret, $grantType)
{
$client = new \OAuth2Clients();
$client->retrieve($clientIdentifier);
if (empty($client->id)) {
return null;
}
return hash('sha256', $clientSecret) === $client->secret && $grantType === $client->allowed_grant_type;
}
}

View file

@ -403,9 +403,9 @@ class FormulaCalculator
return date($params[0], strtotime($params[1]));
}
if (($params = $this->evaluateFunctionParams("datediff", $text, $childItems)) != null) {
$d1 = new DateTime($params[0]);
$d2 = new DateTime($params[1]);
if (($params = $this->evaluateFunctionParams("datediff", $text, $childItems)) != null) {
$d1 = new DateTime($this->getDBFormat($params[0]));
$d2 = new DateTime($this->getDBFormat($params[1]));
$diff = $d1->diff($d2);
switch ($params[2]) {
@ -660,7 +660,7 @@ class FormulaCalculator
{
$prefix = $isTime ? 'PT' : 'P';
$datetime = new DateTime($datestring);
$datetime = new DateTime($this->getDBFormat($datestring));
if ($isAdd) {
$datetime->add(new DateInterval($prefix . $ammount . $type));
@ -849,4 +849,43 @@ class FormulaCalculator
{
return sprintf("%0" . $digits . "d", $value);
}
/**
* Outputs date and datetime values in DB format
*
* @param String $date
* @return String
*/
private function getDBFormat($date) {
// 1) If WF is thrown by the after_save LH, the bean is already loaded and the date/datetime value
// is properly formatted, so will only change the timezone value from UTC to user's one.
// 2) If WF is run by the scheduler task, will change date/datetime value to DB format.
$formatDate = 'Y-m-d';
$validDate = DateTime::createFromFormat($formatDate, $date);
$formatDateTime = 'Y-m-d H:i:s';
$validDateTime = DateTime::createFromFormat($formatDateTime, $date);
if ($validDate && $validDate->format($formatDate) === $date) {
// Nothing to do
return $date;
} else if ($validDateTime && $validDateTime->format($formatDateTime) === $date) {
// Set TZ to user's TZ
global $timedate, $current_user;
$date = $timedate->fromDb($date);
$date = $timedate->tzUser($date, $current_user);
return $date->format('Y-m-d H:i:s');
} else { // In this case the WF is run by the cron
global $current_user, $timedate;
if(strpos($date, " ") !== false){
$type = 'datetime';
} else{
$type = 'date';
}
$date = $timedate->fromUserType($date, $type, $current_user);
if ($date) {
return $date->asDb(false);
}
return null;
}
}
}

View file

@ -103,12 +103,13 @@ class actionComputeField extends actionBase
$relateFields = $this->getAllRelatedFields($bean);
for ($i = 0; $i < count($formulas); $i++) {
for ($i = 0; $i < count($formulas); $i++) {
if (array_key_exists($formulas[$i], $relateFields) && isset($relateFields[$formulas[$i]]['id_name'])) {
$bean->{$relateFields[$formulas[$i]]['id_name']} =
$calculator->calculateFormula($formulaContents[$i]);
$calcValue = $calculator->calculateFormula($formulaContents[$i]);
$bean->{$relateFields[$formulas[$i]]['id_name']} = ( is_numeric($calcValue) ? (float)$calcValue : $calcValue );
} else {
$bean->{$formulas[$i]} = $calculator->calculateFormula($formulaContents[$i]);
$calcValue = $calculator->calculateFormula($formulaContents[$i]);
$bean->{$formulas[$i]} = ( is_numeric($calcValue) ? (float)$calcValue : $calcValue );
}
}
@ -152,7 +153,7 @@ class actionComputeField extends actionBase
if ($parameterTypes[$i] == actionComputeField::FORMATTED_VALUE) {
$dataType = $bean->field_name_map[$parameters[$i]]['type'];
if ($dataType == 'enum') {
if ($dataType == 'enum' || $dataType == 'dynamicenum') {
$resolvedParameters[$i] =
$GLOBALS['app_list_strings'][$bean->field_defs[$parameters[$i]]['options']][$bean->{$parameters[$i]}];
} else {

View file

@ -75,7 +75,7 @@ field_name="contact_invitees";if(v.module=="Lead")
field_name="lead_invitees";var str=CAL.get(field_name).value;CAL.get(field_name).value=str+v.fields.id+",";});}
CAL.repeat_type_selected=function(){var rt;if(rt=CAL.get("repeat_type")){if(rt.value=='Weekly'){var nodes=CAL.query(".weeks_checks_div");CAL.each(nodes,function(i,v){nodes[i].style.display="block";});}else{var nodes=CAL.query(".weeks_checks_div");CAL.each(nodes,function(i,v){nodes[i].style.display="none";});}
if(rt.value==''){CAL.get("repeat_interval").setAttribute("disabled","disabled");CAL.get("repeat_end_date").setAttribute("disabled","disabled");}else{CAL.get("repeat_interval").removeAttribute("disabled");CAL.get("repeat_end_date").removeAttribute("disabled");}}}
CAL.load_form=function(module_name,record,edit_all_recurrences,cal_event){CAL.disable_creating=true;var e;var to_open=true;if(module_name!="Meetings"&&module_name!="Calls"){to_open=false;}
CAL.load_form=function(module_name,record,edit_all_recurrences,cal_event){CAL.disable_creating=true;CAL.reset_edit_dialog();CAL.disable_buttons();var e;var to_open=true;if(module_name!="Meetings"&&module_name!="Calls"){to_open=false;}
if(module_name=="Tasks"){var url='index.php?to_pdf=1&module=Home&action=AdditionalDetailsRetrieve&bean='+cal_event.module+'&id='+cal_event.record;var body=SUGAR.language.translate('app_strings','LBL_LOADING_PAGE');$.ajax(url).done(function(data){SUGAR.util.globalEval(data);$('.modal-cal-tasks-edit .modal-body .container-fluid').html(result.body);}).fail(function(){$('.modal-cal-tasks-edit .modal-body .container-fluid').html(SUGAR.language.translate('app_strings','LBL_EMAIL_ERROR_GENERAL_TITLE'));}).always(function(){});$('.modal-cal-tasks-edit .modal-body .container-fluid').html(body);$('.modal-cal-tasks-edit').modal('show');$('#btn-view-task').unbind().click(function(){window.location.assign('index.php?module='+cal_event.module+'&action=DetailView&record='+cal_event.record);});$('#btn-tasks-full-form').unbind().click(function(){window.location.assign('index.php?module='+cal_event.module+'&action=EditView&record='+cal_event.record);});}else if(module_name=="FP_events"){var url='index.php?to_pdf=1&module=Home&action=AdditionalDetailsRetrieve&bean='+cal_event.module+'&id='+cal_event.record;var body=SUGAR.language.translate('app_strings','LBL_LOADING_PAGE');$.ajax(url).done(function(data){SUGAR.util.globalEval(data);$('.modal-cal-events-edit .modal-body .container-fluid').html(result.body);}).fail(function(){$('.modal-cal-events-edit .modal-body .container-fluid').html(SUGAR.language.translate('app_strings','LBL_EMAIL_ERROR_GENERAL_TITLE'));}).always(function(){});$('.modal-cal-events-edit .modal-body .container-fluid').html(body);$('.modal-cal-events-edit').modal('show');$('#btn-view-events').unbind().click(function(){window.location.assign('index.php?module='+cal_event.module+'&action=DetailView&record='+cal_event.record);});$('#btn-events-full-form').unbind().click(function(){window.location.assign('index.php?module='+cal_event.module+'&action=EditView&record='+cal_event.record);});}
if(to_open&&CAL.records_openable){CAL.get("form_content").style.display="none";CAL.disable_buttons();CAL.get("title-cal-edit").innerHTML=CAL.lbl_loading;CAL.repeat_tab_handle(module_name);ajaxStatus.showStatus(SUGAR.language.get('app_strings','LBL_LOADING'));params={};if(edit_all_recurrences){params={stay_on_tab:true};}
CAL.open_edit_dialog(params);CAL.get("record").value="";if(!edit_all_recurrences){edit_all_recurrences="";}

View file

@ -73,7 +73,7 @@
</tr>
<tr>
<td width="25%"><span>{MOD.LBL_EDIT_OPT_OUT}</span></td>
<td width="75%"><span><input name="is_optout" id=="is_optout" class="checkbox" type="checkbox" disabled {IS_OPTOUT_CHECKED}/></span></td>
<td width="75%"><span><input name="is_optout" id="is_optout" class="checkbox" type="checkbox" disabled {IS_OPTOUT_CHECKED}/></span></td>
</tr>
<tr>
<td width="25%"><span>{MOD.LBL_EDIT_TRACKER_URL}</span></span></td>
@ -89,4 +89,4 @@
</tr>
</table>
<!-- END: main -->
<!-- END: main -->

View file

@ -85,7 +85,7 @@ class MyPipelineBySalesStageDashlet extends DashletGenericChart
global $app_list_strings;
$selected_datax = array();
if (count($this->mypbss_sales_stages) > 0) {
if (isset($this->mypbss_sales_stages) && count($this->mypbss_sales_stages) > 0) {
foreach ($this->mypbss_sales_stages as $key) {
$selected_datax[] = $key;
}
@ -316,7 +316,7 @@ EOD;
$tempx = $user_sales_stage;
//set $datax using selected sales stage keys
if (count($tempx) > 0) {
if (isset($tempx) && count($tempx) > 0) {
foreach ($tempx as $key) {
$datax[$key] = $app_list_strings['sales_stage_dom'][$key];
array_push($selected_datax, $key);
@ -379,7 +379,7 @@ EOD;
" AND opportunities.date_closed >= ". DBManagerFactory::getInstance()->convert("'".$this->mypbss_date_start."'", 'date').
" AND opportunities.date_closed <= ". DBManagerFactory::getInstance()->convert("'".$this->mypbss_date_end."'", 'date') .
" AND opportunities.assigned_user_id = users.id AND opportunities.deleted=0 ";
if (count($this->mypbss_sales_stages) > 0) {
if (isset($this->mypbss_sales_stages) && count($this->mypbss_sales_stages) > 0) {
$query .= " AND opportunities.sales_stage IN ('" . implode("','", $this->mypbss_sales_stages) . "') ";
}
$query .= " GROUP BY opportunities.sales_stage ,users.user_name,opportunities.assigned_user_id";

View file

@ -136,7 +136,7 @@ class OpportunitiesByLeadSourceByOutcomeDashlet extends DashletGenericChart
$url_params = array();
if (count($this->lsbo_ids) > 0) {
if (isset($this->lsbo_ids) && count($this->lsbo_ids) > 0) {
$url_params['assigned_user_id'] = array_values($this->lsbo_ids);
}
@ -255,10 +255,10 @@ EOD;
$query = "SELECT lead_source,sales_stage,sum(amount_usdollar/1000) as total, ".
"count(*) as opp_count FROM opportunities ";
$query .= " WHERE opportunities.deleted=0 ";
if (count($this->lsbo_ids) > 0) {
if (isset($this->lsbo_ids) && count($this->lsbo_ids) > 0) {
$query .= "AND opportunities.assigned_user_id IN ('".implode("','", $this->lsbo_ids)."') ";
}
if (count($this->lsbo_lead_sources) > 0) {
if (isset($this->lsbo_lead_sources) && count($this->lsbo_lead_sources) > 0) {
$query .= "AND opportunities.lead_source IN ('".implode("','", $this->lsbo_lead_sources)."') ";
} else {
$query .= "AND opportunities.lead_source IN ('".implode("','", array_keys($GLOBALS['app_list_strings']['lead_source_dom']))."') ";

View file

@ -251,10 +251,10 @@ EOD;
$query = "SELECT lead_source,sum(amount_usdollar/1000) as total,count(*) as opp_count ".
"FROM opportunities ";
$query .= "WHERE opportunities.deleted=0 ";
if (count($this->pbls_ids) > 0) {
if (isset($this->pbls_ids) && count($this->pbls_ids) > 0) {
$query .= "AND opportunities.assigned_user_id IN ('".implode("','", $this->pbls_ids)."') ";
}
if (count($this->pbls_lead_sources) > 0) {
if (isset($this->pbls_lead_sources) && count($this->pbls_lead_sources) > 0) {
$query .= "AND opportunities.lead_source IN ('".implode("','", $this->pbls_lead_sources)."') ";
} else {
$query .= "AND opportunities.lead_source IN ('".implode("','", array_keys($GLOBALS['app_list_strings']['lead_source_dom']))."') ";

View file

@ -249,7 +249,7 @@ EOD;
$query .= " WHERE opportunities.date_closed >= ".DBManagerFactory::getInstance()->convert("'".$this->obm_date_start."'", 'date') .
" AND opportunities.date_closed <= ".DBManagerFactory::getInstance()->convert("'".$this->obm_date_end."'", 'date') .
" AND opportunities.deleted=0";
if (count($this->obm_ids) > 0) {
if (isset($this->obm_ids) && count($this->obm_ids) > 0) {
$query .= " AND opportunities.assigned_user_id IN ('" . implode("','", $this->obm_ids) . "')";
}
$query .= " GROUP BY sales_stage,".

View file

@ -269,7 +269,7 @@ EOD;
$tempx = $user_sales_stage;
//set $datax using selected sales stage keys
if (count($tempx) > 0) {
if (isset($tempx) && count($tempx) > 0) {
foreach ($tempx as $key) {
$datax[$key] = $app_list_strings['sales_stage_dom'][$key];
$selected_datax[] = $key;

View file

@ -814,6 +814,21 @@ class EmailsController extends SugarController
$this->bean->parent_name = $parent_name;
}
$arrayOfToNames = explode(", ", $this->bean->to_addrs_names);
$mailbox = BeanFactory::getBean('InboundEmail', $this->bean->mailbox_id);
if(count($arrayOfToNames) > 1){
foreach($arrayOfToNames as $name){
if($name !== $mailbox->email_user){
if(!empty($this->bean->cc_addrs_names)){
$this->bean->cc_addrs_names .= ', ' .$name;
} else {
$this->bean->cc_addrs_names = $name;
}
}
}
}
if ($mode === self::COMPOSE_BEAN_MODE_REPLY_TO || $mode === self::COMPOSE_BEAN_MODE_REPLY_TO_ALL) {
// Move email addresses from the "from" field to the "to" field
$this->bean->to_addrs = $this->bean->from_addr;

View file

@ -261,6 +261,9 @@
{rdelim}
{rdelim}{/if});
{rdelim});
$( "#emails_email_templates_name" ).change(function() {ldelim}
$.fn.EmailsComposeView.onTemplateChange()
{rdelim});
</script>
{/if}
</form>

View file

@ -1553,6 +1553,41 @@
});
};
$.fn.EmailsComposeView.onTemplateChange = function (args) {
var confirmed = function (args) {
var args = JSON.parse(args);
var form = $('[name="' + args.form_name + '"]');
$.post('index.php?entryPoint=emailTemplateData', {
emailTemplateId: args.name_to_value_array.emails_email_templates_idb
}, function (jsonResponse) {
var response = JSON.parse(jsonResponse);
$.fn.EmailsComposeView.loadAttachmentDataFromAjaxResponse(response);
$(form).find('[name="name"]').val(response.data.subject);
tinymce.activeEditor.setContent(response.data.body_from_html, {format: 'html'});
$.fn.EmailsComposeView.updateSignature();
});
set_return(args);
};
var mb = messageBox();
mb.setTitle(SUGAR.language.translate('Emails', 'LBL_CONFIRM_APPLY_EMAIL_TEMPLATE_TITLE'));
mb.setBody(SUGAR.language.translate('Emails', 'LBL_CONFIRM_APPLY_EMAIL_TEMPLATE_BODY'));
mb.show();
mb.on('ok', function () {
"use strict";
var id=$('#emails_email_templates_idb').val();
var name=$('#emails_email_templates_name').val();
args = JSON.stringify({"form_name":"ComposeView","name_to_value_array":{"emails_email_templates_idb": id,"emails_email_templates_name": name}})
confirmed(args);
mb.remove();
});
mb.on('cancel', function () {
"use strict";
mb.remove();
});
}
$.fn.EmailsComposeView.onParentSelect = function (args) {
set_return(args);
if (isValidEmail(args.name_to_value_array.email1)) {
@ -1574,13 +1609,14 @@
$.fn.EmailsComposeView.defaults = {
"tinyMceOptions": {
menubar: false,
toolbar: ['fontselect | fontsizeselect | bold italic underline | forecolor backcolor | styleselect | outdent indent'],
plugins: ['link'],
toolbar: ['fontselect | fontsizeselect | bold italic underline | forecolor backcolor | styleselect | outdent indent | link'],
formats: {
bold: {inline: 'b'},
italic: {inline: 'i'},
underline: {inline: 'u'}
},
convert_urls: true,
convert_urls: false,
relative_urls: false,
remove_script_host: false,
}

View file

@ -45,11 +45,16 @@ class ExternalOAuthConnectionController extends SugarController
{
public function action_EditView() {
$this->view = 'edit';
if (!empty($this->bean) && !empty($_REQUEST['type'])) {
if (empty($_REQUEST['type'])){
$_REQUEST['type'] = 'personal';
}
if (!empty($this->bean)) {
$this->bean->type = $_REQUEST['type'];
}
if (empty($_REQUEST['record']) && !empty($_REQUEST['type']) && $_REQUEST['type'] === 'personal') {
if (empty($_REQUEST['record']) && $_REQUEST['type'] === 'personal') {
$this->hasAccess = true;
return;
}

View file

@ -45,11 +45,17 @@ class ExternalOAuthProviderController extends SugarController
{
public function action_EditView() {
$this->view = 'edit';
if (!empty($this->bean) && !empty($_REQUEST['type'])) {
if (empty($_REQUEST['type'])){
$_REQUEST['type'] = 'personal';
}
if (!empty($this->bean)) {
$this->bean->type = $_REQUEST['type'];
}
if (empty($_REQUEST['record']) && !empty($_REQUEST['type']) && $_REQUEST['type'] === 'personal') {
if (empty($_REQUEST['record']) && $_REQUEST['type'] === 'personal') {
$this->hasAccess = true;
return;
}

View file

@ -57,6 +57,11 @@ class OAuth2Clients extends SugarBean
*/
public $redirect_uri;
/**
* @var string
*/
public $allowed_grant_type;
/**
* @var string
*/

View file

@ -76,7 +76,6 @@ if (!empty($_REQUEST['duplicateId'])) {
$focus->set_relationship('prospect_lists_prospects', $rel, true);
}
}
$focus->save();
}

View file

@ -12,8 +12,8 @@ class AssignGroups
//only process if action is Save (meaning a user has triggered this event and not the portal or automated process)
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'Save'
&& isset($sugar_config['securitysuite_popup_select']) && $sugar_config['securitysuite_popup_select'] == true
&& empty($bean->fetched_row['id']) && $bean->module_dir != "Users" && $bean->module_dir != "SugarFeed") {
&& isset($sugar_config['securitysuite_popup_select']) && $sugar_config['securitysuite_popup_select'] == true
&& empty($bean->fetched_row['id']) && $bean->module_dir != "Users" && $bean->module_dir != "SugarFeed") {
//Upload an attachment to an Email Template and save. If user with multi groups - popup select option
//it will redirect to notes instead of EmailTemplate and relationship will fail...check below to avoid
if (!empty($_REQUEST['module']) && $_REQUEST['module'] != $bean->module_dir) {
@ -26,7 +26,7 @@ class AssignGroups
//sanity check
if (in_array($bean->module_dir, array_keys($security_modules))) {
//add each group in securitygroup_list to new record
$rel_name = SecurityGroup::getLinkName($bean->module_dir,"SecurityGroups");
$rel_name = SecurityGroup::getLinkName($bean->module_dir, "SecurityGroups");
$bean->load_relationship($rel_name);
foreach ($_REQUEST['securitygroup_list'] as $group_id) {
@ -42,8 +42,8 @@ class AssignGroups
$_SESSION['securitysuite_error'] = $ss_mod_strings['LBL_ERROR_DUPLICATE'];
}
} elseif (isset($sugar_config['securitysuite_user_popup']) && $sugar_config['securitysuite_user_popup'] == true
&& empty($bean->fetched_row['id']) && $bean->module_dir == "Users"
&& isset($_REQUEST['action']) && $_REQUEST['action'] != 'SaveSignature') { //Bug: 589
&& empty($bean->fetched_row['id']) && $bean->module_dir == "Users"
&& isset($_REQUEST['action']) && $_REQUEST['action'] != 'SaveSignature') { //Bug: 589
//$_REQUEST['return_module'] = $bean->module_dir;
//$_REQUEST['return_action'] = "DetailView";
@ -55,9 +55,9 @@ class AssignGroups
$_SESSION['securitygroups_popup'] = array();
}
$_SESSION['securitygroups_popup'][] = array(
'module' => $bean->module_dir,
'id' => $bean->id
);
'module' => $bean->module_dir,
'id' => $bean->id
);
}
}
@ -69,9 +69,9 @@ class AssignGroups
}
/** //test user popup
//always have this loaded
echo '<script type="text/javascript" src="modules/SecurityGroups/javascript/popup_relate.js"></script>';
*/
* //always have this loaded
* echo '<script type="text/javascript" src="modules/SecurityGroups/javascript/popup_relate.js"></script>';
*/
global $sugar_config;
$action = null;
@ -94,14 +94,14 @@ class AssignGroups
}
if ((
//(isset($sugar_config['securitysuite_popup_select']) && $sugar_config['securitysuite_popup_select'] == true)
//||
//(isset($sugar_config['securitysuite_popup_select']) && $sugar_config['securitysuite_popup_select'] == true)
//||
($module == "Users" && isset($sugar_config['securitysuite_user_popup']) && $sugar_config['securitysuite_user_popup'] == true)
)
)
//&& isset($_SESSION['securitygroups_popup_'.$module]) && !empty($_SESSION['securitygroups_popup_'.$module])
&& !empty($_SESSION['securitygroups_popup'])
) {
//&& isset($_SESSION['securitygroups_popup_'.$module]) && !empty($_SESSION['securitygroups_popup_'.$module])
&& !empty($_SESSION['securitygroups_popup'])
) {
foreach ($_SESSION['securitygroups_popup'] as $popup_index => $popup) {
$record_id = $popup['id'];
$module = $popup['module'];
@ -111,7 +111,7 @@ class AssignGroups
if ($module == 'Users') {
$rel_name = "SecurityGroups";
} else {
$rel_name = SecurityGroup::getLinkName($module,"SecurityGroups");
$rel_name = SecurityGroup::getLinkName($module, "SecurityGroups");
}
//this only works if on the detail view of the record actually saved...
@ -144,13 +144,13 @@ EOQ;
LoggerManager::getLogger()->warn('Not defined module in request');
}
$no_mass_assign_list = array("Emails"=>"Emails","ACLRoles"=>"ACLRoles"); //,"Users"=>"Users");
$no_mass_assign_list = array("Emails" => "Emails", "ACLRoles" => "ACLRoles"); //,"Users"=>"Users");
//check if security suite enabled
$action = strtolower($action);
if (isset($module) && ($action == "list" || $action == "index" || $action == "listview")
&& (!isset($_REQUEST['search_form_only']) || $_REQUEST['search_form_only'] != true)
&& !array_key_exists($module, $no_mass_assign_list)
&& (!isset($_REQUEST['search_form_only']) || $_REQUEST['search_form_only'] != true)
&& !array_key_exists($module, $no_mass_assign_list)
) {
global $current_user;
if (is_admin($current_user) || ACLAction::getUserAccessLevel($current_user->id, "SecurityGroups", 'access') == ACL_ALLOW_ENABLED) {
@ -167,14 +167,14 @@ EOQ;
$form_header = get_form_header($current_module_strings['LBL_MASS_ASSIGN'], '', false);
$groups = $groupFocus->get_list("name", "", 0, -99, -99);
$options = array(""=>"");
$options = array("" => "");
foreach ($groups['list'] as $group) {
$options[$group->id] = $group->name;
}
$group_options = get_select_options_with_id($options, "");
$group_options = get_select_options_with_id($options, "");
$export_where = !empty($_SESSION['export_where']) ? $_SESSION['export_where'] : '';
$export_where_md5 = md5($export_where);
$export_where = !empty($_SESSION['export_where']) ? $_SESSION['export_where'] : '';
$export_where_md5 = md5($export_where);
$mass_assign = <<<EOQ
@ -238,12 +238,15 @@ function send_massassign(mode, no_record_txt, start_string, end_string, del) {
ar.push(document.MassUpdate.elements[wp].value);
}
}
if(document.MassAssign_SecurityGroups.uid.value != '') document.MassAssign_SecurityGroups.uid.value += ',';
document.MassAssign_SecurityGroups.uid.value += ar.join(',');
if(document.MassAssign_SecurityGroups.uid.value == '') {
if(document.MassUpdate.uid.value != '') {
document.MassUpdate.uid.value += ',';
document.MassUpdate.uid.value += ar.join(',');
document.MassAssign_SecurityGroups.uid.value = document.MassUpdate.uid.value;
if(document.MassAssign_SecurityGroups.uid.value == '') {
alert(no_record_txt);
return false;
}
}
}
break;
case 'entire':
var entireInput = document.createElement('input');

View file

@ -45,7 +45,8 @@ if (!defined('sugarEntry') || !sugarEntry) {
require_once('modules/Studio/TabGroups/TabGroupHelper.php');
TabGroupHelper::saveTabGroups($_POST);
$tg = new TabGroupHelper();
$tg->saveTabGroups($_POST);
ob_clean();
if (!empty($_POST['grouptab_lang'])) {
header('Location: index.php?module=Studio&action=TabGroups&lang='.$_POST['grouptab_lang']);

23
modules/SugarFeed/SugarFeed.php Executable file → Normal file
View file

@ -476,9 +476,26 @@ class SugarFeed extends Basic
$timedate->getInstance()->userTimezone();
$currentTime = $timedate->now();
$first = strtotime($currentTime);
$second = strtotime($startDate);
//Fix #9875 SugarFeed shows 0 seconds ago and negative interval for certain datetime formats
//Use proper user datetime format to convert datetime string to timestamp
$user_format=$timedate->get_date_time_format();
$first=date_create_from_format($user_format,$currentTime);
if(empty($first)){
LoggerManager::getLogger()->warn('SugarFeed getTimeLapse: Could not fetch currentTime ');
$first=0;
}
else{
$first=$first->getTimestamp();
}
$second=date_create_from_format($user_format,$startDate);
if(empty($second)){
LoggerManager::getLogger()->warn('SugarFeed getTimeLapse: Could not fetch startDate ');
$second=0;
}
else{
$second=$second->getTimestamp();
}
$seconds = $first - $second;
$minutes = $seconds / 60;

View file

@ -217,6 +217,25 @@ $dictionary['SurveyResponses'] = array(
'lhs_key' => 'id',
'relationship_type' => 'one-to-many',
),
// Fix Issue 8897 - Adding missing relationships to SurveyResponses and Contacts/Accounts
'surveyresponses_contacts' => array(
'rhs_module' => 'SurveyResponses',
'rhs_table' => 'surveyresponses',
'rhs_key' => 'contact_id',
'lhs_module' => 'Contacts',
'lhs_table' => 'contacts',
'lhs_key' => 'id',
'relationship_type' => 'one-to-many',
),
'surveyresponses_accounts' => array (
'rhs_module' => 'SurveyResponses',
'rhs_table' => 'surveyresponses',
'rhs_key' => 'account_id',
'lhs_module' => 'Accounts',
'lhs_table' => 'accounts',
'lhs_key' => 'id',
'relationship_type' => 'one-to-many',
),
),
'optimistic_locking' => true,
'unified_search' => true,

View file

@ -363,7 +363,7 @@ class SugarAuthenticate
*/
public function validateIP()
{
global $sugar_config;
global $sugar_config, $mod_strings;
// grab client ip address
$clientIP = query_client_ip();
$classCheck = 0;

View file

@ -3,5 +3,5 @@ if (!defined('sugarEntry') || !sugarEntry) {
die('Not A Valid Entry Point');
}
$suitecrm_version = '7.13.2';
$suitecrm_timestamp = '2023-03-02 12:00:00';
$suitecrm_version = '7.13.3';
$suitecrm_timestamp = '2023-04-24 12:00:00';