Added new 'add document to folder' link to replace the sidebar template with the same use, added document membership list view, improved other folders apps views

This commit is contained in:
Roberto Rosario
2011-07-04 04:02:52 -04:00
parent b323a37596
commit 4fa8be1655
6 changed files with 107 additions and 44 deletions
+1 -1
View File
@@ -139,7 +139,7 @@ register_links(['document_type_filename_edit', 'document_type_filename_delete'],
# Register document links # Register document links
register_links(Document, [document_edit, document_print, document_delete, document_download, document_find_duplicates, document_clear_transformations, document_create_siblings]) register_links(Document, [document_edit, document_print, document_delete, document_download, document_find_duplicates, document_clear_transformations, document_create_siblings])
register_multi_item_links(['index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [document_multiple_clear_transformations, document_multiple_delete]) register_multi_item_links(['folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [document_multiple_clear_transformations, document_multiple_delete])
register_links(['document_list_recent', 'document_list', 'document_create', 'document_create_multiple', 'upload_document', 'upload_document_from_local', 'upload_document_from_staging', 'upload_document_from_user_staging', 'document_find_duplicates'], [document_list_recent, document_list, document_create_multiple], menu_name='secondary_menu') register_links(['document_list_recent', 'document_list', 'document_create', 'document_create_multiple', 'upload_document', 'upload_document_from_local', 'upload_document_from_staging', 'upload_document_from_user_staging', 'document_find_duplicates'], [document_list_recent, document_list, document_create_multiple], menu_name='secondary_menu')
+11 -6
View File
@@ -3,24 +3,29 @@ from django.utils.translation import ugettext_lazy as _
from navigation.api import register_links, register_top_menu, \ from navigation.api import register_links, register_top_menu, \
register_multi_item_links, register_sidebar_template register_multi_item_links, register_sidebar_template
from navigation.api import register_sidebar_template from navigation.api import register_sidebar_template
from documents.models import Document
from folders.models import Folder from folders.models import Folder
folder_list = {'text': _(u'folder list'), 'view': 'folder_list', 'famfam': 'folder_user'} folder_list = {'text': _(u'folder list'), 'view': 'folder_list', 'famfam': 'folder_user'}
folder_create = {'text': _('create folder'), 'view': 'folder_create', 'famfam': 'folder_add'} folder_create = {'text': _('create folder'), 'view': 'folder_create', 'famfam': 'folder_add'}
folder_edit = {'text': _('edit'), 'view': 'folder_edit', 'args': 'object.id', 'famfam': 'folder_edit'} folder_edit = {'text': _('edit'), 'view': 'folder_edit', 'args': 'object.pk', 'famfam': 'folder_edit'}
folder_delete = {'text': _('delete'), 'view': 'folder_delete', 'args': 'object.id', 'famfam': 'folder_delete'} folder_delete = {'text': _('delete'), 'view': 'folder_delete', 'args': 'object.pk', 'famfam': 'folder_delete'}
folder_document_multiple_remove = {'text': _('remove'), 'view': 'folder_document_multiple_remove', 'famfam': 'delete'} folder_document_multiple_remove = {'text': _('remove from folder'), 'view': 'folder_document_multiple_remove', 'args': 'object.pk', 'famfam': 'delete'}
folder_view = {'text': _(u'folder documents'), 'view': 'folder_view', 'args': 'object.id', 'famfam': 'folder_go'} folder_view = {'text': _(u'folder documents'), 'view': 'folder_view', 'args': 'object.pk', 'famfam': 'folder_go'}
folder_add_document = {'text': _('add to folder'), 'view': 'folder_add_document', 'args': 'object.pk', 'famfam': 'add'}
document_folder_list = {'text': _(u'folders'), 'view': 'document_folder_list', 'args': 'object.pk', 'famfam': 'folder_user'}
register_multi_item_links(['folder_view'], [folder_document_multiple_remove]) register_multi_item_links(['folder_view'], [folder_document_multiple_remove])
register_links(Folder, [folder_view, folder_edit, folder_delete]) register_links(Folder, [folder_view, folder_edit, folder_delete])
register_links(['folder_edit', 'folder_delete', 'folder_list', 'folder_create', 'folder_view'], [folder_list, folder_create], menu_name='secondary_menu') register_links(['folder_edit', 'folder_delete', 'folder_list', 'folder_create', 'folder_view', 'folder_document_multiple_remove'], [folder_list, folder_create], menu_name='secondary_menu')
register_top_menu(name='folders', link={'text': _('folders'), 'famfam': 'folder_user', 'view': 'folder_list'}, children_path_regex=[r'^folders/']) register_top_menu(name='folders', link={'text': _('folders'), 'famfam': 'folder_user', 'view': 'folder_list'}, children_path_regex=[r'^folders/'])
register_sidebar_template(['document_view_advanced', 'document_view_simple'], 'folders_sidebar_template.html') register_links(Document, [document_folder_list], menu_name='form_header')
register_sidebar_template(['folder_list'], 'folders_help.html') register_sidebar_template(['folder_list'], 'folders_help.html')
register_links(['document_folder_list', 'folder_add_document'], [folder_add_document], menu_name="sidebar")
+1 -1
View File
@@ -13,7 +13,7 @@ def get_add_document_to_folder_form(context):
context.update({ context.update({
'form': AddDocumentForm(user=context['request'].user), 'form': AddDocumentForm(user=context['request'].user),
'request': context['request'], 'request': context['request'],
'form_action': reverse('folder_add_document', args=[context['object'].pk]), 'form_action': reverse('folder_add_document_sidebar', args=[context['object'].pk]),
'title': _('Add document to a folder') 'title': _('Add document to a folder')
}) })
return context return context
+4 -2
View File
@@ -7,7 +7,9 @@ urlpatterns = patterns('folders.views',
url(r'^(?P<folder_id>\d+)/edit/$', 'folder_edit', (), 'folder_edit'), url(r'^(?P<folder_id>\d+)/edit/$', 'folder_edit', (), 'folder_edit'),
url(r'^(?P<folder_id>\d+)/delete/$', 'folder_delete', (), 'folder_delete'), url(r'^(?P<folder_id>\d+)/delete/$', 'folder_delete', (), 'folder_delete'),
url(r'^(?P<folder_id>\d+)/$', 'folder_view', (), 'folder_view'), url(r'^(?P<folder_id>\d+)/$', 'folder_view', (), 'folder_view'),
url(r'^document/multiple/remove/$', 'folder_document_multiple_remove', (), 'folder_document_multiple_remove'), url(r'^(?P<folder_id>\d+)/remove/document/multiple/$', 'folder_document_multiple_remove', (), 'folder_document_multiple_remove'),
url(r'^add_document/(?P<document_id>\d+)/$', 'folder_add_document', (), 'folder_add_document'), url(r'^document/(?P<document_id>\d+)/folder/add/sidebar/$', 'folder_add_document_sidebar', (), 'folder_add_document_sidebar'),
url(r'^document/(?P<document_id>\d+)/folder/add/$', 'folder_add_document', (), 'folder_add_document'),
url(r'^document/(?P<document_id>\d+)/folder/list/$', 'document_folder_list', (), 'document_folder_list'),
) )
+89 -33
View File
@@ -16,22 +16,25 @@ from folders.models import Folder, FolderDocument
from folders.forms import FolderForm, AddDocumentForm from folders.forms import FolderForm, AddDocumentForm
def folder_list(request): def folder_list(request, queryset=None, extra_context=None):
context = {
'title': _(u'folders'),
'multi_select_as_buttons': True,
'extra_columns': [
{'name': _(u'created'), 'attribute': 'datetime_created'},
{'name': _(u'documents'), 'attribute': lambda x: x.folderdocument_set.count()}
]
}
if extra_context:
context.update(extra_context)
return object_list( return object_list(
request, request,
queryset=Folder.objects.filter(user=request.user), queryset=queryset if not (queryset is None) else Folder.objects.filter(user=request.user),
template_name='generic_list.html', template_name='generic_list.html',
extra_context={ extra_context=context,
'title': _(u'folders'),
'multi_select_as_buttons': True,
'extra_columns': [
{'name': _(u'created'), 'attribute': 'datetime_created'},
{'name': _(u'documents'), 'attribute': lambda x: x.folderdocument_set.count()}
]
},
) )
def folder_create(request): def folder_create(request):
if request.method == 'POST': if request.method == 'POST':
form = FolderForm(request.POST) form = FolderForm(request.POST)
@@ -122,17 +125,8 @@ def folder_view(request, folder_id):
raise PermissionDenied raise PermissionDenied
return render_to_response('generic_list.html', { return render_to_response('generic_list.html', {
'object_list': folder.folderdocument_set.all(), 'object_list': [fd.document for fd in folder.folderdocument_set.all()],
'extra_columns': [ 'hide_links': True,
{'name': _(u'document'), 'attribute':
lambda x: document_link(x.document)
},
{'name': _(u'thumbnail'), 'attribute':
lambda x: document_thumbnail(x.document)
},
],
'hide_link': True,
'hide_object': True,
'title': _(u'documents in folder: %s') % folder, 'title': _(u'documents in folder: %s') % folder,
'multi_select_as_buttons': True, 'multi_select_as_buttons': True,
'object': folder, 'object': folder,
@@ -140,12 +134,13 @@ def folder_view(request, folder_id):
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def folder_add_document(request, document_id): def folder_add_document_sidebar(request, document_id):
check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW])
document = get_object_or_404(Document, pk=document_id) document = get_object_or_404(Document, pk=document_id)
previous = request.META.get('HTTP_REFERER', '/')
if request.method == 'POST': if request.method == 'POST':
previous = request.META.get('HTTP_REFERER', '/')
form = AddDocumentForm(request.POST, user=request.user) form = AddDocumentForm(request.POST, user=request.user)
if form.is_valid(): if form.is_valid():
if form.cleaned_data['existing_folder']: if form.cleaned_data['existing_folder']:
@@ -172,13 +167,73 @@ def folder_add_document(request, document_id):
return HttpResponseRedirect(previous) return HttpResponseRedirect(previous)
def folder_document_remove(request, folder_document_id=None, folder_document_id_list=None): def folder_add_document(request, document_id):
# TODO: merge with folder_add_document_sidebar
check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW])
document = get_object_or_404(Document, pk=document_id)
next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', '/')))#reverse('document_tags', args=[document.pk]))))
if request.method == 'POST':
form = AddDocumentForm(request.POST, user=request.user)
if form.is_valid():
if form.cleaned_data['existing_folder']:
folder = form.cleaned_data['existing_folder']
elif form.cleaned_data['title']:
folder, created = Folder.objects.get_or_create(user=request.user, title=form.cleaned_data['title'])
if created:
messages.success(request, _(u'Folder "%s" created successfully') % form.cleaned_data['title'])
else:
messages.error(request, _(u'A folder named: %s, already exists.') % form.cleaned_data['title'])
return HttpResponseRedirect(next)
else:
messages.error(request, _(u'Must specify a new folder or an existing one.'))
return HttpResponseRedirect(next)
folder_document, created = FolderDocument.objects.get_or_create(folder=folder, document=document)
if created:
messages.success(request, _(u'Document: %(document)s added to folder: %(folder)s successfully.') % {
'document': document, 'folder': folder})
else:
messages.warning(request, _(u'Document: %(document)s is already in folder: %(folder)s.') % {
'document': document, 'folder': folder})
return HttpResponseRedirect(next)
else:
form = AddDocumentForm(user=request.user)
return render_to_response('generic_form.html', {
'title': _(u'add document "%s" to a folder') % document,
'form': form,
'object': document,
'next': next,
},
context_instance=RequestContext(request))
def document_folder_list(request, document_id):
check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW])
document = get_object_or_404(Document, pk=document_id)
return folder_list(
request,
queryset=Folder.objects.filter(user=request.user).filter(folderdocument__document=document),
extra_context={
'title': _(u'folders containing: %s') % document,
'object': document,
}
)
def folder_document_remove(request, folder_id, document_id=None, document_id_list=None):
post_action_redirect = None post_action_redirect = None
if folder_document_id: folder = get_object_or_404(Folder, pk=folder_id)
folder_documents = [get_object_or_404(FolderDocument, pk=folder_document_id)]
elif folder_document_id_list: if document_id:
folder_documents = [get_object_or_404(FolderDocument, pk=folder_document_id) for folder_document_id in folder_document_id_list.split(',')] folder_documents = [get_object_or_404(FolderDocument, folder__pk=folder_id, document__pk=document_id)]
elif document_id_list:
folder_documents = [get_object_or_404(FolderDocument, folder__pk=folder_id, document__pk=document_id) for document_id in document_id_list.split(',')]
else: else:
messages.error(request, _(u'Must provide at least one folder document.')) messages.error(request, _(u'Must provide at least one folder document.'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
@@ -201,10 +256,11 @@ def folder_document_remove(request, folder_document_id=None, folder_document_id_
'object_name': _(u'folder document'), 'object_name': _(u'folder document'),
'previous': previous, 'previous': previous,
'next': next, 'next': next,
'form_icon': u'folder_page.png', 'form_icon': u'delete.png',
'object': folder
} }
if len(folder_documents) == 1: if len(folder_documents) == 1:
context['object'] = folder_documents[0] #context['object'] = folder_documents[0]
context['title'] = _(u'Are you sure you wish to remove the document: %(document)s from the folder "%(folder)s"?') % { context['title'] = _(u'Are you sure you wish to remove the document: %(document)s from the folder "%(folder)s"?') % {
'document': ', '.join([unicode(d) for d in folder_documents]), 'folder': folder_documents[0].folder} 'document': ', '.join([unicode(d) for d in folder_documents]), 'folder': folder_documents[0].folder}
elif len(folder_documents) > 1: elif len(folder_documents) > 1:
@@ -215,5 +271,5 @@ def folder_document_remove(request, folder_document_id=None, folder_document_id_
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def folder_document_multiple_remove(request): def folder_document_multiple_remove(request, folder_id):
return folder_document_remove(request, folder_document_id_list=request.GET.get('id_list', [])) return folder_document_remove(request, folder_id, document_id_list=request.GET.get('id_list', []))
+1 -1
View File
@@ -62,7 +62,7 @@ setup_document_type_metadata = {'text': _(u'default metadata'), 'view': 'setup_d
#register_links(Document, [metadata_add, metadata_edit, metadata_remove]) #register_links(Document, [metadata_add, metadata_edit, metadata_remove])
register_links(['metadata_add', 'metadata_edit', 'metadata_remove', 'metadata_view'], [metadata_add, metadata_edit, metadata_remove], menu_name='sidebar') register_links(['metadata_add', 'metadata_edit', 'metadata_remove', 'metadata_view'], [metadata_add, metadata_edit, metadata_remove], menu_name='sidebar')
register_links(Document, [metadata_view], menu_name='form_header')#, metadata_edit, metadata_remove]) register_links(Document, [metadata_view], menu_name='form_header')#, metadata_edit, metadata_remove])
register_multi_item_links(['index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove]) register_multi_item_links(['folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove])
register_links(MetadataType, [setup_metadata_type_edit, setup_metadata_type_delete]) register_links(MetadataType, [setup_metadata_type_edit, setup_metadata_type_delete])
register_links(['setup_metadata_type_delete', 'setup_metadata_type_edit', 'setup_metadata_type_list', 'setup_metadata_type_create'], [setup_metadata_type_create], menu_name='sidebar') register_links(['setup_metadata_type_delete', 'setup_metadata_type_edit', 'setup_metadata_type_list', 'setup_metadata_type_create'], [setup_metadata_type_create], menu_name='sidebar')