diff --git a/apps/smart_settings/api.py b/apps/smart_settings/api.py index 40267cb800..80441df95e 100644 --- a/apps/smart_settings/api.py +++ b/apps/smart_settings/api.py @@ -5,6 +5,7 @@ from django.utils.importlib import import_module settings = {} settings_list = [] +namespaces = {} namespace_list = [] @@ -13,11 +14,13 @@ def is_superuser(context): class SettingNamespace(object): - def __init__(self, name, label, module): + def __init__(self, name, label, module, sprite=None): self.name = name self.label = label self.module = module + self.sprite = sprite namespace_list.append(self) + namespaces[self.name] = self def __unicode__(self): return unicode(self.label) @@ -48,3 +51,5 @@ class Setting(object): setattr(self.module, name, value) settings_list.append(self) + settings.setdefault(self.namespace.name, []) + settings[self.namespace.name].append(self) diff --git a/apps/smart_settings/urls.py b/apps/smart_settings/urls.py index 4ba642d50a..e6f692c875 100644 --- a/apps/smart_settings/urls.py +++ b/apps/smart_settings/urls.py @@ -1,5 +1,6 @@ from django.conf.urls.defaults import patterns, url urlpatterns = patterns('smart_settings.views', + url(r'^list/(?P\w+)/$', 'setting_list', (), 'setting_list'), url(r'^list/$', 'setting_list', (), 'setting_list'), ) diff --git a/apps/smart_settings/views.py b/apps/smart_settings/views.py index e21a78f9d8..b2109e7580 100644 --- a/apps/smart_settings/views.py +++ b/apps/smart_settings/views.py @@ -7,14 +7,27 @@ from django.utils.safestring import mark_safe from common.utils import return_type, encapsulate from common.widgets import exists_with_famfam +from navigation.api import Link -from .api import settings_list +from .api import settings_list, namespace_list, settings, namespaces +from .links import is_superuser -def setting_list(request): +def setting_list(request, namespace_name=None, object_list=None, title=None, extra_context=None): + #TODO: check user is super user + namespace_links = [] + for namespace in namespace_list: + namespace_links.append( + Link(text=namespace.label, view='setting_list', args=[u'"%s"' % namespace.name], sprite=getattr(namespace, 'sprite') or 'cog', condition=is_superuser, children_view_regex=[r'^setting_']) + ) + + if namespace_name: + object_list = [setting for setting in settings[namespace_name] if setting.hidden == False] + title = _(u'settings for the %s module') % namespaces[namespace_name] + context = { - 'title': _(u'settings'), - 'object_list': [setting for setting in settings_list if setting.hidden == False], + 'title': title if title else _(u'settings'), + 'object_list': object_list if not (object_list is None) else [setting for setting in settings_list if setting.hidden == False], 'hide_link': True, 'hide_object': True, 'extra_columns': [ @@ -26,7 +39,17 @@ def setting_list(request): ))) }, ], + 'temporary_navigation_links': { + 'form_header': { + 'setting_list': { + 'links': namespace_links + }, + } + } } + + if extra_context: + context.update(extra_context) return render_to_response('generic_list.html', context, context_instance=RequestContext(request))