mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +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:
parent
6c17e330c4
commit
faab1f2464
@ -10,6 +10,8 @@ from InvenTree.status_codes import StockHistoryCode
|
|||||||
|
|
||||||
import InvenTree.status
|
import InvenTree.status
|
||||||
|
|
||||||
|
import common.models
|
||||||
|
|
||||||
from users.models import RuleSet
|
from users.models import RuleSet
|
||||||
|
|
||||||
|
|
||||||
@ -70,6 +72,26 @@ def status_codes(request):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def inventree_settings(request):
|
||||||
|
"""
|
||||||
|
Adds two context objects to the request:
|
||||||
|
|
||||||
|
user_settings - A key:value dict of all user InvenTree settings for the current user
|
||||||
|
global_settings - A key:value dict of all global InvenTree settings
|
||||||
|
|
||||||
|
Providing a single context object for all settings should reduce the number of db hits
|
||||||
|
"""
|
||||||
|
|
||||||
|
ctx = {}
|
||||||
|
|
||||||
|
if request.user:
|
||||||
|
ctx["user_settings"] = common.models.InvenTreeUserSetting.allValues(user=request.user)
|
||||||
|
|
||||||
|
ctx["global_settings"] = common.models.InvenTreeSetting.allValues()
|
||||||
|
|
||||||
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
def user_roles(request):
|
def user_roles(request):
|
||||||
"""
|
"""
|
||||||
Return a map of the current roles assigned to the user.
|
Return a map of the current roles assigned to the user.
|
||||||
|
@ -320,9 +320,11 @@ TEMPLATES = [
|
|||||||
'django.template.context_processors.i18n',
|
'django.template.context_processors.i18n',
|
||||||
'django.contrib.auth.context_processors.auth',
|
'django.contrib.auth.context_processors.auth',
|
||||||
'django.contrib.messages.context_processors.messages',
|
'django.contrib.messages.context_processors.messages',
|
||||||
|
# Custom InvenTree context processors
|
||||||
'InvenTree.context.health_status',
|
'InvenTree.context.health_status',
|
||||||
'InvenTree.context.status_codes',
|
'InvenTree.context.status_codes',
|
||||||
'InvenTree.context.user_roles',
|
'InvenTree.context.user_roles',
|
||||||
|
'InvenTree.context.inventree_settings',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -49,55 +49,37 @@ class BaseInvenTreeSetting(models.Model):
|
|||||||
are assigned their default values
|
are assigned their default values
|
||||||
"""
|
"""
|
||||||
|
|
||||||
keys = set()
|
|
||||||
settings = []
|
|
||||||
|
|
||||||
results = cls.objects.all()
|
results = cls.objects.all()
|
||||||
|
|
||||||
if user is not None:
|
if user is not None:
|
||||||
results = results.filter(user=user)
|
results = results.filter(user=user)
|
||||||
|
|
||||||
# Query the database
|
# Query the database
|
||||||
|
settings = {}
|
||||||
|
|
||||||
for setting in results:
|
for setting in results:
|
||||||
if setting.key:
|
if setting.key:
|
||||||
settings.append({
|
settings[setting.key.upper()] = setting.value
|
||||||
"key": setting.key.upper(),
|
|
||||||
"value": setting.value
|
|
||||||
})
|
|
||||||
|
|
||||||
keys.add(setting.key.upper())
|
|
||||||
|
|
||||||
# Specify any "default" values which are not in the database
|
# Specify any "default" values which are not in the database
|
||||||
for key in cls.GLOBAL_SETTINGS.keys():
|
for key in cls.GLOBAL_SETTINGS.keys():
|
||||||
|
|
||||||
if key.upper() not in keys:
|
if key.upper() not in settings:
|
||||||
|
|
||||||
settings.append({
|
settings[key.upper()] = cls.get_setting_default(key)
|
||||||
"key": key.upper(),
|
|
||||||
"value": cls.get_setting_default(key)
|
|
||||||
})
|
|
||||||
|
|
||||||
# Enforce javascript formatting
|
|
||||||
for idx, setting in enumerate(settings):
|
|
||||||
|
|
||||||
key = setting['key']
|
|
||||||
value = setting['value']
|
|
||||||
|
|
||||||
|
for key, value in settings.items():
|
||||||
validator = cls.get_setting_validator(key)
|
validator = cls.get_setting_validator(key)
|
||||||
|
|
||||||
# Convert to javascript compatible booleans
|
|
||||||
if cls.validator_is_bool(validator):
|
if cls.validator_is_bool(validator):
|
||||||
value = str(value).lower()
|
value = InvenTree.helpers.str2bool(value)
|
||||||
|
|
||||||
# Numerical values remain the same
|
|
||||||
elif cls.validator_is_int(validator):
|
elif cls.validator_is_int(validator):
|
||||||
pass
|
try:
|
||||||
|
value = int(value)
|
||||||
|
except ValueError:
|
||||||
|
value = cls.get_setting_default(key)
|
||||||
|
|
||||||
# Wrap strings with quotes
|
settings[key] = value
|
||||||
else:
|
|
||||||
value = format_html("'{}'", value)
|
|
||||||
|
|
||||||
setting["value"] = value
|
|
||||||
|
|
||||||
return settings
|
return settings
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ over and above the built-in Django tags.
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
from django.utils.html import format_html
|
||||||
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.conf import settings as djangosettings
|
from django.conf import settings as djangosettings
|
||||||
@ -208,24 +209,6 @@ def settings_value(key, *args, **kwargs):
|
|||||||
return InvenTreeSetting.get_setting(key)
|
return InvenTreeSetting.get_setting(key)
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def user_settings(user, *args, **kwargs):
|
|
||||||
"""
|
|
||||||
Return all USER settings as a key:value dict
|
|
||||||
"""
|
|
||||||
|
|
||||||
return InvenTreeUserSetting.allValues(user=user)
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def global_settings(*args, **kwargs):
|
|
||||||
"""
|
|
||||||
Return all GLOBAL InvenTree settings as a key:value dict
|
|
||||||
"""
|
|
||||||
|
|
||||||
return InvenTreeSetting.allValues()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
def get_color_theme_css(username):
|
def get_color_theme_css(username):
|
||||||
try:
|
try:
|
||||||
@ -262,6 +245,25 @@ def get_available_themes(*args, **kwargs):
|
|||||||
return themes
|
return themes
|
||||||
|
|
||||||
|
|
||||||
|
@register.simple_tag()
|
||||||
|
def primitive_to_javascript(primitive):
|
||||||
|
"""
|
||||||
|
Convert a python primitive to a javascript primitive.
|
||||||
|
|
||||||
|
e.g. True -> true
|
||||||
|
'hello' -> '"hello"'
|
||||||
|
"""
|
||||||
|
|
||||||
|
if type(primitive) is bool:
|
||||||
|
return str(primitive).lower()
|
||||||
|
|
||||||
|
elif type(primitive) in [int, float]:
|
||||||
|
return primitive
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Wrap with quotes
|
||||||
|
return format_html("'{}'", primitive)
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def keyvalue(dict, key):
|
def keyvalue(dict, key):
|
||||||
"""
|
"""
|
||||||
|
@ -1,17 +1,14 @@
|
|||||||
{% load inventree_extras %}
|
{% load inventree_extras %}
|
||||||
// InvenTree settings
|
// InvenTree settings
|
||||||
|
|
||||||
{% user_settings request.user as USER_SETTINGS %}
|
|
||||||
{% global_settings as GLOBAL_SETTINGS %}
|
|
||||||
|
|
||||||
var user_settings = {
|
var user_settings = {
|
||||||
{% for setting in USER_SETTINGS %}
|
{% for key, value in user_settings.items %}
|
||||||
{{ setting.key }}: {{ setting.value }},
|
{{ key }}: {% primitive_to_javascript value %},
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
};
|
};
|
||||||
|
|
||||||
var global_settings = {
|
var global_settings = {
|
||||||
{% for setting in GLOBAL_SETTINGS %}
|
{% for key, value in global_settings.items %}
|
||||||
{{ setting.key }}: {{ setting.value }},
|
{{ key }}: {% primitive_to_javascript value %},
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user