+
+{% else %}
+ {% autopaginate object_list %}
+
+
+ {% ifnotequal page_obj.paginator.num_pages 1 %}
+ {% blocktrans with page_obj.start_index as start and page_obj.end_index as end and page_obj.paginator.object_list|length as total and page_obj.number as page_number and page_obj.paginator.num_pages as total_pages %}List of {{ title }} ({{ start }} - {{ end }} out of {{ total }}) (Page {{ page_number }} of {{ total_pages }}){% endblocktrans %}
+ {% else %}
+ {% blocktrans with page_obj.paginator.object_list|length as total %}List of {{ title }} ({{ total }}){% endblocktrans %}
+ {% endifnotequal %}
+
+
+
+{% endif %}
+
+
+ {% paginate %}
+
+ {% if side_bar %}
+
+ {% endif %}
+
+
diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py
index 748e84a3b5..dce591fed0 100644
--- a/apps/documents/__init__.py
+++ b/apps/documents/__init__.py
@@ -11,6 +11,7 @@ from permissions.api import register_permission, set_namespace_title
from tags.widgets import get_tags_inline_widget_simple
from history.api import register_history_type
from metadata.api import get_metadata_string
+from project_setup.api import register_setup
from documents.models import Document, DocumentPage, \
DocumentPageTransformation, DocumentType, DocumentTypeFilename
@@ -107,6 +108,7 @@ document_missing_list = {'text': _(u'Find missing document files'), 'view': 'doc
# Document type related links
document_type_list = {'text': _(u'document type list'), 'view': 'document_type_list', 'famfam': 'layout', 'permissions': [PERMISSION_DOCUMENT_VIEW]}
+document_type_setup = {'text': _(u'document types'), 'view': 'document_type_list', 'famfam': 'layout', 'icon': 'layout.png', 'permissions': [PERMISSION_DOCUMENT_VIEW]}
document_type_document_list = {'text': _(u'documents of this type'), 'view': 'document_type_document_list', 'args': 'document_type.id', 'famfam': 'page_go', 'permissions': [PERMISSION_DOCUMENT_VIEW]}
document_type_edit = {'text': _(u'edit'), 'view': 'document_type_edit', 'args': 'document_type.id', 'famfam': 'layout_edit', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]}
document_type_delete = {'text': _(u'delete'), 'view': 'document_type_delete', 'args': 'document_type.id', 'famfam': 'layout_delete', 'permissions': [PERMISSION_DOCUMENT_TYPE_DELETE]}
@@ -123,7 +125,7 @@ document_type_views = ['setup_document_type_metadata', 'document_type_list', 'do
register_links(DocumentType, [document_type_document_list, document_type_filename_list, document_type_edit, document_type_delete])
register_links(DocumentTypeFilename, [document_type_filename_edit, document_type_filename_delete])
-register_links(['setup_document_type_metadata', 'document_type_filename_delete', 'document_type_create', 'document_type_filename_create', 'document_type_filename_edit', 'document_type_filename_list', 'document_type_list', 'document_type_document_list', 'document_type_edit', 'document_type_delete'], [document_type_create], menu_name='sidebar')
+register_links(['setup_document_type_metadata', 'document_type_filename_delete', 'document_type_create', 'document_type_filename_create', 'document_type_filename_edit', 'document_type_filename_list', 'document_type_list', 'document_type_document_list', 'document_type_edit', 'document_type_delete'], [document_type_list, document_type_create], menu_name='sidebar')
register_links(['document_type_filename_create', 'document_type_filename_list', 'document_type_filename_edit', 'document_type_filename_delete'], [document_type_filename_create], menu_name='sidebar')
# Register document links
@@ -199,3 +201,5 @@ register_links(Document, [document_history_view], menu_name='form_header')
if (validate_path(document_settings.CACHE_PATH) == False) or (not document_settings.CACHE_PATH):
setattr(document_settings, 'CACHE_PATH', tempfile.mkdtemp())
+
+register_setup(document_type_setup)
diff --git a/apps/documents/static/images/icons/layout.png b/apps/documents/static/images/icons/layout.png
new file mode 100644
index 0000000000..2b2bb814c2
Binary files /dev/null and b/apps/documents/static/images/icons/layout.png differ
diff --git a/apps/main/__init__.py b/apps/main/__init__.py
index e6225b1c9b..cc0d1d74f3 100644
--- a/apps/main/__init__.py
+++ b/apps/main/__init__.py
@@ -1,15 +1,10 @@
from django.utils.translation import ugettext_lazy as _
from navigation.api import register_top_menu
-from permissions import role_list, permission_views
-from user_management import user_list, group_list, user_management_views
from navigation.api import register_links
from history import history_list
from converter import formats_list
-from documents import document_type_views
-from metadata import setup_metadata_type_list, metadata_type_setup_views
-from metadata import setup_metadata_set_list, metadata_set_setup_views
-from sources import source_list, source_views
+from project_setup.api import register_setup
from main.conf.settings import SIDE_BAR_SEARCH
from main.conf.settings import DISABLE_HOME_VIEW
@@ -22,7 +17,7 @@ check_settings = {'text': _(u'settings'), 'view': 'setting_list', 'famfam': 'cog
statistics = {'text': _(u'statistics'), 'view': 'statistics', 'famfam': 'table'}
diagnostics = {'text': _(u'diagnostics'), 'view': 'diagnostics', 'famfam': 'pill'}
tools_menu = {'text': _(u'tools'), 'view': 'tools_menu', 'famfam': 'wrench'}
-admin_site = {'text': _(u'admin site'), 'url': '/admin', 'famfam': 'keyboard', 'condition': is_superuser}
+admin_site = {'text': _(u'admin site'), 'url': '/admin', 'famfam': 'keyboard', 'icon': 'keyboard.png', 'condition': is_superuser}
sentry = {'text': _(u'sentry'), 'url': '/sentry', 'famfam': 'bug', 'condition': is_superuser}
document_types = {'text': _(u'document types'), 'view': 'document_type_list', 'famfam': 'layout', 'children_view_regex': ['document_type', 'setup_document_type']}
@@ -45,20 +40,8 @@ if not SIDE_BAR_SEARCH:
register_top_menu('search', link={'text': _(u'search'), 'view': 'search', 'famfam': 'zoom'}, children_path_regex=[r'^search/'])
register_top_menu('tools', link=tools_menu, children_views=['statistics', 'history_list', 'formats_list'], position=-3)
-#register_top_menu('setup_menu', link={'text': _(u'setup'), 'view': 'setting_list', 'famfam': 'cog'}, children=setup_views)
-register_top_menu('setup_menu', link={'text': _(u'setup'), 'view': 'setting_list', 'famfam': 'cog'}, children_path_regex=[r'^settings/', r'^user_management/', r'^permissions', r'^documents/type', r'^metadata/setup', r'sources/setup'], position=-2)
-
register_links(['tools_menu', 'statistics', 'history_list', 'history_view', 'formats_list'], [tools_menu, statistics, history_list, formats_list, sentry], menu_name='secondary_menu')
-setup_links = [check_settings, role_list, user_list, group_list, document_types, setup_metadata_type_list, setup_metadata_set_list, source_list, admin_site]
-register_links(['setting_list'], setup_links, menu_name='secondary_menu')
-register_links(permission_views, setup_links, menu_name='secondary_menu')
-register_links(user_management_views, setup_links, menu_name='secondary_menu')
-register_links(document_type_views, setup_links, menu_name='secondary_menu')
-register_links(metadata_type_setup_views, setup_links, menu_name='secondary_menu')
-register_links(metadata_set_setup_views, setup_links, menu_name='secondary_menu')
-register_links(source_views, setup_links, menu_name='secondary_menu')
-
def get_version():
"""
@@ -73,3 +56,5 @@ def get_version():
return ''.join(vers)
__version__ = get_version()
+
+register_setup(admin_site)
diff --git a/apps/main/static/images/icons/keyboard.png b/apps/main/static/images/icons/keyboard.png
new file mode 100644
index 0000000000..882d48bd34
Binary files /dev/null and b/apps/main/static/images/icons/keyboard.png differ
diff --git a/apps/metadata/__init__.py b/apps/metadata/__init__.py
index 55e1ccfe96..b61556e268 100644
--- a/apps/metadata/__init__.py
+++ b/apps/metadata/__init__.py
@@ -5,6 +5,8 @@ from navigation.api import register_links, register_multi_item_links, \
from permissions.api import register_permission, set_namespace_title
from documents.models import Document, DocumentType
from documents.literals import PERMISSION_DOCUMENT_TYPE_EDIT
+from project_setup.api import register_setup
+
from metadata.models import MetadataType, MetadataSet
PERMISSION_METADATA_DOCUMENT_EDIT = {'namespace': 'metadata', 'name': u'metadata_document_edit', 'label': _(u'Edit a document\'s metadata')}
@@ -47,12 +49,12 @@ metadata_multiple_add = {'text': _(u'add metadata'), 'view': 'metadata_multiple_
metadata_remove = {'text': _(u'remove metadata'), 'view': 'metadata_remove', 'args': 'object.pk', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_DOCUMENT_REMOVE]}
metadata_multiple_remove = {'text': _(u'remove metadata'), 'view': 'metadata_multiple_remove', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_DOCUMENT_REMOVE]}
-setup_metadata_type_list = {'text': _(u'metadata types'), 'view': 'setup_metadata_type_list', 'famfam': 'xhtml_go', 'permissions': [PERMISSION_METADATA_TYPE_VIEW], 'children_view_regex': ['setup_metadata_type']}
+setup_metadata_type_list = {'text': _(u'metadata types'), 'view': 'setup_metadata_type_list', 'famfam': 'xhtml_go', 'icon': 'xhtml.png', 'permissions': [PERMISSION_METADATA_TYPE_VIEW], 'children_view_regex': ['setup_metadata_type']}
setup_metadata_type_edit = {'text': _(u'edit'), 'view': 'setup_metadata_type_edit', 'args': 'object.pk', 'famfam': 'xhtml', 'permissions': [PERMISSION_METADATA_TYPE_EDIT]}
setup_metadata_type_delete = {'text': _(u'delete'), 'view': 'setup_metadata_type_delete', 'args': 'object.pk', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_TYPE_DELETE]}
setup_metadata_type_create = {'text': _(u'create new'), 'view': 'setup_metadata_type_create', 'famfam': 'xhtml_add', 'permissions': [PERMISSION_METADATA_TYPE_CREATE]}
-setup_metadata_set_list = {'text': _(u'metadata sets'), 'view': 'setup_metadata_set_list', 'famfam': 'table', 'permissions': [PERMISSION_METADATA_SET_VIEW], 'children_view_regex': ['setup_metadata_set']}
+setup_metadata_set_list = {'text': _(u'metadata sets'), 'view': 'setup_metadata_set_list', 'famfam': 'table', 'icon': 'table.png', 'permissions': [PERMISSION_METADATA_SET_VIEW], 'children_view_regex': ['setup_metadata_set']}
setup_metadata_set_edit = {'text': _(u'edit'), 'view': 'setup_metadata_set_edit', 'args': 'object.pk', 'famfam': 'table_edit', 'permissions': [PERMISSION_METADATA_SET_EDIT]}
setup_metadata_set_delete = {'text': _(u'delete'), 'view': 'setup_metadata_set_delete', 'args': 'object.pk', 'famfam': 'table_delete', 'permissions': [PERMISSION_METADATA_SET_DELETE]}
setup_metadata_set_create = {'text': _(u'create new'), 'view': 'setup_metadata_set_create', 'famfam': 'table_add', 'permissions': [PERMISSION_METADATA_SET_CREATE]}
@@ -65,10 +67,10 @@ register_links(Document, [metadata_view], menu_name='form_header') #, metadata_
register_multi_item_links(['document_find_duplicates', 'folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove])
register_links(MetadataType, [setup_metadata_type_edit, setup_metadata_type_delete])
-register_links(['setup_metadata_type_delete', 'setup_metadata_type_edit', 'setup_metadata_type_list', 'setup_metadata_type_create'], [setup_metadata_type_create], menu_name='sidebar')
+register_links(['setup_metadata_type_delete', 'setup_metadata_type_edit', 'setup_metadata_type_list', 'setup_metadata_type_create'], [setup_metadata_type_list, setup_metadata_type_create], menu_name='sidebar')
register_links(MetadataSet, [setup_metadata_set_edit, setup_metadata_set_delete])
-register_links(['setup_metadata_set_delete', 'setup_metadata_set_edit', 'setup_metadata_set_list', 'setup_metadata_set_create'], [setup_metadata_set_create], menu_name='sidebar')
+register_links(['setup_metadata_set_delete', 'setup_metadata_set_edit', 'setup_metadata_set_list', 'setup_metadata_set_create'], [setup_metadata_set_list, setup_metadata_set_create], menu_name='sidebar')
register_links(DocumentType, [setup_document_type_metadata])
@@ -77,3 +79,7 @@ metadata_set_setup_views = ['setup_metadata_set_list', 'setup_metadata_set_edit'
register_sidebar_template(['setup_metadata_type_list'], 'metadata_type_help.html')
register_sidebar_template(['setup_metadata_set_list'], 'metadata_set_help.html')
+
+register_setup(setup_metadata_type_list)
+register_setup(setup_metadata_set_list)
+
diff --git a/apps/metadata/static/images/icons/table.png b/apps/metadata/static/images/icons/table.png
new file mode 100644
index 0000000000..0d1e11a834
Binary files /dev/null and b/apps/metadata/static/images/icons/table.png differ
diff --git a/apps/metadata/static/images/icons/xhtml.png b/apps/metadata/static/images/icons/xhtml.png
new file mode 100644
index 0000000000..a1b9bd0d1c
Binary files /dev/null and b/apps/metadata/static/images/icons/xhtml.png differ
diff --git a/apps/permissions/__init__.py b/apps/permissions/__init__.py
index 68e1ab6353..1a8a0f9455 100644
--- a/apps/permissions/__init__.py
+++ b/apps/permissions/__init__.py
@@ -4,6 +4,7 @@ from django.core.exceptions import ObjectDoesNotExist
from django.utils.translation import ugettext_lazy as _
from navigation.api import register_links
+from project_setup.api import register_setup
from permissions.conf.settings import DEFAULT_ROLES
from permissions.models import Role
@@ -16,7 +17,7 @@ PERMISSION_PERMISSION_GRANT = {'namespace': 'permissions', 'name': 'permission_g
PERMISSION_PERMISSION_REVOKE = {'namespace': 'permissions', 'name': 'permission_revoke', 'label': _(u'Revoke permissions')}
-role_list = {'text': _(u'roles'), 'view': 'role_list', 'famfam': 'medal_gold_1', 'permissions': [PERMISSION_ROLE_VIEW], 'children_view_regex': ['role']}
+role_list = {'text': _(u'roles'), 'view': 'role_list', 'famfam': 'medal_gold_1', 'icon': 'medal_gold_1.png', 'permissions': [PERMISSION_ROLE_VIEW]}
role_create = {'text': _(u'create new role'), 'view': 'role_create', 'famfam': 'medal_gold_add', 'permissions': [PERMISSION_ROLE_CREATE]}
role_edit = {'text': _(u'edit'), 'view': 'role_edit', 'args': 'object.id', 'famfam': 'medal_gold_1', 'permissions': [PERMISSION_ROLE_EDIT]}
role_members = {'text': _(u'members'), 'view': 'role_members', 'args': 'object.id', 'famfam': 'group_key', 'permissions': [PERMISSION_ROLE_EDIT]}
@@ -24,7 +25,7 @@ role_permissions = {'text': _(u'role permissions'), 'view': 'role_permissions',
role_delete = {'text': _(u'delete'), 'view': 'role_delete', 'args': 'object.id', 'famfam': 'medal_gold_delete', 'permissions': [PERMISSION_ROLE_DELETE]}
register_links(Role, [role_edit, role_delete, role_permissions, role_members])
-register_links(['role_members', 'role_list', 'role_view', 'role_create', 'role_edit', 'role_permissions', 'role_delete'], [role_create], menu_name='sidebar')
+register_links(['role_members', 'role_list', 'role_view', 'role_create', 'role_edit', 'role_permissions', 'role_delete'], [role_list, role_create], menu_name='sidebar')
permission_views = ['role_list', 'role_create', 'role_edit', 'role_members', 'role_permissions', 'role_delete']
@@ -44,3 +45,5 @@ def user_post_save(sender, instance, **kwargs):
pass
post_save.connect(user_post_save, sender=User)
+
+register_setup(role_list)
diff --git a/apps/permissions/static/images/icons/medal_gold_1.png b/apps/permissions/static/images/icons/medal_gold_1.png
new file mode 100644
index 0000000000..92c13c9a6d
Binary files /dev/null and b/apps/permissions/static/images/icons/medal_gold_1.png differ
diff --git a/apps/project_setup/__init__.py b/apps/project_setup/__init__.py
new file mode 100644
index 0000000000..93a570a912
--- /dev/null
+++ b/apps/project_setup/__init__.py
@@ -0,0 +1,6 @@
+from django.utils.translation import ugettext_lazy as _
+
+from navigation.api import register_top_menu
+
+#TODO: FIXME dynamic children_path_regext on api register_setup
+register_top_menu('setup_menu', link={'text': _(u'setup'), 'view': 'setup_list', 'famfam': 'cog'}, children_path_regex=[r'^settings/', r'^user_management/', r'^permissions', r'^documents/type', r'^metadata/setup', r'sources/setup'], position=-2)
diff --git a/apps/project_setup/api.py b/apps/project_setup/api.py
new file mode 100644
index 0000000000..424d250915
--- /dev/null
+++ b/apps/project_setup/api.py
@@ -0,0 +1,5 @@
+setup_items = []
+
+
+def register_setup(link):
+ setup_items.append(link)
diff --git a/apps/project_setup/models.py b/apps/project_setup/models.py
new file mode 100644
index 0000000000..71a8362390
--- /dev/null
+++ b/apps/project_setup/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/apps/project_setup/static/images/icons/cog.png b/apps/project_setup/static/images/icons/cog.png
new file mode 100644
index 0000000000..d53ebf1c3d
Binary files /dev/null and b/apps/project_setup/static/images/icons/cog.png differ
diff --git a/apps/project_setup/static/images/icons/link_button.png b/apps/project_setup/static/images/icons/link_button.png
new file mode 100644
index 0000000000..31917e6831
Binary files /dev/null and b/apps/project_setup/static/images/icons/link_button.png differ
diff --git a/apps/project_setup/tests.py b/apps/project_setup/tests.py
new file mode 100644
index 0000000000..2247054b35
--- /dev/null
+++ b/apps/project_setup/tests.py
@@ -0,0 +1,23 @@
+"""
+This file demonstrates two different styles of tests (one doctest and one
+unittest). These will both pass when you run "manage.py test".
+
+Replace these with more appropriate tests for your application.
+"""
+
+from django.test import TestCase
+
+class SimpleTest(TestCase):
+ def test_basic_addition(self):
+ """
+ Tests that 1 + 1 always equals 2.
+ """
+ self.failUnlessEqual(1 + 1, 2)
+
+__test__ = {"doctest": """
+Another way to test that 1 + 1 is equal to 2.
+
+>>> 1 + 1 == 2
+True
+"""}
+
diff --git a/apps/project_setup/urls.py b/apps/project_setup/urls.py
new file mode 100644
index 0000000000..c78f55eaab
--- /dev/null
+++ b/apps/project_setup/urls.py
@@ -0,0 +1,5 @@
+from django.conf.urls.defaults import patterns, url
+
+urlpatterns = patterns('project_setup.views',
+ url(r'^list/$', 'setup_list', (), 'setup_list'),
+)
diff --git a/apps/project_setup/views.py b/apps/project_setup/views.py
new file mode 100644
index 0000000000..757b78326f
--- /dev/null
+++ b/apps/project_setup/views.py
@@ -0,0 +1,16 @@
+from django.shortcuts import render_to_response, get_object_or_404
+from django.template import RequestContext
+from django.utils.translation import ugettext_lazy as _
+
+from project_setup.api import setup_items
+from project_setup.widgets import setup_button_widget
+
+
+def setup_list(request):
+ context = {
+ 'object_list': [setup_button_widget(request, item) for item in setup_items],
+ 'title': _(u'setup items'),
+ }
+
+ return render_to_response('generic_list_horizontal.html', context,
+ context_instance=RequestContext(request))
diff --git a/apps/project_setup/widgets.py b/apps/project_setup/widgets.py
new file mode 100644
index 0000000000..8ed77c2fe9
--- /dev/null
+++ b/apps/project_setup/widgets.py
@@ -0,0 +1,29 @@
+from django.utils.safestring import mark_safe
+from django.conf import settings
+from django.utils.translation import ugettext_lazy as _
+from django.core.urlresolvers import reverse
+from django.template.defaultfilters import capfirst
+from django.core.exceptions import PermissionDenied
+
+from permissions.api import check_permissions
+
+
+def setup_button_widget(request, setup_link):
+ if 'permissions' in setup_link:
+ try:
+ check_permissions(request.user, setup_link['permissions'])
+ return render_widget(setup_link)
+ except PermissionDenied:
+ return u''
+ else:
+ return render_widget(setup_link)
+
+
+def render_widget(setup_link):
+ return mark_safe(u'
%(string)s
' % {
+ 'url': reverse(setup_link['view']) if 'view' in setup_link else setup_link['url'],
+ 'icon': setup_link.get('icon', 'link_button.png'),
+ 'static_url': settings.STATIC_URL,
+ 'string': capfirst(setup_link['text']),
+ 'image_alt': _(u'icon'),
+ })
diff --git a/apps/smart_settings/__init__.py b/apps/smart_settings/__init__.py
index e69de29bb2..5926e68754 100644
--- a/apps/smart_settings/__init__.py
+++ b/apps/smart_settings/__init__.py
@@ -0,0 +1,10 @@
+from django.utils.translation import ugettext_lazy as _
+
+from project_setup.api import register_setup
+
+def is_superuser(context):
+ return context['request'].user.is_staff or context['request'].user.is_superuser
+
+check_settings = {'text': _(u'settings'), 'view': 'setting_list', 'famfam': 'cog', 'icon': 'cog.png', 'condition': is_superuser}
+
+register_setup(check_settings)
diff --git a/apps/smart_settings/static/images/icons/cog.png b/apps/smart_settings/static/images/icons/cog.png
new file mode 100644
index 0000000000..d53ebf1c3d
Binary files /dev/null and b/apps/smart_settings/static/images/icons/cog.png differ
diff --git a/apps/sources/__init__.py b/apps/sources/__init__.py
index f112d8822d..ad34940468 100644
--- a/apps/sources/__init__.py
+++ b/apps/sources/__init__.py
@@ -4,6 +4,7 @@ from navigation.api import register_links, \
register_model_list_columns
from permissions.api import register_permission, set_namespace_title
from common.utils import encapsulate
+from project_setup.api import register_setup
from sources.staging import StagingFile
from sources.models import WebForm, StagingFolder, SourceTransformation, \
@@ -24,7 +25,8 @@ register_permission(PERMISSION_SOURCES_SETUP_CREATE)
staging_file_preview = {'text': _(u'preview'), 'class': 'fancybox-noscaling', 'view': 'staging_file_preview', 'args': ['source.source_type', 'source.pk', 'object.id'], 'famfam': 'zoom'}
staging_file_delete = {'text': _(u'delete'), 'view': 'staging_file_delete', 'args': ['source.source_type', 'source.pk', 'object.id'], 'famfam': 'delete', 'keep_query': True}
-setup_web_form_list = {'text': _(u'web forms'), 'view': 'setup_web_form_list', 'famfam': 'application_form', 'children_classes': [WebForm]}
+setup_sources = {'text': _(u'sources'), 'view': 'setup_web_form_list', 'famfam': 'application_form', 'icon': 'application_form.png', 'children_classes': [WebForm]}
+setup_web_form_list = {'text': _(u'web forms'), 'view': 'setup_web_form_list', 'famfam': 'application_form', 'icon': 'application_form.png', 'children_classes': [WebForm]}
setup_staging_folder_list = {'text': _(u'staging folders'), 'view': 'setup_staging_folder_list', 'famfam': 'folder_camera', 'children_classes': [StagingFolder]}
setup_watch_folder_list = {'text': _(u'watch folders'), 'view': 'setup_watch_folder_list', 'famfam': 'folder_magnify', 'children_classes': [WatchFolder]}
@@ -50,7 +52,7 @@ register_links(['setup_web_form_list', 'setup_staging_folder_list', 'setup_watch
register_links(WebForm, [setup_web_form_list, setup_staging_folder_list], menu_name='form_header')
register_links(WebForm, [setup_source_transformation_list, setup_source_edit, setup_source_delete])
-register_links(['setup_web_form_list', 'setup_staging_folder_list', 'setup_watch_folder_list', 'setup_source_edit', 'setup_source_delete', 'setup_source_create'], [setup_source_create], menu_name='sidebar')
+register_links(['setup_web_form_list', 'setup_staging_folder_list', 'setup_watch_folder_list', 'setup_source_edit', 'setup_source_delete', 'setup_source_create'], [setup_sources, setup_source_create], menu_name='sidebar')
#register_links(StagingFolder, [setup_web_form_list, setup_staging_folder_list, setup_watch_folder_list], menu_name='form_header')
register_links(StagingFolder, [setup_web_form_list, setup_staging_folder_list], menu_name='form_header')
@@ -68,3 +70,6 @@ register_model_list_columns(StagingFile, [
encapsulate(lambda x: staging_file_thumbnail(x))
},
])
+
+
+register_setup(setup_sources)
diff --git a/apps/sources/static/images/icons/application_form.png b/apps/sources/static/images/icons/application_form.png
new file mode 100644
index 0000000000..bc6a856185
Binary files /dev/null and b/apps/sources/static/images/icons/application_form.png differ
diff --git a/apps/user_management/__init__.py b/apps/user_management/__init__.py
index 69f89919a3..6b2bc6aa82 100644
--- a/apps/user_management/__init__.py
+++ b/apps/user_management/__init__.py
@@ -3,6 +3,7 @@ from django.contrib.auth.models import User, Group
from navigation.api import register_links, register_multi_item_links
from permissions.api import register_permission, set_namespace_title
+from project_setup.api import register_setup
PERMISSION_USER_CREATE = {'namespace': 'user_management', 'name': 'user_create', 'label': _(u'Create new users')}
PERMISSION_USER_EDIT = {'namespace': 'user_management', 'name': 'user_edit', 'label': _(u'Edit existing users')}
@@ -24,7 +25,8 @@ register_permission(PERMISSION_GROUP_EDIT)
register_permission(PERMISSION_GROUP_VIEW)
register_permission(PERMISSION_GROUP_DELETE)
-user_list = {'text': _(u'user list'), 'view': 'user_list', 'famfam': 'user', 'permissions': [PERMISSION_USER_VIEW], 'children_view_regex': ['user']}
+user_list = {'text': _(u'user list'), 'view': 'user_list', 'famfam': 'user', 'permissions': [PERMISSION_USER_VIEW]}
+user_setup = {'text': _(u'users'), 'view': 'user_list', 'famfam': 'user', 'icon': 'user.png', 'permissions': [PERMISSION_USER_VIEW]}
user_edit = {'text': _(u'edit'), 'view': 'user_edit', 'args': 'object.id', 'famfam': 'user_edit', 'permissions': [PERMISSION_USER_EDIT]}
user_add = {'text': _(u'create new user'), 'view': 'user_add', 'famfam': 'user_add', 'permissions': [PERMISSION_USER_CREATE]}
user_delete = {u'text': _('delete'), 'view': 'user_delete', 'args': 'object.id', 'famfam': 'user_delete', 'permissions': [PERMISSION_USER_DELETE]}
@@ -32,7 +34,8 @@ user_multiple_delete = {u'text': _('delete'), 'view': 'user_multiple_delete', 'f
user_set_password = {u'text': _('reset password'), 'view': 'user_set_password', 'args': 'object.id', 'famfam': 'lock_edit', 'permissions': [PERMISSION_USER_EDIT]}
user_multiple_set_password = {u'text': _('reset password'), 'view': 'user_multiple_set_password', 'famfam': 'lock_edit', 'permissions': [PERMISSION_USER_EDIT]}
-group_list = {'text': _(u'group list'), 'view': 'group_list', 'famfam': 'group', 'permissions': [PERMISSION_GROUP_VIEW], 'children_view_regex': ['group']}
+group_list = {'text': _(u'group list'), 'view': 'group_list', 'famfam': 'group', 'permissions': [PERMISSION_GROUP_VIEW]}
+group_setup = {'text': _(u'groups'), 'view': 'group_list', 'famfam': 'group', 'icon': 'group.png', 'permissions': [PERMISSION_GROUP_VIEW]}
group_edit = {'text': _(u'edit'), 'view': 'group_edit', 'args': 'object.id', 'famfam': 'group_edit', 'permissions': [PERMISSION_GROUP_EDIT]}
group_add = {'text': _(u'create new group'), 'view': 'group_add', 'famfam': 'group_add', 'permissions': [PERMISSION_GROUP_CREATE]}
group_delete = {u'text': _('delete'), 'view': 'group_delete', 'args': 'object.id', 'famfam': 'group_delete', 'permissions': [PERMISSION_GROUP_DELETE]}
@@ -40,11 +43,11 @@ group_multiple_delete = {u'text': _('delete'), 'view': 'group_multiple_delete',
group_members = {'text': _(u'members'), 'view': 'group_members', 'args': 'object.id', 'famfam': 'group_link', 'permissions': [PERMISSION_GROUP_EDIT]}
register_links(User, [user_edit, user_set_password, user_delete])
-register_links(['user_multiple_set_password', 'user_set_password', 'user_multiple_delete', 'user_delete', 'user_edit', 'user_list', 'user_add'], [user_add], menu_name=u'sidebar')
+register_links(['user_multiple_set_password', 'user_set_password', 'user_multiple_delete', 'user_delete', 'user_edit', 'user_list', 'user_add'], [user_list, user_add], menu_name=u'sidebar')
register_multi_item_links(['user_list'], [user_multiple_set_password, user_multiple_delete])
register_links(Group, [group_edit, group_members, group_delete])
-register_links(['group_multiple_delete', 'group_delete', 'group_edit', 'group_list', 'group_add', 'group_members'], [group_add], menu_name=u'sidebar')
+register_links(['group_multiple_delete', 'group_delete', 'group_edit', 'group_list', 'group_add', 'group_members'], [group_list, group_add], menu_name=u'sidebar')
register_multi_item_links(['group_list'], [group_multiple_delete])
user_management_views = [
@@ -53,3 +56,6 @@ user_management_views = [
'user_multiple_set_password', 'group_list', 'group_edit', 'group_add',
'group_delete', 'group_multiple_delete', 'group_members'
]
+
+register_setup(user_setup)
+register_setup(group_setup)
diff --git a/apps/user_management/static/images/icons/group.png b/apps/user_management/static/images/icons/group.png
new file mode 100644
index 0000000000..bea24889d1
Binary files /dev/null and b/apps/user_management/static/images/icons/group.png differ
diff --git a/apps/user_management/static/images/icons/user.png b/apps/user_management/static/images/icons/user.png
new file mode 100644
index 0000000000..42b381070c
Binary files /dev/null and b/apps/user_management/static/images/icons/user.png differ
diff --git a/settings.py b/settings.py
index 7f84463082..d40a1b900b 100644
--- a/settings.py
+++ b/settings.py
@@ -125,6 +125,7 @@ INSTALLED_APPS = (
'django.contrib.admindocs',
'django.contrib.comments',
'django.contrib.staticfiles',
+ 'project_setup',
'smart_settings',
'navigation',
'web_theme',
diff --git a/urls.py b/urls.py
index 8410576200..b5449b71ef 100644
--- a/urls.py
+++ b/urls.py
@@ -26,6 +26,7 @@ urlpatterns = patterns('',
(r'^history/', include('history.urls')),
(r'^converter/', include('converter.urls')),
(r'^sources/', include('sources.urls')),
+ (r'^project_setup/', include('project_setup.urls')),
)