1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
import re
from datetime import datetime
import os
from django import forms
from django.conf import settings
from django.utils.translation import ugettext as _
from django.contrib.auth.models import User
from pybb.models import Topic, Post, Attachment
from pybb import settings as pybb_settings
from django.conf import settings
from .util import validate_file
from mainpage.validators import virus_scan
class AddPostForm(forms.ModelForm):
name = forms.CharField(label=_('Subject'))
attachment = forms.FileField(
label=_('Attachment'),
required=False,
validators=[virus_scan, validate_file, ])
class Meta:
model = Post
# Listing fields again to get the the right order
fields = ['name', 'body', 'markup', 'attachment', ]
widgets = {
'body': forms.Textarea(attrs={'cols': 80, 'rows': 15}),
}
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
self.topic = kwargs.pop('topic', None)
self.forum = kwargs.pop('forum', None)
super(AddPostForm, self).__init__(*args, **kwargs)
if self.topic:
self.fields['name'].widget = forms.HiddenInput()
self.fields['name'].required = False
if not pybb_settings.ATTACHMENT_ENABLE or self.user.wlprofile.post_count() < settings.ALLOW_ATTACHMENTS_AFTER:
self.fields['attachment'].widget = forms.HiddenInput()
self.fields['attachment'].required = False
def save(self, *args, **kwargs):
if self.forum:
topic_is_new = True
topic = Topic(forum=self.forum,
user=self.user,
name=self.cleaned_data['name'])
topic.save(*args, **kwargs)
else:
topic_is_new = False
topic = self.topic
post = Post(topic=topic, user=self.user,
markup=self.cleaned_data['markup'],
body=self.cleaned_data['body'])
post.save(*args, **kwargs)
if pybb_settings.ATTACHMENT_ENABLE:
self.save_attachment(post, self.cleaned_data['attachment'])
return post
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,
pybb_settings.ATTACHMENT_UPLOAD_TO)
if not os.path.exists(dir):
os.makedirs(dir)
fname = '{}.0'.format(post.id)
path = os.path.join(dir, fname)
with open(path, 'wb') as f:
f.write(memfile.read())
obj.path = fname
obj.save()
class EditPostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['body', 'markup']
def save(self, *args, **kwargs):
post = super(EditPostForm, self).save(commit=False)
post.updated = datetime.now()
post.save(*args, **kwargs)
return post
class LastPostsDayForm(forms.Form):
days = forms.IntegerField(
max_value = 1000,
min_value = 5,
)
sort_by = forms.ChoiceField(
choices = [('forum','Forum'),('topic', 'Topic'),],
label = 'Group by:',
)
|