X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/47fb67f3c824094213cd33ebebf8e70ec149b783..bdc2a3ea27e2980c8c0fbdba2efe6b65291692c2:/apps/catalogue/forms.py diff --git a/apps/catalogue/forms.py b/apps/catalogue/forms.py index f59b356c..ea6a4aef 100644 --- a/apps/catalogue/forms.py +++ b/apps/catalogue/forms.py @@ -7,6 +7,7 @@ from catalogue.models import User from django.db.models import Count from django import forms from django.utils.translation import ugettext_lazy as _ +from django.conf import settings from catalogue.constants import MASTERS from catalogue.models import Book, Chunk, Image @@ -20,7 +21,7 @@ class DocumentCreateForm(forms.ModelForm): class Meta: model = Book - exclude = ['parent', 'parent_number'] + exclude = ['parent', 'parent_number', 'project'] def __init__(self, *args, **kwargs): super(DocumentCreateForm, self).__init__(*args, **kwargs) @@ -72,7 +73,7 @@ class ChunkForm(forms.ModelForm): """ user = forms.ModelChoiceField(queryset= User.objects.annotate(count=Count('chunk')). - order_by('-count', 'last_name', 'first_name'), required=False, + order_by('last_name', 'first_name'), required=False, label=_('Assigned to')) class Meta: @@ -130,6 +131,7 @@ class BookForm(forms.ModelForm): class Meta: model = Book + exclude = ['project'] def __init__(self, *args, **kwargs): ret = super(BookForm, self).__init__(*args, **kwargs) @@ -137,6 +139,18 @@ class BookForm(forms.ModelForm): self.fields['title'].widget.attrs.update({"class": "autoslug-source"}) return ret + def save(self, **kwargs): + orig_instance = Book.objects.get(pk=self.instance.pk) + old_gallery = orig_instance.gallery + new_gallery = self.cleaned_data['gallery'] + if new_gallery != old_gallery: + import shutil + import os.path + from django.conf import settings + shutil.move(orig_instance.gallery_path(), + os.path.join(settings.MEDIA_ROOT, settings.IMAGE_DIR, new_gallery)) + super(BookForm, self).save(**kwargs) + class ReadonlyBookForm(BookForm): """Form used for not editing a Book.""" @@ -144,7 +158,7 @@ class ReadonlyBookForm(BookForm): def __init__(self, *args, **kwargs): ret = super(ReadonlyBookForm, self).__init__(*args, **kwargs) for field in self.fields.values(): - field.widget.attrs.update({"readonly": True}) + field.widget.attrs.update({"disabled": "disabled"}) return ret @@ -174,10 +188,47 @@ class ImageForm(forms.ModelForm): class ReadonlyImageForm(ImageForm): - """Form used for not editing a Book.""" + """Form used for not editing an Image.""" def __init__(self, *args, **kwargs): - ret = super(ReadonlyImageForm, self).__init__(*args, **kwargs) + super(ReadonlyImageForm, self).__init__(*args, **kwargs) for field in self.fields.values(): - field.widget.attrs.update({"readonly": True}) - return ret + field.widget.attrs.update({"disabled": "disabled"}) + + +class MarkFinalForm(forms.Form): + username = forms.CharField(initial=settings.LITERARY_DIRECTOR_USERNAME) + comment = forms.CharField(initial=u'Ostateczna akceptacja merytoryczna przez kierownika literackiego.') + books = forms.CharField(widget=forms.Textarea, help_text=u'linki do książek w redakcji, po jednym na wiersz') + + def clean_books(self): + books_value = self.cleaned_data['books'] + slugs = [line.strip().strip('/').split('/')[-1] for line in books_value.split('\n') if line.strip()] + books = Book.objects.filter(slug__in=slugs) + if len(books) != len(slugs): + raise forms.ValidationError( + 'Incorrect slug(s): %s' % ' '.join(slug for slug in slugs if not Book.objects.filter(slug=slug))) + return books + + def clean_username(self): + username = self.cleaned_data['username'] + if not User.objects.filter(username=username): + raise forms.ValidationError('Invalid username') + return username + + def save(self): + for book in self.cleaned_data['books']: + for chunk in book.chunk_set.all(): + src = chunk.head.materialize() + chunk.commit( + text=src, + author=User.objects.get(username=self.cleaned_data['username']), + description=self.cleaned_data['comment'], + tags=[Chunk.tag_model.objects.get(slug='editor-proofreading')], + publishable=True + ) + + +class PublishOptionsForm(forms.Form): + days = forms.IntegerField(label=u'po ilu dniach udostępnienić (0 = od razu)', min_value=0, initial=0) + beta = forms.BooleanField(label=u'Opublikuj na wersji testowej', required=False)