1import os.path 2 3from wagtail.admin.views.generic.multiple_upload import AddView as BaseAddView 4from wagtail.admin.views.generic.multiple_upload import \ 5 CreateFromUploadView as BaseCreateFromUploadView 6from wagtail.admin.views.generic.multiple_upload import DeleteUploadView as BaseDeleteUploadView 7from wagtail.admin.views.generic.multiple_upload import DeleteView as BaseDeleteView 8from wagtail.admin.views.generic.multiple_upload import EditView as BaseEditView 9from wagtail.search.backends import get_search_backends 10 11from .. import get_document_model 12from ..forms import get_document_form, get_document_multi_form 13from ..models import UploadedDocument 14from ..permissions import permission_policy 15 16 17class AddView(BaseAddView): 18 permission_policy = permission_policy 19 template_name = 'wagtaildocs/multiple/add.html' 20 upload_model = UploadedDocument 21 22 edit_object_url_name = 'wagtaildocs:edit_multiple' 23 delete_object_url_name = 'wagtaildocs:delete_multiple' 24 edit_object_form_prefix = 'doc' 25 context_object_name = 'doc' 26 context_object_id_name = 'doc_id' 27 28 edit_upload_url_name = 'wagtaildocs:create_multiple_from_uploaded_document' 29 delete_upload_url_name = 'wagtaildocs:delete_upload_multiple' 30 edit_upload_form_prefix = 'uploaded-document' 31 context_upload_name = 'uploaded_document' 32 context_upload_id_name = 'uploaded_document_id' 33 34 def get_model(self): 35 return get_document_model() 36 37 def get_upload_form_class(self): 38 return get_document_form(self.model) 39 40 def get_edit_form_class(self): 41 return get_document_multi_form(self.model) 42 43 def save_object(self, form): 44 doc = form.save(commit=False) 45 doc.uploaded_by_user = self.request.user 46 doc.file_size = doc.file.size 47 48 # Set new document file hash 49 doc.file.seek(0) 50 doc._set_file_hash(doc.file.read()) 51 doc.file.seek(0) 52 53 doc.save() 54 55 return doc 56 57 58class EditView(BaseEditView): 59 permission_policy = permission_policy 60 pk_url_kwarg = 'doc_id' 61 edit_object_form_prefix = 'doc' 62 context_object_name = 'doc' 63 context_object_id_name = 'doc_id' 64 edit_object_url_name = 'wagtaildocs:edit_multiple' 65 delete_object_url_name = 'wagtaildocs:delete_multiple' 66 67 def get_model(self): 68 return get_document_model() 69 70 def get_edit_form_class(self): 71 return get_document_multi_form(self.model) 72 73 def save_object(self, form): 74 form.save() 75 76 # Reindex the doc to make sure all tags are indexed 77 for backend in get_search_backends(): 78 backend.add(self.object) 79 80 81class DeleteView(BaseDeleteView): 82 permission_policy = permission_policy 83 pk_url_kwarg = 'doc_id' 84 context_object_id_name = 'doc_id' 85 86 def get_model(self): 87 return get_document_model() 88 89 90class CreateFromUploadedDocumentView(BaseCreateFromUploadView): 91 edit_upload_url_name = 'wagtaildocs:create_multiple_from_uploaded_document' 92 delete_upload_url_name = 'wagtaildocs:delete_upload_multiple' 93 upload_model = UploadedDocument 94 upload_pk_url_kwarg = 'uploaded_document_id' 95 edit_upload_form_prefix = 'uploaded-document' 96 context_object_id_name = 'doc_id' 97 context_upload_name = 'uploaded_document' 98 99 def get_model(self): 100 return get_document_model() 101 102 def get_edit_form_class(self): 103 return get_document_multi_form(self.model) 104 105 def save_object(self, form): 106 # assign the file content from uploaded_doc to the image object, to ensure it gets saved to 107 # Document's storage 108 109 self.object.file.save(os.path.basename(self.upload.file.name), self.upload.file.file, save=False) 110 self.object.uploaded_by_user = self.request.user 111 self.object.file_size = self.object.file.size 112 self.object.file.open() 113 self.object.file.seek(0) 114 self.object._set_file_hash(self.object.file.read()) 115 self.object.file.seek(0) 116 form.save() 117 118 # Reindex the document to make sure all tags are indexed 119 for backend in get_search_backends(): 120 backend.add(self.object) 121 122 123class DeleteUploadView(BaseDeleteUploadView): 124 upload_model = UploadedDocument 125 upload_pk_url_kwarg = 'uploaded_document_id' 126