diff options
| -rw-r--r-- | archaeological_finds/forms.py | 37 | ||||
| -rw-r--r-- | archaeological_finds/migrations/0068_auto_20190712_1814.py | 25 | ||||
| -rw-r--r-- | archaeological_finds/templates/ishtar/sheet_findbasket.html | 2 | ||||
| -rw-r--r-- | archaeological_finds/wizards.py | 9 | ||||
| -rw-r--r-- | ishtar_common/models.py | 2 | 
5 files changed, 74 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): diff --git a/archaeological_finds/migrations/0068_auto_20190712_1814.py b/archaeological_finds/migrations/0068_auto_20190712_1814.py new file mode 100644 index 000000000..8f7b3b36e --- /dev/null +++ b/archaeological_finds/migrations/0068_auto_20190712_1814.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-07-12 18:14 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + +    dependencies = [ +        ('archaeological_finds', '0067_auto_20190628_1257'), +    ] + +    operations = [ +        migrations.AddField( +            model_name='findbasket', +            name='public', +            field=models.BooleanField(default=False, verbose_name='Public'), +        ), +        migrations.AddField( +            model_name='findbasket', +            name='slug', +            field=models.SlugField(blank=True, null=True, verbose_name='Identifiant texte'), +        ), +    ] diff --git a/archaeological_finds/templates/ishtar/sheet_findbasket.html b/archaeological_finds/templates/ishtar/sheet_findbasket.html index 52b53df2a..af5baea5d 100644 --- a/archaeological_finds/templates/ishtar/sheet_findbasket.html +++ b/archaeological_finds/templates/ishtar/sheet_findbasket.html @@ -12,6 +12,8 @@  <div class='row'>      {% field_flex "Label" item.label %}      {% field_flex_detail "Owned by" item.user.person %} +    {% field_flex "Slug" item.slug %} +    {% field_flex "Is public" item.public %}      {% field_flex "Comment" item.comment %}      {% field_flex_multiple_full "Shared (read) with" item.shared_with %}      {% field_flex_multiple_full "Shared (read/edit) with" item.shared_write_with %} diff --git a/archaeological_finds/wizards.py b/archaeological_finds/wizards.py index e1c6814d6..42f5f47c6 100644 --- a/archaeological_finds/wizards.py +++ b/archaeological_finds/wizards.py @@ -502,6 +502,15 @@ class FindBasketEditWizard(FindBasketWizard):      edit = True      alt_is_own_method = 'get_write_query_owns' +    def get_form_kwargs(self, step, **kwargs): +        kwargs = super(FindBasketEditWizard, self).get_form_kwargs( +            step, **kwargs) +        if step != 'basket-find_basket_modification': +            return kwargs +        kwargs['basket_pk'] = self.get_current_object().pk +        kwargs['user'] = self.request.user +        return kwargs +  class FindBasketDeletionWizard(DeletionWizard):      model = models.FindBasket diff --git a/ishtar_common/models.py b/ishtar_common/models.py index dc7c219ac..bcde57ea3 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -4574,6 +4574,8 @@ class Basket(FullSearch, OwnPerms):      IS_BASKET = True      label = models.CharField(_("Label"), max_length=1000)      comment = models.TextField(_("Comment"), blank=True, null=True) +    slug = models.SlugField(_("Slug"), blank=True, null=True) +    public = models.BooleanField(_("Public"), default=False)      user = models.ForeignKey(          IshtarUser, blank=True, null=True, related_name='%(class)ss',          on_delete=models.SET_NULL,  | 
