annotate gpp/comments/forms.py @ 467:b910cc1460c8

Add the ability to conditionally add model instances to the search index on update. This is not perfect, as some instances should be deleted from the index if they are updated such that they should not be in the index anymore. Will think about and address that later.
author Brian Neal <bgneal@gmail.com>
date Sun, 24 Jul 2011 18:12:20 +0000
parents 88b2b9cb8c1f
children bbbc357ac5f3
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@127 74 ('js/comments.js', ))