138 lines
4.5 KiB
Python
138 lines
4.5 KiB
Python
import os.path
|
|
|
|
from django.urls import reverse
|
|
from django.utils.text import capfirst
|
|
from django.utils.translation import gettext_lazy
|
|
|
|
from wagtail.admin.views.generic.base import WagtailAdminTemplateMixin
|
|
from wagtail.admin.views.generic.multiple_upload import AddView as BaseAddView
|
|
from wagtail.admin.views.generic.multiple_upload import (
|
|
CreateFromUploadView as BaseCreateFromUploadView,
|
|
)
|
|
from wagtail.admin.views.generic.multiple_upload import (
|
|
DeleteUploadView as BaseDeleteUploadView,
|
|
)
|
|
from wagtail.admin.views.generic.multiple_upload import DeleteView as BaseDeleteView
|
|
from wagtail.admin.views.generic.multiple_upload import EditView as BaseEditView
|
|
|
|
from .. import get_document_model
|
|
from ..forms import get_document_form, get_document_multi_form
|
|
from ..permissions import permission_policy
|
|
|
|
|
|
class AddView(WagtailAdminTemplateMixin, BaseAddView):
|
|
permission_policy = permission_policy
|
|
template_name = "wagtaildocs/multiple/add.html"
|
|
header_icon = "doc-full-inverse"
|
|
page_title = gettext_lazy("Add documents")
|
|
|
|
index_url_name = "wagtaildocs:index"
|
|
edit_object_url_name = "wagtaildocs:edit_multiple"
|
|
delete_object_url_name = "wagtaildocs:delete_multiple"
|
|
edit_object_form_prefix = "doc"
|
|
context_object_name = "doc"
|
|
context_object_id_name = "doc_id"
|
|
|
|
edit_upload_url_name = "wagtaildocs:create_multiple_from_uploaded_document"
|
|
delete_upload_url_name = "wagtaildocs:delete_upload_multiple"
|
|
edit_upload_form_prefix = "uploaded-document"
|
|
context_upload_name = "uploaded_document"
|
|
context_upload_id_name = "uploaded_file_id"
|
|
|
|
def get_breadcrumbs_items(self):
|
|
return self.breadcrumbs_items + [
|
|
{
|
|
"url": reverse(self.index_url_name),
|
|
"label": capfirst(self.model._meta.verbose_name_plural),
|
|
},
|
|
{"url": "", "label": self.get_page_title()},
|
|
]
|
|
|
|
def get_model(self):
|
|
return get_document_model()
|
|
|
|
def get_upload_form_class(self):
|
|
return get_document_form(self.model)
|
|
|
|
def get_edit_form_class(self):
|
|
return get_document_multi_form(self.model)
|
|
|
|
def save_object(self, form):
|
|
doc = form.save(commit=False)
|
|
doc.uploaded_by_user = self.request.user
|
|
doc._set_document_file_metadata()
|
|
doc.save()
|
|
|
|
return doc
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
|
|
context.update(
|
|
{
|
|
"max_title_length": self.form.fields["title"].max_length,
|
|
}
|
|
)
|
|
|
|
return context
|
|
|
|
|
|
class EditView(BaseEditView):
|
|
permission_policy = permission_policy
|
|
pk_url_kwarg = "doc_id"
|
|
edit_object_form_prefix = "doc"
|
|
context_object_name = "doc"
|
|
context_object_id_name = "doc_id"
|
|
edit_object_url_name = "wagtaildocs:edit_multiple"
|
|
delete_object_url_name = "wagtaildocs:delete_multiple"
|
|
|
|
def get_model(self):
|
|
return get_document_model()
|
|
|
|
def get_edit_form_class(self):
|
|
return get_document_multi_form(self.model)
|
|
|
|
|
|
class DeleteView(BaseDeleteView):
|
|
permission_policy = permission_policy
|
|
pk_url_kwarg = "doc_id"
|
|
context_object_id_name = "doc_id"
|
|
|
|
def get_model(self):
|
|
return get_document_model()
|
|
|
|
|
|
class CreateFromUploadedDocumentView(BaseCreateFromUploadView):
|
|
edit_upload_url_name = "wagtaildocs:create_multiple_from_uploaded_document"
|
|
delete_upload_url_name = "wagtaildocs:delete_upload_multiple"
|
|
upload_pk_url_kwarg = "uploaded_file_id"
|
|
edit_upload_form_prefix = "uploaded-document"
|
|
context_object_id_name = "doc_id"
|
|
context_upload_name = "uploaded_document"
|
|
|
|
def get_model(self):
|
|
return get_document_model()
|
|
|
|
def get_edit_form_class(self):
|
|
return get_document_multi_form(self.model)
|
|
|
|
def save_object(self, form):
|
|
# assign the file content from uploaded_doc to the image object, to ensure it gets saved to
|
|
# Document's storage
|
|
|
|
self.object.file.save(
|
|
os.path.basename(self.upload.file.name), self.upload.file.file, save=False
|
|
)
|
|
self.object.uploaded_by_user = self.request.user
|
|
|
|
# form.save() would normally handle writing the image file metadata, but in this case the
|
|
# file handling happens outside the form, so we need to do that manually
|
|
self.object._set_document_file_metadata()
|
|
form.save()
|
|
|
|
|
|
class DeleteUploadView(BaseDeleteUploadView):
|
|
upload_pk_url_kwarg = "uploaded_file_id"
|
|
|
|
def get_model(self):
|
|
return get_document_model()
|