diff --git a/install/cli.php b/install/cli.php index ede4f82546..e0816feafe 100644 --- a/install/cli.php +++ b/install/cli.php @@ -95,8 +95,6 @@ if (preg_match('/"success":false/i', $result)) { exit; } - fwrite(\STDOUT, "Error: ". (!empty($resultData['errors']) ? print_r($resultData['errors'], true) : $resultData['errorMsg']) .".\n"); + fwrite(\STDOUT, "Error: ". (!empty($resultData['errors']) ? print_r($resultData['errors'], true) : $resultData['errorMsg']) ."\n"); exit; } - -fwrite(\STDOUT, "Done.\n"); diff --git a/install/core/Installer.php b/install/core/Installer.php index edb7af7c26..550441ed9f 100644 --- a/install/core/Installer.php +++ b/install/core/Installer.php @@ -51,14 +51,26 @@ class Installer private $passwordHash; - protected $settingList = array( + protected $defaultSettings; + + protected $permittedSettingList = array( 'dateFormat', 'timeFormat', 'timeZone', 'weekStart', 'defaultCurrency', - 'smtpSecurity', 'language', + 'thousandSeparator', + 'decimalMark', + 'smtpServer', + 'smtpPort', + 'smtpAuth', + 'smtpSecurity', + 'smtpUsername', + 'smtpPassword', + 'outboundEmailFromName', + 'outboundEmailFromAddress', + 'outboundEmailIsShared', ); public function __construct() @@ -311,6 +323,8 @@ class Installer public function setPreferences($preferences) { + $preferences = $this->normalizeSettingParams($preferences); + $currencyList = $this->getConfig()->get('currencyList', []); if (isset($preferences['defaultCurrency']) && !in_array($preferences['defaultCurrency'], $currencyList)) { @@ -457,30 +471,76 @@ class Installer return $result; } - public function getSettingDefaults() + public function getDefaultSettings() { - $settingDefs = $this->app->getMetadata()->get('entityDefs.Settings.fields'); + if (!$this->defaultSettings) { - $defaults = array(); + $settingDefs = $this->app->getMetadata()->get('entityDefs.Settings.fields'); - foreach ($this->settingList as $fieldName) { + $defaults = array(); + foreach ($this->permittedSettingList as $fieldName) { - if (!isset($settingDefs[$fieldName])) continue; + if (!isset($settingDefs[$fieldName])) continue; - switch ($fieldName) { - case 'defaultCurrency': - $settingDefs['defaultCurrency']['options'] = $this->getCurrencyList(); - break; + switch ($fieldName) { + case 'defaultCurrency': + $settingDefs['defaultCurrency']['options'] = $this->getCurrencyList(); + break; - case 'language': - $settingDefs['language']['options'] = $this->getLanguageList(false); - break; + case 'language': + $settingDefs['language']['options'] = $this->getLanguageList(false); + break; + } + + $defaults[$fieldName] = $this->translateSetting($fieldName, $settingDefs[$fieldName]); } - $defaults[$fieldName] = $this->translateSetting($fieldName, $settingDefs[$fieldName]); + $this->defaultSettings = $defaults; } - return $defaults; + return $this->defaultSettings; + } + + protected function normalizeSettingParams(array $params) + { + $defaultSettings = $this->getDefaultSettings(); + + $normalizedParams = []; + foreach ($params as $name => $value) { + if (!isset($defaultSettings[$name])) continue; + + $paramDefs = $defaultSettings[$name]; + $paramType = isset($paramDefs['type']) ? $paramDefs['type'] : 'varchar'; + + switch ($paramType) { + case 'enumInt': + $value = (int) $value; + + case 'enum': + if (isset($paramDefs['options']) && array_key_exists($value, $paramDefs['options'])) { + $normalizedParams[$name] = $value; + } else if (array_key_exists('default', $paramDefs)) { + $normalizedParams[$name] = $paramDefs['default']; + $GLOBALS['log']->warning('Incorrect value ['. $value .'] for Settings parameter ['. $name .']. Use default value ['. $paramDefs['default'] .'].'); + } + break; + + case 'bool': + $normalizedParams[$name] = (bool) $value; + break; + + case 'int': + $normalizedParams[$name] = (int) $value; + break; + + case 'varchar': + default: + $normalizedParams[$name] = $value; + break; + } + } + + return $normalizedParams; } protected function translateSetting($name, array $settingDefs) diff --git a/install/core/actions/setEmailSett.php b/install/core/actions/setEmailSett.php index b8878037c0..204fb7214f 100644 --- a/install/core/actions/setEmailSett.php +++ b/install/core/actions/setEmailSett.php @@ -25,23 +25,46 @@ * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. - ************************************************************************/ + ************************************************************************/ ob_start(); $result = array('success' => false, 'errorMsg' => ''); if (!empty($_SESSION['install'])) { - $preferences = array( - 'smtpServer' => $_SESSION['install']['smtpServer'], - 'smtpPort' => $_SESSION['install']['smtpPort'], - 'smtpAuth' => (empty($_SESSION['install']['smtpAuth']) || $_SESSION['install']['smtpAuth'] == 'false' || !$_SESSION['install']['smtpAuth'])? false : true, - 'smtpSecurity' => $_SESSION['install']['smtpSecurity'], - 'smtpUsername' => $_SESSION['install']['smtpUsername'], - 'smtpPassword' => $_SESSION['install']['smtpPassword'], - 'outboundEmailFromName' => $_SESSION['install']['outboundEmailFromName'], - 'outboundEmailFromAddress' => $_SESSION['install']['outboundEmailFromAddress'], - 'outboundEmailIsShared' => (empty($_SESSION['install']['smtpAuth']) || $_SESSION['install']['outboundEmailIsShared'] == 'false' || !$_SESSION['install']['smtpAuth'])? false : true, - ); + + $paramList = [ + 'smtpServer', + 'smtpPort', + 'smtpAuth', + 'smtpSecurity', + 'smtpUsername', + 'smtpPassword', + 'outboundEmailFromName', + 'outboundEmailFromAddress', + 'outboundEmailIsShared', + ]; + + $preferences = []; + foreach ($paramList as $paramName) { + + switch ($paramName) { + case 'smtpAuth': + $preferences['smtpAuth'] = (empty($_SESSION['install']['smtpAuth']) || $_SESSION['install']['smtpAuth'] == 'false' || !$_SESSION['install']['smtpAuth']) ? false : true; + break; + + case 'outboundEmailIsShared': + $preferences['outboundEmailIsShared'] = (empty($_SESSION['install']['smtpAuth']) || $_SESSION['install']['outboundEmailIsShared'] == 'false' || !$_SESSION['install']['smtpAuth']) ? false : true; + break; + + default: + if (array_key_exists($paramName, $_SESSION['install'])) { + $preferences[$paramName] = $_SESSION['install'][$paramName]; + } + break; + } + + } + $res = $installer->setPreferences($preferences); if (!empty($res)) { $result['success'] = true; diff --git a/install/core/actions/setPreferences.php b/install/core/actions/setPreferences.php index 1dab2ff0d4..51a5363927 100644 --- a/install/core/actions/setPreferences.php +++ b/install/core/actions/setPreferences.php @@ -25,22 +25,30 @@ * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. - ************************************************************************/ + ************************************************************************/ ob_start(); $result = array('success' => false, 'errorMsg' => ''); if (!empty($_SESSION['install'])) { - $preferences = array( - 'dateFormat' => $_SESSION['install']['dateFormat'], - 'timeFormat' => $_SESSION['install']['timeFormat'], - 'timeZone' => $_SESSION['install']['timeZone'], - 'weekStart' => (int)$_SESSION['install']['weekStart'], - 'defaultCurrency' => $_SESSION['install']['defaultCurrency'], - 'thousandSeparator' => $_SESSION['install']['thousandSeparator'], - 'decimalMark' => $_SESSION['install']['decimalMark'], - 'language' => $_SESSION['install']['language'], - ); + $paramList = [ + 'dateFormat', + 'timeFormat', + 'timeZone', + 'weekStart', + 'defaultCurrency', + 'thousandSeparator', + 'decimalMark', + 'language', + ]; + + $preferences = []; + foreach ($paramList as $paramName) { + if (array_key_exists($paramName, $_SESSION['install'])) { + $preferences[$paramName] = $_SESSION['install'][$paramName]; + } + } + $res = $installer->setPreferences($preferences); if (!empty($res)) { $result['success'] = true; diff --git a/install/core/tpl/step4.tpl b/install/core/tpl/step4.tpl index c82e970df6..d8da4aa2de 100644 --- a/install/core/tpl/step4.tpl +++ b/install/core/tpl/step4.tpl @@ -10,7 +10,7 @@
- {foreach from=$settingsDefaults['timeFormat'].options item=lbl key=val} + {foreach from=$defaultSettings['timeFormat'].options item=lbl key=val} {if $val == $fields['timeFormat'].value} {else} @@ -46,7 +46,7 @@
- {foreach from=$settingsDefaults['weekStart'].options item=lbl key=val} + {foreach from=$defaultSettings['weekStart'].options item=lbl key=val} {if $val == $fields['weekStart'].value} {else} @@ -82,7 +82,7 @@
- {foreach from=$settingsDefaults['language'].options item=lbl key=val} + {foreach from=$defaultSettings['language'].options item=lbl key=val} {if $val == $fields['language'].value} {else} diff --git a/install/core/tpl/step5.tpl b/install/core/tpl/step5.tpl index 1ed183c8e1..12f0ea1d58 100644 --- a/install/core/tpl/step5.tpl +++ b/install/core/tpl/step5.tpl @@ -70,7 +70,7 @@