Mercurial > public > sg101
diff gpp/comments/forms.py @ 1:dbd703f7d63a
Initial import of sg101 stuff from private repository.
author | gremmie |
---|---|
date | Mon, 06 Apr 2009 02:43:12 +0000 |
parents | |
children | b6263ac72052 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gpp/comments/forms.py Mon Apr 06 02:43:12 2009 +0000 @@ -0,0 +1,77 @@ +""" +Forms for the comments application. +""" +import datetime +from django import forms +from django.conf import settings +from django.contrib.contenttypes.models import ContentType + +from comments.models import Comment + +COMMENT_MAX_LENGTH = getattr(settings, 'COMMENT_MAX_LENGTH', 3000) + +class CommentForm(forms.Form): + comment = forms.CharField(label='', + min_length=1, + max_length=COMMENT_MAX_LENGTH, + widget=forms.Textarea) + content_type = forms.CharField(widget=forms.HiddenInput) + object_pk = forms.CharField(widget=forms.HiddenInput) + + def __init__(self, target_object, data=None, initial=None): + self.target_object = target_object + if initial is None: + initial = {} + initial.update({ + 'content_type': str(self.target_object._meta), + 'object_pk': str(self.target_object.pk), + }) + super(CommentForm, self).__init__(data=data, initial=initial) + + def get_comment_object(self, user, ip_address): + """ + Return a new (unsaved) comment object based on the information in this + form. Assumes that the form is already validated and will throw a + ValueError if not. + """ + if not self.is_valid(): + raise ValueError("get_comment_object may only be called on valid forms") + + new = Comment( + content_type = ContentType.objects.get_for_model(self.target_object), + object_id = self.target_object.pk, + user = user, + comment = self.cleaned_data["comment"], + ip_address = ip_address, + is_public = True, + is_removed = False, + ) + + # Check that this comment isn't duplicate. (Sometimes people post comments + # twice by mistake.) If it is, fail silently by returning the old comment. + today = datetime.date.today() + possible_duplicates = Comment.objects.filter( + content_type = new.content_type, + object_id = new.object_id, + user = new.user, + creation_date__year = today.year, + creation_date__month = today.month, + creation_date__day = today.day, + ) + for old in possible_duplicates: + if old.comment == new.comment: + return old + + return new + + class Media: + css = { + 'all': ('js/markitup/skins/markitup/style.css', + 'js/markitup/sets/markdown/style.css') + } + js = ( + 'js/jquery-1.2.6.min.js', + 'js/comments.js', + 'js/markitup/jquery.markitup.pack.js', + 'js/markitup/sets/markdown/set.js', + )