diff --git a/.github/SECURITY.md b/.github/SECURITY.md index 9d151e57a..eabe471e4 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -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 you’ll 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. diff --git a/Api/V8/Config/services/middlewares.php b/Api/V8/Config/services/middlewares.php index 5af7a7f65..6e9d8fcd0 100644 --- a/Api/V8/Config/services/middlewares.php +++ b/Api/V8/Config/services/middlewares.php @@ -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(), diff --git a/Api/V8/OAuth2/Entity/ClientEntity.php b/Api/V8/OAuth2/Entity/ClientEntity.php index be15bd712..cf33f3026 100644 --- a/Api/V8/OAuth2/Entity/ClientEntity.php +++ b/Api/V8/OAuth2/Entity/ClientEntity.php @@ -24,4 +24,9 @@ class ClientEntity implements ClientEntityInterface { $this->redirectUri = $uri; } + + public function setIsConfidential($confidential) + { + $this->isConfidential = $confidential; + } } diff --git a/Api/V8/OAuth2/Repository/ClientRepository.php b/Api/V8/OAuth2/Repository/ClientRepository.php index 355d1c010..08d24ca64 100644 --- a/Api/V8/OAuth2/Repository/ClientRepository.php +++ b/Api/V8/OAuth2/Repository/ClientRepository.php @@ -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; + } } diff --git a/README.md b/README.md index 0ae53a921..f0ab0a938 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ -# 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) diff --git a/composer.lock b/composer.lock index 07a4cc940..120d06aa6 100644 --- a/composer.lock +++ b/composer.lock @@ -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", diff --git a/files.md5 b/files.md5 index 2d325de2d..8acfd5151 100644 --- a/files.md5 +++ b/files.md5 @@ -1,5 +1,5 @@ '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', diff --git a/include/MassUpdate.php b/include/MassUpdate.php index b7e7f4bad..a75683748 100755 --- a/include/MassUpdate.php +++ b/include/MassUpdate.php @@ -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 = << 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 }); 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 = <<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]; diff --git a/include/export_utils.php b/include/export_utils.php index 04140ac2d..e218a2927 100755 --- a/include/export_utils.php +++ b/include/export_utils.php @@ -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']]) && diff --git a/include/generic/SugarWidgets/SugarWidgetSubPanelTopComposeEmailButton.php b/include/generic/SugarWidgets/SugarWidgetSubPanelTopComposeEmailButton.php index 7f7481abf..84c8e3f1f 100755 --- a/include/generic/SugarWidgets/SugarWidgetSubPanelTopComposeEmailButton.php +++ b/include/generic/SugarWidgets/SugarWidgetSubPanelTopComposeEmailButton.php @@ -101,13 +101,12 @@ class SugarWidgetSubPanelTopComposeEmailButton extends SugarWidgetSubPanelTopBut $emailUI = new EmailUI(); $emailUI->appendTick = false; - $button = ''; + $button = '
'; } return $button; diff --git a/include/javascript/EmailsComposeViewModal.js b/include/javascript/EmailsComposeViewModal.js index 986289fdd..ba769c0c9 100755 --- a/include/javascript/EmailsComposeViewModal.js +++ b/include/javascript/EmailsComposeViewModal.js @@ -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=$('
').appendTo(opts.contentSelector);composeBox.messageBox({"showHeader":false,"showFooter":false,"size":'lg'});composeBox.setBody('');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=$('
').appendTo(opts.contentSelector);composeBox.messageBox({"showHeader":false,"showFooter":false,"size":'lg'});composeBox.setBody('');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=$('
').appendTo(opts.contentSelector);composeBox.messageBox({"showHeader":false,"showFooter":false,"size":'lg'});composeBox.setBody('');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;i0){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)); \ No newline at end of file +$(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)); \ No newline at end of file diff --git a/include/javascript/sugar_3.js b/include/javascript/sugar_3.js index 9e5b5ed4e..114167bee 100755 --- a/include/javascript/sugar_3.js +++ b/include/javascript/sugar_3.js @@ -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(/&/gi,'&').replace(/</gi,'<').replace(/>/gi,'>').replace(/'/gi,'\'').replace(/"/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 30000000, - 'allowed_preview' => [ - 'pdf', - 'gif', - 'png', - 'jpeg', - 'jpg' - ], 'import_max_execution_time' => 3600, // 'use_php_code_json' => returnPhpJsonStatus(), 'verify_client_ip' => true, diff --git a/jssource/src_files/include/javascript/EmailsComposeViewModal.js b/jssource/src_files/include/javascript/EmailsComposeViewModal.js index 5f7d99eeb..45114418b 100644 --- a/jssource/src_files/include/javascript/EmailsComposeViewModal.js +++ b/jssource/src_files/include/javascript/EmailsComposeViewModal.js @@ -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')); }); diff --git a/jssource/src_files/include/javascript/sugar_3.js b/jssource/src_files/include/javascript/sugar_3.js index 31d7a678c..aaac9ed8d 100755 --- a/jssource/src_files/include/javascript/sugar_3.js +++ b/jssource/src_files/include/javascript/sugar_3.js @@ -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 ''; } /** diff --git a/jssource/src_files/modules/Calendar/Cal.js b/jssource/src_files/modules/Calendar/Cal.js index f04808a39..6aa65382f 100755 --- a/jssource/src_files/modules/Calendar/Cal.js +++ b/jssource/src_files/modules/Calendar/Cal.js @@ -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; diff --git a/lib/API/OAuth2/Entities/ClientEntity.php b/lib/API/OAuth2/Entities/ClientEntity.php index d4081e4c3..c2fc6d2ff 100644 --- a/lib/API/OAuth2/Entities/ClientEntity.php +++ b/lib/API/OAuth2/Entities/ClientEntity.php @@ -63,4 +63,9 @@ class ClientEntity implements ClientEntityInterface { $this->redirectUri = $uri; } + + public function setIsConfidential($confidential) + { + $this->isConfidential = $confidential; + } } diff --git a/lib/API/OAuth2/Repositories/ClientRepository.php b/lib/API/OAuth2/Repositories/ClientRepository.php index 200a0d250..8f4a099c1 100644 --- a/lib/API/OAuth2/Repositories/ClientRepository.php +++ b/lib/API/OAuth2/Repositories/ClientRepository.php @@ -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; + } } diff --git a/modules/AOW_Actions/FormulaCalculator.php b/modules/AOW_Actions/FormulaCalculator.php index 8b3973158..aae500b52 100644 --- a/modules/AOW_Actions/FormulaCalculator.php +++ b/modules/AOW_Actions/FormulaCalculator.php @@ -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; + } + } + } diff --git a/modules/AOW_Actions/actions/actionComputeField.php b/modules/AOW_Actions/actions/actionComputeField.php index c8e818782..47c426c5e 100644 --- a/modules/AOW_Actions/actions/actionComputeField.php +++ b/modules/AOW_Actions/actions/actionComputeField.php @@ -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 { diff --git a/modules/Calendar/Cal.js b/modules/Calendar/Cal.js index 49a28244e..fe563ae07 100755 --- a/modules/Calendar/Cal.js +++ b/modules/Calendar/Cal.js @@ -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="";} diff --git a/modules/CampaignTrackers/DetailView.html b/modules/CampaignTrackers/DetailView.html index da654bf76..08db5a904 100755 --- a/modules/CampaignTrackers/DetailView.html +++ b/modules/CampaignTrackers/DetailView.html @@ -73,7 +73,7 @@ {MOD.LBL_EDIT_OPT_OUT} - + {MOD.LBL_EDIT_TRACKER_URL} @@ -89,4 +89,4 @@ - \ No newline at end of file + diff --git a/modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.php b/modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.php index b4d8a8c2b..f6d96a0e3 100755 --- a/modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.php +++ b/modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.php @@ -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"; diff --git a/modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.php b/modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.php index 8bcdb5d96..653cb01ff 100755 --- a/modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.php +++ b/modules/Charts/Dashlets/OpportunitiesByLeadSourceByOutcomeDashlet/OpportunitiesByLeadSourceByOutcomeDashlet.php @@ -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']))."') "; diff --git a/modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.php b/modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.php index 055c8775c..f3627ecc8 100755 --- a/modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.php +++ b/modules/Charts/Dashlets/OpportunitiesByLeadSourceDashlet/OpportunitiesByLeadSourceDashlet.php @@ -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']))."') "; diff --git a/modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.php b/modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.php index 7dfcd67ed..6c12b2606 100755 --- a/modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.php +++ b/modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.php @@ -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,". diff --git a/modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.php b/modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.php index 6af098c52..dbb173ae0 100755 --- a/modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.php +++ b/modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.php @@ -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; diff --git a/modules/Emails/EmailsController.php b/modules/Emails/EmailsController.php index 4ef5353ff..58b77c9a7 100644 --- a/modules/Emails/EmailsController.php +++ b/modules/Emails/EmailsController.php @@ -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; diff --git a/modules/Emails/include/ComposeView/ComposeView.tpl b/modules/Emails/include/ComposeView/ComposeView.tpl index c95b0c8ba..0820d8474 100644 --- a/modules/Emails/include/ComposeView/ComposeView.tpl +++ b/modules/Emails/include/ComposeView/ComposeView.tpl @@ -261,6 +261,9 @@ {rdelim} {rdelim}{/if}); {rdelim}); + $( "#emails_email_templates_name" ).change(function() {ldelim} + $.fn.EmailsComposeView.onTemplateChange() + {rdelim}); {/if} diff --git a/modules/Emails/include/ComposeView/EmailsComposeView.js b/modules/Emails/include/ComposeView/EmailsComposeView.js index 0f6197b53..549afbe90 100644 --- a/modules/Emails/include/ComposeView/EmailsComposeView.js +++ b/modules/Emails/include/ComposeView/EmailsComposeView.js @@ -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, } diff --git a/modules/ExternalOAuthConnection/controller.php b/modules/ExternalOAuthConnection/controller.php index bd645bd5a..942a875d7 100644 --- a/modules/ExternalOAuthConnection/controller.php +++ b/modules/ExternalOAuthConnection/controller.php @@ -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; } diff --git a/modules/ExternalOAuthProvider/controller.php b/modules/ExternalOAuthProvider/controller.php index 1e0937c51..b93f6e135 100644 --- a/modules/ExternalOAuthProvider/controller.php +++ b/modules/ExternalOAuthProvider/controller.php @@ -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; } diff --git a/modules/OAuth2Clients/OAuth2Clients.php b/modules/OAuth2Clients/OAuth2Clients.php index f57724635..a2b0677ef 100644 --- a/modules/OAuth2Clients/OAuth2Clients.php +++ b/modules/OAuth2Clients/OAuth2Clients.php @@ -57,6 +57,11 @@ class OAuth2Clients extends SugarBean */ public $redirect_uri; + /** + * @var string + */ + public $allowed_grant_type; + /** * @var string */ diff --git a/modules/ProspectLists/Save.php b/modules/ProspectLists/Save.php index ceebd4a0c..9f746e8a3 100755 --- a/modules/ProspectLists/Save.php +++ b/modules/ProspectLists/Save.php @@ -76,7 +76,6 @@ if (!empty($_REQUEST['duplicateId'])) { $focus->set_relationship('prospect_lists_prospects', $rel, true); } } - $focus->save(); } diff --git a/modules/SecurityGroups/AssignGroups.php b/modules/SecurityGroups/AssignGroups.php index 430a8ec0c..cfff7a64f 100755 --- a/modules/SecurityGroups/AssignGroups.php +++ b/modules/SecurityGroups/AssignGroups.php @@ -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 ''; - */ + * //always have this loaded + * echo ''; + */ 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 = <<saveTabGroups($_POST); ob_clean(); if (!empty($_POST['grouptab_lang'])) { header('Location: index.php?module=Studio&action=TabGroups&lang='.$_POST['grouptab_lang']); diff --git a/modules/SugarFeed/SugarFeed.php b/modules/SugarFeed/SugarFeed.php old mode 100755 new mode 100644 index a81a8a29b..18fa3c84e --- a/modules/SugarFeed/SugarFeed.php +++ b/modules/SugarFeed/SugarFeed.php @@ -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; diff --git a/modules/SurveyResponses/vardefs.php b/modules/SurveyResponses/vardefs.php index 58e550909..3be481ec7 100644 --- a/modules/SurveyResponses/vardefs.php +++ b/modules/SurveyResponses/vardefs.php @@ -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, diff --git a/modules/Users/authentication/SugarAuthenticate/SugarAuthenticate.php b/modules/Users/authentication/SugarAuthenticate/SugarAuthenticate.php index 50170e164..087a2f11e 100755 --- a/modules/Users/authentication/SugarAuthenticate/SugarAuthenticate.php +++ b/modules/Users/authentication/SugarAuthenticate/SugarAuthenticate.php @@ -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; diff --git a/suitecrm_version.php b/suitecrm_version.php index b97e71b40..87ccf62e7 100755 --- a/suitecrm_version.php +++ b/suitecrm_version.php @@ -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';