diff --git a/mayan/apps/acls/__init__.py b/mayan/apps/acls/__init__.py index e1c71dd3b9..f6a3048caa 100644 --- a/mayan/apps/acls/__init__.py +++ b/mayan/apps/acls/__init__.py @@ -4,7 +4,7 @@ from django.dispatch import receiver from south.signals import post_migrate -from navigation.api import register_links, register_multi_item_links +from navigation.api import register_links from project_setup.api import register_setup from .classes import (AccessHolder, AccessObject, AccessObjectClass, @@ -20,8 +20,8 @@ register_links(AccessObjectClass, [acl_class_acl_list, acl_class_new_holder_for] register_links(AccessHolder, [acl_detail]) register_links(['acls:acl_setup_valid_classes', 'acls:acl_class_acl_list', 'acls:acl_class_new_holder_for', 'acls:acl_class_acl_detail', 'acls:acl_class_multiple_grant', 'acls:acl_class_multiple_revoke'], [acl_class_list], menu_name='secondary_menu') register_links(ClassAccessHolder, [acl_class_acl_detail]) -register_multi_item_links(['acls:acl_detail'], [acl_grant, acl_revoke]) -register_multi_item_links(['acls:acl_class_acl_detail'], [acl_class_grant, acl_class_revoke]) +register_links(['acls:acl_detail'], [acl_grant, acl_revoke], menu_name='multi_item_links') +register_links(['acls:acl_class_acl_detail'], [acl_class_grant, acl_class_revoke], menu_name='multi_item_links') register_setup(acl_setup_valid_classes) diff --git a/mayan/apps/documents/__init__.py b/mayan/apps/documents/__init__.py index 56bace64ac..d4b716d814 100644 --- a/mayan/apps/documents/__init__.py +++ b/mayan/apps/documents/__init__.py @@ -11,7 +11,7 @@ from history.api import register_history_type from history.permissions import PERMISSION_HISTORY_VIEW from main.api import register_diagnostic, register_maintenance_links from navigation.api import (register_links, register_model_list_columns, - register_multi_item_links, register_top_menu) + register_top_menu) from navigation.links import link_spacer from project_setup.api import register_setup from rest_api.classes import APIEndPoint @@ -77,7 +77,7 @@ register_links([DocumentTypeFilename, 'documents:document_type_filename_list', ' # Register document links register_links(Document, [document_view_simple, document_edit, document_print, document_delete, document_download, document_clear_transformations, document_update_page_count]) -register_multi_item_links(['folders:folder_view', 'index_instance_node_view', 'search', 'results', 'document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [link_spacer, document_multiple_clear_transformations, document_multiple_delete, document_multiple_download, document_multiple_update_page_count]) +register_links([Document], [link_spacer, document_multiple_clear_transformations, document_multiple_delete, document_multiple_download, document_multiple_update_page_count], menu_name='multi_item_links') # Document Version links register_links(DocumentVersion, [document_version_revert, document_version_download]) diff --git a/mayan/apps/folders/__init__.py b/mayan/apps/folders/__init__.py index 2a148e3e27..b23b4c7984 100644 --- a/mayan/apps/folders/__init__.py +++ b/mayan/apps/folders/__init__.py @@ -7,7 +7,7 @@ from acls.permissions import ACLS_EDIT_ACL, ACLS_VIEW_ACL from common.utils import encapsulate from documents.models import Document from navigation.api import (register_links, register_model_list_columns, - register_multi_item_links, register_top_menu) + register_top_menu) from navigation.links import link_spacer from rest_api.classes import APIEndPoint @@ -23,13 +23,11 @@ from .permissions import (PERMISSION_FOLDER_ADD_DOCUMENT, PERMISSION_FOLDER_VIEW) from .urls import api_urls -register_links(Document, [document_folder_list], menu_name='form_header') register_links(Folder, [folder_view, folder_edit, folder_acl_list, folder_delete]) register_links([Folder, 'folders:folder_list', 'folders:folder_create'], [folder_list, folder_create], menu_name='secondary_menu') register_links(['folders:document_folder_list', 'folders:folder_add_document'], [folder_add_document], menu_name="sidebar") - -register_multi_item_links(['folders:folder_view', 'indexes:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'indexing:document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [link_spacer, folder_add_multiple_documents]) -register_multi_item_links(['folders:folder_view'], [folder_document_multiple_remove]) +register_links(Document, [document_folder_list], menu_name='form_header') +register_links([Document], [link_spacer, folder_add_multiple_documents, folder_document_multiple_remove], menu_name='multi_item_links') register_top_menu(name='folders', link=folders_main_menu_link, children_views=['folders:folder_list', 'folders:folder_create', 'folders:folder_edit', 'folders:folder_delete', 'folders:folder_view', 'folders:folder_document_multiple_remove']) diff --git a/mayan/apps/main/templates/main/generic_list_subtemplate.html b/mayan/apps/main/templates/main/generic_list_subtemplate.html index 9a75a3c6c9..8151ce0b6c 100644 --- a/mayan/apps/main/templates/main/generic_list_subtemplate.html +++ b/mayan/apps/main/templates/main/generic_list_subtemplate.html @@ -30,20 +30,18 @@ {% endif %}
- {% get_multi_item_links_form %} + {% get_multi_item_links_form object_list %} {% if multi_item_actions %}
- {% with multi_item_form as form %} - {% include 'main/generic_form_instance.html' %} - {% endwith %} + {% with multi_item_form as form %} + {% include 'main/generic_form_instance.html' %} + {% endwith %}
- -
{% endif %} diff --git a/mayan/apps/metadata/__init__.py b/mayan/apps/metadata/__init__.py index 56f19a2e4b..485f8e0af5 100644 --- a/mayan/apps/metadata/__init__.py +++ b/mayan/apps/metadata/__init__.py @@ -5,8 +5,7 @@ from django.utils.translation import ugettext_lazy as _ from acls.api import class_permissions from common.utils import encapsulate from documents.models import Document, DocumentType -from navigation.api import (register_links, register_model_list_columns, - register_multi_item_links) +from navigation.api import register_links, register_model_list_columns from navigation.links import link_spacer from project_setup.api import register_setup from rest_api.classes import APIEndPoint @@ -41,7 +40,8 @@ register_links(Document, [metadata_view], menu_name='form_header') register_links(DocumentType, [setup_document_type_metadata]) register_links(MetadataType, [setup_metadata_type_edit, setup_metadata_type_delete]) register_links([MetadataType, 'metadata:setup_metadata_type_list', 'metadata:setup_metadata_type_create'], [setup_metadata_type_list, setup_metadata_type_create], menu_name='secondary_menu') -register_multi_item_links(['folders:folder_view', 'indexes:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'linking:document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [link_spacer, metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove]) +register_links([Document], [link_spacer, metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove], menu_name='multi_item_links') + register_setup(setup_metadata_type_list) diff --git a/mayan/apps/navigation/api.py b/mayan/apps/navigation/api.py index 998a3e40c5..e70574ee33 100644 --- a/mayan/apps/navigation/api.py +++ b/mayan/apps/navigation/api.py @@ -1,26 +1,8 @@ object_navigation = {} -multi_object_navigation = {} model_list_columns = {} -sidebar_templates = {} top_menu_entries = [] -def register_multi_item_links(src, links, menu_name=None): - """ - Register a multiple item action action to be displayed in the - generic list template - """ - - multi_object_navigation.setdefault(menu_name, {}) - if hasattr(src, '__iter__'): - for one_src in src: - multi_object_navigation[menu_name].setdefault(one_src, {'links': []}) - multi_object_navigation[menu_name][one_src]['links'].extend(links) - else: - multi_object_navigation[menu_name].setdefault(src, {'links': []}) - multi_object_navigation[menu_name][src]['links'].extend(links) - - def register_links(src, links, menu_name=None, position=None): """ Associate a link to a model a view, or an url diff --git a/mayan/apps/navigation/templatetags/navigation_tags.py b/mayan/apps/navigation/templatetags/navigation_tags.py index a67e273cf1..00a45aa36e 100644 --- a/mayan/apps/navigation/templatetags/navigation_tags.py +++ b/mayan/apps/navigation/templatetags/navigation_tags.py @@ -11,12 +11,10 @@ from django.template import (TemplateSyntaxError, Library, VariableDoesNotExist, Node, Variable) from django.utils.encoding import smart_str, smart_unicode from django.utils.text import unescape_string_literal -from django.utils.translation import ugettext as _ from common.utils import urlquote -from ..api import (object_navigation, multi_object_navigation, - top_menu_entries, sidebar_templates) +from ..api import object_navigation, top_menu_entries from ..forms import MultiItemForm from ..utils import resolve_to_name @@ -164,7 +162,7 @@ def get_navigation_object(context): return obj, object_name -def _get_object_navigation_links(context, menu_name=None, links_dict=object_navigation): +def _get_object_navigation_links(context, menu_name=None, links_dict=object_navigation, obj=None): request = Variable('request').resolve(context) current_path = request.META['PATH_INFO'] current_view = resolve_to_name(current_path) @@ -197,7 +195,8 @@ def _get_object_navigation_links(context, menu_name=None, links_dict=object_navi except KeyError: pass - obj, object_name = get_navigation_object(context) + if not obj: + obj, object_name = get_navigation_object(context) # Match context navigation object links for source, data in links_dict[menu_name].items(): @@ -256,20 +255,13 @@ def object_navigation_template(context): return new_context -@register.tag -def get_multi_item_links(parser, token): - tag_name, arg = token.contents.split(None, 1) - m = re.search(r'("?\w+"?)?.?as (\w+)', arg) - if not m: - raise TemplateSyntaxError('%r tag had invalid arguments' % tag_name) - - menu_name, var_name = m.groups() - return GetNavigationLinks(menu_name=menu_name, links_dict=multi_object_navigation, var_name=var_name) - - @register.simple_tag(takes_context=True) -def get_multi_item_links_form(context): - actions = [(link['url'], link['text']) for link in _get_object_navigation_links(context, links_dict=multi_object_navigation)] +def get_multi_item_links_form(context, object_list=None): + if object_list: + first_object = object_list[0] + else: + first_object = None + actions = [(link['url'], link['text']) for link in _get_object_navigation_links(context, menu_name='multi_item_links', obj=first_object)] form = MultiItemForm(actions=actions) context.update({'multi_item_form': form, 'multi_item_actions': actions}) return '' diff --git a/mayan/apps/ocr/__init__.py b/mayan/apps/ocr/__init__.py index b17e6e0f5d..e48bdaee15 100644 --- a/mayan/apps/ocr/__init__.py +++ b/mayan/apps/ocr/__init__.py @@ -11,7 +11,7 @@ from acls.api import class_permissions from documents.models import Document, DocumentVersion from documents.signals import post_version_upload from main.api import register_maintenance_links -from navigation.api import register_links, register_multi_item_links +from navigation.api import register_links from navigation.links import link_spacer from project_tools.api import register_tool @@ -26,8 +26,8 @@ from .tasks import task_do_ocr logger = logging.getLogger(__name__) register_links(Document, [submit_document]) -register_multi_item_links(['folders:folder_view', 'indexing:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'linking:document_group_view', 'documents:document_list', 'document:document_list_recent', 'tags:tag_tagged_item_list'], [link_spacer, submit_document_multiple]) -register_multi_item_links(['ocr:queue_document_list'], [re_queue_multiple_document, queue_document_multiple_delete]) +register_links([Document], [link_spacer, submit_document_multiple], menu_name='multi_item_links') +register_links(['ocr:queue_document_list'], [re_queue_multiple_document, queue_document_multiple_delete]) register_links(['ocr:queue_document_list'], [queue_document_list], menu_name='secondary_menu') register_maintenance_links([all_document_ocr_cleanup], namespace='ocr', title=_(u'OCR')) diff --git a/mayan/apps/permissions/__init__.py b/mayan/apps/permissions/__init__.py index a59dcbbf9a..22e3def597 100644 --- a/mayan/apps/permissions/__init__.py +++ b/mayan/apps/permissions/__init__.py @@ -4,7 +4,7 @@ from django.contrib.auth.models import User from django.core.exceptions import ObjectDoesNotExist from django.db.models.signals import post_save -from navigation.api import register_links, register_multi_item_links +from navigation.api import register_links from project_setup.api import register_setup from .models import Role @@ -15,7 +15,7 @@ from .settings import DEFAULT_ROLES register_links(Role, [role_edit, role_members, role_permissions, role_delete]) register_links([Role, 'permissions:role_create', 'permissions:role_list'], [role_list, role_create], menu_name='secondary_menu') -register_multi_item_links(['permissions:role_permissions'], [permission_grant, permission_revoke]) +register_links(['permissions:role_permissions'], [permission_grant, permission_revoke], menu_name='multi_item_links') permission_views = ['permissions:role_list', 'permissions:role_create', 'permissions:role_edit', 'permissions:role_members', 'permissions:role_permissions', 'permissions:role_delete'] diff --git a/mayan/apps/tags/__init__.py b/mayan/apps/tags/__init__.py index a2c660fc5e..872273746b 100644 --- a/mayan/apps/tags/__init__.py +++ b/mayan/apps/tags/__init__.py @@ -7,7 +7,7 @@ from common.utils import encapsulate from documents import document_search from documents.models import Document from navigation.api import (register_links, register_model_list_columns, - register_multi_item_links, register_top_menu) + register_top_menu) from navigation.links import link_spacer from rest_api.classes import APIEndPoint @@ -52,15 +52,15 @@ register_model_list_columns(Document, [ }, ]) -register_links(Tag, [tag_tagged_item_list, tag_edit, tag_acl_list, tag_delete]) -register_multi_item_links(['tags:tag_list'], [link_spacer, tag_multiple_delete]) -register_links([Tag, 'tags:tag_list', 'tags:tag_create'], [tag_list, tag_create], menu_name='secondary_menu') register_top_menu('tags', link={'text': _(u'Tags'), 'view': 'tags:tag_list', 'famfam': 'tag_blue'}, children_view_regex=[r'^tag_(list|create|delete|edit|tagged|acl)']) -register_links(Document, [tag_document_list], menu_name='form_header') -register_links(['tags:document_tags', 'tags:tag_remove', 'tag_multiple_remove', 'tag_attach'], [tag_attach], menu_name='sidebar') -register_multi_item_links(['tags:document_tags'], [link_spacer, single_document_multiple_tag_remove]) +register_links(Tag, [tag_tagged_item_list, tag_edit, tag_acl_list, tag_delete]) +register_links([Tag], [link_spacer, tag_multiple_delete], menu_name='multi_item_links') +register_links([Tag, 'tags:tag_list', 'tags:tag_create'], [tag_list, tag_create], menu_name='secondary_menu') -register_multi_item_links(['folders:folder_view', 'indexes:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'linking:document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [link_spacer, tag_multiple_attach, multiple_documents_selection_tag_remove]) +register_links(Document, [tag_document_list], menu_name='form_header') +register_links(['tags:document_tags', 'tags:tag_remove', 'tags:tag_multiple_remove', 'tags:tag_attach'], [tag_attach], menu_name='sidebar') +register_links(['tags:document_tags'], [link_spacer, single_document_multiple_tag_remove], menu_name='multi_item_links') +register_links([Document], [link_spacer, tag_multiple_attach, multiple_documents_selection_tag_remove], menu_name='multi_item_links') document_search.add_model_field('tags__label', label=_(u'Tags')) diff --git a/mayan/apps/user_management/__init__.py b/mayan/apps/user_management/__init__.py index a72418e0dd..1986d6c22e 100644 --- a/mayan/apps/user_management/__init__.py +++ b/mayan/apps/user_management/__init__.py @@ -3,7 +3,7 @@ from __future__ import absolute_import from django.contrib.auth.models import User, Group from django.utils.translation import ugettext_lazy as _ -from navigation.api import register_links, register_multi_item_links +from navigation.api import register_links from navigation.links import link_spacer from project_setup.api import register_setup from rest_api.classes import APIEndPoint @@ -17,11 +17,11 @@ from .urls import api_urls 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=u'secondary_menu') -register_multi_item_links(['user_management:user_list'], [link_spacer, user_multiple_set_password, user_multiple_delete]) +register_links(['user_management:user_list'], [link_spacer, 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=u'secondary_menu') -register_multi_item_links(['user_management:group_list'], [link_spacer, group_multiple_delete]) +register_links(['user_management:group_list'], [link_spacer, group_multiple_delete], menu_name='multi_item_links') user_management_views = [ 'user_management:user_list', 'user_management:user_edit', 'user_management:user_add', 'user_management:user_delete',