diff --git a/apps/common/templates/generic_list_horizontal.html b/apps/common/templates/generic_list_horizontal.html new file mode 100644 index 0000000000..c70d5299ec --- /dev/null +++ b/apps/common/templates/generic_list_horizontal.html @@ -0,0 +1,28 @@ +{% extends "base.html" %} +{% load i18n %} +{% load navigation_tags %} +{% load subtemplates_tags %} + +{% block title %} :: {% blocktrans with title|striptags as stripped_title %}List of {{ stripped_title }}{% endblocktrans %}{% endblock %} +{#{% block secondary_links %}{{ secondary_links|safe }}{% endblock %}#} + +{% block sidebar %} + {% for subtemplate in sidebar_subtemplates_list %} + {% if subtemplate.form %} + {% render_subtemplate subtemplate.name subtemplate.context as rendered_subtemplate %} +
+ {{ rendered_subtemplate }} +
+ {% else %} + {% render_subtemplate subtemplate.name subtemplate.context as rendered_subtemplate %} + {{ rendered_subtemplate }} + {% endif %} + {% endfor %} + +{% endblock %} + +{% block content %} + {% include "generic_list_horizontal_subtemplate.html" %} + +{% endblock %} + diff --git a/apps/common/templates/generic_list_horizontal_subtemplate.html b/apps/common/templates/generic_list_horizontal_subtemplate.html new file mode 100644 index 0000000000..ce613c43df --- /dev/null +++ b/apps/common/templates/generic_list_horizontal_subtemplate.html @@ -0,0 +1,191 @@ +{% load i18n %} +{% load attribute_tags %} +{% load pagination_tags %} +{% load navigation_tags %} +{% load non_breakable %} +{% load variable_tags %} +{% load main_settings_tags %} + +{% get_main_setting "DISABLE_ICONS" as disable_icons %} + +{% if side_bar %} +
+

+ {{ title|capfirst }} +

+
+

+{% 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 %} + +
+ + {% if object_list %} + {% if multi_select or multi_select_as_buttons %} + {% if multi_select_as_buttons %} + {% get_multi_item_links as multi_item_links %} + + {% else %} + {% with "true" as form_hide_required_text %} + {% get_multi_item_links_form %} + {% endwith %} + + {% endif %} + {% endif %} + {% endif %} + + {% if scrollable_content %} +
+ {% endif %} + +{% comment %} + + + {% if not hide_header %} + + {% if multi_select or multi_select_as_buttons %} + + {% endif %} + + {% if not hide_object %} + + {% endif %} + + {% for column in extra_columns_preffixed %} + + {% endfor %} + + {% for column in object_list.0|get_model_list_columns %} + + {% endfor %} + + {% for column in extra_columns %} + + {% endfor %} + + {% if not hide_links %} + + {% endif %} + + {% endif %} + {% for object in object_list %} + + {% if multi_select or multi_select_as_buttons %} + + {% endif %} + {% if not hide_object %} + {% if main_object %} + {% with object|object_property:main_object as object %} + + {% endwith %} + {% else %} + + {% endif %} + {% endif %} + {% for column in extra_columns_preffixed %} + {% if column.keep_together %} + + {% else %} + + {% endif %} + {% endfor %} + {% if not hide_columns %} + {% for column in object|get_model_list_columns %} + + {% endfor %} + {% endif %} + {% for column in extra_columns %} + {% if column.keep_together %} + + {% else %} + + {% endif %} + {% endfor %} + {% if not hide_links %} + {% if list_object_variable_name %} + {% copy_variable object as list_object_variable_name %} + {% copy_variable list_object_variable_name as "navigation_object_name" %} + {% endif %} + + {% endif %} + + {% empty %} + + {% endfor %} + +
{% trans "Identifier" %}{{ column.name|capfirst }}{{ column.name|capfirst }}{{ column.name|capfirst }} 
{% if not hide_link %}{{ object }}{% else %}{{ object }}{% endif %}{% if not hide_link %}{{ object }}{% else %}{{ object }}{% endif %} + {{ object|object_property:column.attribute|make_non_breakable }} + {{ object|object_property:column.attribute }}{{ object|object_property:column.attribute }} + {{ object|object_property:column.attribute|make_non_breakable }} + {{ object|object_property:column.attribute }} + {% if navigation_object_links %} + {% with navigation_object_links as overrided_object_links %} + {% object_navigation_template %} + {% endwith %} + {% else %} + {% object_navigation_template %} + {% endif %} +
{% blocktrans with title|striptags as stripped_title %}There are no {{ stripped_title }}{% endblocktrans %}
+{% endcomment %} + + + {% if scrollable_content %} +
+ {% endif %} + + {% if object_list %} + {% if multi_select or multi_select_as_buttons %} + {% if multi_select_as_buttons %} + {% get_multi_item_links as multi_item_links %} + + {% else %} + {% with "true" as form_hide_required_text %} + {% get_multi_item_links_form %} + {% endwith %} + + {% endif %} + {% endif %} + {% 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'' % { + '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')), )