diff --git a/mayan/apps/appearance/templates/appearance/home.html b/mayan/apps/appearance/templates/appearance/home.html
index a62445a207..ae704607ff 100644
--- a/mayan/apps/appearance/templates/appearance/home.html
+++ b/mayan/apps/appearance/templates/appearance/home.html
@@ -3,6 +3,7 @@
{% load i18n %}
{% load static %}
+{% load navigation_tags %}
{% load project_tags %}
{% block title %} :: {% trans 'Home' %}{% endblock %}
@@ -37,6 +38,7 @@
+ {% get_menu_links 'front page menu' as object_navigation_links %}
{% with 'navigation/large_button_link.html' as link_template %}
{% with 'col-xs-12 col-sm-6 col-md-4 col-lg-4' as div_class %}
{% include 'navigation/generic_navigation.html' %}
diff --git a/mayan/apps/common/menus.py b/mayan/apps/common/menus.py
index e4c80fe0f5..b1004b952c 100644
--- a/mayan/apps/common/menus.py
+++ b/mayan/apps/common/menus.py
@@ -3,11 +3,13 @@ from __future__ import unicode_literals
from navigation import Menu
__all__ = (
- 'menu_facet', 'menu_object', 'menu_main', 'menu_multi_item',
- 'menu_secondary', 'menu_setup', 'menu_sidebar', 'menu_tools'
+ 'menu_facet', 'menu_front_page', 'menu_object', 'menu_main',
+ 'menu_multi_item', 'menu_secondary', 'menu_setup', 'menu_sidebar',
+ 'menu_tools'
)
menu_facet = Menu(name='object facet')
+menu_front_page = Menu(name='front page menu')
menu_object = Menu(name='object menu')
menu_main = Menu(name='main menu')
menu_multi_item = Menu(name='multi item menu')
diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py
index b7683108f8..b77e5a5086 100644
--- a/mayan/apps/documents/apps.py
+++ b/mayan/apps/documents/apps.py
@@ -9,11 +9,14 @@ from actstream import registry
from acls.api import class_permissions
from common.classes import ModelAttribute
-from common import menu_facet, menu_object, menu_setup
+from common import (
+ menu_facet, menu_front_page, menu_object, menu_secondary, menu_setup,
+ menu_sidebar, menu_multi_item
+)
from common.utils import encapsulate, validate_path
from dynamic_search.classes import SearchModel
from events.permissions import PERMISSION_EVENTS_VIEW
-from main import FrontPageButton, MissingItem
+from main import MissingItem
from main.api import register_maintenance_links
from navigation.api import register_model_list_columns
from rest_api.classes import APIEndPoint
@@ -22,25 +25,31 @@ from statistics.classes import StatisticNamespace
from documents import settings as document_settings
from .links import (
link_clear_image_cache, link_document_clear_transformations,
- link_document_content, link_document_delete, link_document_document_type_edit,
- link_document_events_view, document_multiple_document_type_edit,
- link_document_download, link_document_edit, link_document_list, link_document_list_recent,
- document_multiple_delete, document_multiple_clear_transformations,
- document_multiple_download, document_multiple_update_page_count,
- document_page_edit, document_page_navigation_first,
- document_page_navigation_last, document_page_navigation_next,
- document_page_navigation_previous, document_page_rotate_left,
- document_page_rotate_right, document_page_text,
- document_page_transformation_list, document_page_transformation_create,
- document_page_transformation_edit, document_page_transformation_delete,
- document_page_view, document_page_view_reset, document_page_zoom_in,
- document_page_zoom_out, link_document_preview, link_document_print,
- link_document_properties, document_type_create, document_type_delete,
- document_type_edit, document_type_filename_create,
- document_type_filename_delete, document_type_filename_edit,
- document_type_filename_list, document_type_list, link_document_type_setup,
- link_document_update_page_count, document_version_download,
- link_document_version_list, document_version_revert
+ link_document_content, link_document_delete,
+ link_document_document_type_edit, link_document_events_view,
+ link_document_multiple_document_type_edit, link_document_download,
+ link_document_edit, link_document_list, link_document_list_recent,
+ link_document_multiple_delete,
+ link_document_multiple_clear_transformations,
+ link_document_multiple_download,
+ link_document_multiple_update_page_count, link_document_page_edit,
+ link_document_page_navigation_first, link_document_page_navigation_last,
+ link_document_page_navigation_next,
+ link_document_page_navigation_previous, link_document_page_rotate_left,
+ link_document_page_rotate_right, link_document_page_text,
+ link_document_page_transformation_list,
+ link_document_page_transformation_create,
+ link_document_page_transformation_edit,
+ link_document_page_transformation_delete, link_document_page_view,
+ link_document_page_view_reset, link_document_page_zoom_in,
+ link_document_page_zoom_out, link_document_preview, link_document_print,
+ link_document_properties, link_document_type_create,
+ link_document_type_delete, link_document_type_edit,
+ link_document_type_filename_create, link_document_type_filename_delete,
+ link_document_type_filename_edit, link_document_type_filename_list,
+ link_document_type_list, link_document_type_setup,
+ link_document_update_page_count, link_document_version_download,
+ link_document_version_list, link_document_version_revert
)
from .models import (
Document, DocumentPage, DocumentPageTransformation, DocumentType,
@@ -62,11 +71,20 @@ class DocumentsApp(apps.AppConfig):
verbose_name = _('Documents')
def ready(self):
+ APIEndPoint('documents')
+ DocumentPage.add_to_class('get_transformation_list', lambda document_page: DocumentPageTransformation.objects.get_for_document_page_as_list(document_page))
+
+ MissingItem(label=_('Create a document type'), description=_('Every uploaded document must be assigned a document type, it is the basic way Mayan EDMS categorizes documents.'), condition=lambda: not DocumentType.objects.exists(), view='documents:document_type_list')
+ ModelAttribute(Document, label=_('Label'), name='label', type_name='field')
+
+ menu_front_page.bind_links(links=[link_document_list_recent, link_document_list])
+
# Document type links
- #register_links(DocumentType, [document_type_edit, document_type_filename_list, document_type_delete])
- #register_links([DocumentType, 'documents:document_type_create', 'documents:document_type_list'], [document_type_list, document_type_create], menu_name='secondary_menu')
- #register_links(DocumentTypeFilename, [document_type_filename_edit, document_type_filename_delete])
- #register_links([DocumentTypeFilename, 'documents:document_type_filename_list', 'documents:document_type_filename_create'], [document_type_filename_create], menu_name='sidebar')
+ menu_object.bind_links(links=[link_document_type_edit, link_document_type_filename_list, link_document_type_delete], sources=[DocumentType])
+ menu_secondary.bind_links(links=[link_document_type_list, link_document_type_create], sources=[DocumentType, 'documents:document_type_create', 'documents:document_type_list'])
+
+ menu_object.bind_links(links=[link_document_type_filename_edit, link_document_type_filename_delete], sources=[DocumentTypeFilename])
+ menu_sidebar.bind_links(links=[link_document_type_filename_create], sources=[DocumentTypeFilename, 'documents:document_type_filename_list', 'documents:document_type_filename_create'])
# Register document facet links
menu_facet.bind_links(links=[link_document_preview], sources=[Document], position=0)
@@ -77,24 +95,14 @@ class DocumentsApp(apps.AppConfig):
# Document actions
menu_object.bind_links(links=[link_document_edit, link_document_document_type_edit, link_document_print, link_document_delete, link_document_download, link_document_clear_transformations, link_document_update_page_count], sources=[Document])
- #register_links([Document], [document_multiple_clear_transformations, document_multiple_delete, document_multiple_download, document_multiple_update_page_count, document_multiple_document_type_edit, link_spacer], menu_name='multi_item_links')
+ menu_multi_item.bind_links(links=[link_document_multiple_clear_transformations, link_document_multiple_delete, link_document_multiple_download, link_document_multiple_update_page_count, link_document_multiple_document_type_edit], sources=[Document])
+ menu_object.bind_links(links=[link_document_version_revert, link_document_version_download], sources=[DocumentVersion])
- # Document Version links
- #register_links(DocumentVersion, [document_version_revert, document_version_download])
+ menu_object.bind_links(links=[link_document_page_transformation_list, link_document_page_view, link_document_page_text, link_document_page_edit], sources=[DocumentPage])
+ menu_sidebar.bind_links(links=[link_document_page_navigation_first, link_document_page_navigation_previous, link_document_page_navigation_next, link_document_page_navigation_last], sources=[DocumentPage])
- # Document page links
- #register_links(DocumentPage, [
- # document_page_transformation_list, document_page_view,
- # document_page_text, document_page_edit,
- #])
+ menu_facet.bind_links(links=[link_document_page_rotate_left, link_document_page_rotate_right, link_document_page_zoom_in, link_document_page_zoom_out, link_document_page_view_reset], sources=['documents:document_page_view'])
- # Document page navigation links
- #register_links(DocumentPage, [
- # document_page_navigation_first, document_page_navigation_previous,
- # document_page_navigation_next, document_page_navigation_last
- #], menu_name='sidebar')
-
- #register_links(['documents:document_page_view'], [document_page_rotate_left, document_page_rotate_right, document_page_zoom_in, document_page_zoom_out, document_page_view_reset], menu_name='form_header')
#register_links(DocumentPageTransformation, [document_page_transformation_edit, document_page_transformation_delete])
#register_links('documents:document_page_transformation_list', [document_page_transformation_create], menu_name='sidebar')
#register_links('documents:document_page_transformation_create', [document_page_transformation_create], menu_name='sidebar')
@@ -141,15 +149,4 @@ class DocumentsApp(apps.AppConfig):
namespace.add_statistic(DocumentStatistics(name='document_stats', label=_('Document tendencies')))
namespace.add_statistic(DocumentUsageStatistics(name='document_usage', label=_('Document usage')))
- APIEndPoint('documents')
-
- ModelAttribute(Document, label=_('Label'), name='label', type_name='field')
-
- FrontPageButton(link=link_document_list_recent)
- FrontPageButton(link=link_document_list)
-
registry.register(Document)
-
- DocumentPage.add_to_class('get_transformation_list', lambda document_page: DocumentPageTransformation.objects.get_for_document_page_as_list(document_page))
-
- MissingItem(label=_('Create a document type'), description=_('Every uploaded document must be assigned a document type, it is the basic way Mayan EDMS categorizes documents.'), condition=lambda: not DocumentType.objects.exists(), view='documents:document_type_list')
diff --git a/mayan/apps/documents/links.py b/mayan/apps/documents/links.py
index af4b77313e..d07016db82 100644
--- a/mayan/apps/documents/links.py
+++ b/mayan/apps/documents/links.py
@@ -72,34 +72,34 @@ link_clear_image_cache = Link(
)
# Document pages
-link_document_page_transformation_list = Link(args='page.pk', class='no-parent-history', permissions=[PERMISSION_DOCUMENT_TRANSFORM], text=_('Page transformations'), view='documents:document_page_transformation_list')
-link_document_page_transformation_create = Link(args='page.pk', class='no-parent-history', permissions=[PERMISSION_DOCUMENT_TRANSFORM], text= _('Create new transformation'), view='documents:document_page_transformation_create')
-link_document_page_transformation_edit = Link(args='transformation.pk', class='no-parent-history', permissions=[PERMISSION_DOCUMENT_TRANSFORM], text=_('Edit'), view='documents:document_page_transformation_edit')
-link_document_page_transformation_delete = Link(args='transformation.pk', class='no-parent-history', permissions=[PERMISSION_DOCUMENT_TRANSFORM], text=_('Delete'), view='documents:document_page_transformation_delete')
-link_document_page_view = Link(args='page.pk', class='no-parent-history', permissions=[PERMISSION_DOCUMENT_VIEW], text=_('Page image'), view='documents:document_page_view')
-link_document_page_text = Link(args='page.pk', class='no-parent-history', permissions=[PERMISSION_DOCUMENT_VIEW], text=_('Page text'), view='documents:document_page_text')
-link_document_page_edit = Link(class='no-parent-history', permissions=[PERMISSION_DOCUMENT_EDIT], text=_('Edit page text'), view='documents:document_page_edit', args='page.pk')
-link_document_page_navigation_next = Link(text=_('Next page'), 'class': 'no-parent-history', 'view': 'documents:document_page_navigation_next', 'args': 'page.pk', 'famfam': 'resultset_next', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'conditional_disable': is_last_page, 'keep_query': True}
-link_document_page_navigation_previous = Link(text=_('Previous page'), 'class': 'no-parent-history', 'view': 'documents:document_page_navigation_previous', 'args': 'page.pk', 'famfam': 'resultset_previous', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'conditional_disable': is_first_page, 'keep_query': True}
-link_document_page_navigation_first = Link(text=_('First page'), 'class': 'no-parent-history', 'view': 'documents:document_page_navigation_first', 'args': 'page.pk', 'famfam': 'resultset_first', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'conditional_disable': is_first_page, 'keep_query': True}
-link_document_page_navigation_last = Link(text=_('Last page'), 'class': 'no-parent-history', 'view': 'documents:document_page_navigation_last', 'args': 'page.pk', 'famfam': 'resultset_last', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'conditional_disable': is_last_page, 'keep_query': True}
-link_document_page_zoom_in = Link(text=_('Zoom in'), 'class': 'no-parent-history', 'view': 'documents:document_page_zoom_in', 'args': 'page.pk', 'famfam': 'zoom_in', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'conditional_disable': is_max_zoom}
-link_document_page_zoom_out = Link(text=_('Zoom out'), 'class': 'no-parent-history', 'view': 'documents:document_page_zoom_out', 'args': 'page.pk', 'famfam': 'zoom_out', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'conditional_disable': is_min_zoom}
-link_document_page_rotate_right = Link(text=_('Rotate right'), 'class': 'no-parent-history', 'view': 'documents:document_page_rotate_right', 'args': 'page.pk', 'famfam': 'arrow_turn_right', 'permissions': [PERMISSION_DOCUMENT_VIEW]}
-link_document_page_rotate_left = Link(text=_('Rotate left'), 'class': 'no-parent-history', 'view': 'documents:document_page_rotate_left', 'args': 'page.pk', 'famfam': 'arrow_turn_left', 'permissions': [PERMISSION_DOCUMENT_VIEW]}
-link_document_page_view_reset = Link(text=_('Reset view'), 'class': 'no-parent-history', 'view': 'documents:document_page_view_reset', 'args': 'page.pk', 'famfam': 'page_white', 'permissions': [PERMISSION_DOCUMENT_VIEW]}
+link_document_page_transformation_list = Link(args='page.pk', klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_TRANSFORM], text=_('Page transformations'), view='documents:document_page_transformation_list')
+link_document_page_transformation_create = Link(args='page.pk', klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_TRANSFORM], text= _('Create new transformation'), view='documents:document_page_transformation_create')
+link_document_page_transformation_edit = Link(args='transformation.pk', klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_TRANSFORM], text=_('Edit'), view='documents:document_page_transformation_edit')
+link_document_page_transformation_delete = Link(args='transformation.pk', klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_TRANSFORM], text=_('Delete'), view='documents:document_page_transformation_delete')
+link_document_page_view = Link(args='page.pk', klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_VIEW], text=_('Page image'), view='documents:document_page_view')
+link_document_page_text = Link(args='page.pk', klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_VIEW], text=_('Page text'), view='documents:document_page_text')
+link_document_page_edit = Link(klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_EDIT], text=_('Edit page text'), view='documents:document_page_edit', args='page.pk')
+link_document_page_navigation_next = Link(conditional_disable=is_last_page, keep_query=True, klass='no-parent-history', text=_('Next page'), permissions=[PERMISSION_DOCUMENT_VIEW], view='documents:document_page_navigation_next', args='page.pk')
+link_document_page_navigation_previous = Link(conditional_disable=is_first_page, keep_query=True, klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_VIEW], text=_('Previous page'), view='documents:document_page_navigation_previous', args='page.pk')
+link_document_page_navigation_first = Link(conditional_disable=is_first_page, keep_query=True, klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_VIEW], text=_('First page'), view='documents:document_page_navigation_first', args='page.pk')
+link_document_page_navigation_last = Link(conditional_disable=is_last_page, keep_query=True, text=_('Last page'), klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_VIEW], view='documents:document_page_navigation_last', args='page.pk')
+link_document_page_zoom_in = Link(conditional_disable=is_max_zoom, klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_VIEW], text=_('Zoom in'), view='documents:document_page_zoom_in', args='page.pk')
+link_document_page_zoom_out = Link(conditional_disable=is_min_zoom, klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_VIEW], text=_('Zoom out'), view='documents:document_page_zoom_out', args='page.pk')
+link_document_page_rotate_right = Link(klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_VIEW], text=_('Rotate right'), view='documents:document_page_rotate_right', args='page.pk')
+link_document_page_rotate_left = Link(klass='no-parent-history', permissions=[PERMISSION_DOCUMENT_VIEW], text=_('Rotate left'), view='documents:document_page_rotate_left', args='page.pk')
+link_document_page_view_reset = Link(permissions=[PERMISSION_DOCUMENT_VIEW], klass='no-parent-history', text=_('Reset view'), view='documents:document_page_view_reset', args='page.pk')
# Document versions
-document_version_revert = {'text': _('Revert'), 'view': 'documents:document_version_revert', 'args': 'object.pk', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VERSION_REVERT], 'conditional_disable': is_current_version}
+link_document_version_revert = Link(conditional_disable=is_current_version, permissions=[PERMISSION_DOCUMENT_VERSION_REVERT], text=_('Revert'), view='documents:document_version_revert', args='object.pk')
# Document type related links
-document_type_list = {'text': _('Document types'), 'view': 'documents:document_type_list', 'famfam': 'layout', 'permissions': [PERMISSION_DOCUMENT_TYPE_VIEW]}
+link_document_type_list = Link(permissions=[PERMISSION_DOCUMENT_TYPE_VIEW], text=_('Document types'), view='documents:document_type_list')
link_document_type_setup = Link(icon='fa fa-file', permissions=[PERMISSION_DOCUMENT_TYPE_VIEW], text=_('Document types'), view='documents:document_type_list')
-document_type_edit = {'text': _('Edit'), 'view': 'documents:document_type_edit', 'args': 'document_type.id', 'famfam': 'layout_edit', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]}
-document_type_delete = {'text': _('Delete'), 'view': 'documents:document_type_delete', 'args': 'document_type.id', 'famfam': 'layout_delete', 'permissions': [PERMISSION_DOCUMENT_TYPE_DELETE]}
-document_type_create = {'text': _('Create document type'), 'view': 'documents:document_type_create', 'famfam': 'layout_add', 'permissions': [PERMISSION_DOCUMENT_TYPE_CREATE]}
+link_document_type_edit = Link(permissions=[PERMISSION_DOCUMENT_TYPE_EDIT], text=_('Edit'), view='documents:document_type_edit', args='document_type.id')
+link_document_type_delete = Link(permissions=[PERMISSION_DOCUMENT_TYPE_DELETE], text=_('Delete'), view='documents:document_type_delete', args='document_type.id')
+link_document_type_create = Link(permissions=[PERMISSION_DOCUMENT_TYPE_CREATE], text=_('Create document type'), view='documents:document_type_create')
-document_type_filename_list = {'text': _('Filenames'), 'view': 'documents:document_type_filename_list', 'args': 'document_type.id', 'famfam': 'database', 'permissions': [PERMISSION_DOCUMENT_TYPE_VIEW]}
-document_type_filename_create = {'text': _('Add filename to document type'), 'view': 'documents:document_type_filename_create', 'args': 'document_type.id', 'famfam': 'database_add', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]}
-document_type_filename_edit = {'text': _('Edit'), 'view': 'documents:document_type_filename_edit', 'args': 'filename.id', 'famfam': 'database_edit', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]}
-document_type_filename_delete = {'text': _('Delete'), 'view': 'documents:document_type_filename_delete', 'args': 'filename.id', 'famfam': 'database_delete', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]}
+link_document_type_filename_list = Link(permissions=[PERMISSION_DOCUMENT_TYPE_VIEW], text=_('Filenames'), view='documents:document_type_filename_list', args='document_type.id')
+link_document_type_filename_create = Link(permissions=[PERMISSION_DOCUMENT_TYPE_EDIT], text=_('Add filename to document type'), view='documents:document_type_filename_create', args='document_type.id')
+link_document_type_filename_edit = Link(permissions=[PERMISSION_DOCUMENT_TYPE_EDIT], text=_('Edit'), view='documents:document_type_filename_edit', args='filename.id')
+link_document_type_filename_delete = Link(permissions=[PERMISSION_DOCUMENT_TYPE_EDIT], text=_('Delete'), view='documents:document_type_filename_delete', args='filename.id')
diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py
index c27d62d0e2..8e2b226437 100644
--- a/mayan/apps/documents/views.py
+++ b/mayan/apps/documents/views.py
@@ -585,7 +585,7 @@ def document_page_view(request, document_page_id):
return render_to_response('appearance/generic_detail.html', {
'page': document_page,
'access_object': document_page.document,
- 'navigation_object_name': 'page',
+ 'navigation_object_list': [{'object': 'page'}],
'web_theme_hide_menus': True,
'form': document_page_form,
'title': ' '.join([base_title, zoom_text]),
@@ -609,7 +609,7 @@ def document_page_text(request, document_page_id):
return render_to_response('appearance/generic_detail.html', {
'page': document_page,
- 'navigation_object_name': 'page',
+ 'navigation_object_list': [{'object': 'page'}],
'web_theme_hide_menus': True,
'form': document_page_form,
'title': _('Details for: %s') % document_page,
@@ -639,7 +639,7 @@ def document_page_edit(request, document_page_id):
return render_to_response('appearance/generic_form.html', {
'form': form,
'page': document_page,
- 'navigation_object_name': 'page',
+ 'navigation_object_list': [{'object': 'page'}],
'title': _('Edit: %s') % document_page,
'web_theme_hide_menus': True,
'access_object': document_page.document,
@@ -889,7 +889,7 @@ def document_type_edit(request, document_type_id):
return render_to_response('appearance/generic_form.html', {
'title': _('Edit document type: %s') % document_type,
'form': form,
- 'navigation_object_name': 'document_type',
+ 'navigation_object_list': [{'object': 'document_type'}],
'document_type': document_type,
'next': next
}, context_instance=RequestContext(request))
@@ -917,7 +917,7 @@ def document_type_delete(request, document_type_id):
context = {
'document_type': document_type,
'delete_view': True,
- 'navigation_object_name': 'document_type',
+ 'navigation_object_list': [{'object': 'document_type'}],
'next': next,
'previous': previous,
'title': _('Are you sure you wish to delete the document type: %s?') % document_type,
@@ -957,7 +957,7 @@ def document_type_filename_list(request, document_type_id):
context = {
'object_list': document_type.filenames.all(),
'title': _('Filenames for document type: %s') % document_type,
- 'navigation_object_name': 'document_type',
+ 'navigation_object_list': [{'object': 'document_type'}],
'document_type': document_type,
'list_object_variable_name': 'filename',
'hide_link': True,
@@ -1002,8 +1002,8 @@ def document_type_filename_edit(request, document_type_filename_id):
'filename': document_type_filename,
'document_type': document_type_filename.document_type,
'navigation_object_list': [
- {'object': 'document_type', 'name': _('Document type')},
- {'object': 'filename', 'name': _('Document type filename')}
+ {'object': 'document_type'},
+ {'object': 'filename'}
],
}, context_instance=RequestContext(request))
@@ -1034,8 +1034,8 @@ def document_type_filename_delete(request, document_type_filename_id):
'filename': document_type_filename,
'document_type': document_type_filename.document_type,
'navigation_object_list': [
- {'object': 'document_type', 'name': _('Document type')},
- {'object': 'filename', 'name': _('Document type filename')}
+ {'object': 'document_type'},
+ {'object': 'filename'}
],
'title': _('Are you sure you wish to delete the filename: %(filename)s, from document type "%(document_type)s"?') % {
'document_type': document_type_filename.document_type, 'filename': document_type_filename
@@ -1074,7 +1074,7 @@ def document_type_filename_create(request, document_type_id):
'form': form,
'document_type': document_type,
'navigation_object_list': [
- {'object': 'document_type', 'name': _('Document type')},
+ {'object': 'document_type'},
],
}, context_instance=RequestContext(request))
diff --git a/mayan/apps/dynamic_search/apps.py b/mayan/apps/dynamic_search/apps.py
index 0fb42a0117..28ce249969 100644
--- a/mayan/apps/dynamic_search/apps.py
+++ b/mayan/apps/dynamic_search/apps.py
@@ -14,7 +14,7 @@ class DynamicSearchApp(apps.AppConfig):
verbose_name = _('Dynamic search')
def ready(self):
+ APIEndPoint('search', app_name='dynamic_search')
+
menu_facet.bind_links(links=[link_search, link_search_advanced], sources=['search:search', 'search:search_advanced', 'search:results'])
menu_sidebar.bind_links(links=[link_search_again], sources=['search:results'])
-
- APIEndPoint('search', app_name='dynamic_search')
diff --git a/mayan/apps/folders/links.py b/mayan/apps/folders/links.py
index b755c966a2..808253776a 100644
--- a/mayan/apps/folders/links.py
+++ b/mayan/apps/folders/links.py
@@ -12,16 +12,13 @@ from .permissions import (
PERMISSION_FOLDER_REMOVE_DOCUMENT
)
-link_folder_create = Link(permissions=[PERMISSION_FOLDER_CREATE], text=_('Create folder'), view='folders:folder_create')
-link_folder_list = Link(icon='fa fa-folder', text=_('Folders'), view='folders:folder_list')
-
-link_folder_edit = Link(permissions=[PERMISSION_FOLDER_EDIT], text=_('Edit'), view='folders:folder_edit', args='object.pk')
-link_folder_delete = Link(permissions=[PERMISSION_FOLDER_DELETE], text=_('Delete'), view='folders:folder_delete', args='object.pk')
-link_folder_view = Link(permissions=[PERMISSION_FOLDER_VIEW], text=_('Documents'), view='folders:folder_view', args='object.pk')
link_folder_acl_list = Link(permissions=[ACLS_VIEW_ACL], text=_('ACLs'), view='folders:folder_acl_list', args='object.pk')
-
-link_folder_document_multiple_remove = Link(permissions=[PERMISSION_FOLDER_REMOVE_DOCUMENT], text=_('Remove from folder'), view='folders:folder_document_multiple_remove', args='object.pk')
link_folder_add_document = Link(permissions=[PERMISSION_FOLDER_ADD_DOCUMENT], text=_('Add to a folder'), view='folders:folder_add_document', args='object.pk')
link_folder_add_multiple_documents = Link(text=_('Add to folder'), view='folders:folder_add_multiple_documents')
+link_folder_create = Link(permissions=[PERMISSION_FOLDER_CREATE], text=_('Create folder'), view='folders:folder_create')
+link_folder_delete = Link(permissions=[PERMISSION_FOLDER_DELETE], text=_('Delete'), view='folders:folder_delete', args='object.pk')
+link_folder_document_multiple_remove = Link(permissions=[PERMISSION_FOLDER_REMOVE_DOCUMENT], text=_('Remove from folder'), view='folders:folder_document_multiple_remove', args='object.pk')
+link_folder_edit = Link(permissions=[PERMISSION_FOLDER_EDIT], text=_('Edit'), view='folders:folder_edit', args='object.pk')
+link_folder_list = Link(icon='fa fa-folder', text=_('Folders'), view='folders:folder_list')
+link_folder_view = Link(permissions=[PERMISSION_FOLDER_VIEW], text=_('Documents'), view='folders:folder_view', args='object.pk')
link_document_folder_list = Link(permissions=[PERMISSION_DOCUMENT_VIEW], text=_('Folders'), view='folders:document_folder_list', args='object.pk')
-
diff --git a/mayan/apps/installation/apps.py b/mayan/apps/installation/apps.py
index c6841f3f35..6712d6f434 100644
--- a/mayan/apps/installation/apps.py
+++ b/mayan/apps/installation/apps.py
@@ -3,7 +3,7 @@ from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _
-from common import menu_tools
+from common import menu_tools, menu_object, menu_secondary
from common.utils import encapsulate
from navigation.api import register_model_list_columns
@@ -16,6 +16,20 @@ class InstallationApp(apps.AppConfig):
verbose_name = _('Installation')
def ready(self):
+ menu_object.bind_links(links=[link_namespace_details], sources=[PropertyNamespace])
+ menu_secondary.bind_links(links=[link_namespace_list], sources=['installation:namespace_list', PropertyNamespace])
+ menu_tools.bind_links(links=[link_menu_link])
+
+ # Virtualenv
+ namespace = PropertyNamespace('venv', _('VirtualEnv'))
+ try:
+ venv = VirtualEnv()
+ except PIPNotFound:
+ namespace.add_property('pip', 'pip', _('pip not found.'), report=True)
+ else:
+ for item, version, result in venv.get_results():
+ namespace.add_property(item, '%s (%s)' % (item, version), result, report=True)
+
register_model_list_columns(PropertyNamespace, [
{
'name': _('Label'),
@@ -37,18 +51,3 @@ class InstallationApp(apps.AppConfig):
'attribute': 'value'
}
])
-
- # TODO: convert
- #register_links(PropertyNamespace, [link_namespace_details])
- #register_links(['installation:namespace_list', PropertyNamespace], [link_namespace_list], menu_name='secondary_menu')
- menu_tools.bind_links(links=[link_menu_link])
-
- # Virtualenv
- namespace = PropertyNamespace('venv', _('VirtualEnv'))
- try:
- venv = VirtualEnv()
- except PIPNotFound:
- namespace.add_property('pip', 'pip', _('pip not found.'), report=True)
- else:
- for item, version, result in venv.get_results():
- namespace.add_property(item, '%s (%s)' % (item, version), result, report=True)
diff --git a/mayan/apps/installation/links.py b/mayan/apps/installation/links.py
index f4f76d270f..5214ac505c 100644
--- a/mayan/apps/installation/links.py
+++ b/mayan/apps/installation/links.py
@@ -7,5 +7,5 @@ from navigation import Link
from .permissions import PERMISSION_INSTALLATION_DETAILS
link_menu_link = Link(icon='fa fa-flag', permissions=[PERMISSION_INSTALLATION_DETAILS], text=_('Installation details'), view='installation:namespace_list')
-link_namespace_list = {'text': _('Installation property namespaces'), 'view': 'installation:namespace_list', 'famfam': 'layout', 'permissions': [PERMISSION_INSTALLATION_DETAILS]}
-link_namespace_details = {'text': _('Details'), 'view': 'installation:namespace_details', 'args': 'object.id', 'famfam': 'layout_link', 'permissions': [PERMISSION_INSTALLATION_DETAILS]}
+link_namespace_details = Link(permissions=[PERMISSION_INSTALLATION_DETAILS], text=_('Details'), view='installation:namespace_details', args='object.id')
+link_namespace_list = Link(permissions=[PERMISSION_INSTALLATION_DETAILS], text=_('Installation property namespaces'), view='installation:namespace_list')
diff --git a/mayan/apps/mailer/apps.py b/mayan/apps/mailer/apps.py
index dca804ba90..c09a6ba543 100644
--- a/mayan/apps/mailer/apps.py
+++ b/mayan/apps/mailer/apps.py
@@ -18,8 +18,8 @@ class MailerApp(apps.AppConfig):
verbose_name = _('Mailer')
def ready(self):
- menu_object.bind_links(links=[link_send_document_link, link_send_document], sources=[Document])
-
class_permissions(Document, [
PERMISSION_MAILING_LINK, PERMISSION_MAILING_SEND_DOCUMENT
])
+
+ menu_object.bind_links(links=[link_send_document_link, link_send_document], sources=[Document])
diff --git a/mayan/apps/mailer/links.py b/mayan/apps/mailer/links.py
index 587b82f373..b9a7aa7550 100644
--- a/mayan/apps/mailer/links.py
+++ b/mayan/apps/mailer/links.py
@@ -6,5 +6,5 @@ from navigation import Link
from .permissions import PERMISSION_MAILING_LINK, PERMISSION_MAILING_SEND_DOCUMENT
-link_send_document_link = Link(permissions=[PERMISSION_MAILING_LINK], text=_('Email link'), view='mailer:send_document_link', args='object.pk')
link_send_document = Link(permissions=[PERMISSION_MAILING_SEND_DOCUMENT], text=_('Email document'), view='mailer:send_document', args='object.pk')
+link_send_document_link = Link(permissions=[PERMISSION_MAILING_LINK], text=_('Email link'), view='mailer:send_document_link', args='object.pk')
diff --git a/mayan/apps/main/__init__.py b/mayan/apps/main/__init__.py
index 4be245e2f4..1ce2d4baec 100644
--- a/mayan/apps/main/__init__.py
+++ b/mayan/apps/main/__init__.py
@@ -1 +1 @@
-from .classes import FrontPageButton, MissingItem # NOQA
+from .classes import MissingItem # NOQA
diff --git a/mayan/apps/main/classes.py b/mayan/apps/main/classes.py
index 6178dff7b2..b180f8e626 100644
--- a/mayan/apps/main/classes.py
+++ b/mayan/apps/main/classes.py
@@ -1,15 +1,3 @@
-class FrontPageButton(object):
- _registry = []
-
- @classmethod
- def get_all(cls):
- return cls._registry
-
- def __init__(self, link):
- self.link = link
- self.__class__._registry.append(link)
-
-
class MissingItem(object):
_registry = []
diff --git a/mayan/apps/main/views.py b/mayan/apps/main/views.py
index cdfb033fa6..4abf16aa61 100644
--- a/mayan/apps/main/views.py
+++ b/mayan/apps/main/views.py
@@ -10,14 +10,13 @@ from dynamic_search.classes import SearchModel
from permissions.models import Permission
from .api import diagnostics, tools
-from .classes import FrontPageButton, MissingItem
+from .classes import MissingItem
def home(request):
document_search = SearchModel.get('documents.Document')
context = {
- 'object_navigation_links': FrontPageButton.get_all(),
'query_string': request.GET,
'hide_links': True,
'search_results_limit': 100,
diff --git a/mayan/apps/navigation/classes.py b/mayan/apps/navigation/classes.py
index b7bc3fd9ae..6001d0849d 100644
--- a/mayan/apps/navigation/classes.py
+++ b/mayan/apps/navigation/classes.py
@@ -185,6 +185,11 @@ class Link(object):
current_path = request.META['PATH_INFO']
current_view = resolve(current_path).view_name
+ # Preserve unicode data in URL query
+ previous_path = smart_unicode(urllib.unquote_plus(smart_str(request.get_full_path()) or smart_str(request.META.get('HTTP_REFERER', reverse('main:home')))))
+ query_string = urlparse.urlparse(previous_path).query
+ parsed_query_string = urlparse.parse_qs(query_string)
+
if self.permissions:
try:
Permission.objects.check_permissions(request.user, self.permissions)
diff --git a/mayan/apps/sources/apps.py b/mayan/apps/sources/apps.py
index 39c5812653..ae7dfe2bc7 100644
--- a/mayan/apps/sources/apps.py
+++ b/mayan/apps/sources/apps.py
@@ -3,10 +3,10 @@ from __future__ import absolute_import, unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _
-from common import menu_setup
+from common import menu_front_page, menu_setup
from common.utils import encapsulate
from documents.models import Document
-from main import FrontPageButton, MissingItem
+from main import MissingItem
from navigation.api import register_model_list_columns
from rest_api.classes import APIEndPoint
@@ -32,6 +32,9 @@ class SourcesApp(apps.AppConfig):
verbose_name = _('Sources')
def ready(self):
+ APIEndPoint('sources')
+ MissingItem(label=_('Create a document source'), description=_('Document sources are the way in which new documents are feed to Mayan EDMS, create at least a web form source to be able to upload documents from a browser.'), condition=lambda: not Source.objects.exists(), view='sources:setup_source_list')
+
register_model_list_columns(StagingFile, [
{
'name': _('Thumbnail'), 'attribute':
@@ -50,8 +53,5 @@ class SourcesApp(apps.AppConfig):
menu_setup.bind_links(links=[link_setup_sources])
- APIEndPoint('sources')
+ menu_front_page.bind_links(links=[link_document_create_multiple])
- FrontPageButton(link=link_document_create_multiple)
-
- MissingItem(label=_('Create a document source'), description=_('Document sources are the way in which new documents are feed to Mayan EDMS, create at least a web form source to be able to upload documents from a browser.'), condition=lambda: not Source.objects.exists(), view='sources:setup_source_list')
diff --git a/mayan/apps/user_management/apps.py b/mayan/apps/user_management/apps.py
index 76da6ef4f3..5459e7db4d 100644
--- a/mayan/apps/user_management/apps.py
+++ b/mayan/apps/user_management/apps.py
@@ -6,7 +6,7 @@ from django.utils.translation import ugettext_lazy as _
from actstream import registry
-from common import menu_setup
+from common import menu_multi_item, menu_object, menu_secondary, menu_setup
from rest_api.classes import APIEndPoint
from .links import (
@@ -23,17 +23,15 @@ class UserManagementApp(apps.AppConfig):
verbose_name = _('User management')
def ready(self):
- # TODO: convert
- #register_links(User, [user_edit, user_set_password, user_groups, user_delete])
- #register_links([User, 'user_management:user_multiple_set_password', 'user_management:user_multiple_delete', 'user_management:user_list', 'user_management:user_add'], [user_list, user_add], menu_name='secondary_menu')
- #register_links(['user_management:user_list'], [user_multiple_set_password, user_multiple_delete], menu_name='multi_item_links')
- #register_links(Group, [group_edit, group_members, group_delete])
- #register_links(['user_management:group_multiple_delete', 'user_management:group_delete', 'user_management:group_edit', 'user_management:group_list', 'user_management:group_add', 'user_management:group_members'], [group_list, group_add], menu_name='secondary_menu')
- #register_links(['user_management:group_list'], [group_multiple_delete], menu_name='multi_item_links')
-
- menu_setup.bind_links(links=[link_user_setup, link_group_setup])
-
APIEndPoint('users', app_name='user_management')
- registry.register(User)
+ menu_multi_item.bind_links(links=[link_group_multiple_delete], sources=['user_management:group_list'])
+ menu_multi_item.bind_links(links=[link_user_multiple_set_password, link_user_multiple_delete], sources=['user_management:user_list'])
+ menu_object.bind_links(links=[link_group_edit, link_group_members, link_group_delete], sources=[Group])
+ menu_object.bind_links(links=[link_user_edit, link_user_set_password, link_user_groups, link_user_delete], sources=[User])
+ menu_secondary.bind_links(links=[link_group_list, link_group_add], sources=['user_management:group_multiple_delete', 'user_management:group_delete', 'user_management:group_edit', 'user_management:group_list', 'user_management:group_add', 'user_management:group_members'])
+ menu_secondary.bind_links(links=[link_user_list, link_user_add], sources=[User, 'user_management:user_multiple_set_password', 'user_management:user_multiple_delete', 'user_management:user_list', 'user_management:user_add'])
+ menu_setup.bind_links(links=[link_user_setup, link_group_setup])
+
registry.register(Group)
+ registry.register(User)