summaryrefslogtreecommitdiff
path: root/archaeological_finds/forms.py
diff options
context:
space:
mode:
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
commitbb5ca32767ce6a25b72e03a4ebebd0648bc0cd42 (patch)
treeeb3d8b5c2cbbfcc454a4e2c94929d11056fac61c /archaeological_finds/forms.py
parent7185d81691ede9520cecdd2a2e8dcac372aaac6c (diff)
downloadIshtar-bb5ca32767ce6a25b72e03a4ebebd0648bc0cd42.tar.bz2
Ishtar-bb5ca32767ce6a25b72e03a4ebebd0648bc0cd42.zip
Basket: manage slug and public (for admin only)
Diffstat (limited to 'archaeological_finds/forms.py')
-rw-r--r--archaeological_finds/forms.py37
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):