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
 | 
					# These javascript files are served "dynamically" - i.e. rendered on demand
 | 
				
			||||||
dynamic_javascript_urls = [
 | 
					dynamic_javascript_urls = [
 | 
				
			||||||
    url(r'^inventree.js', DynamicJsView.as_view(template_name='js/dynamic/inventree.js'), name='inventree.js'),
 | 
					    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
 | 
					# These javascript files are pased through the Django translation layer
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,6 +38,45 @@ class BaseInvenTreeSetting(models.Model):
 | 
				
			|||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        abstract = True
 | 
					        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
 | 
					    @classmethod
 | 
				
			||||||
    def get_setting_name(cls, key):
 | 
					    def get_setting_name(cls, key):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
@@ -739,7 +778,6 @@ class InvenTreeSetting(BaseInvenTreeSetting):
 | 
				
			|||||||
        help_text=_('Settings key (must be unique - case insensitive'),
 | 
					        help_text=_('Settings key (must be unique - case insensitive'),
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
class InvenTreeUserSetting(BaseInvenTreeSetting):
 | 
					class InvenTreeUserSetting(BaseInvenTreeSetting):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    An InvenTreeSetting object with a usercontext
 | 
					    An InvenTreeSetting object with a usercontext
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -207,6 +207,24 @@ 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:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -145,8 +145,11 @@
 | 
				
			|||||||
<script type='text/javascript' src="{% static 'script/inventree/notification.js' %}"></script>
 | 
					<script type='text/javascript' src="{% static 'script/inventree/notification.js' %}"></script>
 | 
				
			||||||
<script type='text/javascript' src="{% static 'script/inventree/sidenav.js' %}"></script>
 | 
					<script type='text/javascript' src="{% static 'script/inventree/sidenav.js' %}"></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<!-- translated -->
 | 
					<!-- dynamic javascript templates -->
 | 
				
			||||||
<script type='text/javascript' src="{% i18n_static 'inventree.js' %}"></script>
 | 
					<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 'api.js' %}"></script>
 | 
				
			||||||
<script type='text/javascript' src="{% i18n_static 'attachment.js' %}"></script>
 | 
					<script type='text/javascript' src="{% i18n_static 'attachment.js' %}"></script>
 | 
				
			||||||
<script type='text/javascript' src="{% i18n_static 'barcode.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