"
if (_.has(values, groupName) && _.has(values[groupName], setting.name)) {
@@ -16,20 +18,26 @@ var viewHelpers = {
setting_value = ""
}
+ label_class = 'control-label'
+ if (isLocked) {
+ label_class += ' locked'
+ }
+
if (setting.type === 'checkbox') {
- form_group += "
"
+ form_group += "
"
+ form_group += "
"
form_group += "";
form_group += "
"
} else {
input_type = _.has(setting, 'type') ? setting.type : "text"
- form_group += "
";
+ form_group += "
";
form_group += "
"
+ "' value='" + setting_value + "'" + (isLocked ? " disabled" : "") + "/>"
form_group += "
" + setting.help + ""
}
@@ -101,6 +109,12 @@ function reloadSettings() {
$('#panels').html(Settings.panelsTemplate(data))
Settings.initialValues = form2js('settings-form', "_", false, cleanupFormValues, true);
+
+ // add tooltip to locked settings
+ $('label.locked').tooltip({
+ placement: 'right',
+ title: 'This setting is in the master config file and cannot be changed'
+ })
});
}
diff --git a/domain-server/resources/web/settings/index.shtml b/domain-server/resources/web/settings/index.shtml
index 54fbb02eca..2f0cdf6537 100644
--- a/domain-server/resources/web/settings/index.shtml
+++ b/domain-server/resources/web/settings/index.shtml
@@ -38,10 +38,12 @@
<% split_settings = _.partition(group.settings, function(value, index) { return !value.advanced }) %>
<% _.each(split_settings[0], function(setting) { %>
- <%= getFormGroup(group.name, setting, values, false) %>
+ <%= getFormGroup(group.name, setting, values, false,
+ (_.has(locked, group.name) && _.has(locked[group.name], setting.name))) %>
<% }); %>
<% _.each(split_settings[1], function(setting) { %>
- <%= getFormGroup(group.name, setting, values, true) %>
+ <%= getFormGroup(group.name, setting, values, true,
+ (_.has(locked, group.name) && _.has(locked[group.name], setting.name))) %>
<% }); %>
diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp
index b1ed765be6..4f048a2ec9 100644
--- a/domain-server/src/DomainServer.cpp
+++ b/domain-server/src/DomainServer.cpp
@@ -57,7 +57,7 @@ DomainServer::DomainServer(int argc, char* argv[]) :
setApplicationName("domain-server");
QSettings::setDefaultFormat(QSettings::IniFormat);
- _settingsManager.loadSettingsMap(arguments());
+ _settingsManager.setupConfigMap(arguments());
installNativeEventFilter(&_shutdownEventListener);
connect(&_shutdownEventListener, SIGNAL(receivedCloseEvent()), SLOT(quit()));
diff --git a/domain-server/src/DomainServerSettingsManager.cpp b/domain-server/src/DomainServerSettingsManager.cpp
index d9b1d4d8d6..fc36a97a25 100644
--- a/domain-server/src/DomainServerSettingsManager.cpp
+++ b/domain-server/src/DomainServerSettingsManager.cpp
@@ -28,7 +28,7 @@ const QString SETTINGS_DESCRIPTION_RELATIVE_PATH = "/resources/describe-settings
DomainServerSettingsManager::DomainServerSettingsManager() :
_descriptionArray(),
- _settingsMap()
+ _configMap()
{
// load the description object from the settings description
QFile descriptionFile(QCoreApplication::applicationDirPath() + SETTINGS_DESCRIPTION_RELATIVE_PATH);
@@ -37,11 +37,8 @@ DomainServerSettingsManager::DomainServerSettingsManager() :
_descriptionArray = QJsonDocument::fromJson(descriptionFile.readAll()).array();
}
-void DomainServerSettingsManager::loadSettingsMap(const QStringList& argumentList) {
- _settingsMap = HifiConfigVariantMap::mergeMasterConfigWithUserConfig(argumentList);
-
- // figure out where we are supposed to persist our settings to
- _settingsFilepath = HifiConfigVariantMap::userConfigFilepath(argumentList);
+void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList) {
+ _configMap.loadMasterAndUserConfig(argumentList);
}
const QString SETTINGS_PATH = "/settings.json";
@@ -76,7 +73,7 @@ bool DomainServerSettingsManager::handleAuthenticatedHTTPRequest(HTTPConnection
QJsonObject postedObject = postedDocument.object();
// we recurse one level deep below each group for the appropriate setting
- recurseJSONObjectAndOverwriteSettings(postedObject, _settingsMap, _descriptionArray);
+ recurseJSONObjectAndOverwriteSettings(postedObject, _configMap.getUserConfig(), _descriptionArray);
// store whatever the current _settingsMap is to file
persistToFile();
@@ -94,10 +91,13 @@ bool DomainServerSettingsManager::handleAuthenticatedHTTPRequest(HTTPConnection
// setup a JSON Object with descriptions and non-omitted settings
const QString SETTINGS_RESPONSE_DESCRIPTION_KEY = "descriptions";
const QString SETTINGS_RESPONSE_VALUE_KEY = "values";
+ const QString SETTINGS_RESPONSE_LOCKED_VALUES_KEY = "locked";
QJsonObject rootObject;
rootObject[SETTINGS_RESPONSE_DESCRIPTION_KEY] = _descriptionArray;
rootObject[SETTINGS_RESPONSE_VALUE_KEY] = responseObjectForType("", true);
+ rootObject[SETTINGS_RESPONSE_LOCKED_VALUES_KEY] = QJsonDocument::fromVariant(_configMap.getMasterConfig()).object();
+
connection->respond(HTTPConnection::StatusCode200, QJsonDocument(rootObject).toJson(), "application/json");
}
@@ -145,7 +145,8 @@ QJsonObject DomainServerSettingsManager::responseObjectForType(const QString& ty
// we need to check if the settings map has a value for this setting
QVariant variantValue;
- QVariant settingsMapGroupValue = _settingsMap.value(groupObject[DESCRIPTION_NAME_KEY].toString());
+ QVariant settingsMapGroupValue = _configMap.getMergedConfig()
+ .value(groupObject[DESCRIPTION_NAME_KEY].toString());
if (!settingsMapGroupValue.isNull()) {
variantValue = settingsMapGroupValue.toMap().value(settingName);
@@ -239,23 +240,19 @@ void DomainServerSettingsManager::recurseJSONObjectAndOverwriteSettings(const QJ
}
}
-QByteArray DomainServerSettingsManager::getJSONSettingsMap() const {
- return QJsonDocument::fromVariant(_settingsMap).toJson();
-}
-
void DomainServerSettingsManager::persistToFile() {
// make sure we have the dir the settings file is supposed to live in
- QFileInfo settingsFileInfo(_settingsFilepath);
+ QFileInfo settingsFileInfo(_configMap.getUserConfigFilename());
if (!settingsFileInfo.dir().exists()) {
settingsFileInfo.dir().mkpath(".");
}
- QFile settingsFile(_settingsFilepath);
+ QFile settingsFile(_configMap.getUserConfigFilename());
if (settingsFile.open(QIODevice::WriteOnly)) {
- settingsFile.write(getJSONSettingsMap());
+ settingsFile.write(QJsonDocument::fromVariant(_configMap.getUserConfig()).toJson());
} else {
qCritical("Could not write to JSON settings file. Unable to persist settings.");
}
diff --git a/domain-server/src/DomainServerSettingsManager.h b/domain-server/src/DomainServerSettingsManager.h
index 29b773a354..b60cb32dfd 100644
--- a/domain-server/src/DomainServerSettingsManager.h
+++ b/domain-server/src/DomainServerSettingsManager.h
@@ -15,6 +15,7 @@
#include