Rename link 'class' attribute with 'klass' to avoid any conflicts. Fix django_gpg links. Remove 'dont_mark_active', 'conditional_highlight', and 'extra_navigation_links' features. Inject 'resolved_objects' into context before resolving links. Add check for ACLs when there is a resolved object present. Re-add remove_from_query and keep_query support. Use URLNode to resolve link this way the resolver work exactly as Django's {% url %} tag and saves some code duplicity.

This commit is contained in:
Roberto Rosario
2015-04-05 03:24:36 -04:00
parent db340513d0
commit e648975aff
7 changed files with 86 additions and 330 deletions
+5 -5
View File
@@ -19,11 +19,11 @@ from .permissions import (
link_document_create_multiple = Link(icon='fa fa-upload', permissions=[PERMISSION_DOCUMENT_CREATE], text=_('New document'), view='sources:document_create_multiple')
link_document_create_siblings = Link(permissions=[PERMISSION_DOCUMENT_CREATE], text=_('Clone'), view='sources:document_create_siblings', args='object.id')
link_setup_sources = Link(icon='fa fa-upload', permissions=[PERMISSION_SOURCES_SETUP_VIEW], text=_('Sources'), view='sources:setup_source_list')
link_setup_source_create_imap_email = Link(conditional_highlight=lambda context: context.get('source_type') == SOURCE_CHOICE_EMAIL_IMAP and 'source' not in context, permissions=[PERMISSION_SOURCES_SETUP_CREATE], text=_('Add new IMAP email'), view='sources:setup_source_create', args='"%s"' % SOURCE_CHOICE_EMAIL_IMAP)
link_setup_source_create_pop3_email = Link(conditional_highlight=lambda context: context.get('source_type') == SOURCE_CHOICE_EMAIL_POP3 and 'source' not in context, permissions=[PERMISSION_SOURCES_SETUP_CREATE], text=_('Add new POP3 email'), view='sources:setup_source_create', args='"%s"' % SOURCE_CHOICE_EMAIL_POP3)
link_setup_source_create_staging_folder = Link(conditional_highlight=lambda context: context.get('source_type') == SOURCE_CHOICE_STAGING and 'source' not in context, permissions=[PERMISSION_SOURCES_SETUP_CREATE], text=_('Add new staging folder'), view='sources:setup_source_create', args='"%s"' % SOURCE_CHOICE_STAGING)
link_setup_source_create_watch_folder = Link(conditional_highlight=lambda context: context.get('source_type') == SOURCE_CHOICE_WATCH and 'source' not in context, permissions=[PERMISSION_SOURCES_SETUP_CREATE], text=_('Add new watch folder'), view='sources:setup_source_create', args='"%s"' % SOURCE_CHOICE_WATCH)
link_setup_source_create_webform = Link(conditional_highlight=lambda context: context.get('source_type') == SOURCE_CHOICE_WEB_FORM and 'source' not in context, permissions=[PERMISSION_SOURCES_SETUP_CREATE], text=_('Add new webform source'), view='sources:setup_source_create', args='"%s"' % SOURCE_CHOICE_WEB_FORM)
link_setup_source_create_imap_email = Link(permissions=[PERMISSION_SOURCES_SETUP_CREATE], text=_('Add new IMAP email'), view='sources:setup_source_create', args='"%s"' % SOURCE_CHOICE_EMAIL_IMAP)
link_setup_source_create_pop3_email = Link(permissions=[PERMISSION_SOURCES_SETUP_CREATE], text=_('Add new POP3 email'), view='sources:setup_source_create', args='"%s"' % SOURCE_CHOICE_EMAIL_POP3)
link_setup_source_create_staging_folder = Link(permissions=[PERMISSION_SOURCES_SETUP_CREATE], text=_('Add new staging folder'), view='sources:setup_source_create', args='"%s"' % SOURCE_CHOICE_STAGING)
link_setup_source_create_watch_folder = Link(permissions=[PERMISSION_SOURCES_SETUP_CREATE], text=_('Add new watch folder'), view='sources:setup_source_create', args='"%s"' % SOURCE_CHOICE_WATCH)
link_setup_source_create_webform = Link(permissions=[PERMISSION_SOURCES_SETUP_CREATE], text=_('Add new webform source'), view='sources:setup_source_create', args='"%s"' % SOURCE_CHOICE_WEB_FORM)
link_setup_source_delete = Link(permissions=[PERMISSION_SOURCES_SETUP_DELETE], text=_('Delete'), view='sources:setup_source_delete', args=['source.pk'])
link_setup_source_edit = Link(text=_('Edit'), view='sources:setup_source_edit', args=['source.pk'], permissions=[PERMISSION_SOURCES_SETUP_EDIT])
link_setup_source_transformation_create = Link(permissions=[PERMISSION_SOURCES_SETUP_EDIT], text=_('Add transformation'), view='sources:setup_source_transformation_create', args=['source.pk'])
+15 -25
View File
@@ -11,6 +11,7 @@ from django.utils.http import urlencode
from django.utils.translation import ugettext_lazy as _
from acls.models import AccessEntry
from common import menu_facet
from common.models import SharedUploadedFile
from common.utils import encapsulate
from common.views import MultiFormView
@@ -20,6 +21,7 @@ from documents.permissions import (
)
from documents.tasks import task_upload_new_version
from metadata.api import decode_metadata_from_url, metadata_repr_as_list
from navigation import Link
from permissions.models import Permission
from .forms import (
@@ -57,27 +59,22 @@ def document_create_siblings(request, document_id):
return HttpResponseRedirect('%s?%s' % (url, urlencode(query_dict)))
def conditional_highlight_factory(obj):
return lambda context: context['source'].source_type == obj.source_type and context['source'].pk == obj.pk
def get_tab_link_for_source(source, document=None):
if document:
view = 'sources:upload_version'
args = [document.pk, source.pk]
args = ['"{}"'.format(document.pk), '"{}"'.format(source.pk)]
else:
view = 'sources:upload_interactive'
args = [source.pk]
args = ['"{}"'.format(source.pk)]
return {
'text': source.title,
'view': view,
'args': args,
'keep_query': True,
'remove_from_query': ['page'],
'conditional_highlight': conditional_highlight_factory(source),
'icon': 'fa fa-upload',
}
return Link(
text=source.title,
view=view,
args=args,
keep_query=True,
remove_from_query=['page'],
icon='fa fa-upload',
)
def get_active_tab_links(document=None):
@@ -152,18 +149,11 @@ class UploadBaseView(MultiFormView):
},
})
menu_facet.bound_links['sources:upload_interactive'] = self.tab_links['tab_links']
menu_facet.bound_links['sources:upload_version'] = self.tab_links['tab_links']
context.update({
'subtemplates_list': subtemplates_list,
'extra_navigation_links': {
'form_header': {
'sources:upload_version': {
'links': self.tab_links['tab_links']
},
'sources:upload_interactive': {
'links': self.tab_links['tab_links']
}
}
},
})
return context