diff --git a/apps/folders/__init__.py b/apps/folders/__init__.py index e430bac058..1a76098367 100644 --- a/apps/folders/__init__.py +++ b/apps/folders/__init__.py @@ -2,8 +2,8 @@ from django.utils.translation import ugettext_lazy as _ from navigation.api import register_links, register_menu, \ register_model_list_columns, register_multi_item_links -#from main.api import register_diagnostic from permissions.api import register_permissions +from navigation.api import register_sidebar_template from models import Folder @@ -12,32 +12,13 @@ folder_create = {'text': _('create folder'), 'view': 'folder_create', 'famfam': 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'} -#document_create_multiple = {'text': _('upload multiple new documents'), 'view': 'document_create_multiple', 'famfam': 'page_add', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_CREATE]}} -#document_create_sibling = {'text': _('upload new document using same metadata'), 'view': 'document_create_sibling', 'args': 'object.id', 'famfam': 'page_copy', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_CREATE]}} -#document_view = {'text': _('details (advanced)'), 'view': 'document_view', 'args': 'object.id', 'famfam': 'page', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_VIEW]}} -#document_view_simple = {'text': _('details (simple)'), 'view': 'document_view_simple', 'args': 'object.id', 'famfam': 'page', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_VIEW]}} -#document_multiple_delete = {'text': _('delete'), 'view': 'document_multiple_delete', 'famfam': 'page_delete', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_DELETE]}} -#document_edit_metadata = {'text': _('edit metadata'), 'view': 'document_edit_metadata', 'args': 'object.id', 'famfam': 'page_edit', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_METADATA_EDIT]}} -#document_multiple_edit_metadata = {'text': _('edit metadata'), 'view': 'document_multiple_edit_metadata', 'famfam': 'page_edit', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_METADATA_EDIT]}} -#document_preview = {'text': _('preview'), 'class': 'fancybox', 'view': 'document_preview', 'args': 'object.id', 'famfam': 'magnifier', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_VIEW]}} -#document_download = {'text': _('download'), 'view': 'document_download', 'args': 'object.id', 'famfam': 'page_save', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_DOWNLOAD]}} -#document_find_duplicates = {'text': _('find duplicates'), 'view': 'document_find_duplicates', 'args': 'object.id', 'famfam': 'page_refresh', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_VIEW]}} -#document_find_all_duplicates = {'text': _('find all duplicates'), 'view': 'document_find_all_duplicates', 'famfam': 'page_refresh', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_VIEW]}} -#document_clear_transformations = {'text': _('clear all transformations'), 'view': 'document_clear_transformations', 'args': 'object.id', 'famfam': 'page_paintbrush', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]}} -#document_multiple_clear_transformations = {'text': _('clear all transformations'), 'view': 'document_multiple_clear_transformations', 'famfam': 'page_paintbrush', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]}} - -#register_links(Document, [document_view_simple, document_view, document_edit, document_edit_metadata, document_delete, document_download, document_find_duplicates, document_clear_transformations], menu_name='sidebar') -#register_links(Document, [document_list_recent, document_list, document_create, document_create_multiple, document_create_sibling], menu_name='sidebar') -#register_multi_item_links(['document_list'], [document_multiple_clear_transformations, document_multiple_edit_metadata, document_multiple_delete]) - -#####register_links(['folder_list', 'document_list_recent', 'document_list', 'document_create', 'document_create_multiple', 'upload_document_with_type', 'upload_multiple_documents_with_type'], [folder_list, folder_create], menu_name='sidebar') - register_links(Folder, [folder_edit, folder_delete]) register_links(['folder_edit', 'folder_delete', 'folder_list', 'folder_create'], [folder_list, folder_create], menu_name='sidebar') - register_menu([ {'text': _('folders'), 'view': 'folder_list', 'links': [ folder_list, folder_create ], 'famfam': 'folder', 'position': 2}]) + +register_sidebar_template(['document_view', 'document_view_simple'], 'folders_sidebar_template.html') diff --git a/apps/folders/forms.py b/apps/folders/forms.py index 7aade6167b..5a6c427e02 100644 --- a/apps/folders/forms.py +++ b/apps/folders/forms.py @@ -1,6 +1,5 @@ from django import forms from django.utils.translation import ugettext as _ -#from django.template.defaultfilters import capfirst from models import Folder @@ -9,3 +8,18 @@ class FolderForm(forms.ModelForm): class Meta: model = Folder fields = ('title',) + + +class AddDocumentForm(forms.ModelForm): + def __init__(self, *args, **kwargs): + user = kwargs.pop('user', None) + super(AddDocumentForm, self).__init__(*args, **kwargs) + self.fields['existing_folder'] = forms.ModelChoiceField(required=False, queryset=Folder.objects.filter(user=user)) + self.fields['title'].required = False + self.fields['title'].label = _(u'New folder') + + class Meta: + model = Folder + fields = ('title',) + + diff --git a/apps/folders/templates/folders_sidebar_template.html b/apps/folders/templates/folders_sidebar_template.html new file mode 100644 index 0000000000..8ec43845b4 --- /dev/null +++ b/apps/folders/templates/folders_sidebar_template.html @@ -0,0 +1,2 @@ +{% load folder_tags %} +{% get_add_document_to_folder_form %} diff --git a/apps/folders/templatetags/__init__.py b/apps/folders/templatetags/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/folders/templatetags/folder_tags.py b/apps/folders/templatetags/folder_tags.py new file mode 100644 index 0000000000..1ad8ed2fce --- /dev/null +++ b/apps/folders/templatetags/folder_tags.py @@ -0,0 +1,23 @@ +from django.core.urlresolvers import reverse, NoReverseMatch +from django.template import TemplateSyntaxError, Library, \ + VariableDoesNotExist, Node, Variable +from django.utils.translation import ugettext as _ + +from dynamic_search.forms import SearchForm +from folders.forms import AddDocumentForm + +register = Library() + + +@register.inclusion_tag('generic_form_subtemplate.html', takes_context=True) +def get_add_document_to_folder_form(context): + context.update({ + 'form': AddDocumentForm(user=context['request'].user),#, document=context['object']), + #'form': SearchForm(initial={'q':context.get('query_string', '')}), + 'request': context['request'], + #'MEDIA_URL': context['MEDIA_URL'], + 'form_action': reverse('folder_add_document' ,args=[context['object'].pk]), + #'form_title': _(u'Search'), + 'title': _('Add document to a folder') + }) + return context diff --git a/apps/folders/urls.py b/apps/folders/urls.py index b9cf136ba9..ca0ee4f9f9 100644 --- a/apps/folders/urls.py +++ b/apps/folders/urls.py @@ -7,4 +7,6 @@ urlpatterns = patterns('folders.views', url(r'^(?P\d+)/edit/$', 'folder_edit', (), 'folder_edit'), url(r'^(?P\d+)/delete/$', 'folder_delete', (), 'folder_delete'), url(r'^(?P\d+)/$', 'folder_view', (), 'folder_view'), + #url(r'^(?P\d+)/add_document/(?P\d+)/$', 'folder_add_document', (), 'folder_add_document'), + url(r'^add_document/(?P\d+)/$', 'folder_add_document', (), 'folder_add_document'), ) diff --git a/apps/folders/views.py b/apps/folders/views.py index 2f9666ecb3..6ed9580b60 100644 --- a/apps/folders/views.py +++ b/apps/folders/views.py @@ -12,7 +12,7 @@ from documents.models import Document from permissions.api import check_permissions from models import Folder, FolderDocument -from forms import FolderForm +from forms import FolderForm, AddDocumentForm def folder_list(request): @@ -116,20 +116,33 @@ def folder_view(request, folder_id): }, context_instance=RequestContext(request)) -def folder_add_document(request, folder_id, document_id): - folder = get_object_or_404(Folder, pk=folder_id) - document = get_object_or_404(Document, pk=document_id) +def folder_add_document(request, document_id): check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_VIEW]) + document = get_object_or_404(Document, pk=document_id) 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']: + 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 created successfully')) + else: + messages.error(request, _(u'A folder named: %s, already exists.') % form.cleaned_data['title']) + return HttpResponseRedirect(previous) + else: + messages.error(request, _(u'Must specify a new folder or an existing one.')) + return HttpResponseRedirect(previous) + + 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}) - 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(previous)