diff --git a/apps/converter/__init__.py b/apps/converter/__init__.py index ffaef00c09..de30bc2350 100644 --- a/apps/converter/__init__.py +++ b/apps/converter/__init__.py @@ -2,11 +2,12 @@ from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ImproperlyConfigured from navigation.api import register_sidebar_template +from project_tools.api import register_tool from converter.utils import load_backend from converter.conf.settings import GRAPHICS_BACKEND -formats_list = {'text': _('file formats'), 'view': 'formats_list', 'famfam': 'pictures'} +formats_list = {'text': _('file formats'), 'view': 'formats_list', 'famfam': 'pictures', 'icon': 'pictures.png'} register_sidebar_template(['formats_list'], 'converter_file_formats_help.html') @@ -14,3 +15,5 @@ try: backend = load_backend().ConverterClass() except ImproperlyConfigured: raise ImproperlyConfigured(u'Missing or incorrect converter backend: %s' % GRAPHICS_BACKEND) + +register_tool(formats_list) diff --git a/apps/converter/static/images/icons/pictures.png b/apps/converter/static/images/icons/pictures.png new file mode 100644 index 0000000000..c392e90768 Binary files /dev/null and b/apps/converter/static/images/icons/pictures.png differ diff --git a/apps/document_indexing/__init__.py b/apps/document_indexing/__init__.py index 34f850b0bc..8cd494ed7a 100644 --- a/apps/document_indexing/__init__.py +++ b/apps/document_indexing/__init__.py @@ -3,7 +3,7 @@ from django.utils.translation import ugettext_lazy as _ from navigation.api import register_top_menu, register_sidebar_template, \ register_links from permissions.api import register_permission, set_namespace_title -from main.api import register_tool +from main.api import register_maintenance from documents.literals import PERMISSION_DOCUMENT_VIEW from documents.models import Document @@ -24,7 +24,7 @@ register_top_menu('indexes', link={'text': _('indexes'), 'famfam': 'folder_page' rebuild_index_instances = {'text': _('rebuild indexes'), 'view': 'rebuild_index_instances', 'famfam': 'folder_page', 'permissions': [PERMISSION_DOCUMENT_INDEXING_REBUILD_INDEXES], 'description': _(u'Deletes and creates from scratch all the document indexes.')} -register_tool(rebuild_index_instances, namespace='document_indexing', title=_(u'Indexes')) +register_maintenance(rebuild_index_instances, namespace='document_indexing', title=_(u'Indexes')) register_sidebar_template(['index_instance_list'], 'indexing_help.html') diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index dce591fed0..dee56e2932 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -6,7 +6,7 @@ from common.utils import validate_path, encapsulate from navigation.api import register_links, register_top_menu, \ register_model_list_columns, register_multi_item_links, \ register_sidebar_template -from main.api import register_diagnostic, register_tool +from main.api import register_diagnostic, register_maintenance 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 @@ -158,7 +158,7 @@ register_links(['document_page_transformation_edit', 'document_page_transformati register_diagnostic('documents', _(u'Documents'), document_missing_list) -register_tool(document_find_all_duplicates, namespace='documents', title=_(u'documents')) +register_maintenance(document_find_all_duplicates, namespace='documents', title=_(u'documents')) def document_exists(document): diff --git a/apps/history/__init__.py b/apps/history/__init__.py index 8453695844..c2fa615250 100644 --- a/apps/history/__init__.py +++ b/apps/history/__init__.py @@ -1,6 +1,7 @@ from django.utils.translation import ugettext_lazy as _ from permissions.api import register_permission, set_namespace_title +from project_tools.api import register_tool PERMISSION_HISTORY_VIEW = {'namespace': 'history', 'name': u'history_view', 'label': _(u'Access the history app')} @@ -8,6 +9,6 @@ set_namespace_title('history', _(u'History')) register_permission(PERMISSION_HISTORY_VIEW) # TODO: support permissions AND operand -history_list = {'text': _(u'history'), 'view': 'history_list', 'famfam': 'book', 'permissions': [PERMISSION_HISTORY_VIEW], 'children_views': ['history_view']} +history_list = {'text': _(u'history'), 'view': 'history_list', 'famfam': 'book', 'icon': 'book.png', 'permissions': [PERMISSION_HISTORY_VIEW], 'children_views': ['history_view']} -#register_links(['history_view'], [history_list], menu_name='sidebar') +register_tool(history_list) diff --git a/apps/history/static/images/icons/book.png b/apps/history/static/images/icons/book.png new file mode 100644 index 0000000000..45c9edfe2f Binary files /dev/null and b/apps/history/static/images/icons/book.png differ diff --git a/apps/main/__init__.py b/apps/main/__init__.py index cc0d1d74f3..b0efaa8cf0 100644 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -2,9 +2,8 @@ from django.utils.translation import ugettext_lazy as _ from navigation.api import register_top_menu from navigation.api import register_links -from history import history_list -from converter import formats_list from project_setup.api import register_setup +from project_tools.api import register_tool from main.conf.settings import SIDE_BAR_SEARCH from main.conf.settings import DISABLE_HOME_VIEW @@ -13,13 +12,11 @@ from main.conf.settings import DISABLE_HOME_VIEW 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'} -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'} +maintenance_menu = {'text': _(u'maintenance'), 'view': 'maintenance_menu', 'famfam': 'wrench', 'icon': 'wrench.png'} +statistics = {'text': _(u'statistics'), 'view': 'statistics', 'famfam': 'table', 'icon': 'blackboard_sum.png'} +diagnostics = {'text': _(u'diagnostics'), 'view': 'diagnostics', 'famfam': 'pill', 'icon': 'pill.png'} +sentry = {'text': _(u'sentry'), 'url': '/sentry', 'famfam': 'bug', 'icon': 'bug.png', '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']} __version_info__ = { 'major': 0, @@ -29,19 +26,11 @@ __version_info__ = { 'serial': 0 } -#setup_views = [] -#setup_views.extend(permission_views) -#setup_views.extend(user_management_views) -#setup_views.extend(['setting_list']) - if not DISABLE_HOME_VIEW: register_top_menu('home', link={'text': _(u'home'), 'view': 'home', 'famfam': 'house'}, position=0) 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_links(['tools_menu', 'statistics', 'history_list', 'history_view', 'formats_list'], [tools_menu, statistics, history_list, formats_list, sentry], menu_name='secondary_menu') - def get_version(): """ @@ -58,3 +47,7 @@ def get_version(): __version__ = get_version() register_setup(admin_site) +register_tool(maintenance_menu) +register_tool(statistics) +register_tool(diagnostics) +register_tool(sentry) diff --git a/apps/main/api.py b/apps/main/api.py index 81678000e5..2f250eb470 100644 --- a/apps/main/api.py +++ b/apps/main/api.py @@ -14,7 +14,7 @@ def register_diagnostic(namespace, title, link): diagnostics[namespace] = namespace_dict -def register_tool(link, title=None, namespace=None): +def register_maintenance(link, title=None, namespace=None): namespace_dict = tools.get(namespace, {'title': None, 'links': []}) namespace_dict['title'] = title link['url'] = link.get('url', reverse_lazy(link['view'])) diff --git a/apps/main/static/images/icons/blackboard_sum.png b/apps/main/static/images/icons/blackboard_sum.png new file mode 100644 index 0000000000..43ad0ab130 Binary files /dev/null and b/apps/main/static/images/icons/blackboard_sum.png differ diff --git a/apps/main/static/images/icons/bug.png b/apps/main/static/images/icons/bug.png new file mode 100644 index 0000000000..563c364c79 Binary files /dev/null and b/apps/main/static/images/icons/bug.png differ diff --git a/apps/main/static/images/icons/pill.png b/apps/main/static/images/icons/pill.png new file mode 100644 index 0000000000..d483c825f0 Binary files /dev/null and b/apps/main/static/images/icons/pill.png differ diff --git a/apps/main/static/images/icons/wrench.png b/apps/main/static/images/icons/wrench.png new file mode 100644 index 0000000000..f6e19ebcb0 Binary files /dev/null and b/apps/main/static/images/icons/wrench.png differ diff --git a/apps/main/urls.py b/apps/main/urls.py index 7dfcdac26a..7ee8ceca8d 100644 --- a/apps/main/urls.py +++ b/apps/main/urls.py @@ -2,7 +2,7 @@ from django.conf.urls.defaults import patterns, url urlpatterns = patterns('main.views', url(r'^$', 'home', (), 'home'), - url(r'^tools_menu/$', 'tools_menu', (), 'tools_menu'), + url(r'^maintenance_menu/$', 'maintenance_menu', (), 'maintenance_menu'), url(r'^statistics/$', 'statistics', (), 'statistics'), url(r'^diagnostics/$', 'diagnostics_view', (), 'diagnostics'), ) diff --git a/apps/main/views.py b/apps/main/views.py index 879f4622b2..6a8bd805d3 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -21,7 +21,7 @@ def home(request): context_instance=RequestContext(request)) -def tools_menu(request): +def maintenance_menu(request): user_tools = {} for namespace, values in tools.items(): for link in values['links']: @@ -38,7 +38,7 @@ def tools_menu(request): return render_to_response('tools.html', { 'blocks': user_tools, - 'title': _(u'tools menu') + 'title': _(u'maintenance menu') }, context_instance=RequestContext(request)) diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index 0c558617dc..8a47afe201 100644 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -14,7 +14,7 @@ from django.db.models.signals import post_save from navigation.api import register_links, register_top_menu, register_multi_item_links from permissions.api import register_permission, set_namespace_title from documents.models import Document -from main.api import register_tool +from main.api import register_maintenance from scheduler.api import register_interval_job @@ -68,7 +68,7 @@ register_multi_item_links(['queue_document_list'], [re_queue_multiple_document, register_links(['setup_queue_transformation_create', 'setup_queue_transformation_edit', 'setup_queue_transformation_delete', 'document_queue_disable', 'document_queue_enable', 'queue_document_list', 'node_active_list', 'setup_queue_transformation_list'], [queue_document_list, node_active_list], menu_name='secondary_menu') register_links(['setup_queue_transformation_edit', 'setup_queue_transformation_delete', 'setup_queue_transformation_list', 'setup_queue_transformation_create'], [setup_queue_transformation_create], menu_name='sidebar') -register_tool(all_document_ocr_cleanup, namespace='ocr', title=_(u'OCR')) +register_maintenance(all_document_ocr_cleanup, namespace='ocr', title=_(u'OCR')) #Menus register_top_menu('ocr', link={'text': _('OCR'), 'famfam': 'hourglass', 'view': 'queue_document_list'}, children_path_regex=[r'^ocr/']) diff --git a/apps/project_tools/__init__.py b/apps/project_tools/__init__.py new file mode 100644 index 0000000000..93f5de9f6e --- /dev/null +++ b/apps/project_tools/__init__.py @@ -0,0 +1,11 @@ +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) + + +register_top_menu('tools', link={'text': _(u'tools'), 'view': 'tools_list', 'famfam': 'wrench'}, children_views=['statistics', 'history_list', 'formats_list'], position=-3) +#register_links(['tools_menu', 'statistics', 'history_list', 'history_view', 'formats_list'], [tools_menu, statistics, history_list, formats_list, sentry], menu_name='secondary_menu') diff --git a/apps/project_tools/api.py b/apps/project_tools/api.py new file mode 100644 index 0000000000..873a901af4 --- /dev/null +++ b/apps/project_tools/api.py @@ -0,0 +1,5 @@ +tool_items = [] + + +def register_tool(link): + tool_items.append(link) diff --git a/apps/project_tools/models.py b/apps/project_tools/models.py new file mode 100644 index 0000000000..71a8362390 --- /dev/null +++ b/apps/project_tools/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/apps/project_tools/tests.py b/apps/project_tools/tests.py new file mode 100644 index 0000000000..2247054b35 --- /dev/null +++ b/apps/project_tools/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_tools/urls.py b/apps/project_tools/urls.py new file mode 100644 index 0000000000..f2ea9accf9 --- /dev/null +++ b/apps/project_tools/urls.py @@ -0,0 +1,5 @@ +from django.conf.urls.defaults import patterns, url + +urlpatterns = patterns('project_tools.views', + url(r'^list/$', 'tools_list', (), 'tools_list'), +) diff --git a/apps/project_tools/views.py b/apps/project_tools/views.py new file mode 100644 index 0000000000..19b01da3f6 --- /dev/null +++ b/apps/project_tools/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_tools.api import tool_items +from project_setup.widgets import setup_button_widget + + +def tools_list(request): + context = { + 'object_list': [setup_button_widget(request, item) for item in tool_items], + 'title': _(u'tools'), + } + + return render_to_response('generic_list_horizontal.html', context, + context_instance=RequestContext(request)) diff --git a/settings.py b/settings.py index d40a1b900b..32867a3281 100644 --- a/settings.py +++ b/settings.py @@ -126,6 +126,7 @@ INSTALLED_APPS = ( 'django.contrib.comments', 'django.contrib.staticfiles', 'project_setup', + 'project_tools', 'smart_settings', 'navigation', 'web_theme', diff --git a/urls.py b/urls.py index b5449b71ef..6127fe570e 100644 --- a/urls.py +++ b/urls.py @@ -27,6 +27,7 @@ urlpatterns = patterns('', (r'^converter/', include('converter.urls')), (r'^sources/', include('sources.urls')), (r'^project_setup/', include('project_setup.urls')), + (r'^project_tools/', include('project_tools.urls')), )