diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-07-12 18:54:30 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-07-12 18:54:30 +0200 |
commit | 11026984a0b9f3542b3c5216b7a6e01d1bc20310 (patch) | |
tree | eb3d8b5c2cbbfcc454a4e2c94929d11056fac61c /archaeological_finds/forms.py | |
parent | 8f31212d241870c33416f2b743592de8fa1d74e0 (diff) | |
download | Ishtar-11026984a0b9f3542b3c5216b7a6e01d1bc20310.tar.bz2 Ishtar-11026984a0b9f3542b3c5216b7a6e01d1bc20310.zip |
Basket: manage slug and public (for admin only)
Diffstat (limited to 'archaeological_finds/forms.py')
-rw-r--r-- | archaeological_finds/forms.py | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 129a1446e..390d36c36 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -1514,6 +1514,8 @@ class FindBasketForm(IshtarForm): label = forms.CharField( label=_(u"Label"), validators=[validators.MaxLengthValidator(1000)]) + slug = forms.SlugField(label=_("Slug"), required=False) + public = forms.BooleanField(label=_("Is public"), required=False) comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, required=False) shared_with = widgets.Select2MultipleField( @@ -1527,6 +1529,27 @@ class FindBasketForm(IshtarForm): required=False, long_widget=True ) + def __init__(self, *args, **kwargs): + self.basket_pk = None + if "basket_pk" in kwargs: + self.basket_pk = kwargs.pop("basket_pk") + self.is_admin = None + if "user" in kwargs: + user = kwargs.pop("user") + self.is_admin = getattr(user, "is_superuser", None) + super(FindBasketForm, self).__init__(*args, **kwargs) + if not self.is_admin: + self.fields.pop("slug") + self.fields.pop("public") + + def clean(self): + slug = self.cleaned_data.get('slug', None) + if slug and slug.strip() and models.FindBasket.objects.filter( + slug=slug.strip()).exclude(pk=self.basket_pk).count(): + raise forms.ValidationError(_("A basket with this slug already " + "exists.")) + return self.cleaned_data + class NewFindBasketForm(forms.ModelForm, IshtarForm): shared_with = widgets.Select2MultipleField( @@ -1542,11 +1565,18 @@ class NewFindBasketForm(forms.ModelForm, IshtarForm): class Meta: model = models.FindBasket - fields = ('label', 'comment', 'shared_with', 'shared_write_with') + fields = ('label', 'slug', 'public', 'comment', 'shared_with', + 'shared_write_with') def __init__(self, *args, **kwargs): self.user = kwargs.pop('user') + self.is_admin = False + if getattr(self.user, "user_ptr", None): + self.is_admin = getattr(self.user.user_ptr, "is_superuser", None) super(NewFindBasketForm, self).__init__(*args, **kwargs) + if not self.is_admin: + self.fields.pop("slug") + self.fields.pop("public") def clean(self): q = models.FindBasket.objects.filter(user=self.user, @@ -1554,6 +1584,11 @@ class NewFindBasketForm(forms.ModelForm, IshtarForm): if q.count(): raise forms.ValidationError(_(u"Another basket already exists with " u"this name.")) + slug = self.cleaned_data.get('slug', None) + if slug and slug.strip() and models.FindBasket.objects.filter( + slug=slug.strip()).count(): + raise forms.ValidationError(_("A basket with this slug already " + "exists.")) return self.cleaned_data def save(self, commit=True): |