diff --git a/jdav_web/locale/de/LC_MESSAGES/django.po b/jdav_web/locale/de/LC_MESSAGES/django.po index a8bf069..3720f59 100644 --- a/jdav_web/locale/de/LC_MESSAGES/django.po +++ b/jdav_web/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 10:06+0000\n" +"POT-Creation-Date: 2017-11-11 16:16+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -45,3 +45,11 @@ msgstr "Start" #: templates/admin/base_site.html:5 templates/admin/base_site.html:9 msgid "JDAV LB Administration" msgstr "JDAV LB Verwaltung" + +#: utils.py:26 +msgid "Filetype not supported." +msgstr "Dateityp nicht unterstützt." + +#: utils.py:28 +msgid "Please keep filesize under {}. Current filesize: {}" +msgstr "Maximale Dateigröße {}. Aktuelle Dateigröße: {}." diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py index f82a276..427c084 100644 --- a/jdav_web/mailer/models.py +++ b/jdav_web/mailer/models.py @@ -4,6 +4,7 @@ from django import forms from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext from .mailutils import send, get_content, SENT, PARTLY_SENT, mail_root +from utils import RestrictedFileField import os @@ -11,28 +12,6 @@ import os SENDING_ADDRESS = mail_root -class RestrictedFileField(models.FileField): - - def __init__(self, *args, **kwargs): - if "max_upload_size" in kwargs: - self.max_upload_size = kwargs.pop("max_upload_size") - - super(RestrictedFileField, self).__init__(*args, **kwargs) - - def clean(self, *args, **kwargs): - data = super(RestrictedFileField, self).clean(*args, **kwargs) - f = data.file - try: - if f._size > self.max_upload_size: - raise forms.ValidationError('Please keep filesize under {}. ' - 'Current filesize: ' - '{}'.format(self.max_upload_size, - f._size)) - except AttributeError as e: - print(e) - return data - - # Create your models here. class Message(models.Model): """Represents a message that can be sent to some members""" diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 98da325..80ec5a8 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -3,6 +3,7 @@ import uuid from django.db import models from django.utils.translation import ugettext_lazy as _ from django.utils import timezone +from utils import RestrictedFileField GEMEINSCHAFTS_TOUR = 0 FUEHRUNGS_TOUR = 1 @@ -67,7 +68,14 @@ class Member(models.Model): comments = models.TextField(_('comments'), default='', blank=True) created = models.DateField(auto_now=True, verbose_name=_('created')) registered = models.BooleanField(default=False, verbose_name=_('Registration complete')) - registration_form = models.ImageField(verbose_name=_('registration form'), blank=True) + registration_form = RestrictedFileField(verbose_name=_('registration form'), + upload_to='registration_forms', + blank=True, + max_upload_size=5242880, + content_types=['application/pdf', + 'image/jpeg', + 'image/png', + 'image/gif']) def __str__(self): """String representation""" diff --git a/jdav_web/startpage/locale/de/LC_MESSAGES/django.po b/jdav_web/startpage/locale/de/LC_MESSAGES/django.po index 2fb98ed..d002a7d 100644 --- a/jdav_web/startpage/locale/de/LC_MESSAGES/django.po +++ b/jdav_web/startpage/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-01-14 17:13+0100\n" +"POT-Creation-Date: 2017-11-11 16:16+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/jdav_web/utils.py b/jdav_web/utils.py new file mode 100644 index 0000000..9408155 --- /dev/null +++ b/jdav_web/utils.py @@ -0,0 +1,34 @@ +from django.db import models +from django.core.exceptions import ValidationError +from django.utils.translation import ugettext_lazy as _ + + +class RestrictedFileField(models.FileField): + + def __init__(self, *args, **kwargs): + if "max_upload_size" in kwargs: + self.max_upload_size = kwargs.pop("max_upload_size") + else: + self.max_upload_size = None + if "content_types" in kwargs: + self.content_types = kwargs.pop("content_types") + else: + self.content_types = None + + super(RestrictedFileField, self).__init__(*args, **kwargs) + + def clean(self, *args, **kwargs): + data = super(RestrictedFileField, self).clean(*args, **kwargs) + f = data.file + try: + content_type = f.content_type + if self.content_types is not None and content_type not in self.content_types: + raise ValidationError(_('Filetype not supported.')) + if self.max_upload_size is not None and f._size > self.max_upload_size: + raise ValidationError(_('Please keep filesize under {}. ' + 'Current filesize: ' + '{}').format(self.max_upload_size, + f._size)) + except AttributeError as e: + print(e) + return data