Browse Source

Download documents inline

* Fixed issue of documents not being viewed inline without explicitly setting the download attribute on an <a> tag.
* Minor bug fixes
Cory Sutyak 6 years ago
parent
commit
221f92cf6a
2 changed files with 14 additions and 42 deletions
  1. 0 42
      coderedcms/models/snippet_models.py
  2. 14 0
      coderedcms/wagtail_hooks.py

+ 0 - 42
coderedcms/models/snippet_models.py

@@ -280,48 +280,6 @@ class ContentWall(models.Model):
         return self.name
 
 
-@register_snippet
-class ContentWall(models.Model):
-    """
-    Snippet that restricts access to a page with a modal.
-    """
-    class Meta:
-        verbose_name = _('Content Wall')
-
-    name = models.CharField(
-        max_length=255,
-        verbose_name=_('Name'),
-    )
-    content = StreamField(
-        LAYOUT_STREAMBLOCKS,
-        verbose_name=_('Content'),
-    )
-    is_dismissible = models.BooleanField(
-        default=True,
-        verbose_name=_('Dismissible'),
-    )
-    show_once = models.BooleanField(
-        default=True,
-        verbose_name=_('Show once'),
-        help_text=_('Do not show the content wall to the same user again after it has been closed.')
-    )
-
-    panels = [
-        MultiFieldPanel(
-            [
-                FieldPanel('name'),
-                FieldPanel('is_dismissible'),
-                FieldPanel('show_once'),
-            ],
-            heading=_('Content Wall')
-        ),
-        StreamFieldPanel('content'),
-    ]
-
-    def __str__(self):
-        return self.name
-
-
 class CoderedEmail(ClusterableModel):
     """
     General purpose abstract clusterable model used for holding email information.

+ 14 - 0
coderedcms/wagtail_hooks.py

@@ -1,5 +1,6 @@
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.staticfiles.templatetags.staticfiles import static
+from django.http.response import HttpResponse
 from django.utils.html import format_html
 from wagtail.contrib.forms.models import AbstractForm
 from wagtail.core import hooks
@@ -8,6 +9,7 @@ from wagtail.core.models import UserPagePermissionsProxy, get_page_models
 from coderedcms import utils
 from coderedcms.models import CoderedFormPage
 
+import mimetypes
 
 @hooks.register('insert_global_admin_css')
 def global_admin_css():
@@ -50,3 +52,15 @@ def codered_forms(user, editable_forms):
     editable_forms = editable_forms.filter(content_type__in=form_types)
 
     return editable_forms
+
+@hooks.register('before_serve_document')
+def serve_document_directly(document, request):
+    """
+    This hook prevents documents from being downloaded unless specified by an <a> tag with the download attribute.
+    """
+    content_type, content_encoding = mimetypes.guess_type(document.filename)
+    response = HttpResponse(document.file.read(), content_type=content_type)
+    response['Content-Disposition'] = 'inline;filename="{0}"'.format(document.filename)
+    response['Content-Encoding'] = content_encoding
+    return response
+