annotate comments/forms.py @ 917:0365fdbb4d78

Fix app conflict with messages. Django's messages app label conflicts with our messages app. We can't easily rename our label as that will make us rename database tables. Since our app came first we'll just customize Django messages label. For Django 1.7.7 upgrade.
author Brian Neal <bgneal@gmail.com>
date Mon, 06 Apr 2015 20:02:25 -0500
parents ee87ea74d46b
children 4619290d171d
rev   line source
gremmie@1 1 """
gremmie@1 2 Forms for the comments application.
gremmie@1 3 """
gremmie@1 4 import datetime
gremmie@1 5 from django import forms
gremmie@1 6 from django.conf import settings
gremmie@1 7 from django.contrib.contenttypes.models import ContentType
gremmie@1 8
gremmie@1 9 from comments.models import Comment
gremmie@1 10
gremmie@1 11 COMMENT_MAX_LENGTH = getattr(settings, 'COMMENT_MAX_LENGTH', 3000)
gremmie@1 12
gremmie@1 13 class CommentForm(forms.Form):
gremmie@1 14 comment = forms.CharField(label='',
bgneal@312 15 min_length=1,
gremmie@1 16 max_length=COMMENT_MAX_LENGTH,
bgneal@134 17 widget=forms.Textarea(attrs={'class': 'markItUp smileyTarget'}))
gremmie@1 18 content_type = forms.CharField(widget=forms.HiddenInput)
gremmie@1 19 object_pk = forms.CharField(widget=forms.HiddenInput)
gremmie@1 20
gremmie@1 21 def __init__(self, target_object, data=None, initial=None):
gremmie@1 22 self.target_object = target_object
gremmie@1 23 if initial is None:
gremmie@1 24 initial = {}
gremmie@1 25 initial.update({
gremmie@1 26 'content_type': str(self.target_object._meta),
gremmie@1 27 'object_pk': str(self.target_object.pk),
gremmie@1 28 })
gremmie@1 29 super(CommentForm, self).__init__(data=data, initial=initial)
gremmie@1 30
gremmie@1 31 def get_comment_object(self, user, ip_address):
gremmie@1 32 """
gremmie@1 33 Return a new (unsaved) comment object based on the information in this
gremmie@1 34 form. Assumes that the form is already validated and will throw a
gremmie@1 35 ValueError if not.
gremmie@1 36 """
gremmie@1 37 if not self.is_valid():
gremmie@1 38 raise ValueError("get_comment_object may only be called on valid forms")
gremmie@1 39
gremmie@1 40 new = Comment(
gremmie@1 41 content_type = ContentType.objects.get_for_model(self.target_object),
gremmie@1 42 object_id = self.target_object.pk,
gremmie@1 43 user = user,
gremmie@1 44 comment = self.cleaned_data["comment"],
gremmie@1 45 ip_address = ip_address,
gremmie@1 46 is_public = True,
gremmie@1 47 is_removed = False,
gremmie@1 48 )
gremmie@1 49
gremmie@1 50 # Check that this comment isn't duplicate. (Sometimes people post comments
gremmie@1 51 # twice by mistake.) If it is, fail silently by returning the old comment.
gremmie@1 52 today = datetime.date.today()
gremmie@1 53 possible_duplicates = Comment.objects.filter(
gremmie@1 54 content_type = new.content_type,
gremmie@1 55 object_id = new.object_id,
gremmie@1 56 user = new.user,
gremmie@1 57 creation_date__year = today.year,
gremmie@1 58 creation_date__month = today.month,
gremmie@1 59 creation_date__day = today.day,
gremmie@1 60 )
gremmie@1 61 for old in possible_duplicates:
gremmie@1 62 if old.comment == new.comment:
gremmie@1 63 return old
gremmie@1 64
gremmie@1 65 return new
gremmie@1 66
gremmie@1 67 class Media:
gremmie@1 68 css = {
bgneal@127 69 'all': (settings.GPP_THIRD_PARTY_CSS['markitup'] +
bgneal@127 70 settings.GPP_THIRD_PARTY_CSS['jquery-ui']),
gremmie@1 71 }
bgneal@312 72 js = (settings.GPP_THIRD_PARTY_JS['markitup'] +
bgneal@127 73 settings.GPP_THIRD_PARTY_JS['jquery-ui'] +
bgneal@484 74 ['js/comments.js'])