mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-04 07:05:41 +00:00 
			
		
		
		
	Add 'settings.js' which provides all settings (global and user) as a dynamic javascript file
- Minimal database hits required
This commit is contained in:
		@@ -96,6 +96,7 @@ settings_urls = [
 | 
			
		||||
# These javascript files are served "dynamically" - i.e. rendered on demand
 | 
			
		||||
dynamic_javascript_urls = [
 | 
			
		||||
    url(r'^inventree.js', DynamicJsView.as_view(template_name='js/dynamic/inventree.js'), name='inventree.js'),
 | 
			
		||||
    url(r'^settings.js', DynamicJsView.as_view(template_name='js/dynamic/settings.js'), name='settings.js'),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# These javascript files are pased through the Django translation layer
 | 
			
		||||
 
 | 
			
		||||
@@ -38,6 +38,45 @@ class BaseInvenTreeSetting(models.Model):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        abstract = True
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def allValues(cls, user=None):
 | 
			
		||||
        """
 | 
			
		||||
        Return a dict of "all" defined global settings.
 | 
			
		||||
 | 
			
		||||
        This performs a single database lookup,
 | 
			
		||||
        and then any settings which are not *in* the database
 | 
			
		||||
        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
 | 
			
		||||
        for setting in results:
 | 
			
		||||
            settings.append({
 | 
			
		||||
                "key": setting.key.upper(),
 | 
			
		||||
                "value": setting.value
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
            keys.add(setting.key.upper())
 | 
			
		||||
 | 
			
		||||
        # Specify any "default" values which are not in the database
 | 
			
		||||
        for key in cls.GLOBAL_SETTINGS.keys():
 | 
			
		||||
 | 
			
		||||
            if key.upper() not in keys:
 | 
			
		||||
 | 
			
		||||
                settings.append({
 | 
			
		||||
                    "key": key.upper(),
 | 
			
		||||
                    "value": cls.get_setting_default(key)
 | 
			
		||||
                })
 | 
			
		||||
        
 | 
			
		||||
        return settings
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_setting_name(cls, key):
 | 
			
		||||
        """
 | 
			
		||||
@@ -739,7 +778,6 @@ class InvenTreeSetting(BaseInvenTreeSetting):
 | 
			
		||||
        help_text=_('Settings key (must be unique - case insensitive'),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class InvenTreeUserSetting(BaseInvenTreeSetting):
 | 
			
		||||
    """
 | 
			
		||||
    An InvenTreeSetting object with a usercontext
 | 
			
		||||
 
 | 
			
		||||
@@ -207,6 +207,24 @@ def settings_value(key, *args, **kwargs):
 | 
			
		||||
    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()
 | 
			
		||||
def get_color_theme_css(username):
 | 
			
		||||
    try:
 | 
			
		||||
 
 | 
			
		||||
@@ -145,8 +145,11 @@
 | 
			
		||||
<script type='text/javascript' src="{% static 'script/inventree/notification.js' %}"></script>
 | 
			
		||||
<script type='text/javascript' src="{% static 'script/inventree/sidenav.js' %}"></script>
 | 
			
		||||
 | 
			
		||||
<!-- translated -->
 | 
			
		||||
<script type='text/javascript' src="{% i18n_static 'inventree.js' %}"></script>
 | 
			
		||||
<!-- dynamic javascript templates -->
 | 
			
		||||
<script type='text/javascript' src="{% url 'inventree.js' %}"></script>
 | 
			
		||||
<script type='text/javascript' src="{% url 'settings.js' %}"></script>
 | 
			
		||||
 | 
			
		||||
<!-- translated javascript templates-->
 | 
			
		||||
<script type='text/javascript' src="{% i18n_static 'api.js' %}"></script>
 | 
			
		||||
<script type='text/javascript' src="{% i18n_static 'attachment.js' %}"></script>
 | 
			
		||||
<script type='text/javascript' src="{% i18n_static 'barcode.js' %}"></script>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								InvenTree/templates/js/dynamic/settings.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								InvenTree/templates/js/dynamic/settings.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
{% load inventree_extras %}
 | 
			
		||||
// InvenTree settings
 | 
			
		||||
 | 
			
		||||
{% user_settings request.user as USER_SETTINGS %}
 | 
			
		||||
{% global_settings as GLOBAL_SETTINGS %}
 | 
			
		||||
 | 
			
		||||
var user_settings = {
 | 
			
		||||
    {% for setting in USER_SETTINGS %}
 | 
			
		||||
    {{ setting.key }}: {{ setting.value }},
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var global_settings = {
 | 
			
		||||
    {% for setting in GLOBAL_SETTINGS %}
 | 
			
		||||
    {{ setting.key }}: {{ setting.value }},
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user