~widelands-dev/widelands-website/trunk

22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
1
import re
2
from datetime import datetime
3
import os.path
4
5
from django import forms
6
from django.conf import settings
7
from django.utils.translation import ugettext as _
8
from django.contrib.auth.models import User
9
62.1.7 by Holger Rapp
Added support for profiles. No gravatar yet
10
from pybb.models import Topic, Post, PrivateMessage, Attachment
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
11
from pybb import settings as pybb_settings
12
209.1.29 by Timo Wingender
move notification.send from models.py to forms.py. This way the notification for new topic is send after all is in the database
13
from notification import models as notification
14
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
15
class AddPostForm(forms.ModelForm):
16
    name = forms.CharField(label=_('Subject'))
17
    attachment = forms.FileField(label=_('Attachment'), required=False)
18
19
    class Meta:
20
        model = Post
209.1.68 by Timo Wingender
add field to choose between markdown and bbcode as markup
21
        fields = ['body', 'markup',]
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
22
23
    def __init__(self, *args, **kwargs):
24
        self.user = kwargs.pop('user', None)
25
        self.topic = kwargs.pop('topic', None)
26
        self.forum = kwargs.pop('forum', None)
27
        self.ip = kwargs.pop('ip', None)
28
        super(AddPostForm, self).__init__(*args, **kwargs)
29
209.1.68 by Timo Wingender
add field to choose between markdown and bbcode as markup
30
        self.fields.keyOrder = ['name', 'body', 'markup', 'attachment']
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
31
32
        if self.topic:
33
            self.fields['name'].widget = forms.HiddenInput()
34
            self.fields['name'].required = False
35
36
        if not pybb_settings.ATTACHMENT_ENABLE:
37
            self.fields['attachment'].widget = forms.HiddenInput()
38
            self.fields['attachment'].required = False
39
 
40
41
    def clean_attachment(self):
42
        if self.cleaned_data['attachment']:
43
            memfile = self.cleaned_data['attachment']
44
            if memfile.size > pybb_settings.ATTACHMENT_SIZE_LIMIT:
45
                raise forms.ValidationError(_('Attachment is too big'))
46
        return self.cleaned_data['attachment']
47
48
49
247.1.1 by Holger Rapp
Model.save() should always take args and kwargs and pass them one. Whitespace fixes. Removed dependency on Site being configured on initial run of syncdb
50
    def save(self, *args, **kwargs):
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
51
        if self.forum:
209.1.29 by Timo Wingender
move notification.send from models.py to forms.py. This way the notification for new topic is send after all is in the database
52
	    topic_is_new = True
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
53
            topic = Topic(forum=self.forum,
54
                          user=self.user,
55
                          name=self.cleaned_data['name'])
247.1.1 by Holger Rapp
Model.save() should always take args and kwargs and pass them one. Whitespace fixes. Removed dependency on Site being configured on initial run of syncdb
56
            topic.save(*args, **kwargs)
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
57
        else:
209.1.29 by Timo Wingender
move notification.send from models.py to forms.py. This way the notification for new topic is send after all is in the database
58
            topic_is_new = False
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
59
            topic = self.topic
60
61
        post = Post(topic=topic, user=self.user, user_ip=self.ip,
209.1.68 by Timo Wingender
add field to choose between markdown and bbcode as markup
62
                    markup=self.cleaned_data['markup'],
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
63
                    body=self.cleaned_data['body'])
247.1.1 by Holger Rapp
Model.save() should always take args and kwargs and pass them one. Whitespace fixes. Removed dependency on Site being configured on initial run of syncdb
64
        post.save(*args, **kwargs)
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
65
66
        if pybb_settings.ATTACHMENT_ENABLE:
67
            self.save_attachment(post, self.cleaned_data['attachment'])
209.1.29 by Timo Wingender
move notification.send from models.py to forms.py. This way the notification for new topic is send after all is in the database
68
69
        if topic_is_new:
70
            notification.send(User.objects.all(), "forum_new_topic",
71
                {'topic': topic, 'post':post, 'user':topic.user})
72
        else:
73
            notification.send(self.topic.subscribers.all(), "forum_new_post",
74
                {'post':post, 'topic':topic, 'user':post.user})
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
75
        return post
76
77
78
    def save_attachment(self, post, memfile):
79
        if memfile:
80
            obj = Attachment(size=memfile.size, content_type=memfile.content_type,
81
                             name=memfile.name, post=post)
82
            dir = os.path.join(settings.MEDIA_ROOT, pybb_settings.ATTACHMENT_UPLOAD_TO)
83
            fname = '%d.0' % post.id
84
            path = os.path.join(dir, fname)
85
            file(path, 'w').write(memfile.read())
86
            obj.path = fname
87
            obj.save()
88
89
90
91
class EditPostForm(forms.ModelForm):
92
    class Meta:
93
        model = Post
144 by Holger Rapp
Submit buttons are now disabled uppon submit to avoid double request. On failures buttons are reeneabled. This includes map uploading, wiki editing, wiki image uploading, forum post add, forum post edit
94
        fields = ['body']
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
95
247.1.1 by Holger Rapp
Model.save() should always take args and kwargs and pass them one. Whitespace fixes. Removed dependency on Site being configured on initial run of syncdb
96
    def save(self, *args, **kwargs):
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
97
        post = super(EditPostForm, self).save(commit=False)
98
        post.updated = datetime.now()
247.1.1 by Holger Rapp
Model.save() should always take args and kwargs and pass them one. Whitespace fixes. Removed dependency on Site being configured on initial run of syncdb
99
        post.save(*args, **kwargs)
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
100
        return post
101
102
103
class UserSearchForm(forms.Form):
104
    query = forms.CharField(required=False, label='')
105
106
    def filter(self, qs):
107
        if self.is_valid():
108
            query = self.cleaned_data['query']
109
            return qs.filter(username__contains=query)
110
        else:
111
            return qs