diff --git a/core/config.class.inc.php b/core/config.class.inc.php index e10a3cd2e..79afb1620 100644 --- a/core/config.class.inc.php +++ b/core/config.class.inc.php @@ -528,6 +528,15 @@ class Config 'source_of_value' => '', 'show_in_conf_sample' => false, ), + 'source_dir' => array( + 'type' => 'string', + 'description' => 'Source directory for the datamodel files. (which gets compiled to env-production).', + // examples... not used + 'default' => 'datamodels/latest', + 'value' => '', + 'source_of_value' => '', + 'show_in_conf_sample' => true, + ), ); public function IsProperty($sPropCode) @@ -1245,64 +1254,98 @@ class Config fwrite($hFile, "m_aSettings; + + // Old fashioned boolean settings + $aBoolValues = array( + 'log_global' => $this->m_bLogGlobal, + 'log_notification' => $this->m_bLogNotification, + 'log_issue' => $this->m_bLogIssue, + 'log_web_service' => $this->m_bLogWebService, + 'secure_connection_required' => $this->m_bSecureConnectionRequired, + ); + foreach($aBoolValues as $sKey => $bValue) + { + $aConfigSettings[$sKey] = array( + 'show_in_conf_sample' => true, + 'type' => 'bool', + 'value' => $bValue, + ); + } + + // Old fashioned non boolean values + $aOtherValues = array( + 'db_host' => $this->m_sDBHost, + 'db_user' => $this->m_sDBUser, + 'db_pwd' => $this->m_sDBPwd, + 'db_name' => $this->m_sDBName, + 'db_subname' => $this->m_sDBSubname, + 'db_character_set' => $this->m_sDBCharacterSet, + 'db_collation' => $this->m_sDBCollation, + 'default_language' => $this->m_sDefaultLanguage, + 'allowed_login_types' => $this->m_sAllowedLoginTypes, + 'encryption_key' => $this->m_sEncryptionKey, + 'csv_import_charsets' => $this->m_aCharsets, + ); + foreach($aOtherValues as $sKey => $value) + { + $aConfigSettings[$sKey] = array( + 'show_in_conf_sample' => true, + 'type' => is_string($value) ? 'string' : 'mixed', + 'value' => $value, + ); + } + + ksort($aConfigSettings); fwrite($hFile, "\$MySettings = array(\n"); - foreach($this->m_aSettings as $sPropCode => $aSettingInfo) + foreach($aConfigSettings as $sPropCode => $aSettingInfo) { if ($aSettingInfo['show_in_conf_sample']) { - $sType = $this->m_aSettings[$sPropCode]['type']; + $sType = $aSettingInfo['type']; switch($sType) { case 'bool': - $sSeenAs = $aSettingInfo['value'] ? '1' : '0'; + $sSeenAs = $aSettingInfo['value'] ? 'true' : 'false'; break; default: - $sSeenAs = "'".addslashes($aSettingInfo['value'])."'"; + $sSeenAs = self::PrettyVarExport($aSettingInfo['value'], "\t"); + } + fwrite($hFile, "\n"); + if (isset($aSettingInfo['description'])) + { + fwrite($hFile, "\t// $sPropCode: {$aSettingInfo['description']}\n"); + } + if (isset($aSettingInfo['default'])) + { + $default = $aSettingInfo['default']; + if ($aSettingInfo['type'] == 'bool') + { + $default = $default ? 'true' : 'false'; + } + fwrite($hFile, "\t//\tdefault: ".self::PrettyVarExport($aSettingInfo['default'],"\t//\t\t", true)."\n"); } fwrite($hFile, "\t'$sPropCode' => $sSeenAs,\n"); } } - fwrite($hFile, "\t'db_host' => '{$this->m_sDBHost}',\n"); - fwrite($hFile, "\t'db_user' => '{$this->m_sDBUser}',\n"); - fwrite($hFile, "\t'db_pwd' => '".addslashes($this->m_sDBPwd)."',\n"); - fwrite($hFile, "\t'db_name' => '{$this->m_sDBName}',\n"); - fwrite($hFile, "\t'db_subname' => '{$this->m_sDBSubname}',\n"); - fwrite($hFile, "\t'db_character_set' => '{$this->m_sDBCharacterSet}',\n"); - fwrite($hFile, "\t'db_collation' => '{$this->m_sDBCollation}',\n"); - fwrite($hFile, "\n"); - fwrite($hFile, "\t'log_global' => {$this->m_bLogGlobal},\n"); - fwrite($hFile, "\t'log_notification' => {$this->m_bLogNotification},\n"); - fwrite($hFile, "\t'log_issue' => {$this->m_bLogIssue},\n"); - fwrite($hFile, "\t'log_web_service' => {$this->m_bLogWebService},\n"); - fwrite($hFile, "\t'min_display_limit' => {$this->m_iMinDisplayLimit},\n"); - fwrite($hFile, "\t'max_display_limit' => {$this->m_iMaxDisplayLimit},\n"); - fwrite($hFile, "\t'standard_reload_interval' => {$this->m_iStandardReloadInterval},\n"); - fwrite($hFile, "\t'fast_reload_interval' => {$this->m_iFastReloadInterval},\n"); - fwrite($hFile, "\t'secure_connection_required' => ".($this->m_bSecureConnectionRequired ? 'true' : 'false').",\n"); - fwrite($hFile, "\t'default_language' => '{$this->m_sDefaultLanguage}',\n"); - fwrite($hFile, "\t'allowed_login_types' => '{$this->m_sAllowedLoginTypes}',\n"); - fwrite($hFile, "\t'encryption_key' => '{$this->m_sEncryptionKey}',\n"); - $sExport = var_export($this->m_aCharsets, true); - fwrite($hFile, "\t'csv_import_charsets' => $sExport,\n"); - fwrite($hFile, ");\n"); - + fwrite($hFile, "\n"); + fwrite($hFile, "/**\n *\n * Modules specific settings\n *\n */\n"); fwrite($hFile, "\$MyModuleSettings = array(\n"); foreach ($this->m_aModuleSettings as $sModule => $aProperties) { fwrite($hFile, "\t'$sModule' => array (\n"); foreach ($aProperties as $sProperty => $value) { - $sExport = var_export($value, true); - fwrite($hFile, "\t\t'$sProperty' => $sExport,\n"); + $sNiceExport = self::PrettyVarExport($value, "\t\t"); + fwrite($hFile, "\t\t'$sProperty' => $sNiceExport,\n"); } fwrite($hFile, "\t),\n"); } @@ -1501,6 +1544,30 @@ class Config self::ChangePrefix($this->m_aWebServiceCategories, $sSearchPrefix, $sNewPrefix); self::ChangePrefix($this->m_aDictionaries, $sSearchPrefix, $sNewPrefix); } + + /** + * Pretty format a var_export'ed value so that (if possible) the identation is preserved on every line + * @param mixed $value The value to export + * @param string $sIdentation The string to use to indent the text + * @param bool $bForceIndentation Forces the identation (enven if it breaks/changes an eval, for example to ouput a value inside a comment) + * @return string The indented export string + */ + protected static function PrettyVarExport($value, $sIdentation, $bForceIndentation = false) + { + $sExport = var_export($value, true); + $sNiceExport = trim(preg_replace("/^/m", "\t\t\t", $sExport)); + if (!$bForceIndentation) + { + eval('$aImported='.$sNiceExport.';'); + // Check if adding the identations at the beginning of each line + // did not modify the values (in case of a string containing a line break) + if($aImported != $value) + { + $sNiceExport = $sExport; + } + } + return $sNiceExport; + } } ?>