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

View File

@@ -139,7 +139,7 @@ register_links(['document_type_filename_edit', 'document_type_filename_delete'],
# Register document links
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')

View File

@@ -3,24 +3,29 @@ from django.utils.translation import ugettext_lazy as _
from navigation.api import register_links, register_top_menu, \
register_multi_item_links, register_sidebar_template
from navigation.api import register_sidebar_template
from documents.models import Document
from folders.models import Folder
folder_list = {'text': _(u'folder list'), 'view': 'folder_list', 'famfam': 'folder_user'}
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_delete = {'text': _('delete'), 'view': 'folder_delete', 'args': 'object.id', 'famfam': 'folder_delete'}
folder_document_multiple_remove = {'text': _('remove'), 'view': 'folder_document_multiple_remove', 'famfam': 'delete'}
folder_view = {'text': _(u'folder documents'), 'view': 'folder_view', 'args': 'object.id', 'famfam': 'folder_go'}
folder_edit = {'text': _('edit'), 'view': 'folder_edit', 'args': 'object.pk', 'famfam': 'folder_edit'}
folder_delete = {'text': _('delete'), 'view': 'folder_delete', 'args': 'object.pk', 'famfam': 'folder_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.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_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_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_links(['document_folder_list', 'folder_add_document'], [folder_add_document], menu_name="sidebar")

View File

@@ -13,7 +13,7 @@ def get_add_document_to_folder_form(context):
context.update({
'form': AddDocumentForm(user=context['request'].user),
'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')
})
return context

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+)/delete/$', 'folder_delete', (), 'folder_delete'),
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'),
)

View File

@@ -16,22 +16,25 @@ from folders.models import Folder, FolderDocument
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(
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',
extra_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()}
]
},
extra_context=context,
)
def folder_create(request):
if request.method == 'POST':
form = FolderForm(request.POST)
@@ -122,17 +125,8 @@ def folder_view(request, folder_id):
raise PermissionDenied
return render_to_response('generic_list.html', {
'object_list': folder.folderdocument_set.all(),
'extra_columns': [
{'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,
'object_list': [fd.document for fd in folder.folderdocument_set.all()],
'hide_links': True,
'title': _(u'documents in folder: %s') % folder,
'multi_select_as_buttons': True,
'object': folder,
@@ -140,12 +134,13 @@ def folder_view(request, folder_id):
}, 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])
document = get_object_or_404(Document, pk=document_id)
previous = request.META.get('HTTP_REFERER', '/')
if request.method == 'POST':
previous = request.META.get('HTTP_REFERER', '/')
form = AddDocumentForm(request.POST, user=request.user)
if form.is_valid():
if form.cleaned_data['existing_folder']:
@@ -172,13 +167,73 @@ def folder_add_document(request, document_id):
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
if folder_document_id:
folder_documents = [get_object_or_404(FolderDocument, pk=folder_document_id)]
elif folder_document_id_list:
folder_documents = [get_object_or_404(FolderDocument, pk=folder_document_id) for folder_document_id in folder_document_id_list.split(',')]
folder = get_object_or_404(Folder, pk=folder_id)
if document_id:
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:
messages.error(request, _(u'Must provide at least one folder document.'))
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'),
'previous': previous,
'next': next,
'form_icon': u'folder_page.png',
'form_icon': u'delete.png',
'object': folder
}
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"?') % {
'document': ', '.join([unicode(d) for d in folder_documents]), 'folder': folder_documents[0].folder}
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))
def folder_document_multiple_remove(request):
return folder_document_remove(request, folder_document_id_list=request.GET.get('id_list', []))
def folder_document_multiple_remove(request, folder_id):
return folder_document_remove(request, folder_id, document_id_list=request.GET.get('id_list', []))

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(['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_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(['setup_metadata_type_delete', 'setup_metadata_type_edit', 'setup_metadata_type_list', 'setup_metadata_type_create'], [setup_metadata_type_create], menu_name='sidebar')