diff --git a/boards/locale/ru/LC_MESSAGES/django.mo b/boards/locale/ru/LC_MESSAGES/django.mo index fb981ac43eb97bff9a7c7ccd86e5dcfb84077a7b..582a970731f4e47424970776c885629147b520a7 GIT binary patch literal 3673 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\n" "Language-Team: LANGUAGE \n" @@ -89,21 +89,21 @@ msgstr "Изображение сообщения" msgid "Reply" msgstr "Ответ" -#: templates/boards/posting_general.html:54 templates/boards/thread.html:46 +#: templates/boards/posting_general.html:54 templates/boards/thread.html:45 msgid "Delete" msgstr "Удалить" -#: templates/boards/posting_general.html:63 templates/boards/thread.html:107 +#: templates/boards/posting_general.html:63 templates/boards/thread.html:112 msgid "replies" msgstr "ответов" -#: templates/boards/posting_general.html:64 templates/boards/thread.html:108 +#: templates/boards/posting_general.html:64 templates/boards/thread.html:113 msgid "images" msgstr "изображений" #: templates/boards/posting_general.html:66 #: templates/boards/posting_general.html:139 templates/boards/tags.html:7 -#: templates/boards/thread.html:56 templates/boards/rss/post.html:10 +#: templates/boards/thread.html:58 templates/boards/rss/post.html:10 msgid "Tags" msgstr "Теги" @@ -115,32 +115,32 @@ msgstr "Нет тем. Создайте первую!" msgid "Create new thread" msgstr "Создать новую тему" -#: templates/boards/posting_general.html:124 templates/boards/thread.html:75 +#: templates/boards/posting_general.html:124 templates/boards/thread.html:77 msgid "Title" msgstr "Заголовок" -#: templates/boards/posting_general.html:129 templates/boards/thread.html:80 +#: templates/boards/posting_general.html:129 templates/boards/thread.html:82 msgid "Text" msgstr "Текст" -#: templates/boards/posting_general.html:134 templates/boards/thread.html:85 +#: templates/boards/posting_general.html:134 templates/boards/thread.html:87 msgid "Image" msgstr "Изображение" -#: templates/boards/posting_general.html:149 templates/boards/thread.html:96 +#: templates/boards/posting_general.html:152 templates/boards/thread.html:101 msgid "Post" msgstr "Отправить" -#: templates/boards/posting_general.html:151 +#: templates/boards/posting_general.html:154 msgid "Tags must be delimited by spaces. Text or image is required." msgstr "" "Теги должны быть разделены пробелами. Текст или изображение обязательны." -#: templates/boards/posting_general.html:154 templates/boards/thread.html:98 +#: templates/boards/posting_general.html:157 templates/boards/thread.html:103 msgid "Text syntax" msgstr "Синтаксис текста" -#: templates/boards/posting_general.html:164 +#: templates/boards/posting_general.html:167 msgid "Pages:" msgstr "Страницы: " @@ -176,16 +176,19 @@ msgstr "Добавить" msgid "No tags found." msgstr "Теги не найдены." -#: templates/boards/thread.html:72 +#: templates/boards/thread.html:48 +msgid "Ban IP" +msgstr "Заблокировать IP" + +#: templates/boards/thread.html:74 msgid "Reply to thread" msgstr "Ответить в тему" -#: templates/boards/thread.html:109 +#: templates/boards/thread.html:114 msgid "Last update: " msgstr "Последнее обновление: " #: templates/boards/staticpages/banned.html:6 -#: templates/boards/staticpages/help.html:6 msgid "Banned" msgstr "Заблокирован" @@ -193,6 +196,7 @@ msgstr "Заблокирован" msgid "Your IP address has been banned. Contact the administrator" msgstr "Ваш IP адрес был заблокирован. Свяжитесь с администратором" +#: templates/boards/staticpages/help.html:6 #: templates/boards/staticpages/help.html:10 msgid "Syntax" msgstr "Синтаксис" diff --git a/boards/models.py b/boards/models.py --- a/boards/models.py +++ b/boards/models.py @@ -312,7 +312,7 @@ class User(models.Model): return self.fav_tags.order_by('name') def __unicode__(self): - return self.user_id + '(' + self.rank + ')' + return self.user_id + '(' + str(self.rank) + ')' class Setting(models.Model): diff --git a/boards/templates/boards/thread.html b/boards/templates/boards/thread.html --- a/boards/templates/boards/thread.html +++ b/boards/templates/boards/thread.html @@ -41,9 +41,11 @@ {% if user.is_moderator %} - ({{ post.poster_ip }}) [{% trans 'Delete' %}] + ({{ post.poster_ip }}) + [{% trans 'Ban IP' %}] {% endif %} diff --git a/boards/urls.py b/boards/urls.py --- a/boards/urls.py +++ b/boards/urls.py @@ -37,6 +37,8 @@ urlpatterns = patterns('', url(r'^jump/(?P\w+)/$', views.jump_to_post, name='jumper'), url(r'^authors/$', views.authors, name='authors'), url(r'^delete/(?P\w+)/$', views.delete, name='delete'), + url(r'^ban/(?P\w+)/$', views.ban, name='ban'), + url(r'^banned/$', views.you_are_banned, name='banned'), url(r'^staticpage/(?P\w+)/$', views.static_page, name='staticpage'), diff --git a/boards/views.py b/boards/views.py --- a/boards/views.py +++ b/boards/views.py @@ -238,6 +238,17 @@ def delete(request, post_id): return redirect(thread, post_id=post.parent) +def ban(request, post_id): + user = _get_user(request) + post = get_object_or_404(Post, id=post_id) + + if user.is_moderator(): + # TODO Show confirmation page before ban + Ban.objects.get_or_create(ip=post.poster_ip) + + return _redirect_to_next(request) + + def you_are_banned(request): context = _init_default_context(request) return render(request, 'boards/staticpages/banned.html', context) @@ -333,5 +344,8 @@ def _get_user(request): def _redirect_to_next(request): - next_page = request.GET['next'] - return HttpResponseRedirect(next_page) + if 'next' in request.GET: + next_page = request.GET['next'] + return HttpResponseRedirect(next_page) + else: + return redirect(index)