From bb5ca32767ce6a25b72e03a4ebebd0648bc0cd42 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Fri, 12 Jul 2019 18:54:30 +0200 Subject: Basket: manage slug and public (for admin only) --- archaeological_finds/forms.py | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) (limited to 'archaeological_finds/forms.py') 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): -- cgit v1.2.3