mirror of
https://github.com/SuiteCRM/SuiteCRM-Core.git
synced 2025-09-12 23:23:49 +08:00
Merge next into suite 8
Merge commit '5fa70e2794
' into release/8.0.4
# Conflicts:
# public/legacy/suitecrm_version.php
This commit is contained in:
commit
63b969478d
47 changed files with 824 additions and 137 deletions
4
public/legacy/.github/ISSUE_TEMPLATE.md
vendored
4
public/legacy/.github/ISSUE_TEMPLATE.md
vendored
|
@ -1,7 +1,9 @@
|
|||
<!--- Provide a general summary of the issue in the **Title** above -->
|
||||
<!--- Before you open an issue, please check if a similar issue already exists or has been closed before. --->
|
||||
<!--- If you have discovered a security risk please report it by emailing 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. --->
|
||||
|
||||
<!--- Please be aware that as of the 31st January 2022 we no longer support 7.10.x.
|
||||
New issues referring to 7.10.x will only be valid if applicable to 7.12.x and above.
|
||||
If your issue is still applicable in 7.12.x, please create the issue following the template below -->
|
||||
#### Issue
|
||||
<!--- Provide a more detailed introduction to the issue itself, and why you consider it to be a bug -->
|
||||
<!--- Ensure that all code ``` is surrounded ``` by triple back quotes. This can also be done over multiple lines -->
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
<!--- Provide a general summary of your changes in the Title above -->
|
||||
<!--- Please be aware that as of the 31st January 2022 we no longer support 7.10.x.
|
||||
New PRs to hotfix-7.10.x will be invalid. If your fix is still applicable to 7.12.x,
|
||||
please create the pull request to the hotfix branch accordingly. -->
|
||||
|
||||
|
||||
## Description
|
||||
<!--- Describe your changes in detail -->
|
||||
|
|
|
@ -44,7 +44,14 @@ class Filter
|
|||
unset($params['operator']);
|
||||
}
|
||||
|
||||
$params = $this->addDeletedParameter($params);
|
||||
$deleted = false;
|
||||
if (isset($params['deleted'])) {
|
||||
if (isset($params['deleted']['eq'])) {
|
||||
$deleted = ($params['deleted']['eq'] == 1);
|
||||
}
|
||||
|
||||
unset($params['deleted']);
|
||||
}
|
||||
|
||||
$where = [];
|
||||
foreach ($params as $field => $expr) {
|
||||
|
@ -75,12 +82,25 @@ class Filter
|
|||
}
|
||||
}
|
||||
|
||||
return implode(sprintf(' %s ', $operator), $where);
|
||||
if (empty($where)) {
|
||||
return sprintf(
|
||||
"%s.deleted = '%d'",
|
||||
$bean->getTableName(),
|
||||
$deleted
|
||||
);
|
||||
}
|
||||
|
||||
return sprintf(
|
||||
"(%s) AND %s.deleted = '%d'",
|
||||
implode(sprintf(' %s ', $operator), $where),
|
||||
$bean->getTableName(),
|
||||
$deleted
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Only return deleted records if they were explicitly requested
|
||||
*
|
||||
* @deprecated
|
||||
* @param array $params
|
||||
* @return array
|
||||
*/
|
||||
|
|
249
public/legacy/ModuleInstall/ExtensionManager.php
Normal file
249
public/legacy/ModuleInstall/ExtensionManager.php
Normal file
|
@ -0,0 +1,249 @@
|
|||
<?php
|
||||
|
||||
namespace SuiteCRM\ModuleInstall;
|
||||
|
||||
use \LoggerManager;
|
||||
|
||||
/**
|
||||
* Class ExtensionManager
|
||||
*/
|
||||
class ExtensionManager
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected static $moduleList = [];
|
||||
|
||||
/**
|
||||
* @var
|
||||
*/
|
||||
protected static $logger;
|
||||
|
||||
/**
|
||||
* Checks if authenticated and dies if not.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected static function handleAuth()
|
||||
{
|
||||
if (!defined('sugarEntry') || !sugarEntry) {
|
||||
die('Not A Valid Entry Point');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the static module and extension lists.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected static function initialise()
|
||||
{
|
||||
static::$moduleList = get_module_dir_list();
|
||||
static::$logger = LoggerManager::getLogger();
|
||||
}
|
||||
|
||||
/**
|
||||
* Compiles source files for given extension to targeted file applying any given filters.
|
||||
*
|
||||
* @param string $extension Name of Extension i.e. 'Language'
|
||||
* @param string $targetFileName Name of target file
|
||||
* @param string $filter To filter file names such as language prefixes
|
||||
* @param bool $applicationOnly Whether or not to only compile application extensions
|
||||
* @return void
|
||||
*/
|
||||
public static function compileExtensionFiles(
|
||||
$extension,
|
||||
$targetFileName,
|
||||
$filter = '',
|
||||
$applicationOnly = false
|
||||
) {
|
||||
static::handleAuth();
|
||||
static::initialise();
|
||||
|
||||
if ($extension === 'Language' && strpos($targetFileName, $filter) !== 0) {
|
||||
$targetFileName = $filter . $targetFileName;
|
||||
}
|
||||
|
||||
if (!$applicationOnly) {
|
||||
static::compileModuleExtensions($extension, $targetFileName, $filter);
|
||||
}
|
||||
|
||||
static::compileApplicationExtensions($extension, $targetFileName, $filter);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $extension
|
||||
* @param $targetFileName
|
||||
* @param string $filter
|
||||
* @return void
|
||||
*/
|
||||
protected static function compileApplicationExtensions(
|
||||
$extension,
|
||||
$targetFileName,
|
||||
$filter = ''
|
||||
) {
|
||||
static::$logger->{'debug'}("Merging application files for $targetFileName in $extension");
|
||||
|
||||
$extensionContents = '<?php' . PHP_EOL . '// WARNING: The contents of this file are auto-generated' . PHP_EOL;
|
||||
$extPath = "application/Ext/$extension";
|
||||
$moduleInstall = "custom/Extension/$extPath";
|
||||
$shouldSave = false;
|
||||
|
||||
if (is_dir($moduleInstall)) {
|
||||
$dir = dir($moduleInstall);
|
||||
|
||||
while ($entry = $dir->read()) {
|
||||
if (static::shouldSkipFile($entry, $moduleInstall, $filter)) {
|
||||
continue;
|
||||
}
|
||||
$shouldSave = true;
|
||||
$file = file_get_contents("$moduleInstall/$entry");
|
||||
$extensionContents .= PHP_EOL . static::removePhpTagsFromString($file);
|
||||
}
|
||||
}
|
||||
|
||||
if ($shouldSave) {
|
||||
static::saveFile($extPath, $targetFileName, $extensionContents);
|
||||
return;
|
||||
}
|
||||
|
||||
static::unlinkFile($extPath, $targetFileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $extension
|
||||
* @param $targetFileName
|
||||
* @param string $filter
|
||||
* @return void
|
||||
*/
|
||||
protected static function compileModuleExtensions(
|
||||
$extension,
|
||||
$targetFileName,
|
||||
$filter = ''
|
||||
) {
|
||||
static::$logger->{'debug'}(
|
||||
self::class . "::compileExtensionFiles() : Merging module files in " .
|
||||
"custom/Extension/modules/<module>/$extension to custom/modules/<module>/$extension/$targetFileName"
|
||||
);
|
||||
|
||||
foreach (static::$moduleList as $module) {
|
||||
$extensionContents = '<?php'
|
||||
. PHP_EOL
|
||||
. '// WARNING: The contents of this file are auto-generated'
|
||||
. PHP_EOL;
|
||||
|
||||
$extPath = "modules/$module/Ext/$extension";
|
||||
$moduleInstall = "custom/Extension/$extPath";
|
||||
$shouldSave = false;
|
||||
|
||||
if (is_dir($moduleInstall)) {
|
||||
$dir = dir($moduleInstall);
|
||||
$shouldSave = true;
|
||||
$override = [];
|
||||
|
||||
while ($entry = $dir->read()) {
|
||||
if (static::shouldSkipFile($entry, $moduleInstall, $filter)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strpos($entry, '_override') === 0) {
|
||||
$override[] = $entry;
|
||||
continue;
|
||||
}
|
||||
|
||||
$file = file_get_contents("$moduleInstall/$entry");
|
||||
static::$logger->{'debug'}(
|
||||
self::class . "->compileExtensionFiles(): found {$moduleInstall}{$entry}"
|
||||
);
|
||||
|
||||
$extensionContents .= PHP_EOL . static::removePhpTagsFromString($file);
|
||||
}
|
||||
|
||||
foreach ($override as $entry) {
|
||||
$file = file_get_contents("$moduleInstall/$entry");
|
||||
$extensionContents .= PHP_EOL . static::removePhpTagsFromString($file);
|
||||
}
|
||||
}
|
||||
|
||||
if ($shouldSave) {
|
||||
static::saveFile($extPath, $targetFileName, $extensionContents);
|
||||
continue;
|
||||
}
|
||||
|
||||
static::unlinkFile($extPath, $targetFileName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $string
|
||||
* @return string
|
||||
*/
|
||||
protected static function removePhpTagsFromString($string)
|
||||
{
|
||||
return str_replace(
|
||||
['<?php', '?>', '<?PHP', '<?'],
|
||||
'',
|
||||
$string
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $entry
|
||||
* @param $moduleInstall
|
||||
* @param $filter
|
||||
* @return bool
|
||||
*/
|
||||
protected static function shouldSkipFile(
|
||||
$entry,
|
||||
$moduleInstall,
|
||||
$filter
|
||||
) {
|
||||
if ($entry === '.' || $entry === '..' || strtolower(substr($entry, -4)) !== '.php') {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!is_file("$moduleInstall/$entry")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!empty($filter) && substr_count($entry, $filter) <= 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $extPath
|
||||
* @param string $targetFileName
|
||||
* @param string $extensionContents
|
||||
* @return void
|
||||
*/
|
||||
protected static function saveFile(
|
||||
$extPath,
|
||||
$targetFileName,
|
||||
$extensionContents
|
||||
) {
|
||||
if (!file_exists("custom/$extPath")) {
|
||||
mkdir_recursive("custom/$extPath", true);
|
||||
}
|
||||
|
||||
$extensionContents .= PHP_EOL;
|
||||
|
||||
$out = sugar_fopen("custom/$extPath/$targetFileName", 'wb');
|
||||
fwrite($out, $extensionContents);
|
||||
fclose($out);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $extPath
|
||||
* @param $targetFileName
|
||||
* @return void
|
||||
*/
|
||||
protected static function unlinkFile($extPath, $targetFileName)
|
||||
{
|
||||
if (file_exists("custom/$extPath/$targetFileName")) {
|
||||
unlink("custom/$extPath/$targetFileName");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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.12.3
|
||||
# SuiteCRM 7.12.5
|
||||
|
||||
[](https://github.com/salesagility/suitecrm/blob/hotfix/LICENSE.txt)
|
||||
[](https://github.com/salesagility/SuiteCRM-Core/issues)
|
||||
|
|
|
@ -380,6 +380,11 @@ class SugarBean
|
|||
*/
|
||||
public $in_save;
|
||||
|
||||
/**
|
||||
* @var array $bean_fields_to_save
|
||||
*/
|
||||
public $bean_fields_to_save;
|
||||
|
||||
/**
|
||||
* @var integer $logicHookDepth
|
||||
*/
|
||||
|
@ -2506,6 +2511,70 @@ class SugarBean
|
|||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves only the listed fields. Does not create record, existing records only.
|
||||
* @param array $fieldToSave
|
||||
* @return void
|
||||
*/
|
||||
public function saveFields(array $fieldToSave): void
|
||||
{
|
||||
global $current_user, $action, $timedate;
|
||||
|
||||
if (empty($this->id) || $this->new_with_id || empty($fieldToSave)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->in_save = true;
|
||||
|
||||
// cn: SECURITY - strip XSS potential vectors
|
||||
$this->cleanBean();
|
||||
|
||||
// This is used so custom/3rd-party code can be upgraded with fewer issues,
|
||||
// this will be removed in a future release
|
||||
$this->fixUpFormatting();
|
||||
|
||||
$isUpdate = true;
|
||||
|
||||
$this->bean_fields_to_save = $fieldToSave;
|
||||
|
||||
if (empty($this->date_modified) || $this->update_date_modified) {
|
||||
$this->date_modified = $timedate->nowDb();
|
||||
$this->bean_fields_to_save[] = 'date_modified';
|
||||
}
|
||||
|
||||
$this->_checkOptimisticLocking($action, $isUpdate);
|
||||
|
||||
if (!empty($this->modified_by_name)) {
|
||||
$this->old_modified_by_name = $this->modified_by_name;
|
||||
}
|
||||
|
||||
if ($this->update_modified_by) {
|
||||
$this->modified_user_id = 1;
|
||||
$this->bean_fields_to_save[] = 'modified_user_id';
|
||||
|
||||
if (!empty($current_user)) {
|
||||
$this->modified_user_id = $current_user->id;
|
||||
|
||||
$this->modified_by_name = $current_user->user_name;
|
||||
$this->bean_fields_to_save[] = 'modified_by_name';
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->deleted != 1) {
|
||||
$this->deleted = 0;
|
||||
}
|
||||
|
||||
if (isset($this->custom_fields)) {
|
||||
$this->custom_fields->bean = $this;
|
||||
$this->custom_fields->save($isUpdate);
|
||||
}
|
||||
|
||||
$this->db->update($this);
|
||||
|
||||
$this->bean_fields_to_save = null;
|
||||
$this->in_save = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleans char, varchar, text, etc. fields of XSS type materials
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
// created: 2022-01-26 17:00:00
|
||||
// created: 2022-03-01 17:00:00
|
||||
$md5_string = array (
|
||||
'./Api/Core/Config/ApiConfig.php' => '69a1e7b3d7755a2a63499a16ddae81cf',
|
||||
'./Api/Core/Config/slim.php' => 'b134e68765e6a1403577e2a5a06322b8',
|
||||
|
@ -40,7 +40,7 @@ $md5_string = array (
|
|||
'./Api/V8/JsonApi/Helper/AttributeObjectHelper.php' => '8c2e2f889cefdc7912fd62da3e6a6f71',
|
||||
'./Api/V8/JsonApi/Helper/PaginationObjectHelper.php' => 'dbeb8f36cc7b70ff9459443c26bdfb70',
|
||||
'./Api/V8/JsonApi/Helper/RelationshipObjectHelper.php' => '6681a3fc26e420f12875d4239532946e',
|
||||
'./Api/V8/JsonApi/Repository/Filter.php' => 'cc024de98508d60c0d091a58a49fa879',
|
||||
'./Api/V8/JsonApi/Repository/Filter.php' => '21279c505e18aacd9f6aea51cc62a3bc',
|
||||
'./Api/V8/JsonApi/Repository/Sort.php' => '7e9fb4704a056bc944840def1482042d',
|
||||
'./Api/V8/JsonApi/Response/AttributeResponse.php' => '84318e63e42f0062c8f8231fd4c230d5',
|
||||
'./Api/V8/JsonApi/Response/DataResponse.php' => '08239b06a911f9d0bd46a28a28d11eda',
|
||||
|
@ -101,6 +101,7 @@ $md5_string = array (
|
|||
'./Api/index.php' => 'c69f9b5950f7c42e8f9b73e1eb5e7e49',
|
||||
'./HandleAjaxCall.php' => '954cebdd8ea2ab1e5c03658b184322fd',
|
||||
'./LICENSE.txt' => 'd3f150e4a5bed444763ebe8a81742a95',
|
||||
'./ModuleInstall/ExtensionManager.php' => 'e9699caa01beb5c4fdae7cc9c8cc4bc6',
|
||||
'./ModuleInstall/ModuleInstaller.php' => '526a3e11024b84f3602f9857d69a8e47',
|
||||
'./ModuleInstall/ModuleScanner.php' => '5bd029e1955c5c243ce4cc567cc99367',
|
||||
'./ModuleInstall/PackageManager/ListViewPackages.php' => 'dd40ddc497010be809cb03c63499ac4f',
|
||||
|
@ -115,7 +116,7 @@ $md5_string = array (
|
|||
'./ModuleInstall/PackageManager/tpls/PackageManagerLicense.tpl' => 'df5e267d1df5ce08fb9406e42d5b4816',
|
||||
'./ModuleInstall/PackageManager/tpls/PackageManagerScripts.tpl' => '98e396c0aa57329731fda19c790fffb2',
|
||||
'./ModuleInstall/extensions.php' => '094f4650261f6efbab1b90b119829388',
|
||||
'./README.md' => 'b9d83b3570f46a4e80c328aaf7e184b6',
|
||||
'./README.md' => 'b9189e1dc12fb6ee741b6057b9e70147',
|
||||
'./RoboFile.php' => '045b82c1df69553824d0e4ffcce6e03c',
|
||||
'./SugarSecurity.php' => '47e316b2d408e8c5192c8ea4a4f921b3',
|
||||
'./TreeData.php' => '32873e20cb5fd33f9d1cdaf18c3cac5c',
|
||||
|
@ -519,7 +520,7 @@ $md5_string = array (
|
|||
'./data/Relationships/One2OneRelationship.php' => 'c46d3067d5651fbc928763600d5e1a51',
|
||||
'./data/Relationships/RelationshipFactory.php' => '98a46e44186f2d2db23be9b894a4f1e2',
|
||||
'./data/Relationships/SugarRelationship.php' => 'a71b96492ee7457826fc91a2356c4ebd',
|
||||
'./data/SugarBean.php' => 'd8544e7bffbd4eeea20053f52c5514bd',
|
||||
'./data/SugarBean.php' => 'ccf600118e4ad9437e82efb376443ea4',
|
||||
'./deprecated.php' => 'f5f507fd6314f38d29c97e2cc2c62239',
|
||||
'./dictionary.php' => 'b7c1370fb75a2940c04db74627c4462c',
|
||||
'./download.php' => '1d337efcbfc68d524faab8c4460e107a',
|
||||
|
@ -699,7 +700,7 @@ $md5_string = array (
|
|||
'./include/SearchForm/tpls/header.tpl' => '2d1c49e167dbeb93e8e03ec79c1fec2c',
|
||||
'./include/SearchForm/tpls/headerPopup.tpl' => '49f913824175dafd993fbc8a1bf7923c',
|
||||
'./include/Services/Batch/BatchJob.php' => 'bada8d2023e3824673b3a709a54e76f7',
|
||||
'./include/Services/NormalizeRecords/NormalizeRecords.php' => 'a0d64b3a4d41c72d4f00dad0b0d62f7d',
|
||||
'./include/Services/NormalizeRecords/NormalizeRecords.php' => '0daac688a03ca6212dee84f6411a8b30',
|
||||
'./include/Services/NormalizeRecords/NormalizeRecordsSchedulerJob.php' => '8931bcef83a853868bd8f0dc934818d1',
|
||||
'./include/Smarty/plugins/block.minify.php' => 'a4a8771c5a8a48c7ab030b0b552957dd',
|
||||
'./include/Smarty/plugins/block.nocache.php' => '66bb941778de43b9e52d06a47becb9f5',
|
||||
|
@ -851,7 +852,7 @@ $md5_string = array (
|
|||
'./include/SugarDependentDropdown/javascript/SugarDependentDropdown.js' => '14748d0133b9731b97c11b95e3713489',
|
||||
'./include/SugarDependentDropdown/metadata/dependentDropdown.php' => 'deb131d92c6a4447d8265600ba46e9b2',
|
||||
'./include/SugarEmailAddress/SugarEmailAddress.js' => 'def2d76e0bee474993ae52ce8bafe7c0',
|
||||
'./include/SugarEmailAddress/SugarEmailAddress.php' => '141b5619a3476eaef690ae6adba2a126',
|
||||
'./include/SugarEmailAddress/SugarEmailAddress.php' => 'aaf058b834446b2ca595aa957e7d958e',
|
||||
'./include/SugarEmailAddress/getEmailAddressWidget.php' => '732df9ab640f7e9713d81a2a2c5579d0',
|
||||
'./include/SugarEmailAddress/templates/forDetailView.tpl' => 'f40f05d1278c144c7e7fd4a1e9e77eb4',
|
||||
'./include/SugarEmailAddress/templates/forDuplicatesView.tpl' => '99609f76277d97556395e7dc3923c402',
|
||||
|
@ -1032,7 +1033,7 @@ $md5_string = array (
|
|||
'./include/SugarLogger/SugarLogger.php' => '6d9af5c4188da26af4e791ec168c3cf6',
|
||||
'./include/SugarOAuthServer.php' => 'c0f2ca51199ee2876bcfcdd82f47875d',
|
||||
'./include/SugarOauth.php' => '2911b35f051569a701eecb9d53f23597',
|
||||
'./include/SugarObjects/LanguageManager.php' => 'a2bae88124926a27721ce4d6f1e9bd50',
|
||||
'./include/SugarObjects/LanguageManager.php' => 'a8906e64d8e063305a02b5f8763dfdef',
|
||||
'./include/SugarObjects/SugarConfig.php' => '8d4e3692d1ae8d49de22c4d27690808d',
|
||||
'./include/SugarObjects/SugarRegistry.php' => '8a694257c940b967209750983849a49d',
|
||||
'./include/SugarObjects/SugarSession.php' => '43948517d3dc23cc227474220a1fe06e',
|
||||
|
@ -1063,10 +1064,11 @@ $md5_string = array (
|
|||
'./include/SugarObjects/templates/basic/metadata/detailviewdefs.php' => '5e50674a38a33a6a32e0ccaf452901cf',
|
||||
'./include/SugarObjects/templates/basic/metadata/editviewdefs.php' => 'a72fc3bcb6c8d3af8c7e2fd5a16b449e',
|
||||
'./include/SugarObjects/templates/basic/metadata/listviewdefs.php' => '12c67a104a6f959be11749ba807adf8a',
|
||||
'./include/SugarObjects/templates/basic/metadata/metafiles.php' => '5dc7c77d1e65d8f0e5dafa6f5d4b3969',
|
||||
'./include/SugarObjects/templates/basic/metadata/metafiles.php' => '80e1c107fcf93fe0a78cf5dd7146b3f5',
|
||||
'./include/SugarObjects/templates/basic/metadata/popupdefs.php' => '853844b094d4dfe9a29d59759b21ce1b',
|
||||
'./include/SugarObjects/templates/basic/metadata/quickcreatedefs.php' => '4b0e405788feef127942e060963a7ee8',
|
||||
'./include/SugarObjects/templates/basic/metadata/searchdefs.php' => '94bf8c5a3bbffdfb32a1415dd9328587',
|
||||
'./include/SugarObjects/templates/basic/metadata/subpaneldefs.php' => 'decf6423acb6b44f331f9f8b54c19ff0',
|
||||
'./include/SugarObjects/templates/basic/metadata/subpanels/default.php' => 'eef3e143d70cb857fdc15b0014bcbf2d',
|
||||
'./include/SugarObjects/templates/basic/vardefs.php' => '0c874ef332c71fca9a1255b24ff3a9c8',
|
||||
'./include/SugarObjects/templates/company/Company.php' => 'b39fc86fb36507f7eb9dcaa95e58e295',
|
||||
|
@ -1085,10 +1087,11 @@ $md5_string = array (
|
|||
'./include/SugarObjects/templates/company/metadata/detailviewdefs.php' => '6b9f79584faeb9de6b3ea8e1b7773390',
|
||||
'./include/SugarObjects/templates/company/metadata/editviewdefs.php' => '9149a6f92ca93c9f77d6dcfa74b36f6a',
|
||||
'./include/SugarObjects/templates/company/metadata/listviewdefs.php' => 'ceae1760bc12932b69ab3f35f68f1998',
|
||||
'./include/SugarObjects/templates/company/metadata/metafiles.php' => '5dc7c77d1e65d8f0e5dafa6f5d4b3969',
|
||||
'./include/SugarObjects/templates/company/metadata/metafiles.php' => '80e1c107fcf93fe0a78cf5dd7146b3f5',
|
||||
'./include/SugarObjects/templates/company/metadata/popupdefs.php' => 'e59bf2a176a15e758c982d110b876ab3',
|
||||
'./include/SugarObjects/templates/company/metadata/quickcreatedefs.php' => '26986647ae09963d834ca32deedf04c7',
|
||||
'./include/SugarObjects/templates/company/metadata/searchdefs.php' => '32412c1a5d2bec1928b8c1e750308e25',
|
||||
'./include/SugarObjects/templates/company/metadata/subpaneldefs.php' => '50acf29d6c53bd5a58dac8b21971d94b',
|
||||
'./include/SugarObjects/templates/company/metadata/subpanels/default.php' => 'd572c5b3d3492d77bc86949f62fb9a5e',
|
||||
'./include/SugarObjects/templates/company/vardefs.php' => 'e8c82088efe99f717f63a02b5dc83b29',
|
||||
'./include/SugarObjects/templates/file/File.php' => 'ea3b3d8394cfac726b77e699597c6370',
|
||||
|
@ -1109,9 +1112,10 @@ $md5_string = array (
|
|||
'./include/SugarObjects/templates/file/metadata/detailviewdefs.php' => '38ba4302edc39bde885cd3fbd23cef46',
|
||||
'./include/SugarObjects/templates/file/metadata/editviewdefs.php' => '4e01916bccc26dd18213c486af79339f',
|
||||
'./include/SugarObjects/templates/file/metadata/listviewdefs.php' => 'ba627c916655ab0e7086aaafba0a2278',
|
||||
'./include/SugarObjects/templates/file/metadata/metafiles.php' => '30b981844f4f61f7120cc6fd71e6df2b',
|
||||
'./include/SugarObjects/templates/file/metadata/metafiles.php' => 'c44b4a1bae97f1d29608af2aaf3e931d',
|
||||
'./include/SugarObjects/templates/file/metadata/quickcreatedefs.php' => '6d473036b76f6d6fcc6bf754c8d28748',
|
||||
'./include/SugarObjects/templates/file/metadata/searchdefs.php' => '968d0e10883675aae697ac2a4915bfcd',
|
||||
'./include/SugarObjects/templates/file/metadata/subpaneldefs.php' => 'decf6423acb6b44f331f9f8b54c19ff0',
|
||||
'./include/SugarObjects/templates/file/metadata/subpanels/default.php' => '1843a1eea57d11427483b4e8760a9c8e',
|
||||
'./include/SugarObjects/templates/file/vardefs.php' => 'b9cd2c914907a6d18c30117a0ac07b66',
|
||||
'./include/SugarObjects/templates/file/views/view.edit.php' => 'c6ad729501b57cb2d1c567277a706ee2',
|
||||
|
@ -1133,10 +1137,11 @@ $md5_string = array (
|
|||
'./include/SugarObjects/templates/issue/metadata/detailviewdefs.php' => '3f99f9fd8ae0b8fc67b635e33b2c69e3',
|
||||
'./include/SugarObjects/templates/issue/metadata/editviewdefs.php' => 'b0df2be5daf35ad78b51a1bb085e2c36',
|
||||
'./include/SugarObjects/templates/issue/metadata/listviewdefs.php' => 'fdfc52d80121c3bb7b769955abefd892',
|
||||
'./include/SugarObjects/templates/issue/metadata/metafiles.php' => '5dc7c77d1e65d8f0e5dafa6f5d4b3969',
|
||||
'./include/SugarObjects/templates/issue/metadata/metafiles.php' => '80e1c107fcf93fe0a78cf5dd7146b3f5',
|
||||
'./include/SugarObjects/templates/issue/metadata/popupdefs.php' => '0d8e904d55dd66a7a90d38f1d0664bd8',
|
||||
'./include/SugarObjects/templates/issue/metadata/quickcreatedefs.php' => '368961ada69c8553e7137b604a877f09',
|
||||
'./include/SugarObjects/templates/issue/metadata/searchdefs.php' => '79c07472d9392384942e22bc6132c8fa',
|
||||
'./include/SugarObjects/templates/issue/metadata/subpaneldefs.php' => 'decf6423acb6b44f331f9f8b54c19ff0',
|
||||
'./include/SugarObjects/templates/issue/metadata/subpanels/default.php' => '11ea1311363e3db9a0b077d21f84f257',
|
||||
'./include/SugarObjects/templates/issue/vardefs.php' => 'cec1c24e9ae386c840dda523c65ecd77',
|
||||
'./include/SugarObjects/templates/person/Person.php' => '5586b56db82db3b6a69d31f4cd46d1d9',
|
||||
|
@ -1156,10 +1161,11 @@ $md5_string = array (
|
|||
'./include/SugarObjects/templates/person/metadata/detailviewdefs.php' => '298b0c970095d044eb0977c8e5ee0376',
|
||||
'./include/SugarObjects/templates/person/metadata/editviewdefs.php' => '955ed57a59f08bbd8cbb0b7459b2fdb3',
|
||||
'./include/SugarObjects/templates/person/metadata/listviewdefs.php' => '693f66188d1665c8e410b6bf5be15d27',
|
||||
'./include/SugarObjects/templates/person/metadata/metafiles.php' => '5dc7c77d1e65d8f0e5dafa6f5d4b3969',
|
||||
'./include/SugarObjects/templates/person/metadata/metafiles.php' => '80e1c107fcf93fe0a78cf5dd7146b3f5',
|
||||
'./include/SugarObjects/templates/person/metadata/popupdefs.php' => '94cac00bca2eecc5ad30c6169147aa2b',
|
||||
'./include/SugarObjects/templates/person/metadata/quickcreatedefs.php' => 'a720ca8346a61cb442fa6ad93a51d1b3',
|
||||
'./include/SugarObjects/templates/person/metadata/searchdefs.php' => '21606aab371fa03e267883d902d944be',
|
||||
'./include/SugarObjects/templates/person/metadata/subpaneldefs.php' => 'decf6423acb6b44f331f9f8b54c19ff0',
|
||||
'./include/SugarObjects/templates/person/metadata/subpanels/default.php' => '552bbb8e4bdecc081ea5567effb05c6b',
|
||||
'./include/SugarObjects/templates/person/vardefs.php' => '0ff81025316998a27fd5b63f678fa2e4',
|
||||
'./include/SugarObjects/templates/sale/Chance.php' => 'a22453ee390a8e4f4fe89cde6b7f937c',
|
||||
|
@ -1183,10 +1189,11 @@ $md5_string = array (
|
|||
'./include/SugarObjects/templates/sale/metadata/detailviewdefs.php' => '3f1afa19a4c3d714e132f69c9d6e7cfa',
|
||||
'./include/SugarObjects/templates/sale/metadata/editviewdefs.php' => '767b86f216ab3624cb51bebc36c7b79e',
|
||||
'./include/SugarObjects/templates/sale/metadata/listviewdefs.php' => 'b8a70bd4bc2da7021120f6c92a914acd',
|
||||
'./include/SugarObjects/templates/sale/metadata/metafiles.php' => 'c66eca250effcffa927a528e55be1420',
|
||||
'./include/SugarObjects/templates/sale/metadata/metafiles.php' => 'c44b4a1bae97f1d29608af2aaf3e931d',
|
||||
'./include/SugarObjects/templates/sale/metadata/popupdefs.php' => 'dd08f5844bddaf9c47b2323388ae8f00',
|
||||
'./include/SugarObjects/templates/sale/metadata/quickcreatedefs.php' => '40de9275a19046c346932a467511d903',
|
||||
'./include/SugarObjects/templates/sale/metadata/searchdefs.php' => '259ca47ed60f67f3fcc5ff9b21487022',
|
||||
'./include/SugarObjects/templates/sale/metadata/subpaneldefs.php' => 'decf6423acb6b44f331f9f8b54c19ff0',
|
||||
'./include/SugarObjects/templates/sale/metadata/subpanels/default.php' => '933ed06ff0fd822b455b6c05d3526b35',
|
||||
'./include/SugarObjects/templates/sale/vardefs.php' => '0594cbe418f268edf893cced47b022f3',
|
||||
'./include/SugarObjects/translated_prefix.php' => 'ba8e90a225dfa38f779119b10c366d40',
|
||||
|
@ -1322,7 +1329,7 @@ $md5_string = array (
|
|||
'./include/contextMenus/menuDefs/sugarObject.php' => '119e653126765edb0358ab54697b862a',
|
||||
'./include/contextMenus/menuDefs/sugarPerson.php' => '215d244d2fbd4bce5facc8fe2091cc27',
|
||||
'./include/controller/Controller.php' => '0ee78cfd4c12448eec89ea50b7ea143b',
|
||||
'./include/database/DBManager.php' => 'd2ecb6db9ceda8d9f1042c2f00ba5d63',
|
||||
'./include/database/DBManager.php' => 'd43d19f2e402b1d9eb2f8a13d2162e90',
|
||||
'./include/database/DBManagerFactory.php' => 'ba1e996ceb661905208e38df2459b095',
|
||||
'./include/database/FreeTDSManager.php' => '23ec109e38260e0ffa2a1676d486fd62',
|
||||
'./include/database/MssqlManager.php' => '8ec8ad4bd3df1c19aa96b228f3b356a7',
|
||||
|
@ -2335,7 +2342,7 @@ $md5_string = array (
|
|||
'./include/javascript/yui/build/yuitest/yuitest_core.js' => 'ed5230a0f4a885d8ea51c2fe78895d07',
|
||||
'./include/javascript/yui/ygDDList.js' => '0cd9051a220de7e8c79bf5b9cccce10f',
|
||||
'./include/json_config.php' => 'ba7fb6f2fb1df51bc367835406ef7ba5',
|
||||
'./include/language/en_us.lang.php' => 'b3e2e4ddf37fa8614a55749c8f22aea6',
|
||||
'./include/language/en_us.lang.php' => '9b8bee2691bda327f6b973fa789de805',
|
||||
'./include/language/en_us.notify_template.html' => 'c6a897ace7af46a44889dfab1a9d44c5',
|
||||
'./include/language/getJSLanguage.php' => '1bc910bd5a9953fbf443d3d97fddbffa',
|
||||
'./include/language/jsLanguage.php' => '3d27819dc00f2fe5426f72733a7edca1',
|
||||
|
@ -2435,7 +2442,7 @@ $md5_string = array (
|
|||
'./include/utils/db_utils.php' => '7fa7c67aec162fd9da259a1f33cef514',
|
||||
'./include/utils/encryption_utils.php' => 'cf87e84efe3764464056e6473aac9c79',
|
||||
'./include/utils/external_cache.php' => '7439d9b6252e242a9c852ecb58df44ec',
|
||||
'./include/utils/file_utils.php' => '28de9dc2ca22c07972fb85f334024bea',
|
||||
'./include/utils/file_utils.php' => '32ed2174485ae7cdc829415d4dcaef86',
|
||||
'./include/utils/layout_utils.php' => 'f1bfbecd81ffaea9483b39ee7925a523',
|
||||
'./include/utils/logic_utils.php' => 'df0882131989fd10f9855cc3b66d4572',
|
||||
'./include/utils/mvc_utils.php' => '38de4382713debfb1cbbe33442a8fc5b',
|
||||
|
@ -2874,7 +2881,7 @@ $md5_string = array (
|
|||
'./lib/Search/UI/MVC/View.php' => '060017bf23671e429cca7187b72ddd2a',
|
||||
'./lib/Search/UI/SearchFormController.php' => '2cf159703562da6348ece57ef68313b4',
|
||||
'./lib/Search/UI/SearchFormView.php' => '15662e4bd9237044fe1b74f41632660d',
|
||||
'./lib/Search/UI/SearchResultsController.php' => '5c3be29f03a58a39dea00393c1dfc01e',
|
||||
'./lib/Search/UI/SearchResultsController.php' => '21c2ecf52498c7e3109464e4fddd32a7',
|
||||
'./lib/Search/UI/SearchResultsView.php' => 'ce2615a6390cfe62924d44fdfc7a18fa',
|
||||
'./lib/Search/UI/SearchThrowableHandler.php' => '14cd2232a5a73df32a755e85a52cd7fd',
|
||||
'./lib/Search/UI/templates/search.form.tpl' => '8a03f27dd8860270f7c91d64c211fffe',
|
||||
|
@ -3396,7 +3403,7 @@ $md5_string = array (
|
|||
'./modules/AOR_Reports/vardefs.php' => 'bf0ea6c174abbb8e242b4d6963b8686f',
|
||||
'./modules/AOR_Reports/views/view.detail.php' => '4b9c8598d6e8a76aa6ec470227012cbc',
|
||||
'./modules/AOR_Reports/views/view.edit.php' => '0e078b86d2078fc47e4ccf24b3b5d8d4',
|
||||
'./modules/AOR_Scheduled_Reports/AOR_Scheduled_Reports.php' => '1d67cfee23f2da1d546578bc27545a74',
|
||||
'./modules/AOR_Scheduled_Reports/AOR_Scheduled_Reports.php' => '37085ac71ea851fc00d66dbf569885f7',
|
||||
'./modules/AOR_Scheduled_Reports/Menu.php' => '5a02efb3ec80ffcb5044e33ac30338c7',
|
||||
'./modules/AOR_Scheduled_Reports/emailRecipients.js' => '30056240ca6885b19bac0dffe6a15b06',
|
||||
'./modules/AOR_Scheduled_Reports/emailRecipients.php' => '7859bbf38e5016778fc56495e7d4e177',
|
||||
|
@ -3891,7 +3898,7 @@ $md5_string = array (
|
|||
'./modules/Bugs/views/view.edit.php' => 'f406f3c7f19e15cd646373151994fa1c',
|
||||
'./modules/Calendar/Cal.js' => '106379c83260c2472f7c65114d7a9fdb',
|
||||
'./modules/Calendar/Calendar.php' => '8b5970e1adbf735e0d7f5222012f48ec',
|
||||
'./modules/Calendar/CalendarActivity.php' => '0cead97402da329cb1f4748058f3dd0a',
|
||||
'./modules/Calendar/CalendarActivity.php' => '9e55048969b6abcb58443296057f8fce',
|
||||
'./modules/Calendar/CalendarDisplay.php' => 'fd05f849dff1db7bb47713be26e6a3d2',
|
||||
'./modules/Calendar/CalendarGrid.php' => 'a77c39c149c93a681a75e91f889f9b2c',
|
||||
'./modules/Calendar/CalendarUtils.php' => '295ad053fe74484ae3943b9fb4487ae1',
|
||||
|
@ -4442,7 +4449,7 @@ $md5_string = array (
|
|||
'./modules/Documents/views/view.detail.php' => 'eac3d5189949259727d9a1037f0e0070',
|
||||
'./modules/Documents/views/view.edit.php' => '80f2e5e7e9fa1170f7e0452b9ca8b816',
|
||||
'./modules/Documents/views/view.extdoc.php' => 'a596ceb8005df2241ae53b4146bfc8f5',
|
||||
'./modules/DynamicFields/DynamicField.php' => '872af3f181df101e6dada8b0d39e685f',
|
||||
'./modules/DynamicFields/DynamicField.php' => 'c0ff8ecd1a1453c37756ef849de12664',
|
||||
'./modules/DynamicFields/FieldCases.php' => '727d05978bb8a62c33ec9c8b7ab91489',
|
||||
'./modules/DynamicFields/FieldViewer.php' => '85058d135229ad1103524d52cfd06d82',
|
||||
'./modules/DynamicFields/FieldsMetaData.php' => '8e5a2e1af51b342d83f81910e11cb046',
|
||||
|
@ -4652,10 +4659,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' => '1ec29fbb9803c24e5ed8a12155668e58',
|
||||
'./modules/Emails/include/ComposeView/ComposeView.tpl' => 'aee5736e992aecc485afbb5973d9e535',
|
||||
'./modules/Emails/include/ComposeView/ComposeViewBlank.tpl' => '22365ce6727ffb560e5ad3fc187f13f2',
|
||||
'./modules/Emails/include/ComposeView/ComposeViewToolbar.tpl' => '656b26827857375278124e4610b9ff06',
|
||||
'./modules/Emails/include/ComposeView/EmailsComposeView.js' => '65624a5e5985e5f9deee1e4725533462',
|
||||
'./modules/Emails/include/ComposeView/EmailsComposeView.js' => '8ed14ba39eff3d7ec030538431ad3999',
|
||||
'./modules/Emails/include/DetailView/EmailsDetailView.php' => 'f95937f398f37afe3927ecc035b8b743',
|
||||
'./modules/Emails/include/DetailView/EmailsDraftDetailView.php' => 'baafca815e89a4c0ec3df8b6192552ea',
|
||||
'./modules/Emails/include/DetailView/EmailsNonImportedDetailView.php' => 'ef9ecbcf65fa6f03e32f94b6a9805b2f',
|
||||
|
@ -4754,7 +4761,7 @@ $md5_string = array (
|
|||
'./modules/Emails/templates/outboundDialogTest.tpl' => '6d9e938d23d33fb7fa5582fa15c65662',
|
||||
'./modules/Emails/templates/overlay.tpl' => '2e323ca505c0e45a3c660f993a20ba29',
|
||||
'./modules/Emails/templates/successMessage.tpl' => 'dcafb0a92cfae5ffd539a75cb82db2b7',
|
||||
'./modules/Emails/vardefs.php' => '3b7cf8c8a768bd5c4d1bcdb5bd05e7d2',
|
||||
'./modules/Emails/vardefs.php' => 'dae3869d4728b0bc63a3afe2532ee0cb',
|
||||
'./modules/Emails/views/view.compose.php' => '655ace129db29e568d901f3223b8afbb',
|
||||
'./modules/Emails/views/view.deletedraftemail.php' => '4a14718938a8577c683466fbbfec9b23',
|
||||
'./modules/Emails/views/view.detail.php' => '1dd813258abcba95f09418ef063f0fa7',
|
||||
|
@ -4766,7 +4773,7 @@ $md5_string = array (
|
|||
'./modules/Emails/views/view.popup.php' => '4ff1e52f105970c29fed966e2f058dd3',
|
||||
'./modules/Emails/views/view.savedraftemail.php' => '000c8d786c87e0ad997fc5de443d9b2c',
|
||||
'./modules/Emails/views/view.sendemail.php' => '78784b11ddb5257b0f3f5c59c9db17a1',
|
||||
'./modules/Employees/Employee.php' => 'c837db1f7627ee68383a041c51bb8b9c',
|
||||
'./modules/Employees/Employee.php' => '2a70486e775ccc8e4c36176855d5c1e7',
|
||||
'./modules/Employees/EmployeeStatus.php' => 'a2be5cfeb49ef4f8deec01de9686edb9',
|
||||
'./modules/Employees/EmployeesSearchForm.php' => '0437d91e2221d02c38e0db6830fef057',
|
||||
'./modules/Employees/EmployeesStudioModule.php' => '5b71bea7b6e7b7a77bc5a48d4fb10a55',
|
||||
|
@ -5170,7 +5177,7 @@ $md5_string = array (
|
|||
'./modules/ModuleBuilder/MB/header.php' => 'de67588e0b8d859dc2d9fc71709036b4',
|
||||
'./modules/ModuleBuilder/Module/DropDownBrowser.php' => '3f1698938d776a91255703c257049fac',
|
||||
'./modules/ModuleBuilder/Module/DropDownTree.php' => '3685a4b70a81e30fccf6c6b2f770c9d8',
|
||||
'./modules/ModuleBuilder/Module/IconRepository.php' => '20cd01f8300b411bacffb53361ed6f08',
|
||||
'./modules/ModuleBuilder/Module/IconRepository.php' => '5fbd04824f79784669ba38326a18096f',
|
||||
'./modules/ModuleBuilder/Module/MainTree.php' => '3122ae95f6c9a62db7c6eec12b2581f0',
|
||||
'./modules/ModuleBuilder/Module/StudioBrowser.php' => '32112741c23435fe2794f797933cfacc',
|
||||
'./modules/ModuleBuilder/Module/StudioModule.php' => '35525c18e7b1e00379f7d766b9001af5',
|
||||
|
@ -5188,13 +5195,13 @@ $md5_string = array (
|
|||
'./modules/ModuleBuilder/javascript/studio2RowDD.js' => 'ce2a4bfa3dbaca4249d73df0bc5dfaad',
|
||||
'./modules/ModuleBuilder/javascript/studiotabgroups.js' => 'c3d48dec838914e457aa099d9225d174',
|
||||
'./modules/ModuleBuilder/javascript/wizardTemplate.js' => '92c65dce9153db13c20731de44d14d87',
|
||||
'./modules/ModuleBuilder/language/en_us.lang.php' => '9171bfd805fcedff0bbc38266d6395b5',
|
||||
'./modules/ModuleBuilder/language/en_us.lang.php' => 'b73ec441c51179efa58d1a65e2160252',
|
||||
'./modules/ModuleBuilder/parsers/ModuleBuilderParser.php' => '1a5d8c3c8c7736c4e9011960732c4647',
|
||||
'./modules/ModuleBuilder/parsers/ParserFactory.php' => '9f49fbae9d8aadc97257d4cf18672978',
|
||||
'./modules/ModuleBuilder/parsers/StandardField.php' => '4cbf549bc313959427dc126e9afe01e7',
|
||||
'./modules/ModuleBuilder/parsers/constants.php' => '01917f1fa30ccbaabf69cf03f3a37946',
|
||||
'./modules/ModuleBuilder/parsers/parser.dropdown.php' => 'adfd8f59d8b6072d2aabee8f2ec68ceb',
|
||||
'./modules/ModuleBuilder/parsers/parser.label.php' => 'b026e2f0249fe89f848312ece6d1ca1d',
|
||||
'./modules/ModuleBuilder/parsers/parser.label.php' => '282ab5608f39a5ea18d3ff0b6c236766',
|
||||
'./modules/ModuleBuilder/parsers/parser.modifylayoutview.php' => 'f69b0f61304ac1a038a9ee4fc5e64faf',
|
||||
'./modules/ModuleBuilder/parsers/parser.modifylistview.php' => '7b370f6ed426a6e1be2f6b0fa422eb76',
|
||||
'./modules/ModuleBuilder/parsers/parser.modifysubpanel.php' => '27b433079ba0b51495f59defd0bb348f',
|
||||
|
@ -5547,7 +5554,7 @@ $md5_string = array (
|
|||
'./modules/ProjectTask/vardefs.php' => 'd1966d1060fcc2f8245f83e983f4a477',
|
||||
'./modules/ProjectTask/views/view.list.php' => '8beeb6373e9925ea68b4f1d2121abf06',
|
||||
'./modules/ProspectLists/Delete.php' => '49e5493083f478e993c36e0941d16bcd',
|
||||
'./modules/ProspectLists/Duplicate.php' => '51ef701820dbf25644722d961ed1121f',
|
||||
'./modules/ProspectLists/Duplicate.php' => 'f73bdc77dd9e63b24e69897105947500',
|
||||
'./modules/ProspectLists/Forms.html' => 'f2cb6003b845b3ae60c954c3543c6fe8',
|
||||
'./modules/ProspectLists/Forms.php' => '304e40b1231cb7dcc58dd49612680582',
|
||||
'./modules/ProspectLists/Menu.php' => '353995ef7f262ec1186a49f0425f21c0',
|
||||
|
@ -5753,7 +5760,7 @@ $md5_string = array (
|
|||
'./modules/Spots/vardefs.php' => '5e4d751e31f3684b35e34af55d53be25',
|
||||
'./modules/Spots/views/view.edit.php' => 'be1fbcd8c6b5871b18244cdb7ef02bb3',
|
||||
'./modules/Spots/views/view.list.php' => '0d9934545e44b644cb8f65f33a908004',
|
||||
'./modules/Studio/DropDowns/DropDownHelper.php' => '459e0789955425379aeae7314e581b10',
|
||||
'./modules/Studio/DropDowns/DropDownHelper.php' => 'fca5f36c4e2b0ab0a6fbff17cf051def',
|
||||
'./modules/Studio/DropDowns/EditView.php' => 'fc1f1181fe3ecf9d446078ef3998a912',
|
||||
'./modules/Studio/DropDowns/EditView.tpl' => '1daa9d2575cfd5788576f7c8f06940a5',
|
||||
'./modules/Studio/Forms.php' => 'f1b9c09d71cbf6919f46b99b9a0286d3',
|
||||
|
@ -6048,7 +6055,7 @@ $md5_string = array (
|
|||
'./modules/Users/SetTimezone.tpl' => 'f0fb5ed64fae81a5657ebc8f167967c9',
|
||||
'./modules/Users/UpdateTourStatus.php' => 'cc111e28e6df1d96b98678661dd42490',
|
||||
'./modules/Users/User.js' => '351f8d8e74bd1bd0a56dcc2bae31b147',
|
||||
'./modules/Users/User.php' => 'e0e65bf73d91fcc730b923eb95fe37c2',
|
||||
'./modules/Users/User.php' => 'a75ad79197349bc156f9365ef3830b9c',
|
||||
'./modules/Users/UserEditView.js' => '421e1c38f1ee78933134b987b7c3c251',
|
||||
'./modules/Users/UserEmailOptions.tpl' => '96b848efbf7f6d4fee7b6bf13a1a1aee',
|
||||
'./modules/Users/UserEmailSettings.tpl' => '5d9ff3379f63dcf7c5efbbcc3e88d8ed',
|
||||
|
@ -6265,7 +6272,7 @@ $md5_string = array (
|
|||
'./modules/vCals/HTTP_WebDAV_Server_vCal.php' => '966b7f0c7c2297ce1bea3a944e4cbd91',
|
||||
'./modules/vCals/Server.php' => '42c9c6a727bca02d7f1a6c6f4591257b',
|
||||
'./modules/vCals/field_arrays.php' => 'a1a41e8dd4710a3671fa359dcb8267ba',
|
||||
'./modules/vCals/vCal.php' => '11257a95accc06fa64afc8d60425d663',
|
||||
'./modules/vCals/vCal.php' => 'e20c0d7ec2b900ce37c8d621db8835ad',
|
||||
'./modules/vCals/vardefs.php' => 'aa722f4d5a1fa352bc808da9fce072bd',
|
||||
'./pdf.php' => '9c17ce70f633f699b8f5accd104f7e67',
|
||||
'./php_version.php' => '928257f676637cf31a03032c3e661e27',
|
||||
|
@ -6335,32 +6342,32 @@ $md5_string = array (
|
|||
'./soap.php' => 'e28988c2e0b8e2c484587b537a710525',
|
||||
'./sugar_version.json' => 'bdfbcefae2f9af559bef6a36367df7bb',
|
||||
'./sugar_version.php' => 'db7b6c8d51f87879fce1e6172eedfbed',
|
||||
'./suitecrm_version.php' => '4c7d3c4f6802cc2a615832b2c09f8c8e',
|
||||
'./suitecrm_version.php' => '44698d65949ec2aaa3489747310fb8be',
|
||||
'./themes/SuiteP/css/Dawn/color-palette.scss' => 'e64677d79e1d68c069bdc2dc661c4f99',
|
||||
'./themes/SuiteP/css/Dawn/icons.scss' => 'd59f8c5855e7a8df09542a663835a196',
|
||||
'./themes/SuiteP/css/Dawn/select.ico' => '22393ad23f16c3f1462455bae8f20279',
|
||||
'./themes/SuiteP/css/Dawn/style.css' => '4b00f6c1bbea501b7b2d100b7b11e556',
|
||||
'./themes/SuiteP/css/Dawn/style.css' => 'fa371bfc0663c488d723ce828d1e7171',
|
||||
'./themes/SuiteP/css/Dawn/style.scss' => '2fe759bc1c69865732f0ae0cca88916c',
|
||||
'./themes/SuiteP/css/Dawn/variables.scss' => 'f8f8acf976e6cb0f1d27ea46891ead2e',
|
||||
'./themes/SuiteP/css/Day/color-palette.scss' => '91bed2ed878a141ccdc521512f0daa33',
|
||||
'./themes/SuiteP/css/Day/icons.scss' => '7a77bb17a810866e1ec4e0667e58e536',
|
||||
'./themes/SuiteP/css/Day/style.css' => 'aa909eb7a2ec2772a66ca0707fe8d419',
|
||||
'./themes/SuiteP/css/Day/style.css' => '6d2e8777837f4a3c9c673b403b95eef2',
|
||||
'./themes/SuiteP/css/Day/style.scss' => '9cdabde7436f1037e691c81017972b8f',
|
||||
'./themes/SuiteP/css/Day/variables.scss' => '31b6e279ea974581ad42f95a3bb694a4',
|
||||
'./themes/SuiteP/css/Dusk/color-palette.scss' => '3fa059d1033bfd1bfa342ec0bc4ffe25',
|
||||
'./themes/SuiteP/css/Dusk/icons.scss' => '7a77bb17a810866e1ec4e0667e58e536',
|
||||
'./themes/SuiteP/css/Dusk/style.css' => 'c948f679584e96d3ce39050d36b82e8b',
|
||||
'./themes/SuiteP/css/Dusk/style.css' => '5bfde54ca4e8a9315b384a4ae0cdc7f7',
|
||||
'./themes/SuiteP/css/Dusk/style.scss' => '2fe759bc1c69865732f0ae0cca88916c',
|
||||
'./themes/SuiteP/css/Dusk/variables.scss' => 'ac38ee874a0668e1d3b86972a850f91d',
|
||||
'./themes/SuiteP/css/Night/color-palette.scss' => '25653200b97822a2d0f2594b180858c8',
|
||||
'./themes/SuiteP/css/Night/icons.scss' => '2adfbf917fd7f0748090ef79ec4657c9',
|
||||
'./themes/SuiteP/css/Night/style.css' => 'b08ab4c6a46bca69b8b5affc3c108f24',
|
||||
'./themes/SuiteP/css/Night/style.css' => 'ee55328617a2cfa5a1a7583db1afd6b6',
|
||||
'./themes/SuiteP/css/Night/style.scss' => '4b811594274100e02331d7bace01a687',
|
||||
'./themes/SuiteP/css/Night/variables.scss' => '4fc04d66ddb30f18da508b82e71a6cde',
|
||||
'./themes/SuiteP/css/Noon/color-palette.scss' => '952a2c7a3fb020ca2232b24a9ac58fe4',
|
||||
'./themes/SuiteP/css/Noon/icons.scss' => 'b5d0e65cf55142e8591bfcd792b6bed6',
|
||||
'./themes/SuiteP/css/Noon/select.ico' => '09333d8f426c1a4743e9b977a67d1d1f',
|
||||
'./themes/SuiteP/css/Noon/style.css' => '5f0a4b744c3057d5efc137791411aa2a',
|
||||
'./themes/SuiteP/css/Noon/style.css' => '504a6fcca636cdbad859ac6a8d1b47c8',
|
||||
'./themes/SuiteP/css/Noon/style.scss' => '2fe759bc1c69865732f0ae0cca88916c',
|
||||
'./themes/SuiteP/css/Noon/variables.scss' => 'bea284c3121762d58279aca24c873d9e',
|
||||
'./themes/SuiteP/css/bootstrap/alerts.scss' => 'c0e5396555dd4c70b9eeb314e4c4613d',
|
||||
|
@ -6460,7 +6467,7 @@ $md5_string = array (
|
|||
'./themes/SuiteP/css/suitep-base/email.scss' => '4b0a570ce4cdac8bb449f31bccb0ee72',
|
||||
'./themes/SuiteP/css/suitep-base/forms.scss' => 'e1626b89c1cf4ac8fc16c5f5532c8ac0',
|
||||
'./themes/SuiteP/css/suitep-base/jstree.scss' => '946510970bb0774a31a01c2fb57a9552',
|
||||
'./themes/SuiteP/css/suitep-base/listview.scss' => '083c62124b7f3c7dbf32a3f10e06cf35',
|
||||
'./themes/SuiteP/css/suitep-base/listview.scss' => '46898f8372bdd796e5ddeed167bd0c30',
|
||||
'./themes/SuiteP/css/suitep-base/login.scss' => '25d85a91770e80b7b0357cece6eb5c4b',
|
||||
'./themes/SuiteP/css/suitep-base/main.scss' => '0ddf085214424ea1f19a13f7930f1c9a',
|
||||
'./themes/SuiteP/css/suitep-base/mixins.scss' => '9edffdf421f6277979bd76df64d34fad',
|
||||
|
@ -7740,15 +7747,15 @@ $md5_string = array (
|
|||
'./themes/SuiteP/images/wizmenu/left-start.png' => '85bb13bfd189a2c3e306e7c08753434d',
|
||||
'./themes/SuiteP/images/wizmenu/right-empty.png' => 'd3037d7c75385e7d5a5708092e8cb94c',
|
||||
'./themes/SuiteP/images/wizmenu/right-full.png' => '2f6f9936252b8c9dfd7bb71b140061e5',
|
||||
'./themes/SuiteP/include/Dashlets/DashletHeader.tpl' => '83586d72dbd43540f4d71b6b5db354f5',
|
||||
'./themes/SuiteP/include/DetailView/DetailView.tpl' => '4829a5f5b6ac00c01c321948b4481a95',
|
||||
'./themes/SuiteP/include/Dashlets/DashletHeader.tpl' => '09e4767d1ff01a830c0de2706e833a11',
|
||||
'./themes/SuiteP/include/DetailView/DetailView.tpl' => 'ff62ab3dc8d5b6e91a4c1041c043592e',
|
||||
'./themes/SuiteP/include/DetailView/actions_buttons.tpl' => '8a6fff7933b92178c28f5a58feddef75',
|
||||
'./themes/SuiteP/include/DetailView/actions_menu.tpl' => '43988446570fc2820b7b0fb3da42e199',
|
||||
'./themes/SuiteP/include/DetailView/footer.tpl' => '74cd1da7edd3386ee51db3e8ba8bb53b',
|
||||
'./themes/SuiteP/include/DetailView/header.tpl' => 'ba7fbc5faa2a0e336373aae9b1e52a8e',
|
||||
'./themes/SuiteP/include/DetailView/tab_panel_content.tpl' => '6d222e6e0637382cff40a4dff5dbb851',
|
||||
'./themes/SuiteP/include/DetailView/test.tpl' => 'fcf838f4139733066cc727fc7f3818ae',
|
||||
'./themes/SuiteP/include/EditView/EditView.tpl' => '5e279ffcc56b22f3c2d6032247fa288e',
|
||||
'./themes/SuiteP/include/EditView/EditView.tpl' => '7ad41f35fa8b0aa7dbaae48189c38edb',
|
||||
'./themes/SuiteP/include/EditView/QuickCreate.tpl' => '3acca81ef6a983731de021c1943f4c0b',
|
||||
'./themes/SuiteP/include/EditView/SugarVCR.tpl' => 'eed25c746ed4a7ffeeaaae25a36f49c4',
|
||||
'./themes/SuiteP/include/EditView/actions_buttons.tpl' => '3ccfac667a36f3f67706deb6de2f9a77',
|
||||
|
|
|
@ -43,8 +43,8 @@ if (!defined('sugarEntry') || !sugarEntry) {
|
|||
die('Not A Valid Entry Point');
|
||||
}
|
||||
|
||||
require_once __DIR__ .'/../../../modules/SchedulersJobs/SchedulersJob.php';
|
||||
require_once __DIR__ .'/../Batch/BatchJob.php';
|
||||
require_once __DIR__ . '/../../../modules/SchedulersJobs/SchedulersJob.php';
|
||||
require_once __DIR__ . '/../Batch/BatchJob.php';
|
||||
|
||||
|
||||
class NormalizeRecords extends BatchJob
|
||||
|
@ -110,6 +110,9 @@ class NormalizeRecords extends BatchJob
|
|||
if (empty($ids)) {
|
||||
$this->debugLog("No ids found for module $type");
|
||||
$this->echoOutput($echo, "No ids found for module $type");
|
||||
$this->echoOutput($echo, "$type 0 records normalized");
|
||||
$messages[] = "$type 0 records normalized";
|
||||
$this->debugLog("$type 0 records normalized");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -291,17 +294,13 @@ class NormalizeRecords extends BatchJob
|
|||
protected function setupTracking(): array
|
||||
{
|
||||
// Populate the $moduleList variable to target only specific modules
|
||||
$moduleList = [];
|
||||
if (empty($moduleList)) {
|
||||
$moduleList = $GLOBALS["moduleList"];
|
||||
$moduleList[] = 'Users';
|
||||
}
|
||||
$moduleList = $this->getModulesToNormalize();
|
||||
|
||||
$tracking = [];
|
||||
|
||||
foreach ($moduleList as $module) {
|
||||
|
||||
if (empty($GLOBALS["beanList"][$module])){
|
||||
if (empty($GLOBALS["beanList"][$module])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -406,8 +405,8 @@ class NormalizeRecords extends BatchJob
|
|||
$records = $this->getRecordChunk($ids, $type);
|
||||
foreach ($records as $row) {
|
||||
|
||||
$normalized = $this->repairStringValues($row, $fieldList);
|
||||
if (!$normalized) {
|
||||
$normalized = $this->repairStringValues($type, $row, $fieldList);
|
||||
if (empty($normalized)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -417,7 +416,7 @@ class NormalizeRecords extends BatchJob
|
|||
$bean->update_modified_by = false;
|
||||
$bean->processed = true;
|
||||
$bean->notify_inworkflow = false;
|
||||
$bean->save(false);
|
||||
$bean->saveFields($normalized);
|
||||
$this->debugLog("$type - " . $bean->id . " normalized");
|
||||
++$i;
|
||||
if ($i % 100 === 0) {
|
||||
|
@ -425,7 +424,7 @@ class NormalizeRecords extends BatchJob
|
|||
}
|
||||
}
|
||||
$messages[] = "$type " . $i . " records normalized";
|
||||
$result['normalize_count'] = $i;
|
||||
$result['normalize_count'] = $i;
|
||||
$this->debugLog("$type " . $i . " records normalized");
|
||||
|
||||
$result['messages'] = $messages;
|
||||
|
@ -437,14 +436,29 @@ class NormalizeRecords extends BatchJob
|
|||
* Check and Normalize values from database row
|
||||
* which exist in the $fieldList array
|
||||
*
|
||||
* @param $row
|
||||
* @param string $type
|
||||
* @param array $row
|
||||
* @param array $fieldList
|
||||
* @return bool
|
||||
* @return array
|
||||
*/
|
||||
protected function repairStringValues(&$row, array $fieldList): bool
|
||||
protected function repairStringValues(string $type, &$row, array $fieldList): array
|
||||
{
|
||||
$normalized = false;
|
||||
$fieldsToExclude = [
|
||||
'Users' => [
|
||||
'user_hash' => true
|
||||
],
|
||||
];
|
||||
|
||||
$normalized = [];
|
||||
foreach ($fieldList as $fieldName) {
|
||||
|
||||
$exclude = $fieldsToExclude[$type][$fieldName] ?? false;
|
||||
|
||||
if ($exclude === true) {
|
||||
$this->debugLog("Excluded $fieldName");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!empty($row[$fieldName])) {
|
||||
|
||||
// Check if normalization is required
|
||||
|
@ -455,7 +469,7 @@ class NormalizeRecords extends BatchJob
|
|||
//debugLog("Pre : $row[$fieldName]");
|
||||
$row[$fieldName] = Normalizer::normalize($row[$fieldName], Normalizer::FORM_C);
|
||||
//debugLog("Post: $row[$fieldName]");
|
||||
$normalized = true;
|
||||
$normalized[] = $fieldName;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -479,6 +493,10 @@ class NormalizeRecords extends BatchJob
|
|||
$repairableTypes = ['enum', 'longtext', 'name', 'text', 'varchar'];
|
||||
$varDefFields = $bean->getFieldDefinitions();
|
||||
|
||||
if ($type === 'Users') {
|
||||
$repairableTypes[] = 'user_name';
|
||||
}
|
||||
|
||||
$fieldList = array();
|
||||
foreach ($varDefFields as $field) {
|
||||
if (in_array($field['type'], $repairableTypes, true)) {
|
||||
|
@ -532,7 +550,7 @@ class NormalizeRecords extends BatchJob
|
|||
{
|
||||
global $log;
|
||||
|
||||
$log->info("[utf-normalize]" . $string);
|
||||
$log->info("[utf-normalize] " . $string);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -542,13 +560,105 @@ class NormalizeRecords extends BatchJob
|
|||
*/
|
||||
protected function echoOutput(bool $echo, string $string): void
|
||||
{
|
||||
if (empty($echo)){
|
||||
if (empty($echo)) {
|
||||
return;
|
||||
}
|
||||
|
||||
echo '<div>' . $string. '</div>';
|
||||
echo '<div>' . $string . '</div>';
|
||||
ob_flush();
|
||||
flush();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|mixed
|
||||
*/
|
||||
protected function getModulesToNormalize()
|
||||
{
|
||||
$moduleList = [];
|
||||
if (empty($moduleList)) {
|
||||
$moduleList = $GLOBALS["moduleList"];
|
||||
$moduleList[] = 'Users';
|
||||
}
|
||||
|
||||
$modInvisList = $GLOBALS["modInvisList"] ?? [];
|
||||
|
||||
$toExlude = [
|
||||
'Calendar',
|
||||
'Administration',
|
||||
'CustomFields',
|
||||
'Connectors',
|
||||
'Dropdown',
|
||||
'Dynamic',
|
||||
'DynamicFields',
|
||||
'DynamicLayout',
|
||||
'EditCustomFields',
|
||||
'Help',
|
||||
'Import',
|
||||
'MySettings',
|
||||
'EditCustomFields',
|
||||
'FieldsMetaData',
|
||||
'UpgradeWizard',
|
||||
'Trackers',
|
||||
'Connectors',
|
||||
'Employees',
|
||||
'Calendar',
|
||||
'Sync',
|
||||
'Versions',
|
||||
'LabelEditor',
|
||||
'Roles',
|
||||
'EmailMarketing',
|
||||
'OptimisticLock',
|
||||
'TeamMemberships',
|
||||
'TeamSets',
|
||||
'TeamSetModule',
|
||||
'Audit',
|
||||
'MailMerge',
|
||||
'MergeRecords',
|
||||
'EmailText',
|
||||
'Schedulers',
|
||||
'Schedulers_jobs',
|
||||
'CampaignTrackers',
|
||||
'CampaignLog',
|
||||
'EmailMan',
|
||||
'Groups',
|
||||
'InboundEmail',
|
||||
'ACLActions',
|
||||
'ACLRoles',
|
||||
'DocumentRevisions',
|
||||
'ModuleBuilder',
|
||||
'Alert',
|
||||
'ResourceCalendar',
|
||||
'ACL',
|
||||
'Configurator',
|
||||
'UserPreferences',
|
||||
'SavedSearch',
|
||||
'Studio',
|
||||
'Connectors',
|
||||
'SugarFeed',
|
||||
'EAPM',
|
||||
'OAuthKeys',
|
||||
'OAuthTokens',
|
||||
'AM_TaskTemplates',
|
||||
'Reminders',
|
||||
'Reminders_Invitees',
|
||||
'AOD_IndexEvent',
|
||||
'AOD_Index',
|
||||
'AOR_Fields',
|
||||
'AOR_Charts',
|
||||
'AOR_Conditions',
|
||||
'AOS_Line_Item_Groups',
|
||||
'AOW_Processed',
|
||||
'Calls_Reschedule',
|
||||
'OutboundEmailAccounts',
|
||||
'TemplateSectionLine',
|
||||
'OAuth2Tokens',
|
||||
'OAuth2Clients',
|
||||
];
|
||||
|
||||
$modInvisList = array_diff($modInvisList, $toExlude);
|
||||
$moduleList = array_merge($moduleList, $modInvisList);
|
||||
|
||||
return $moduleList;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -239,7 +239,7 @@ class SugarEmailAddress extends SugarBean
|
|||
|| !isset($_REQUEST[$bean->module_dir . '_email_widget_id'])
|
||||
|| !isset($_REQUEST['massupdate'])
|
||||
) {
|
||||
if (empty($this->addresses) || (!empty($bean->email1))) {
|
||||
if (empty($this->addresses)) {
|
||||
$this->addresses = array();
|
||||
$optOut = (isset($bean->email_opt_out) && $bean->email_opt_out == '1');
|
||||
$invalid = (isset($bean->invalid_email) && $bean->invalid_email == '1');
|
||||
|
|
|
@ -202,6 +202,9 @@ class LanguageManager
|
|||
'custom/modules/' . $module . '/Ext/Language/' . $lang . '.lang.ext.php',
|
||||
);
|
||||
|
||||
require_once 'ModuleInstall/ExtensionManager.php';
|
||||
SuiteCRM\ModuleInstall\ExtensionManager::compileExtensionFiles('Language', '.lang.ext.php', $lang);
|
||||
|
||||
#27023, if this module template language file was not attached , get the template from this module vardef cache file if exsits and load the template language files.
|
||||
static $createdModules;
|
||||
if (empty($createdModules[$module]) && isset($GLOBALS['beanList'][$module])) {
|
||||
|
|
|
@ -46,4 +46,5 @@ $metafiles[$module_name] = array(
|
|||
'searchdefs' => 'modules/' . $module_name . '/metadata/searchdefs.php',
|
||||
'popupdefs' => 'modules/' . $module_name . '/metadata/popupdefs.php',
|
||||
'searchfields' => 'modules/' . $module_name . '/metadata/SearchFields.php',
|
||||
'subpaneldefs' => 'modules/' . $module_name . '/metadata/subpaneldefs.php',
|
||||
);
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
$module_name = '<module_name>';
|
||||
$layout_defs[$module_name]['subpanel_setup']['securitygroups'] = array(
|
||||
'top_buttons' => array(array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'SecurityGroups', 'mode' => 'MultiSelect')),
|
||||
'order' => 900,
|
||||
'sort_by' => 'name',
|
||||
'sort_order' => 'asc',
|
||||
'module' => 'SecurityGroups',
|
||||
'refresh_page' => 1,
|
||||
'subpanel_name' => 'default',
|
||||
'get_subpanel_data' => 'SecurityGroups',
|
||||
'add_subpanel_data' => 'securitygroup_id',
|
||||
'title_key' => 'LBL_SECURITYGROUPS_SUBPANEL_TITLE',
|
||||
);
|
|
@ -46,4 +46,5 @@ $metafiles[$module_name] = array(
|
|||
'searchdefs' => 'modules/' . $module_name . '/metadata/searchdefs.php',
|
||||
'popupdefs' => 'modules/' . $module_name . '/metadata/popupdefs.php',
|
||||
'searchfields' => 'modules/' . $module_name . '/metadata/SearchFields.php',
|
||||
'subpaneldefs' => 'modules/' . $module_name . '/metadata/subpaneldefs.php',
|
||||
);
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
$module_name = '<module_name>';
|
||||
$layout_defs[$module_name]['subpanel_setup']['securitygroups'] = array(
|
||||
'top_buttons' => array(array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'SecurityGroups', 'mode' => 'MultiSelect'),),
|
||||
'order' => 900,
|
||||
'sort_by' => 'name',
|
||||
'sort_order' => 'asc',
|
||||
'module' => 'SecurityGroups',
|
||||
'refresh_page' => 1,
|
||||
'subpanel_name' => 'default',
|
||||
'get_subpanel_data' => 'SecurityGroups',
|
||||
'add_subpanel_data' => 'securitygroup_id',
|
||||
'title_key' => 'LBL_SECURITYGROUPS_SUBPANEL_TITLE',
|
||||
);
|
|
@ -50,4 +50,5 @@ $metafiles[$module_name] = array(
|
|||
'searchdefs' => 'modules/' . $module_name . '/metadata/searchdefs.php',
|
||||
'popupdefs' => 'modules/' . $module_name . '/metadata/popupdefs.php',
|
||||
'searchfields' => 'modules/' . $module_name . '/metadata/SearchFields.php',
|
||||
'subpaneldefs' => 'modules/' . $module_name . '/metadata/subpaneldefs.php',
|
||||
);
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
$module_name = '<module_name>';
|
||||
$layout_defs[$module_name]['subpanel_setup']['securitygroups'] = array(
|
||||
'top_buttons' => array(array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'SecurityGroups', 'mode' => 'MultiSelect')),
|
||||
'order' => 900,
|
||||
'sort_by' => 'name',
|
||||
'sort_order' => 'asc',
|
||||
'module' => 'SecurityGroups',
|
||||
'refresh_page' => 1,
|
||||
'subpanel_name' => 'default',
|
||||
'get_subpanel_data' => 'SecurityGroups',
|
||||
'add_subpanel_data' => 'securitygroup_id',
|
||||
'title_key' => 'LBL_SECURITYGROUPS_SUBPANEL_TITLE',
|
||||
);
|
|
@ -46,4 +46,5 @@ $metafiles[$module_name] = array(
|
|||
'searchdefs' => 'modules/' . $module_name . '/metadata/searchdefs.php',
|
||||
'popupdefs' => 'modules/' . $module_name . '/metadata/popupdefs.php',
|
||||
'searchfields' => 'modules/' . $module_name . '/metadata/SearchFields.php',
|
||||
'subpaneldefs' => 'modules/' . $module_name . '/metadata/subpaneldefs.php',
|
||||
);
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
$module_name = '<module_name>';
|
||||
$layout_defs[$module_name]['subpanel_setup']['securitygroups'] = array(
|
||||
'top_buttons' => array(array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'SecurityGroups', 'mode' => 'MultiSelect')),
|
||||
'order' => 900,
|
||||
'sort_by' => 'name',
|
||||
'sort_order' => 'asc',
|
||||
'module' => 'SecurityGroups',
|
||||
'refresh_page' => 1,
|
||||
'subpanel_name' => 'default',
|
||||
'get_subpanel_data' => 'SecurityGroups',
|
||||
'add_subpanel_data' => 'securitygroup_id',
|
||||
'title_key' => 'LBL_SECURITYGROUPS_SUBPANEL_TITLE',
|
||||
);
|
|
@ -46,4 +46,5 @@ $metafiles[$module_name] = array(
|
|||
'searchdefs' => 'modules/' . $module_name . '/metadata/searchdefs.php',
|
||||
'popupdefs' => 'modules/' . $module_name . '/metadata/popupdefs.php',
|
||||
'searchfields' => 'modules/' . $module_name . '/metadata/SearchFields.php',
|
||||
'subpaneldefs' => 'modules/' . $module_name . '/metadata/subpaneldefs.php',
|
||||
);
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
$module_name = '<module_name>';
|
||||
$layout_defs[$module_name]['subpanel_setup']['securitygroups'] = array(
|
||||
'top_buttons' => array(array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'SecurityGroups', 'mode' => 'MultiSelect')),
|
||||
'order' => 900,
|
||||
'sort_by' => 'name',
|
||||
'sort_order' => 'asc',
|
||||
'module' => 'SecurityGroups',
|
||||
'refresh_page' => 1,
|
||||
'subpanel_name' => 'default',
|
||||
'get_subpanel_data' => 'SecurityGroups',
|
||||
'add_subpanel_data' => 'securitygroup_id',
|
||||
'title_key' => 'LBL_SECURITYGROUPS_SUBPANEL_TITLE',
|
||||
);
|
|
@ -50,5 +50,5 @@ $metafiles[$module_name] = array(
|
|||
'searchdefs' => 'modules/' . $module_name . '/metadata/searchdefs.php',
|
||||
'popupdefs' => 'modules/' . $module_name . '/metadata/popupdefs.php',
|
||||
'searchfields' => 'modules/' . $module_name . '/metadata/SearchFields.php',
|
||||
|
||||
'subpaneldefs' => 'modules/' . $module_name . '/metadata/subpaneldefs.php',
|
||||
);
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
$module_name = '<module_name>';
|
||||
$layout_defs[$module_name]['subpanel_setup']['securitygroups'] = array(
|
||||
'top_buttons' => array(array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'SecurityGroups', 'mode' => 'MultiSelect')),
|
||||
'order' => 900,
|
||||
'sort_by' => 'name',
|
||||
'sort_order' => 'asc',
|
||||
'module' => 'SecurityGroups',
|
||||
'refresh_page' => 1,
|
||||
'subpanel_name' => 'default',
|
||||
'get_subpanel_data' => 'SecurityGroups',
|
||||
'add_subpanel_data' => 'securitygroup_id',
|
||||
'title_key' => 'LBL_SECURITYGROUPS_SUBPANEL_TITLE',
|
||||
);
|
|
@ -2090,6 +2090,11 @@ abstract class DBManager
|
|||
if (!empty($val) && !empty($fieldDef['len']) && strlen($val) > $fieldDef['len']) {
|
||||
$val = $this->truncate($val, $fieldDef['len']);
|
||||
}
|
||||
|
||||
if (!empty($bean->bean_fields_to_save) && !in_array($fieldDef['name'], $bean->bean_fields_to_save, true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$columnName = $this->quoteIdentifier($fieldDef['name']);
|
||||
if (!is_null($val) || !empty($fieldDef['required'])) {
|
||||
$columns[] = "{$columnName}=".$this->massageValue($val, $fieldDef);
|
||||
|
|
|
@ -930,6 +930,9 @@ $app_list_strings = array(
|
|||
'custom_fields_merge_dup_dom' => array(
|
||||
0 => 'Disabled',
|
||||
1 => 'Enabled',
|
||||
2 => 'Filter',
|
||||
3 => 'Default selected filter',
|
||||
4 => 'Only filter',
|
||||
),
|
||||
|
||||
'projects_priority_options' => array(
|
||||
|
|
|
@ -116,7 +116,7 @@ function remove_file_extension($filename)
|
|||
|
||||
function write_array_to_file($the_name, $the_array, $the_file, $mode="w", $header='')
|
||||
{
|
||||
if (!empty($header) && ($mode != 'a' || !file_exists($the_file))) {
|
||||
if (!empty($header) && ($mode !== 'a' || $mode !== 'ab' || !file_exists($the_file))) {
|
||||
$the_string = $header;
|
||||
} else {
|
||||
$the_string = "<?php\n" .
|
||||
|
@ -129,6 +129,27 @@ function write_array_to_file($the_name, $the_array, $the_file, $mode="w", $heade
|
|||
return sugar_file_put_contents($the_file, $the_string, LOCK_EX) !== false;
|
||||
}
|
||||
|
||||
function write_override_label_to_file($the_name, $the_array, $the_file, $mode = 'w', $header = '')
|
||||
{
|
||||
if (!empty($header) && ($mode !== 'a' || $mode !== 'ab' || !file_exists($the_file))) {
|
||||
$the_string = $header;
|
||||
} else {
|
||||
$the_string = "<?php\n" .
|
||||
'// created: ' . date('Y-m-d H:i:s') . "\n";
|
||||
}
|
||||
|
||||
foreach ($the_array as $labelName => $labelValue) {
|
||||
$the_string .= '$' . "{$the_name}['{$labelName}'] = '{$labelValue}';\n";
|
||||
}
|
||||
|
||||
$result = sugar_file_put_contents($the_file, $the_string, LOCK_EX) !== false;
|
||||
|
||||
if (function_exists('opcache_invalidate')) {
|
||||
opcache_invalidate($the_file, true);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function write_encoded_file($soap_result, $write_to_dir, $write_to_file="")
|
||||
{
|
||||
// this function dies when encountering an error -- use with caution!
|
||||
|
|
|
@ -86,6 +86,16 @@ class SearchResultsController extends Controller
|
|||
$this->results = $results;
|
||||
}
|
||||
|
||||
public function getQuery(): SearchQuery
|
||||
{
|
||||
return $this->query;
|
||||
}
|
||||
|
||||
public function getResults(): SearchResults
|
||||
{
|
||||
return $this->results;
|
||||
}
|
||||
|
||||
public function display(): void
|
||||
{
|
||||
$headers = [];
|
||||
|
|
|
@ -83,9 +83,7 @@ class AOR_Scheduled_Reports extends basic
|
|||
|
||||
public function save($check_notify = false)
|
||||
{
|
||||
if (isset($_POST['email_recipients']) && is_array($_POST['email_recipients'])) {
|
||||
$this->email_recipients = base64_encode(serialize($_POST['email_recipients']));
|
||||
}
|
||||
$this->parseRecipients();
|
||||
|
||||
return parent::save($check_notify);
|
||||
}
|
||||
|
@ -180,7 +178,7 @@ class AOR_Scheduled_Reports extends basic
|
|||
}
|
||||
|
||||
$lastRun = $this->last_run ? $timedate->fromDb($this->last_run) : $timedate->fromDb($this->date_entered);
|
||||
|
||||
|
||||
$this->handleTimeZone($lastRun);
|
||||
$next = $cron->getNextRunDate($lastRun);
|
||||
|
||||
|
@ -200,4 +198,26 @@ class AOR_Scheduled_Reports extends basic
|
|||
$date->modify($offset . 'second');
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse and set recipients
|
||||
* @return void
|
||||
*/
|
||||
protected function parseRecipients(): void
|
||||
{
|
||||
$recipients = $_POST['email_recipients'] ?? null;
|
||||
unset($_POST['email_recipients'], $_REQUEST['email_recipients'], $_GET['email_recipients']);
|
||||
$this->email_recipients = null;
|
||||
|
||||
if (is_array($recipients)) {
|
||||
$types = $recipients['email_target_type'] ?? [];
|
||||
$emailInfo = $recipients['email'] ?? [];
|
||||
$recipients = [
|
||||
'email_target_type' => $types,
|
||||
'email' => $emailInfo,
|
||||
];
|
||||
|
||||
$this->email_recipients = base64_encode(serialize($recipients));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -266,11 +266,12 @@ class CalendarActivity
|
|||
}
|
||||
|
||||
$focus_list = build_related_list_by_user_id($bean, $user_id, $where);
|
||||
require_once 'modules/SecurityGroups/SecurityGroup.php';
|
||||
//require_once 'modules/SecurityGroups/SecurityGroup.php';
|
||||
foreach ($focus_list as $focusBean) {
|
||||
if (isset($seen_ids[$focusBean->id])) {
|
||||
continue;
|
||||
}
|
||||
/* TODO update currently unused functionality, disabled as expensive
|
||||
$in_group = SecurityGroup::groupHasAccess($key, $focusBean->id, 'list');
|
||||
$show_as_busy = !ACLController::checkAccess(
|
||||
$key,
|
||||
|
@ -279,7 +280,7 @@ class CalendarActivity
|
|||
'module',
|
||||
$in_group
|
||||
);
|
||||
$focusBean->show_as_busy = $show_as_busy;
|
||||
$focusBean->show_as_busy = $show_as_busy;*/
|
||||
|
||||
$seen_ids[$focusBean->id] = 1;
|
||||
$act = new CalendarActivity($focusBean);
|
||||
|
|
|
@ -445,6 +445,11 @@ class DynamicField
|
|||
if ($field['type'] == 'html' || $field['type'] == 'parent') {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!empty($this->bean->bean_fields_to_save) && !in_array($name, $this->bean->bean_fields_to_save, true)){
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isset($this->bean->$name)) {
|
||||
$quote = "'";
|
||||
|
||||
|
|
|
@ -226,7 +226,7 @@
|
|||
$(function(){
|
||||
$('#EditView_tabs ul.nav.nav-tabs li > a[data-toggle="tab"]').click(function(e){
|
||||
if(typeof $(this).parent().find('a').first().attr('id') != 'undefined') {
|
||||
var tab = parseInt($(this).parent().find('a').first().attr('id').match(/^tab(.)*$/)[1]);
|
||||
var tab = parseInt($(this).parent().find('a').first().attr('id').match(/^tab(?<number>(.)*)$/)[1]);
|
||||
selectTab(tab);
|
||||
}
|
||||
});
|
||||
|
@ -263,4 +263,4 @@
|
|||
{rdelim});
|
||||
</script>
|
||||
{/if}
|
||||
</form>
|
||||
</form>
|
||||
|
|
|
@ -349,7 +349,7 @@
|
|||
};
|
||||
|
||||
|
||||
self.updateSignature = function () {
|
||||
$.fn.EmailsComposeView.updateSignature = self.updateSignature = function () {
|
||||
var inboundId = $('#from_addr_name').find('option:selected').attr('inboundId');
|
||||
if (inboundId === undefined) {
|
||||
console.warn('Unable to retrieve selected inbound id in the "From" field.');
|
||||
|
@ -1340,6 +1340,7 @@
|
|||
$.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);
|
||||
};
|
||||
|
|
|
@ -754,6 +754,11 @@ $dictionary['Email'] = array(
|
|||
'type' => 'index',
|
||||
'fields' => array('category_id')
|
||||
),
|
||||
array(
|
||||
'name' => 'idx_email_uid',
|
||||
'type' => 'index',
|
||||
'fields' => array('uid')
|
||||
),
|
||||
) // end indices
|
||||
);
|
||||
|
||||
|
|
|
@ -186,6 +186,11 @@ class Employee extends Person
|
|||
|
||||
public function create_export_query($order_by, $where, $relate_link_join = '')
|
||||
{
|
||||
global $current_user;
|
||||
if (!is_admin($current_user)) {
|
||||
throw new RuntimeException('Not authorized');
|
||||
}
|
||||
|
||||
include('modules/Employees/field_arrays.php');
|
||||
|
||||
$cols = '';
|
||||
|
|
|
@ -14,14 +14,13 @@ class IconRepository
|
|||
*/
|
||||
private static $iconNames = [
|
||||
AOS_Contracts::class => 'aos-contracts-signature',
|
||||
AOR_Scheduled_Reports::class => 'aor-reports',
|
||||
'EmailTemplates' => 'emails',
|
||||
'Employees' => 'users',
|
||||
jjwg_Address_Cache::class => 'jjwg-markers',
|
||||
'ProjectTask' => 'am-tasktemplates',
|
||||
AM_ProjectTemplates::class => 'am-tasktemplates',
|
||||
'SurveyQuestionOptions' => self::DEFAULT_ICON,
|
||||
'SurveyQuestionResponses' => self::DEFAULT_ICON,
|
||||
'SurveyQuestions' => self::DEFAULT_ICON,
|
||||
'SurveyQuestionResponses' => 'survey-responses',
|
||||
'SurveyResponses' => 'survey-responses',
|
||||
'Prospects' => 'targets'
|
||||
];
|
||||
|
@ -33,8 +32,6 @@ class IconRepository
|
|||
*/
|
||||
public static function getIconName($module)
|
||||
{
|
||||
return isset(static::$iconNames[$module])
|
||||
? static::$iconNames[$module]
|
||||
: strtolower(str_replace('_', '-', $module));
|
||||
return static::$iconNames[$module] ?? strtolower(str_replace('_', '-', $module));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -615,6 +615,10 @@ $mod_strings = array(
|
|||
|
||||
//POPUP HELP
|
||||
'LBL_POPHELP_FIELD_DATA_TYPE' => 'Select the appropriate data type based on the type of data that will be entered into the field.',
|
||||
'LBL_POPHELP_IMPORTABLE' => '<b>Yes</b>: The field will be included in an import operation.<br><b>No</b>: The field will not be included in an import.<br><b>Required</b>: A value for the field must be provided in any import.',
|
||||
'LBL_POPHELP_IMAGE_WIDTH' => 'Enter a number for Width, as measured in pixels.<br> The uploaded image will be scaled to this Width.',
|
||||
'LBL_POPHELP_IMAGE_HEIGHT' => 'Enter a number for the Height, as measured in pixels.<br> The uploaded image will be scaled to this Height.',
|
||||
'LBL_POPHELP_DUPLICATE_MERGE' => '<b>Enabled</b>: The field will appear in the Merge Duplicates feature, but will not be available to use for the filter conditions in the Find Duplicates feature.<br><b>Disabled</b>: The field will not appear in the Merge Duplicates feature, and will not be available to use for the filter conditions in the Find Duplicates feature.<br><b>Filter</b>: The field will appear in the Merge Duplicates feature, and will be available to use for the filter conditions in the Find Duplicates feature.<br><b>Default selected filter</b>: The field will appear in the Merge Duplicates feature, and will be used by default for the filter conditions in the Find Duplicates feature.<br><b>Only filter</b>: The field will not appear in the Merge Duplicates feature, but will be available to use for the filter conditions in the Find Duplicates feature.',
|
||||
|
||||
//Revert Module labels
|
||||
'LBL_RESET' => 'Reset',
|
||||
|
|
|
@ -60,6 +60,11 @@ class ParserLabel
|
|||
*/
|
||||
protected $moduleName;
|
||||
|
||||
/**
|
||||
* @var LoggerManager
|
||||
*/
|
||||
protected static $logger;
|
||||
|
||||
/**
|
||||
* ParserLabel constructor.
|
||||
* @param string $moduleName
|
||||
|
@ -71,6 +76,16 @@ class ParserLabel
|
|||
if (!empty($packageName)) {
|
||||
$this->packageName = $packageName;
|
||||
}
|
||||
|
||||
static::setLogger();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
protected static function setLogger()
|
||||
{
|
||||
static::$logger = LoggerManager::getLogger();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -111,7 +126,9 @@ class ParserLabel
|
|||
*/
|
||||
public static function removeLabel($language, $label, $labelvalue, $moduleName, $basepath = null, $forRelationshipLabel = false)
|
||||
{
|
||||
$GLOBALS [ 'log' ]->debug("ParserLabel::removeLabels($language, \$label, \$labelvalue, $moduleName, $basepath );");
|
||||
static::setLogger();
|
||||
|
||||
static::$logger->debug("ParserLabel::removeLabels($language, \$label, \$labelvalue, $moduleName, $basepath );");
|
||||
if (is_null($basepath)) {
|
||||
$deployedModule = true;
|
||||
$basepath = "custom/modules/$moduleName/language";
|
||||
|
@ -119,7 +136,7 @@ class ParserLabel
|
|||
$basepath = "custom/modules/$moduleName/Ext/Language";
|
||||
}
|
||||
if (!is_dir($basepath)) {
|
||||
$GLOBALS ['log']->debug("$basepath is not a directory.");
|
||||
static::$logger->debug("$basepath is not a directory.");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -139,12 +156,12 @@ class ParserLabel
|
|||
// obtain $mod_strings
|
||||
include $filename;
|
||||
} else {
|
||||
$GLOBALS ['log']->debug("file $filename does not exist.");
|
||||
static::$logger->debug("file $filename does not exist.");
|
||||
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$GLOBALS ['log']->debug("directory $basepath does not exist.");
|
||||
static::$logger->debug("directory $basepath does not exist.");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -158,11 +175,11 @@ class ParserLabel
|
|||
|
||||
if ($changed) {
|
||||
if (!write_array_to_file('mod_strings', $mod_strings, $filename)) {
|
||||
$GLOBALS [ 'log' ]->fatal("Could not write $filename");
|
||||
static::$logger->fatal("Could not write $filename");
|
||||
} else {
|
||||
// if we have a cache to worry about, then clear it now
|
||||
if ($deployedModule) {
|
||||
$GLOBALS ['log']->debug('PaserLabel::addLabels: clearing language cache');
|
||||
static::$logger->debug('PaserLabel::addLabels: clearing language cache');
|
||||
$cache_key = 'module_language.'.$language.$moduleName;
|
||||
sugar_cache_clear($cache_key);
|
||||
LanguageManager::clearLanguageCache($moduleName, $language);
|
||||
|
@ -184,25 +201,21 @@ class ParserLabel
|
|||
*/
|
||||
public static function addLabels($language, $labels, $moduleName, $basepath = null, $forRelationshipLabel = false)
|
||||
{
|
||||
$GLOBALS [ 'log' ]->debug("ParserLabel::addLabels($language, \$labels, $moduleName, $basepath );");
|
||||
$GLOBALS [ 'log' ]->debug('$labels:'.print_r($labels, true));
|
||||
static::setLogger();
|
||||
|
||||
static::$logger->debug("ParserLabel::addLabels($language, \$labels, $moduleName, $basepath );");
|
||||
static::$logger->debug('$labels:' . print_r($labels, true));
|
||||
|
||||
$deployedModule = false;
|
||||
if (null === $basepath) {
|
||||
$deployedModule = true;
|
||||
$basepath = "custom/modules/$moduleName/language";
|
||||
if ($forRelationshipLabel) {
|
||||
$basepath = "custom/modules/$moduleName/Ext/Language";
|
||||
}
|
||||
$basepath = "custom/Extension/modules/$moduleName/Ext/Language";
|
||||
if (!is_dir($basepath)) {
|
||||
mkdir_recursive($basepath);
|
||||
}
|
||||
}
|
||||
|
||||
$filename = "$basepath/$language.lang.php";
|
||||
if ($forRelationshipLabel) {
|
||||
$filename = "$basepath/$language.lang.ext.php";
|
||||
}
|
||||
$filename = "$basepath/_override_$language.lang.php";
|
||||
$dir_exists = is_dir($basepath);
|
||||
|
||||
$mod_strings = array();
|
||||
|
@ -231,15 +244,15 @@ class ParserLabel
|
|||
}
|
||||
|
||||
if ($changed) {
|
||||
$GLOBALS [ 'log' ]->debug("ParserLabel::addLabels: writing new mod_strings to $filename");
|
||||
$GLOBALS [ 'log' ]->debug('ParserLabel::addLabels: mod_strings='.print_r($mod_strings, true));
|
||||
if (!write_array_to_file('mod_strings', $mod_strings, $filename)) {
|
||||
$GLOBALS [ 'log' ]->fatal("Could not write $filename");
|
||||
static::$logger->debug("ParserLabel::addLabels: writing new mod_strings to $filename");
|
||||
static::$logger->debug('ParserLabel::addLabels: mod_strings='.print_r($mod_strings, true));
|
||||
if (!write_override_label_to_file('mod_strings', $mod_strings, $filename)) {
|
||||
static::$logger->fatal("Could not write $filename");
|
||||
} else {
|
||||
// if we have a cache to worry about, then clear it now
|
||||
if ($deployedModule) {
|
||||
SugarCache::cleanOpcodes();
|
||||
$GLOBALS [ 'log' ]->debug('PaserLabel::addLabels: clearing language cache');
|
||||
static::$logger->debug('PaserLabel::addLabels: clearing language cache');
|
||||
$cache_key = 'module_language.'.$language.$moduleName;
|
||||
sugar_cache_clear($cache_key);
|
||||
LanguageManager::clearLanguageCache($moduleName, $language);
|
||||
|
@ -295,8 +308,8 @@ class ParserLabel
|
|||
fwrite($file_contents, $out, strlen($out));
|
||||
fclose($file_contents);
|
||||
} catch (Exception $e) {
|
||||
$GLOBALS ['log']->fatal("Could not write $filename");
|
||||
$GLOBALS ['log']->fatal('Exception '.$e->getMessage());
|
||||
static::$logger->fatal("Could not write $filename");
|
||||
static::$logger->fatal('Exception '.$e->getMessage());
|
||||
}
|
||||
|
||||
//2. Overwrite custom/Extension/modules/relationships/language/{ModuleName}.php
|
||||
|
@ -342,8 +355,8 @@ class ParserLabel
|
|||
fwrite($file_contents, $out, strlen($out));
|
||||
fclose($file_contents);
|
||||
} catch (Exception $e) {
|
||||
$GLOBALS ['log']->fatal("Could not write $filename");
|
||||
$GLOBALS ['log']->fatal('Exception '.$e->getMessage());
|
||||
static::$logger->fatal("Could not write $filename");
|
||||
static::$logger->fatal('Exception '.$e->getMessage());
|
||||
$failed_to_write = true;
|
||||
}
|
||||
|
||||
|
@ -352,7 +365,7 @@ class ParserLabel
|
|||
// if we have a cache to worry about, then clear it now
|
||||
if ($deployedModule) {
|
||||
SugarCache::cleanOpcodes();
|
||||
$GLOBALS ['log']->debug('PaserLabel::addLabels: clearing language cache');
|
||||
static::$logger->debug('PaserLabel::addLabels: clearing language cache');
|
||||
$cache_key = 'module_language.'.$language.$moduleName;
|
||||
sugar_cache_clear($cache_key);
|
||||
LanguageManager::clearLanguageCache($moduleName, $language);
|
||||
|
|
|
@ -55,11 +55,11 @@ $focus->retrieve($_POST['record']);
|
|||
if (isset($_POST['isDuplicate']) && $_POST['isDuplicate'] == true) {
|
||||
$focus->id='';
|
||||
$focus->name=$mod_strings['LBL_COPY_PREFIX'].' '.$focus->name;
|
||||
|
||||
|
||||
$focus->save();
|
||||
$return_id=$focus->id;
|
||||
//duplicate the linked items.
|
||||
$query = "select * from prospect_lists_prospects where prospect_list_id = '".$_POST['record']."'";
|
||||
$query = "select * from prospect_lists_prospects where prospect_list_id = '". $focus->db->quote($_POST['record']) ."'";
|
||||
$result = $focus->db->query($query);
|
||||
if ($result != null) {
|
||||
while (($row = $focus->db->fetchByAssoc($result)) != null) {
|
||||
|
|
|
@ -148,16 +148,16 @@ class DropDownHelper
|
|||
//only if the value has changed or does not exist do we want to add it this way
|
||||
if (!isset($my_list_strings[$dropdown_name][$key]) || strcmp($my_list_strings[$dropdown_name][$key], $value) != 0) {
|
||||
//clear out the old value
|
||||
$contents = preg_replace($this->getPatternMatchGlobal($dropdown_name), "\n", $contents);
|
||||
$contents = preg_replace($this->getPatternMatch($dropdown_name), "\n", $contents);
|
||||
$contents = preg_replace(self::getPatternMatchGlobal($dropdown_name), "\n", $contents);
|
||||
$contents = preg_replace(self::getPatternMatch($dropdown_name), "\n", $contents);
|
||||
//add the new ones
|
||||
$contents .= "\n\$app_list_strings['$dropdown_name']['$key']=" . var_export_helper($value) . ";";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//clear out the old value
|
||||
$contents = preg_replace($this->getPatternMatchGlobal($dropdown_name), "\n", $contents);
|
||||
$contents = preg_replace($this->getPatternMatch($dropdown_name), "\n", $contents);
|
||||
$contents = preg_replace(self::getPatternMatchGlobal($dropdown_name), "\n", $contents);
|
||||
$contents = preg_replace(self::getPatternMatch($dropdown_name), "\n", $contents);
|
||||
//add the new ones
|
||||
$contents .= "\n\$app_list_strings['$dropdown_name']=" . var_export_helper($dropdown) . ";";
|
||||
}
|
||||
|
@ -175,13 +175,13 @@ class DropDownHelper
|
|||
// ~~~~~~~~
|
||||
}
|
||||
|
||||
public function getPatternMatchGlobal($dropdown_name)
|
||||
public static function getPatternMatchGlobal($dropdown_name)
|
||||
{
|
||||
return '/\s*\$GLOBALS\s*\[\s*\'app_list_strings\s*\'\s*\]\[\s*\''
|
||||
. $dropdown_name.'\'\s*\]\s*=\s*array\s*\([^\)]*\)\s*;\s*/ism';
|
||||
}
|
||||
|
||||
public function getPatternMatch($dropdown_name)
|
||||
public static function getPatternMatch($dropdown_name)
|
||||
{
|
||||
return '/\s*\$app_list_strings\s*\[\s*\''.$dropdown_name.'\'\s*\]\s*=\s*array\s*\([^\)]*\)\s*;\s*/ism';
|
||||
}
|
||||
|
|
|
@ -606,6 +606,10 @@ class User extends Person implements EmailInterface
|
|||
{
|
||||
global $current_user, $mod_strings;
|
||||
|
||||
if (!$this->hasSaveAccess()) {
|
||||
throw new RuntimeException('Not authorized');
|
||||
}
|
||||
|
||||
$msg = '';
|
||||
|
||||
$isUpdate = !empty($this->id) && !$this->new_with_id;
|
||||
|
@ -1591,6 +1595,11 @@ EOQ;
|
|||
|
||||
public function create_export_query($order_by, $where, $relate_link_join = '')
|
||||
{
|
||||
global $current_user;
|
||||
if (!is_admin($current_user)) {
|
||||
throw new RuntimeException('Not authorized');
|
||||
}
|
||||
|
||||
include('modules/Users/field_arrays.php');
|
||||
|
||||
$cols = '';
|
||||
|
@ -2437,4 +2446,25 @@ EOQ;
|
|||
}
|
||||
return $subTheme;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if current user can save the current user record
|
||||
* @return bool
|
||||
*/
|
||||
protected function hasSaveAccess(): bool
|
||||
{
|
||||
global $current_user;
|
||||
|
||||
if (empty($this->id)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (empty($current_user->id)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$sameUser = $current_user->id === $this->id;
|
||||
|
||||
return $sameUser || is_admin($current_user);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -123,7 +123,7 @@
|
|||
public function create_sugar_freebusy($user_bean, $start_date_time, $end_date_time)
|
||||
{
|
||||
$ical_array = array();
|
||||
global $DO_USER_TIME_OFFSET, $timedate, $current_user;
|
||||
global $DO_USER_TIME_OFFSET, $timedate;
|
||||
|
||||
$DO_USER_TIME_OFFSET = true;
|
||||
if (empty($GLOBALS['current_user']) || empty($GLOBALS['current_user']->id)) {
|
||||
|
@ -138,11 +138,11 @@
|
|||
// loop thru each activity, get start/end time in UTC, and return FREEBUSY strings
|
||||
foreach ($acts_arr as $act) {
|
||||
if (empty($act->start_time)) {
|
||||
$startTime = $timedate->fromUser($act->sugar_bean->date_start, $user_bean);
|
||||
$act->start_time = $timedate->fromUser($act->sugar_bean->date_start, $user_bean);
|
||||
}
|
||||
|
||||
if (empty($act->end_time)) {
|
||||
$endTime = $timedate->fromUser($act->sugar_bean->date_finish, $user_bean);
|
||||
$act->end_time = $timedate->fromUser($act->sugar_bean->date_finish, $user_bean);
|
||||
}
|
||||
|
||||
$ID = $act->sugar_bean->id;
|
||||
|
|
|
@ -4,5 +4,5 @@ if (!defined('sugarEntry') || !sugarEntry) {
|
|||
}
|
||||
|
||||
$suitecrm_version = '8.0.3';
|
||||
$suitecrm_legacy = '7.12.3';
|
||||
$suitecrm_timestamp = '2022-01-28 12:00:00';
|
||||
$suitecrm_legacy = '7.12.5';
|
||||
$suitecrm_timestamp = '2022-03-01 12:00:00';
|
||||
|
|
|
@ -128,6 +128,8 @@ class EmployeeTest extends SuitePHPUnitFrameworkTestCase
|
|||
{
|
||||
$employee = BeanFactory::newBean('Employees');
|
||||
|
||||
global $current_user;
|
||||
$current_user->is_admin = '1';
|
||||
//test with empty string params
|
||||
$expected = "SELECT id, user_name, first_name, last_name, description, date_entered, date_modified, modified_user_id, created_by, title, department, is_admin, phone_home, phone_mobile, phone_work, phone_other, phone_fax, address_street, address_city, address_state, address_postalcode, address_country, reports_to_id, portal_only, status, receive_notifications, employee_status, messenger_id, messenger_type, is_group FROM users WHERE users.deleted = 0 ORDER BY users.user_name";
|
||||
$actual = $employee->create_export_query('', '');
|
||||
|
@ -137,6 +139,11 @@ class EmployeeTest extends SuitePHPUnitFrameworkTestCase
|
|||
$expected = "SELECT id, user_name, first_name, last_name, description, date_entered, date_modified, modified_user_id, created_by, title, department, is_admin, phone_home, phone_mobile, phone_work, phone_other, phone_fax, address_street, address_city, address_state, address_postalcode, address_country, reports_to_id, portal_only, status, receive_notifications, employee_status, messenger_id, messenger_type, is_group FROM users WHERE users.user_name=\"\" AND users.deleted = 0 ORDER BY users.id";
|
||||
$actual = $employee->create_export_query('users.id', 'users.user_name=""');
|
||||
self::assertSame($expected, $actual);
|
||||
|
||||
$current_user->is_admin = '0';
|
||||
$this->expectException(RuntimeException::class);
|
||||
$employee->create_export_query('', '');
|
||||
|
||||
}
|
||||
|
||||
public function testpreprocess_fields_on_save(): void
|
||||
|
|
|
@ -683,16 +683,22 @@ class UserTest extends SuitePHPUnitFrameworkTestCase
|
|||
{
|
||||
$user = BeanFactory::newBean('Users');
|
||||
|
||||
global $current_user;
|
||||
$current_user->is_admin = '1';
|
||||
//test with empty string params
|
||||
$expected = "SELECT id, user_name, first_name, last_name, description, date_entered, date_modified, modified_user_id, created_by, title, department, is_admin, phone_home, phone_mobile, phone_work, phone_other, phone_fax, address_street, address_city, address_state, address_postalcode, address_country, reports_to_id, portal_only, status, receive_notifications, employee_status, messenger_id, messenger_type, is_group FROM users WHERE users.deleted = 0 AND users.is_admin=0 ORDER BY users.user_name";
|
||||
$expected = "SELECT id, user_name, first_name, last_name, description, date_entered, date_modified, modified_user_id, created_by, title, department, is_admin, phone_home, phone_mobile, phone_work, phone_other, phone_fax, address_street, address_city, address_state, address_postalcode, address_country, reports_to_id, portal_only, status, receive_notifications, employee_status, messenger_id, messenger_type, is_group FROM users WHERE users.deleted = 0 ORDER BY users.user_name";
|
||||
$actual = $user->create_export_query('', '');
|
||||
self::assertSame($expected, $actual);
|
||||
|
||||
|
||||
//test with valid string params
|
||||
$expected = "SELECT id, user_name, first_name, last_name, description, date_entered, date_modified, modified_user_id, created_by, title, department, is_admin, phone_home, phone_mobile, phone_work, phone_other, phone_fax, address_street, address_city, address_state, address_postalcode, address_country, reports_to_id, portal_only, status, receive_notifications, employee_status, messenger_id, messenger_type, is_group FROM users WHERE user_name=\"\" AND users.deleted = 0 AND users.is_admin=0 ORDER BY id";
|
||||
$expected = "SELECT id, user_name, first_name, last_name, description, date_entered, date_modified, modified_user_id, created_by, title, department, is_admin, phone_home, phone_mobile, phone_work, phone_other, phone_fax, address_street, address_city, address_state, address_postalcode, address_country, reports_to_id, portal_only, status, receive_notifications, employee_status, messenger_id, messenger_type, is_group FROM users WHERE user_name=\"\" AND users.deleted = 0 ORDER BY id";
|
||||
$actual = $user->create_export_query('id', 'user_name=""');
|
||||
self::assertSame($expected, $actual);
|
||||
|
||||
$current_user->is_admin = '0';
|
||||
$this->expectException(RuntimeException::class);
|
||||
$user->create_export_query('', '');
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1863,7 +1863,7 @@ div.qtip.qtip-default {
|
|||
}
|
||||
|
||||
.search_form .view .dateTimeRangeChoice select {
|
||||
width: 90px;
|
||||
width: 130px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
|
@ -3422,7 +3422,7 @@ ul.clickMenu > li > span.searchAppliedAlert {
|
|||
|
||||
.search_form.non-popup input[type="text"] {
|
||||
border: none;
|
||||
height: 20px;
|
||||
height: 28px;
|
||||
min-height: 20px;
|
||||
padding: 5px;
|
||||
line-height: 20px;
|
||||
|
@ -3430,10 +3430,11 @@ ul.clickMenu > li > span.searchAppliedAlert {
|
|||
|
||||
.search_form.non-popup select {
|
||||
border: none;
|
||||
height: 20px;
|
||||
height: 28px;
|
||||
min-height: 20px;
|
||||
padding: 5px;
|
||||
line-height: 20px;
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
.search_form.non-popup textarea {
|
||||
|
|
|
@ -11,13 +11,13 @@
|
|||
</td>
|
||||
<td style="padding-right: 0px;" nowrap="" width="1%">
|
||||
<div class="dashletToolSet">
|
||||
<a href="javascript:void(0)" title="{$DASHLET_BUTTON_ARIA_REFRESH}" aria-label="{$DASHLET_BUTTON_ARIA_REFRESH}" onclick="SUGAR.mySugar.retrieveCurrentPage(); return false;">
|
||||
<a href="javascript:void(0)" title="{$DASHLET_BUTTON_ARIA_REFRESH}" aria-label="{$DASHLET_BUTTON_ARIA_REFRESH}" onclick="SUGAR.mySugar.retrieveDashlet('{$DASHLET_ID}'); return false;">
|
||||
<span class="refresh">{sugar_getimage name="refresh"}</span>
|
||||
</a>
|
||||
<a href="javascript:void(0)" title="{$DASHLET_BUTTON_ARIA_EDIT}" aria-label="{$DASHLET_BUTTON_ARIA_EDIT}" onclick="SUGAR.mySugar.configureDashlet('{$DASHLET_ID}'); return false;">
|
||||
<span class="settings">{sugar_getimage name="settings"}</span>
|
||||
</a>
|
||||
<a href="javascript:void(0)" title="{$DASHLET_BUTTON_ARIA_DELETE}" aria-label="{$DASHLET_BUTTON_ARIA_DELETE}" onclick="SUGAR.mySugar.deleteDashlet('{$DASHLET_ID}'); return false;">
|
||||
</a>
|
||||
<a href="javascript:void(0)" title="{$DASHLET_BUTTON_ARIA_EDIT}" aria-label="{$DASHLET_BUTTON_ARIA_EDIT}" onclick="SUGAR.mySugar.configureDashlet('{$DASHLET_ID}'); return false;">
|
||||
<span class="settings">{sugar_getimage name="settings"}</span>
|
||||
</a>
|
||||
<a href="javascript:void(0)" title="{$DASHLET_BUTTON_ARIA_DELETE}" aria-label="{$DASHLET_BUTTON_ARIA_DELETE}" onclick="SUGAR.mySugar.deleteDashlet('{$DASHLET_ID}'); return false;">
|
||||
<span class="cross">{sugar_getimage name="cross"}</span>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -29,4 +29,4 @@
|
|||
</div>
|
||||
<div class="bd">
|
||||
<div class="ml"></div>
|
||||
<div class="bd-center">
|
||||
<div class="bd-center">
|
||||
|
|
|
@ -351,7 +351,7 @@
|
|||
$(function(){
|
||||
$('#content ul.nav.nav-tabs > li > a[data-toggle="tab"]').click(function(e){
|
||||
if(typeof $(this).parent().find('a').first().attr('id') != 'undefined') {
|
||||
var tab = parseInt($(this).parent().find('a').first().attr('id').match(/^tab(.)*$/)[1]);
|
||||
var tab = parseInt($(this).parent().find('a').first().attr('id').match(/^tab(?<number>(.)*)$/)[1]);
|
||||
selectTabDetailView(tab);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -249,7 +249,7 @@ $(document).ready(function() {ldelim}
|
|||
$(function(){
|
||||
$('#EditView_tabs ul.nav.nav-tabs li > a[data-toggle="tab"]').click(function(e){
|
||||
if(typeof $(this).parent().find('a').first().attr('id') != 'undefined') {
|
||||
var tab = parseInt($(this).parent().find('a').first().attr('id').match(/^tab(.)*$/)[1]);
|
||||
var tab = parseInt($(this).parent().find('a').first().attr('id').match(/^tab(?<number>(.)*)$/)[1]);
|
||||
selectTab(tab);
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue