Issue #92, Make register_multi_item_links class aware

This commit is contained in:
Roberto Rosario
2014-10-27 19:21:05 -04:00
parent 2874bb3434
commit 0bed1df64a
11 changed files with 42 additions and 72 deletions

View File

@@ -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)

View File

@@ -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])

View File

@@ -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'])

View File

@@ -30,20 +30,18 @@
{% endif %}
<form action="{% url 'common:multi_object_action_view' %}" class="form multi_select" method="get">
{% get_multi_item_links_form %}
{% get_multi_item_links_form object_list %}
{% if multi_item_actions %}
<div>
<div style="float: left;">
{% 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 %}
</div>
<div style="float: left; padding-top:10px; padding-left:10px;" >
<button class="button" type="submit" name="{{ form.prefix }}-submit">
<img src="{% static 'web_theme_media/images/icons/tick.png' %}" alt="{% if object %}{% trans 'Save' %}{% else %}{% trans 'Submit' %}{% endif %}" /> {% if object %}{% trans 'Save' %}{% else %}{% trans 'Submit' %}{% endif %}
<img src="{% static 'web_theme_media/images/icons/tick.png' %}" alt="{% trans 'Submit' %}" /> {% trans 'Submit' %}
</button>
</div>
</div>
{% endif %}

View File

@@ -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)

View File

@@ -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

View File

@@ -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 ''

View File

@@ -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'))

View File

@@ -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']

View File

@@ -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'))

View File

@@ -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',