##// END OF EJS Templates
Added ability to disable moderator panel. Refactored forms code. Translating forms.
neko259 -
r205:8cbfd802 default
parent child Browse files
Show More
@@ -2,9 +2,8 b' import re'
2 from captcha.fields import CaptchaField
2 from captcha.fields import CaptchaField
3 from django import forms
3 from django import forms
4 from django.forms.util import ErrorList
4 from django.forms.util import ErrorList
5 from django.utils import timezone
5 from django.utils.translation import ugettext_lazy as _
6 import time
6 import time
7 import math
8 from boards.models import TITLE_MAX_LENGTH, User
7 from boards.models import TITLE_MAX_LENGTH, User
9 from neboard import settings
8 from neboard import settings
10 from boards import utils
9 from boards import utils
@@ -20,7 +19,27 b' class PlainErrorList(ErrorList):'
20 return ''.join([u'(!) %s ' % e for e in self])
19 return ''.join([u'(!) %s ' % e for e in self])
21
20
22
21
23 class PostForm(forms.Form):
22 class NeboardForm(forms.Form):
23
24 def as_p(self):
25 "Returns this form rendered as HTML <p>s."
26 return self._html_output(
27 normal_row='<div class="form-row">'
28 '<div class="form-label">'
29 '%(label)s'
30 '</div>'
31 '<div class="form-input">'
32 '%(field)s'
33 '</div>'
34 '%(help_text)s'
35 '</div>',
36 error_row='<div class="form-errors">%s</div>',
37 row_ender='</p>',
38 help_text_html=' <span class="helptext">%s</span>',
39 errors_on_separate_row=True)
40
41
42 class PostForm(NeboardForm):
24
43
25 MAX_TEXT_LENGTH = 30000
44 MAX_TEXT_LENGTH = 30000
26 MAX_IMAGE_SIZE = 8 * 1024 * 1024
45 MAX_IMAGE_SIZE = 8 * 1024 * 1024
@@ -74,7 +93,7 b' class PostForm(forms.Form):'
74 image = self.cleaned_data.get('image')
93 image = self.cleaned_data.get('image')
75
94
76 if (not text) and (not image):
95 if (not text) and (not image):
77 error_message = 'Either text or image must be entered.'
96 error_message = _('Either text or image must be entered.')
78 self._errors['text'] = self.error_class([error_message])
97 self._errors['text'] = self.error_class([error_message])
79
98
80 def _validate_posting_speed(self):
99 def _validate_posting_speed(self):
@@ -108,7 +127,7 b' class ThreadForm(PostForm):'
108 if tags:
127 if tags:
109 if not self.regex_tags.match(tags):
128 if not self.regex_tags.match(tags):
110 raise forms.ValidationError(
129 raise forms.ValidationError(
111 'Inappropriate characters in tags.')
130 _('Inappropriate characters in tags.'))
112
131
113 return tags
132 return tags
114
133
@@ -136,7 +155,7 b' class PostCaptchaForm(PostForm):'
136 if success:
155 if success:
137 return cleaned_data
156 return cleaned_data
138 else:
157 else:
139 raise forms.ValidationError("captcha validation failed")
158 raise forms.ValidationError(_("Captcha validation failed"))
140
159
141
160
142 class ThreadCaptchaForm(ThreadForm):
161 class ThreadCaptchaForm(ThreadForm):
@@ -157,14 +176,22 b' class ThreadCaptchaForm(ThreadForm):'
157 if success:
176 if success:
158 return cleaned_data
177 return cleaned_data
159 else:
178 else:
160 raise forms.ValidationError("captcha validation failed")
179 raise forms.ValidationError(_("Captcha validation failed"))
161
180
162
181
163 class SettingsForm(forms.Form):
182 class SettingsForm(NeboardForm):
164 theme = forms.ChoiceField(choices=settings.THEMES, widget=forms.RadioSelect)
183
184 theme = forms.ChoiceField(choices=settings.THEMES,
185 label=_('Theme'))
165
186
166
187
167 class LoginForm(forms.Form):
188 class ModeratorSettingsForm(SettingsForm):
189
190 moderate = forms.BooleanField(required=False, label=_('Enable moderation '
191 'panel'))
192
193
194 class LoginForm(NeboardForm):
168 user_id = forms.CharField()
195 user_id = forms.CharField()
169
196
170 def clean_user_id(self):
197 def clean_user_id(self):
@@ -172,7 +199,7 b' class LoginForm(forms.Form):'
172 if user_id:
199 if user_id:
173 users = User.objects.filter(user_id=user_id)
200 users = User.objects.filter(user_id=user_id)
174 if len(users) == 0:
201 if len(users) == 0:
175 raise forms.ValidationError('No such user found')
202 raise forms.ValidationError(_('No such user found'))
176
203
177 return user_id
204 return user_id
178
205
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -7,7 +7,7 b' msgid ""'
7 msgstr ""
7 msgstr ""
8 "Project-Id-Version: PACKAGE VERSION\n"
8 "Project-Id-Version: PACKAGE VERSION\n"
9 "Report-Msgid-Bugs-To: \n"
9 "Report-Msgid-Bugs-To: \n"
10 "POT-Creation-Date: 2013-09-16 20:18+0300\n"
10 "POT-Creation-Date: 2013-09-17 21:58+0300\n"
11 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 "Language-Team: LANGUAGE <LL@li.org>\n"
13 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,6 +18,31 b' msgstr ""'
18 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
18 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
19 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
20
20
21 #: forms.py:96
22 msgid "Either text or image must be entered."
23 msgstr "ВСкст ΠΈΠ»ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Π²Π΅Π΄Π΅Π½Ρ‹."
24
25 #: forms.py:130
26 msgid "Inappropriate characters in tags."
27 msgstr "НСдопустимыС символы Π² Ρ‚Π΅Π³Π°Ρ…."
28
29 #: forms.py:158 forms.py:179
30 msgid "Captcha validation failed"
31 msgstr "ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠ°ΠΏΡ‡ΠΈ ΠΏΡ€ΠΎΠ²Π°Π»Π΅Π½Π°"
32
33 #: forms.py:185
34 msgid "Theme"
35 msgstr "Π’Π΅ΠΌΠ°"
36
37 #: forms.py:190
38 msgid "Enable moderation panel"
39 msgstr "Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ панСль ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ†ΠΈΠΈ"
40
41 #: forms.py:202
42 #, fuzzy
43 msgid "No such user found"
44 msgstr "Π’Π΅Π³ΠΈ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹."
45
21 #: templates/boards/404.html:6
46 #: templates/boards/404.html:6
22 msgid "Not found"
47 msgid "Not found"
23 msgstr "НС найдСно"
48 msgstr "НС найдСно"
@@ -168,11 +193,7 b' msgstr "\xd0\x9f\xd0\xb5\xd1\x80\xd0\xb2\xd1\x8b\xd0\xb9 \xd0\xb4\xd0\xbe\xd1\x81\xd1\x82\xd1\x83\xd0\xbf:"'
168 msgid "Last access:"
193 msgid "Last access:"
169 msgstr "ПослСдний доступ: "
194 msgstr "ПослСдний доступ: "
170
195
171 #: templates/boards/settings.html:27
196 #: templates/boards/settings.html:30
172 msgid "Theme"
173 msgstr "Π’Π΅ΠΌΠ°"
174
175 #: templates/boards/settings.html:43
176 msgid "Save"
197 msgid "Save"
177 msgstr "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ"
198 msgstr "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ"
178
199
@@ -28,7 +28,9 b" FILE_EXTENSION_DELIMITER = '.'"
28
28
29 RANK_ADMIN = 0
29 RANK_ADMIN = 0
30 RANK_MODERATOR = 10
30 RANK_MODERATOR = 10
31 RANK_USER = 100
31 RANK_USER = 100 \
32
33 SETTING_MODERATE = "moderate"
32
34
33
35
34 class PostManager(models.Manager):
36 class PostManager(models.Manager):
@@ -279,7 +281,7 b' class User(models.Model):'
279
281
280 def save_setting(self, name, value):
282 def save_setting(self, name, value):
281 setting, created = Setting.objects.get_or_create(name=name, user=self)
283 setting, created = Setting.objects.get_or_create(name=name, user=self)
282 setting.value = value
284 setting.value = str(value)
283 setting.save()
285 setting.save()
284
286
285 return setting
287 return setting
@@ -24,22 +24,9 b''
24
24
25 <div class="post-form-w">
25 <div class="post-form-w">
26 <div class="post-form">
26 <div class="post-form">
27 <span class="form-title">{% trans "Theme" %}</span>
28 <form method="post">{% csrf_token %}
27 <form method="post">{% csrf_token %}
29 {% for choice in form.fields.theme.choices %}
28 {{ form.as_p }}
30 <div class="settings_item">
29 <hr />
31 <label for="{{ choice.0 }}">
32 <input type="radio" name="theme"
33 id="{{ choice.0 }}"
34 value="{{ choice.0 }}"
35 {% ifequal form.initial.theme choice.0 %}
36 checked
37 {% endifequal %}
38 />
39 {{ choice.1 }}
40 </label>
41 </div>
42 {% endfor %}
43 <input type="submit" value="{% trans "Save" %}" />
30 <input type="submit" value="{% trans "Save" %}" />
44 </form>
31 </form>
45 </div>
32 </div>
@@ -10,9 +10,9 b' from boards import forms'
10 import boards
10 import boards
11 from boards import utils
11 from boards import utils
12 from boards.forms import ThreadForm, PostForm, SettingsForm, PlainErrorList, \
12 from boards.forms import ThreadForm, PostForm, SettingsForm, PlainErrorList, \
13 ThreadCaptchaForm, PostCaptchaForm, LoginForm
13 ThreadCaptchaForm, PostCaptchaForm, LoginForm, ModeratorSettingsForm
14
14
15 from boards.models import Post, Tag, Ban, User, RANK_USER
15 from boards.models import Post, Tag, Ban, User, RANK_USER, SETTING_MODERATE
16 from boards import authors
16 from boards import authors
17 import neboard
17 import neboard
18
18
@@ -183,22 +183,40 b' def settings(request):'
183 """User's settings"""
183 """User's settings"""
184
184
185 context = _init_default_context(request)
185 context = _init_default_context(request)
186 user = _get_user(request)
187 is_moderator = user.is_moderator()
186
188
187 if request.method == 'POST':
189 if request.method == 'POST':
188 form = SettingsForm(request.POST)
190 if is_moderator:
191 form = ModeratorSettingsForm(request.POST,
192 error_class=PlainErrorList)
193 else:
194 form = SettingsForm(request.POST, error_class=PlainErrorList)
195
189 if form.is_valid():
196 if form.is_valid():
190 selected_theme = form.cleaned_data['theme']
197 selected_theme = form.cleaned_data['theme']
191
198
192 user = _get_user(request)
193 user.save_setting('theme', selected_theme)
199 user.save_setting('theme', selected_theme)
194
200
195 return redirect(settings)
201 if is_moderator:
202 moderate = form.cleaned_data['moderate']
203 user.save_setting(SETTING_MODERATE, moderate)
204
205 return redirect(settings)
196 else:
206 else:
197 selected_theme = _get_theme(request)
207 selected_theme = _get_theme(request)
198 form = SettingsForm(initial={'theme': selected_theme})
199 context['form'] = form
200
208
201 return render(request, 'boards/settings.html', context)
209 if is_moderator:
210 form = ModeratorSettingsForm(initial={'theme': selected_theme,
211 'moderate': context['moderator']},
212 error_class=PlainErrorList)
213 else:
214 form = SettingsForm(initial={'theme': selected_theme},
215 error_class=PlainErrorList)
216
217 context['form'] = form
218
219 return render(request, 'boards/settings.html', context)
202
220
203
221
204 def all_tags(request):
222 def all_tags(request):
@@ -319,7 +337,12 b' def _init_default_context(request):'
319 context['user'] = user
337 context['user'] = user
320 context['tags'] = user.get_sorted_fav_tags()
338 context['tags'] = user.get_sorted_fav_tags()
321 context['theme'] = _get_theme(request, user)
339 context['theme'] = _get_theme(request, user)
322 context['moderator'] = user.is_moderator()
340
341 moderate = user.get_setting(SETTING_MODERATE)
342 if moderate == 'True':
343 context['moderator'] = user.is_moderator()
344 else:
345 context['moderator'] = False
323
346
324 return context
347 return context
325
348
General Comments 0
You need to be logged in to leave comments. Login now