This repository has been archived on 2025-05-04. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
s2forums/djangobb_forum/forms.py

394 lines
14 KiB
Python
Raw Normal View History

2009-01-05 14:30:08 +02:00
# -*- coding: utf-8 -*-
2009-04-14 14:57:17 +03:00
import os.path
2009-01-05 14:30:08 +02:00
from datetime import datetime
from django import forms
from django.conf import settings
from django.contrib.auth.models import User
2012-02-17 00:30:03 +02:00
from django.utils.translation import ugettext_lazy as _
2009-01-05 14:30:08 +02:00
2010-10-30 09:03:50 +03:00
from djangobb_forum.models import Topic, Post, Profile, Reputation, Report, \
2011-08-11 17:15:08 +03:00
Attachment
main app moved from apps/forum to djangobb_forum. Warning: you must renaming DB tables prefix! --HG-- rename : djangobb/apps/forum/__init__.py => djangobb/djangobb_forum/__init__.py rename : djangobb/apps/forum/admin.py => djangobb/djangobb_forum/admin.py rename : djangobb/apps/forum/context_processors.py => djangobb/djangobb_forum/context_processors.py rename : djangobb/apps/forum/feeds.py => djangobb/djangobb_forum/feeds.py rename : djangobb/apps/forum/fields.py => djangobb/djangobb_forum/fields.py rename : djangobb/apps/forum/forms.py => djangobb/djangobb_forum/forms.py rename : djangobb/apps/forum/index.py => djangobb/djangobb_forum/index.py rename : djangobb/apps/forum/locale/ru/LC_MESSAGES/django.mo => djangobb/djangobb_forum/locale/ru/LC_MESSAGES/django.mo rename : djangobb/apps/forum/locale/ru/LC_MESSAGES/django.po => djangobb/djangobb_forum/locale/ru/LC_MESSAGES/django.po rename : djangobb/apps/forum/locale/zh_CN/LC_MESSAGES/django.mo => djangobb/djangobb_forum/locale/zh_CN/LC_MESSAGES/django.mo rename : djangobb/apps/forum/locale/zh_CN/LC_MESSAGES/django.po => djangobb/djangobb_forum/locale/zh_CN/LC_MESSAGES/django.po rename : djangobb/apps/forum/management/__init__.py => djangobb/djangobb_forum/management/__init__.py rename : djangobb/apps/forum/management/commands/__init__.py => djangobb/djangobb_forum/management/commands/__init__.py rename : djangobb/apps/forum/management/commands/unban.py => djangobb/djangobb_forum/management/commands/unban.py rename : djangobb/apps/forum/markups/__init__.py => djangobb/djangobb_forum/markups/__init__.py rename : djangobb/apps/forum/markups/mypostmarkup.py => djangobb/djangobb_forum/markups/mypostmarkup.py rename : djangobb/apps/forum/markups/postmarkup.py => djangobb/djangobb_forum/markups/postmarkup.py rename : djangobb/apps/forum/middleware.py => djangobb/djangobb_forum/middleware.py rename : djangobb/apps/forum/models.py => djangobb/djangobb_forum/models.py rename : djangobb/apps/forum/settings.py => djangobb/djangobb_forum/settings.py rename : djangobb/apps/forum/signals.py => djangobb/djangobb_forum/signals.py rename : djangobb/apps/forum/subscription.py => djangobb/djangobb_forum/subscription.py rename : djangobb/apps/forum/templates/forum/add_post.html => djangobb/djangobb_forum/templates/forum/add_post.html rename : djangobb/apps/forum/templates/forum/base.html => djangobb/djangobb_forum/templates/forum/base.html rename : djangobb/apps/forum/templates/forum/delete_posts.html => djangobb/djangobb_forum/templates/forum/delete_posts.html rename : djangobb/apps/forum/templates/forum/edit_post.html => djangobb/djangobb_forum/templates/forum/edit_post.html rename : djangobb/apps/forum/templates/forum/feeds/posts_description.html => djangobb/djangobb_forum/templates/forum/feeds/posts_description.html rename : djangobb/apps/forum/templates/forum/feeds/posts_title.html => djangobb/djangobb_forum/templates/forum/feeds/posts_title.html rename : djangobb/apps/forum/templates/forum/feeds/topics_description.html => djangobb/djangobb_forum/templates/forum/feeds/topics_description.html rename : djangobb/apps/forum/templates/forum/feeds/topics_title.html => djangobb/djangobb_forum/templates/forum/feeds/topics_title.html rename : djangobb/apps/forum/templates/forum/forum.html => djangobb/djangobb_forum/templates/forum/forum.html rename : djangobb/apps/forum/templates/forum/forum_row.html => djangobb/djangobb_forum/templates/forum/forum_row.html rename : djangobb/apps/forum/templates/forum/header.html => djangobb/djangobb_forum/templates/forum/header.html rename : djangobb/apps/forum/templates/forum/index.html => djangobb/djangobb_forum/templates/forum/index.html rename : djangobb/apps/forum/templates/forum/lofi/base.html => djangobb/djangobb_forum/templates/forum/lofi/base.html rename : djangobb/apps/forum/templates/forum/lofi/footer.html => djangobb/djangobb_forum/templates/forum/lofi/footer.html rename : djangobb/apps/forum/templates/forum/lofi/forum.html => djangobb/djangobb_forum/templates/forum/lofi/forum.html rename : djangobb/apps/forum/templates/forum/lofi/header.html => djangobb/djangobb_forum/templates/forum/lofi/header.html rename : djangobb/apps/forum/templates/forum/lofi/index.html => djangobb/djangobb_forum/templates/forum/lofi/index.html rename : djangobb/apps/forum/templates/forum/lofi/pagination.html => djangobb/djangobb_forum/templates/forum/lofi/pagination.html rename : djangobb/apps/forum/templates/forum/lofi/topic.html => djangobb/djangobb_forum/templates/forum/lofi/topic.html rename : djangobb/apps/forum/templates/forum/mail_to.html => djangobb/djangobb_forum/templates/forum/mail_to.html rename : djangobb/apps/forum/templates/forum/moderate.html => djangobb/djangobb_forum/templates/forum/moderate.html rename : djangobb/apps/forum/templates/forum/moderators.html => djangobb/djangobb_forum/templates/forum/moderators.html rename : djangobb/apps/forum/templates/forum/move_topic.html => djangobb/djangobb_forum/templates/forum/move_topic.html rename : djangobb/apps/forum/templates/forum/pagination.html => djangobb/djangobb_forum/templates/forum/pagination.html rename : djangobb/apps/forum/templates/forum/pm/base_pm.html => djangobb/djangobb_forum/templates/forum/pm/base_pm.html rename : djangobb/apps/forum/templates/forum/pm/create_pm.html => djangobb/djangobb_forum/templates/forum/pm/create_pm.html rename : djangobb/apps/forum/templates/forum/pm/inbox.html => djangobb/djangobb_forum/templates/forum/pm/inbox.html rename : djangobb/apps/forum/templates/forum/pm/menu_pm.html => djangobb/djangobb_forum/templates/forum/pm/menu_pm.html rename : djangobb/apps/forum/templates/forum/pm/message.html => djangobb/djangobb_forum/templates/forum/pm/message.html rename : djangobb/apps/forum/templates/forum/pm/outbox.html => djangobb/djangobb_forum/templates/forum/pm/outbox.html rename : djangobb/apps/forum/templates/forum/post_preview.html => djangobb/djangobb_forum/templates/forum/post_preview.html rename : djangobb/apps/forum/templates/forum/profile/profile_admin.html => djangobb/djangobb_forum/templates/forum/profile/profile_admin.html rename : djangobb/apps/forum/templates/forum/profile/profile_display.html => djangobb/djangobb_forum/templates/forum/profile/profile_display.html rename : djangobb/apps/forum/templates/forum/profile/profile_essentials.html => djangobb/djangobb_forum/templates/forum/profile/profile_essentials.html rename : djangobb/apps/forum/templates/forum/profile/profile_menu.html => djangobb/djangobb_forum/templates/forum/profile/profile_menu.html rename : djangobb/apps/forum/templates/forum/profile/profile_messaging.html => djangobb/djangobb_forum/templates/forum/profile/profile_messaging.html rename : djangobb/apps/forum/templates/forum/profile/profile_personal.html => djangobb/djangobb_forum/templates/forum/profile/profile_personal.html rename : djangobb/apps/forum/templates/forum/profile/profile_personality.html => djangobb/djangobb_forum/templates/forum/profile/profile_personality.html rename : djangobb/apps/forum/templates/forum/profile/profile_privacy.html => djangobb/djangobb_forum/templates/forum/profile/profile_privacy.html rename : djangobb/apps/forum/templates/forum/report.html => djangobb/djangobb_forum/templates/forum/report.html rename : djangobb/apps/forum/templates/forum/reputation.html => djangobb/djangobb_forum/templates/forum/reputation.html rename : djangobb/apps/forum/templates/forum/reputation_form.html => djangobb/djangobb_forum/templates/forum/reputation_form.html rename : djangobb/apps/forum/templates/forum/search_form.html => djangobb/djangobb_forum/templates/forum/search_form.html rename : djangobb/apps/forum/templates/forum/search_posts.html => djangobb/djangobb_forum/templates/forum/search_posts.html rename : djangobb/apps/forum/templates/forum/search_topics.html => djangobb/djangobb_forum/templates/forum/search_topics.html rename : djangobb/apps/forum/templates/forum/topic.html => djangobb/djangobb_forum/templates/forum/topic.html rename : djangobb/apps/forum/templates/forum/upload_avatar.html => djangobb/djangobb_forum/templates/forum/upload_avatar.html rename : djangobb/apps/forum/templates/forum/user.html => djangobb/djangobb_forum/templates/forum/user.html rename : djangobb/apps/forum/templates/forum/users.html => djangobb/djangobb_forum/templates/forum/users.html rename : djangobb/apps/forum/templatetags/__init__.py => djangobb/djangobb_forum/templatetags/__init__.py rename : djangobb/apps/forum/templatetags/forum_extras.py => djangobb/djangobb_forum/templatetags/forum_extras.py rename : djangobb/apps/forum/tests/__init__.py => djangobb/djangobb_forum/tests/__init__.py rename : djangobb/apps/forum/tests/postmarkup.py => djangobb/djangobb_forum/tests/postmarkup.py rename : djangobb/apps/forum/urls.py => djangobb/djangobb_forum/urls.py rename : djangobb/apps/forum/util.py => djangobb/djangobb_forum/util.py rename : djangobb/apps/forum/views.py => djangobb/djangobb_forum/views.py
2009-12-23 17:06:48 +02:00
from djangobb_forum import settings as forum_settings
from djangobb_forum.util import convert_text_to_html
2009-01-05 14:30:08 +02:00
SORT_USER_BY_CHOICES = (
('username', _(u'Username')),
('registered', _(u'Registered')),
('num_posts', _(u'No. of posts')),
)
SORT_POST_BY_CHOICES = (
('0', _(u'Post time')),
('1', _(u'Author')),
('2', _(u'Subject')),
('3', _(u'Forum')),
)
SORT_DIR_CHOICES = (
('ASC', _(u'Ascending')),
('DESC', _(u'Descending')),
)
SHOW_AS_CHOICES = (
('topics', _(u'Topics')),
('posts', _(u'Posts')),
)
SEARCH_IN_CHOICES = (
('all', _(u'Message text and topic subject')),
('message', _(u'Message text only')),
('topic', _(u'Topic subject only')),
)
2009-01-05 14:30:08 +02:00
class AddPostForm(forms.ModelForm):
name = forms.CharField(label=_('Subject'), max_length=255,
2009-01-05 14:30:08 +02:00
widget=forms.TextInput(attrs={'size':'115'}))
2009-04-21 20:45:03 +03:00
attachment = forms.FileField(label=_('Attachment'), required=False)
2009-01-05 14:30:08 +02:00
class Meta:
model = Post
fields = ['body']
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
self.topic = kwargs.pop('topic', None)
self.forum = kwargs.pop('forum', None)
self.ip = kwargs.pop('ip', None)
super(AddPostForm, self).__init__(*args, **kwargs)
2009-05-25 13:56:21 +03:00
2009-01-05 14:30:08 +02:00
if self.topic:
self.fields['name'].widget = forms.HiddenInput()
self.fields['name'].required = False
2009-05-25 13:56:21 +03:00
self.fields['body'].widget = forms.Textarea(attrs={'class':'markup', 'rows':'20', 'cols':'95'})
2009-05-25 13:56:21 +03:00
2009-04-14 14:57:17 +03:00
if not forum_settings.ATTACHMENT_SUPPORT:
self.fields['attachment'].widget = forms.HiddenInput()
self.fields['attachment'].required = False
2009-01-05 14:30:08 +02:00
def clean(self):
'''
checking is post subject and body contains not only space characters
'''
errmsg = _('Can\'t be empty nor contain only whitespace characters')
cleaned_data = self.cleaned_data
body = cleaned_data.get('body')
subject = cleaned_data.get('name')
2011-05-17 10:37:25 +03:00
if subject:
if not subject.strip():
self._errors['name'] = self.error_class([errmsg])
del cleaned_data['name']
2011-05-17 10:37:25 +03:00
if body:
if not body.strip():
self._errors['body'] = self.error_class([errmsg])
del cleaned_data['body']
return cleaned_data
2009-04-14 14:57:17 +03:00
def clean_attachment(self):
if self.cleaned_data['attachment']:
memfile = self.cleaned_data['attachment']
if memfile.size > forum_settings.ATTACHMENT_SIZE_LIMIT:
raise forms.ValidationError(_('Attachment is too big'))
return self.cleaned_data['attachment']
2009-01-05 14:30:08 +02:00
2009-11-20 16:25:14 +02:00
def save(self):
2009-01-05 14:30:08 +02:00
if self.forum:
topic = Topic(forum=self.forum,
user=self.user,
name=self.cleaned_data['name'])
topic.save()
else:
topic = self.topic
post = Post(topic=topic, user=self.user, user_ip=self.ip,
markup=self.user.forum_profile.markup,
2009-01-05 14:30:08 +02:00
body=self.cleaned_data['body'])
2009-11-20 16:25:14 +02:00
post.save()
2009-04-14 14:57:17 +03:00
if forum_settings.ATTACHMENT_SUPPORT:
self.save_attachment(post, self.cleaned_data['attachment'])
2009-01-05 14:30:08 +02:00
return post
2009-11-20 16:25:14 +02:00
2009-04-14 14:57:17 +03:00
def save_attachment(self, post, memfile):
if memfile:
obj = Attachment(size=memfile.size, content_type=memfile.content_type,
name=memfile.name, post=post)
dir = os.path.join(settings.MEDIA_ROOT, forum_settings.ATTACHMENT_UPLOAD_TO)
fname = '%d.0' % post.id
path = os.path.join(dir, fname)
2010-02-18 11:04:35 +02:00
file(path, 'wb').write(memfile.read())
2009-04-14 14:57:17 +03:00
obj.path = fname
obj.save()
2009-12-17 22:30:17 +02:00
class EditPostForm(forms.ModelForm):
name = forms.CharField(required=False, label=_('Subject'),
widget=forms.TextInput(attrs={'size':'115'}))
class Meta:
model = Post
fields = ['body']
def __init__(self, *args, **kwargs):
self.topic = kwargs.pop('topic', None)
super(EditPostForm, self).__init__(*args, **kwargs)
self.fields['name'].initial = self.topic
self.fields['body'].widget = forms.Textarea(attrs={'class':'markup'})
2009-12-17 22:30:17 +02:00
def save(self, commit=True):
post = super(EditPostForm, self).save(commit=False)
post.updated = datetime.now()
topic_name = self.cleaned_data['name']
if topic_name:
post.topic.name = topic_name
if commit:
post.topic.save()
post.save()
return post
2009-01-05 14:30:08 +02:00
class EssentialsProfileForm(forms.ModelForm):
username = forms.CharField(label=_('Username'))
email = forms.CharField(label=_('E-mail'))
2009-01-05 14:30:08 +02:00
class Meta:
model = Profile
fields = ['time_zone', 'language']
2009-01-05 14:30:08 +02:00
def __init__(self, *args, **kwargs):
2012-03-05 01:51:00 +02:00
extra_args = kwargs.pop('extra_args', {})
self.user_view = extra_args.pop('user_view', None)
self.user_request = extra_args.pop('user_request', None)
self.profile = kwargs['instance']
2009-01-05 14:30:08 +02:00
super(EssentialsProfileForm, self).__init__(*args, **kwargs)
self.fields['username'].initial = self.user_view.username
if not self.user_request.is_superuser:
2009-04-21 14:41:20 +03:00
self.fields['username'].widget = forms.HiddenInput()
self.fields['email'].initial = self.user_view.email
2009-07-02 16:31:48 +03:00
def save(self, commit=True):
2009-01-05 14:30:08 +02:00
if self.cleaned_data:
if self.user_request.is_superuser:
self.user_view.username = self.cleaned_data['username']
self.user_view.email = self.cleaned_data['email']
self.profile.time_zone = self.cleaned_data['time_zone']
self.profile.language = self.cleaned_data['language']
self.user_view.save()
2009-07-02 16:31:48 +03:00
if commit:
self.profile.save()
return self.profile
2009-01-05 14:30:08 +02:00
class PersonalProfileForm(forms.ModelForm):
2010-01-05 16:16:05 +02:00
name = forms.CharField(label=_('Real name'), required=False)
2009-01-05 14:30:08 +02:00
class Meta:
model = Profile
fields = ['status', 'location', 'site']
2009-01-05 14:30:08 +02:00
def __init__(self, *args, **kwargs):
2012-03-05 01:51:00 +02:00
extra_args = kwargs.pop('extra_args', {})
self.user = extra_args.pop('user_view', None)
2009-07-02 16:31:48 +03:00
self.profile = kwargs['instance']
2009-01-05 14:30:08 +02:00
super(PersonalProfileForm, self).__init__(*args, **kwargs)
self.fields['name'].initial = "%s %s" % (self.user.first_name, self.user.last_name)
2009-07-02 16:31:48 +03:00
def save(self, commit=True):
self.profile.status = self.cleaned_data['status']
self.profile.location = self.cleaned_data['location']
self.profile.site = self.cleaned_data['site']
2009-01-05 14:30:08 +02:00
if self.cleaned_data['name']:
cleaned_name = self.cleaned_data['name'].strip()
if ' ' in cleaned_name:
self.user.first_name, self.user.last_name = cleaned_name.split(None, 1)
2009-01-05 14:30:08 +02:00
else:
self.user.first_name = cleaned_name
self.user.last_name = ''
2009-07-02 16:31:48 +03:00
self.user.save()
if commit:
self.profile.save()
return self.profile
2009-01-05 14:30:08 +02:00
class MessagingProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['jabber', 'icq', 'msn', 'aim', 'yahoo']
2012-03-05 01:51:00 +02:00
def __init__(self, *args, **kwargs):
extra_args = kwargs.pop('extra_args', {})
super(MessagingProfileForm, self).__init__(*args, **kwargs)
2009-01-05 14:30:08 +02:00
class PersonalityProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['show_avatar', 'signature']
def __init__(self, *args, **kwargs):
2012-03-05 01:51:00 +02:00
extra_args = kwargs.pop('extra_args', {})
self.markup = extra_args.pop('markup', None)
2009-01-05 14:30:08 +02:00
super(PersonalityProfileForm, self).__init__(*args, **kwargs)
self.fields['signature'].widget = forms.Textarea(attrs={'class':'markup', 'rows':'10', 'cols':'75'})
2009-07-02 16:31:48 +03:00
def save(self, commit=True):
2009-01-05 14:30:08 +02:00
profile = super(PersonalityProfileForm, self).save(commit=False)
2012-02-17 00:52:33 +02:00
profile.signature_html = convert_text_to_html(profile.signature, self.markup)
2009-07-02 16:31:48 +03:00
if commit:
profile.save()
2009-01-05 14:30:08 +02:00
return profile
2009-01-05 14:30:08 +02:00
class DisplayProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['theme', 'markup', 'show_smilies']
2012-03-05 01:51:00 +02:00
def __init__(self, *args, **kwargs):
extra_args = kwargs.pop('extra_args', {})
super(DisplayProfileForm, self).__init__(*args, **kwargs)
2009-01-05 14:30:08 +02:00
class PrivacyProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['privacy_permission']
2009-01-05 14:30:08 +02:00
def __init__(self, *args, **kwargs):
2012-03-05 01:51:00 +02:00
extra_args = kwargs.pop('extra_args', {})
2009-01-05 14:30:08 +02:00
super(PrivacyProfileForm, self).__init__(*args, **kwargs)
self.fields['privacy_permission'].widget = forms.RadioSelect(
choices=self.fields['privacy_permission'].choices
)
2009-04-15 12:12:20 +03:00
2009-01-05 14:30:08 +02:00
class UploadAvatarForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['avatar']
2012-03-05 01:51:00 +02:00
def __init__(self, *args, **kwargs):
extra_args = kwargs.pop('extra_args', {})
super(UploadAvatarForm, self).__init__(*args, **kwargs)
2009-04-15 12:12:20 +03:00
2009-01-05 14:30:08 +02:00
class UserSearchForm(forms.Form):
username = forms.CharField(required=False, label=_('Username'))
2009-01-05 14:30:08 +02:00
#show_group = forms.ChoiceField(choices=SHOW_GROUP_CHOICES)
sort_by = forms.ChoiceField(choices=SORT_USER_BY_CHOICES, label=_('Sort by'))
sort_dir = forms.ChoiceField(choices=SORT_DIR_CHOICES, label=_('Sort order'))
2009-01-05 14:30:08 +02:00
def filter(self, qs):
if self.is_valid():
username = self.cleaned_data['username']
#show_group = self.cleaned_data['show_group']
sort_by = self.cleaned_data['sort_by']
sort_dir = self.cleaned_data['sort_dir']
if sort_by=='username':
if sort_dir=='ASC':
2009-04-15 10:29:12 +03:00
return qs.filter(username__contains=username, forum_profile__post_count__gte=forum_settings.POST_USER_SEARCH).order_by('username')
2009-01-05 14:30:08 +02:00
elif sort_dir=='DESC':
2009-04-15 10:29:12 +03:00
return qs.filter(username__contains=username, forum_profile__post_count__gte=forum_settings.POST_USER_SEARCH).order_by('-username')
2009-01-05 14:30:08 +02:00
elif sort_by=='registered':
if sort_dir=='ASC':
2009-04-15 10:29:12 +03:00
return qs.filter(username__contains=username, forum_profile__post_count__gte=forum_settings.POST_USER_SEARCH).order_by('date_joined')
2009-01-05 14:30:08 +02:00
elif sort_dir=='DESC':
2009-04-15 10:29:12 +03:00
return qs.filter(username__contains=username, forum_profile__post_count__gte=forum_settings.POST_USER_SEARCH).order_by('-date_joined')
2009-01-05 14:30:08 +02:00
elif sort_by=='num_posts':
if sort_dir=='ASC':
2009-04-15 10:29:12 +03:00
return qs.filter(username__contains=username, forum_profile__post_count__gte=forum_settings.POST_USER_SEARCH).order_by('forum_profile__post_count')
2009-01-05 14:30:08 +02:00
elif sort_dir=='DESC':
2009-04-15 10:29:12 +03:00
return qs.filter(username__contains=username, forum_profile__post_count__gte=forum_settings.POST_USER_SEARCH).order_by('-forum_profile__post_count')
2009-01-05 14:30:08 +02:00
else:
return qs
2009-04-03 15:09:08 +03:00
class PostSearchForm(forms.Form):
keywords = forms.CharField(required=False, label=_('Keyword search'),
widget=forms.TextInput(attrs={'size':'40', 'maxlength':'100'}))
author = forms.CharField(required=False, label=_('Author search'),
widget=forms.TextInput(attrs={'size':'25', 'maxlength':'25'}))
forum = forms.CharField(required=False, label=_('Forum'))
search_in = forms.ChoiceField(choices=SEARCH_IN_CHOICES, label=_('Search in'))
sort_by = forms.ChoiceField(choices=SORT_POST_BY_CHOICES, label=_('Sort by'))
2010-11-04 12:49:41 +02:00
sort_dir = forms.ChoiceField(choices=SORT_DIR_CHOICES, initial='DESC', label=_('Sort order'))
2009-04-03 15:09:08 +03:00
show_as = forms.ChoiceField(choices=SHOW_AS_CHOICES, label=_('Show results as'))
2009-04-03 15:09:08 +03:00
2009-01-05 14:30:08 +02:00
class ReputationForm(forms.ModelForm):
2009-01-05 14:30:08 +02:00
class Meta:
model = Reputation
fields = ['reason', 'post', 'sign']
2009-01-05 14:30:08 +02:00
def __init__(self, *args, **kwargs):
self.from_user = kwargs.pop('from_user', None)
self.to_user = kwargs.pop('to_user', None)
self.post = kwargs.pop('post', None)
2009-01-05 14:30:08 +02:00
self.sign = kwargs.pop('sign', None)
super(ReputationForm, self).__init__(*args, **kwargs)
self.fields['post'].widget = forms.HiddenInput()
2009-01-05 14:30:08 +02:00
self.fields['sign'].widget = forms.HiddenInput()
self.fields['reason'].widget = forms.Textarea(attrs={'class':'markup'})
2009-01-05 14:30:08 +02:00
def clean_to_user(self):
name = self.cleaned_data['to_user']
try:
user = User.objects.get(username=name)
except User.DoesNotExist:
raise forms.ValidationError(_('User with login %s does not exist') % name)
else:
return user
def clean(self):
try:
Reputation.objects.get(from_user=self.from_user, post=self.cleaned_data['post'])
except Reputation.DoesNotExist:
pass
else:
raise forms.ValidationError(_('You already voted for this post'))
return self.cleaned_data
2009-07-02 16:31:48 +03:00
def save(self, commit=True):
2009-01-05 14:30:08 +02:00
reputation = super(ReputationForm, self).save(commit=False)
reputation.from_user = self.from_user
reputation.to_user = self.to_user
2009-07-02 16:31:48 +03:00
if commit:
reputation.save()
2009-01-05 14:30:08 +02:00
return reputation
2009-01-05 14:30:08 +02:00
class MailToForm(forms.Form):
subject = forms.CharField(label=_('Subject'),
widget=forms.TextInput(attrs={'size':'75', 'maxlength':'70', 'class':'longinput'}))
body = forms.CharField(required=False, label=_('Message'),
widget=forms.Textarea(attrs={'rows':'10', 'cols':'75'}))
2009-01-05 14:30:08 +02:00
class ReportForm(forms.ModelForm):
2009-01-05 14:30:08 +02:00
class Meta:
model = Report
fields = ['reason', 'post']
2009-01-05 14:30:08 +02:00
def __init__(self, *args, **kwargs):
self.reported_by = kwargs.pop('reported_by', None)
self.post = kwargs.pop('post', None)
super(ReportForm, self).__init__(*args, **kwargs)
self.fields['post'].widget = forms.HiddenInput()
self.fields['post'].initial = self.post
self.fields['reason'].widget = forms.Textarea(attrs={'rows':'10', 'cols':'75'})
2009-07-02 16:31:48 +03:00
def save(self, commit=True):
2009-01-05 14:30:08 +02:00
report = super(ReportForm, self).save(commit=False)
report.created = datetime.now()
report.reported_by = self.reported_by
2009-07-02 16:31:48 +03:00
if commit:
report.save()
2009-01-05 14:30:08 +02:00
return report