from django import forms from .hooks import hookset from .models import Document, Folder try: from account.utils import user_display except ImportError: def user_display(user): return user.username class FolderCreateForm(forms.ModelForm): class Meta: model = Folder fields = ["name", "parent"] widgets = { "parent": forms.HiddenInput, } def clean(self): name = self.cleaned_data["name"] parent = self.cleaned_data.get("parent") if Folder.already_exists(name, parent): raise forms.ValidationError(f"{name} already exists.") def __init__(self, *args, **kwargs): folders = kwargs.pop("folders") super().__init__(*args, **kwargs) self.fields["parent"].queryset = folders class DocumentCreateForm(forms.ModelForm): class Meta: model = Document fields = ["folder", "file"] widgets = { "folder": forms.HiddenInput, } def __init__(self, *args, **kwargs): folders = kwargs.pop("folders") self.storage = kwargs.pop("storage") super().__init__(*args, **kwargs) self.fields["folder"].queryset = folders def clean_file(self): value = self.cleaned_data["file"] if (value.size + self.storage.bytes_used) > self.storage.bytes_total: raise forms.ValidationError("File will exceed storage capacity.") return value def clean(self): if "file" in self.cleaned_data: name = self.cleaned_data.get("file").name folder = self.cleaned_data.get("folder") if Document.already_exists(name, folder): raise forms.ValidationError( hookset.already_exists_validation_message(name, folder) ) class DocumentCreateFormWithName(DocumentCreateForm): class Meta: model = Document fields = ["folder", "file", "name"] widgets = { "folder": forms.HiddenInput, } class UserMultipleChoiceField(forms.ModelMultipleChoiceField): def label_from_instance(self, obj): return user_display(obj) class FolderShareForm(forms.Form): participants = UserMultipleChoiceField( queryset=None, widget=forms.SelectMultiple( attrs={ "class": "span6", "data-placeholder": "Choose participants... " } ) ) class ColleagueFolderShareForm(FolderShareForm): def __init__(self, *args, **kwargs): colleagues = kwargs.pop("colleagues") super().__init__(*args, **kwargs) self.fields["participants"].queryset = colleagues