2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-18 21:15:41 +00:00

Provide global_settings and user_settings as context objects

- Adds a new context middleware
- Refactor the way that settings are provided to the javascript layer
This commit is contained in:
Oliver
2021-08-15 11:57:05 +10:00
parent 6c17e330c4
commit faab1f2464
5 changed files with 60 additions and 55 deletions

View File

@ -49,55 +49,37 @@ class BaseInvenTreeSetting(models.Model):
are assigned their default values
"""
keys = set()
settings = []
results = cls.objects.all()
if user is not None:
results = results.filter(user=user)
# Query the database
settings = {}
for setting in results:
if setting.key:
settings.append({
"key": setting.key.upper(),
"value": setting.value
})
keys.add(setting.key.upper())
settings[setting.key.upper()] = setting.value
# Specify any "default" values which are not in the database
for key in cls.GLOBAL_SETTINGS.keys():
if key.upper() not in keys:
if key.upper() not in settings:
settings.append({
"key": key.upper(),
"value": cls.get_setting_default(key)
})
# Enforce javascript formatting
for idx, setting in enumerate(settings):
key = setting['key']
value = setting['value']
settings[key.upper()] = cls.get_setting_default(key)
for key, value in settings.items():
validator = cls.get_setting_validator(key)
# Convert to javascript compatible booleans
if cls.validator_is_bool(validator):
value = str(value).lower()
# Numerical values remain the same
value = InvenTree.helpers.str2bool(value)
elif cls.validator_is_int(validator):
pass
try:
value = int(value)
except ValueError:
value = cls.get_setting_default(key)
# Wrap strings with quotes
else:
value = format_html("'{}'", value)
setting["value"] = value
settings[key] = value
return settings