# HG changeset patch # User neko259 # Date 2013-08-21 17:51:07 # Node ID 1dfea0d04daabc2558b592bc7d9f6d53e6d97f3c # Parent 34858abe0445f82ddd7fc03aca7934e2ddeb2eaf Added admin actions (showing IP, post removal). Added user ranks. This refs #61, #12 diff --git a/boards/admin.py b/boards/admin.py --- a/boards/admin.py +++ b/boards/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin -from boards.models import Post, Tag, Admin +from boards.models import Post, Tag, User admin.site.register(Post) admin.site.register(Tag) -admin.site.register(Admin) +admin.site.register(User) diff --git a/boards/locale/ru/LC_MESSAGES/django.mo b/boards/locale/ru/LC_MESSAGES/django.mo index e33b26854d053b910da1dfc0b351fb2e0d8165f9..7565c493ef0524e3a694f6ffdab6b24fa1a3dde5 GIT binary patch literal 2655 zc$|$>TWl0n7(U2qw<{OH8w%hyaE&@ex%Qz05<|Z*Y;nB6t8bJejifx|Df?FZTBmdY4q&2 z=64OoYk=dxUBEfuR#6{t9dHetp8{^KQ|IP7RZmx)iu-b%>MsNC1fB%G2)t3J`2DSM zLs;pz0b7CXVHM}yu$trbu!=JuR`x$?yd75k`b%R7!#WFGTd(}zu2=G_^~(NJEuRHG z0{jlR3HS@}0pOqYD$lxzs(X7x`87sVeVK^z&tqAo?^!)r{=ypdbtCr?)rTkWH)xs2 zBVvg;J*Mxe_$X0#Y4LlQs5>a;wN=Z+9o?j^5qXlR8WumncfH<=8tx~GyWsmc{zq5X zt|t0E67?R$w@oamVv+g-E;9=rNmcv-$MwiT)3f?$$#jnuoI#s~Vl`Hb3Z zP9#vwB`A()m!mdfmZASbD?J>bHXf@i!4D&3u6V+%KQe>Rx0;&L zkXl7}%^7FMvwX)LBHiY3M!K2rTXw%k@@7BSV3k{smMX}CpaoX6N|uP)J4C&**~h#n z&9f6ebzH@QS{`-TYZc37g(wj!k{@6tM)HI z1tNoZ#PZFe)kp9%)InSjw;=WfqfXa(mG${XTfsPj9$Ai^pq;7aL#fsbJ(B6_ZtG}| zh{{~w$a(!%!8lmy_l&%gppnjwydg&iCnGI;-WZGTHe!2?#yGZ#J|M4K#9m>pk+J)n0w$ZFdwVTE(pjvyX3=PI z+>)1|c3B?1ixlftsb z=b#9XaUq(2|g7AyNwt?_VlI52&!dF5K`zjno zVC1VJ?;O@D6;_Ix6iYi1^EwiaLNvo`g8DcNkzqno8KuZQ&nHpLDT*Ycs=x`s8ToW1 zn4uq%GOUAh!TI2Vh^xy&&1ZvAk?IP(7Nl@uu@QHqFWNmX#pjeL7$f|KaFH$k->hV^ z+6rd8rbx)@R%{g;gjg}LYuGHv!PeBR0JEEN*1?&j!ekBai($%Y=lM<1N5VgV^Q0(Q zZk8m1%oMC!f5QF2_8d!PAg^84k|Kn\n" "Language-Team: LANGUAGE \n" @@ -38,15 +38,15 @@ msgstr "Репозиторий" msgid "Feed" msgstr "Лента" -#: templates/boards/base.html:31 +#: templates/boards/base.html:27 msgid "All threads" msgstr "Все темы" -#: templates/boards/base.html:37 +#: templates/boards/base.html:33 msgid "Settings" msgstr "Настройки" -#: templates/boards/base.html:45 +#: templates/boards/base.html:41 msgid "Up" msgstr "Вверх" @@ -55,7 +55,7 @@ msgid "Tag: " msgstr "Тег: " #: templates/boards/posting_general.html:35 -#: templates/boards/posting_general.html:79 templates/boards/thread.html:27 +#: templates/boards/posting_general.html:87 templates/boards/thread.html:27 #: templates/boards/rss/post.html:5 msgid "Post image" msgstr "Изображение сообщения" @@ -64,58 +64,70 @@ msgstr "Изображение сообщения" msgid "Reply" msgstr "Ответ" -#: templates/boards/posting_general.html:53 templates/boards/thread.html:111 +#: templates/boards/posting_general.html:52 templates/boards/thread.html:49 +msgid "Delete" +msgstr "Удалить" + +#: templates/boards/posting_general.html:61 templates/boards/thread.html:119 msgid "replies" msgstr "ответов" -#: templates/boards/posting_general.html:54 templates/boards/thread.html:112 +#: templates/boards/posting_general.html:62 templates/boards/thread.html:120 msgid "images" msgstr "изображений" -#: templates/boards/posting_general.html:56 -#: templates/boards/posting_general.html:127 templates/boards/thread.html:51 +#: templates/boards/posting_general.html:64 +#: templates/boards/posting_general.html:135 templates/boards/thread.html:59 #: templates/boards/rss/post.html:10 msgid "Tags" msgstr "Теги" -#: templates/boards/posting_general.html:109 +#: templates/boards/posting_general.html:117 msgid "Create new thread" msgstr "Создать новую тему" -#: templates/boards/posting_general.html:112 templates/boards/thread.html:73 +#: templates/boards/posting_general.html:120 templates/boards/thread.html:81 msgid "Title" msgstr "Заголовок" -#: templates/boards/posting_general.html:117 templates/boards/thread.html:78 +#: templates/boards/posting_general.html:125 templates/boards/thread.html:86 msgid "Text" msgstr "Текст" -#: templates/boards/posting_general.html:122 templates/boards/thread.html:83 +#: templates/boards/posting_general.html:130 templates/boards/thread.html:91 msgid "Image" msgstr "Изображение" -#: templates/boards/posting_general.html:137 templates/boards/thread.html:94 +#: templates/boards/posting_general.html:145 templates/boards/thread.html:102 msgid "Post" msgstr "Отправить" -#: templates/boards/posting_general.html:139 +#: templates/boards/posting_general.html:147 msgid "Tags must be delimited by spaces. Text or image is required." msgstr "" "Теги должны быть разделены пробелами. Текст или изображение обязательны." -#: templates/boards/posting_general.html:142 templates/boards/thread.html:96 +#: templates/boards/posting_general.html:150 templates/boards/thread.html:104 msgid "Basic markdown syntax." msgstr "Базовый синтаксис markdown." -#: templates/boards/posting_general.html:152 +#: templates/boards/posting_general.html:160 msgid "Pages:" msgstr "Страницы: " -#: templates/boards/settings.html:13 +#: templates/boards/settings.html:12 +msgid "User:" +msgstr "Пользователь:" + +#: templates/boards/settings.html:14 +msgid "You are moderator." +msgstr "Вы модератор." + +#: templates/boards/settings.html:20 msgid "Theme" msgstr "Тема" -#: templates/boards/settings.html:29 +#: templates/boards/settings.html:36 msgid "Save" msgstr "Сохранить" @@ -127,31 +139,31 @@ msgstr "тегов" msgid "Get!" msgstr "Гет!" -#: templates/boards/thread.html:70 +#: templates/boards/thread.html:78 msgid "Reply to thread" msgstr "Ответить в тему" -#: templates/boards/thread.html:97 +#: templates/boards/thread.html:105 msgid "Example: " msgstr "Пример: " -#: templates/boards/thread.html:97 +#: templates/boards/thread.html:105 msgid "italic" msgstr "курсив" -#: templates/boards/thread.html:98 +#: templates/boards/thread.html:106 msgid "bold" msgstr "полужирный" -#: templates/boards/thread.html:99 +#: templates/boards/thread.html:107 msgid "Quotes can be inserted with" msgstr "Цитаты могут быть вставлены при помощи" -#: templates/boards/thread.html:100 +#: templates/boards/thread.html:108 msgid "Links to answers can be inserted with" msgstr "Ссылки на ответы могут быть вставлены с помощью" -#: templates/boards/thread.html:113 +#: templates/boards/thread.html:121 msgid "Last update: " msgstr "Последнее обновление: " @@ -161,8 +173,8 @@ msgstr "Последнее обновление: " #~ msgid "gets" #~ msgstr "гетов" -msgid "author" -msgstr "автор" +#~ msgid "author" +#~ msgstr "автор" -msgid "developer" -msgstr "разработчик" \ No newline at end of file +#~ msgid "developer" +#~ msgstr "разработчик" diff --git a/boards/models.py b/boards/models.py --- a/boards/models.py +++ b/boards/models.py @@ -30,6 +30,10 @@ FILE_EXTENSION_DELIMITER = '.' REGEX_PRETTY = re.compile(r'^\d(0)+$') REGEX_SAME = re.compile(r'^(.)\1+$') +RANK_ADMIN = 0 +RANK_MODERATOR = 10 +RANK_USER = 100 + class PostManager(models.Manager): def create_post(self, title, text, image=None, parent_id=NO_PARENT, @@ -289,26 +293,20 @@ class Admin(models.Model): return self.name + '/' + '*' * len(self.password) -class Setting(models.Model): - - name = models.CharField(max_length=50) - value = models.CharField(max_length=50) - - class User(models.Model): - user_id = models.CharField(max_length=20) - settings = models.ManyToManyField(Setting) + user_id = models.CharField(max_length=50) + rank = models.IntegerField() def save_setting(self, name, value): - setting, created = self.settings.get_or_create(name=name) + setting, created = Setting.objects.get_or_create(name=name, user=self) setting.value = value setting.save() return setting def get_setting(self, name): - settings = self.settings.filter(name=name) + settings = Setting.objects.filter(name=name, user=self) if len(settings) > 0: setting = settings[0] else: @@ -320,3 +318,16 @@ class User(models.Model): setting_value = None return setting_value + + def is_moderator(self): + return RANK_MODERATOR >= self.rank + + def __unicode__(self): + return self.user_id + + +class Setting(models.Model): + + name = models.CharField(max_length=50) + value = models.CharField(max_length=50) + user = models.ForeignKey(User) diff --git a/boards/static/css/md/base_page.css b/boards/static/css/md/base_page.css --- a/boards/static/css/md/base_page.css +++ b/boards/static/css/md/base_page.css @@ -273,3 +273,8 @@ li { .post-info { color: #ddd; } + +.moderator_info { + color: #e99d41; + float: right; +} \ No newline at end of file diff --git a/boards/static/css/sw/base_page.css b/boards/static/css/sw/base_page.css --- a/boards/static/css/sw/base_page.css +++ b/boards/static/css/sw/base_page.css @@ -261,4 +261,9 @@ li { .form-errors { margin-left: 1ex; +} + +.moderator_info { + font-weight: bold; + float: right; } \ No newline at end of file diff --git a/boards/templates/boards/base.html b/boards/templates/boards/base.html --- a/boards/templates/boards/base.html +++ b/boards/templates/boards/base.html @@ -22,18 +22,11 @@ -
- - {% if request.session.admin == True %} - Admin panel TODO: Need to implement
- {% endif %} - -
{% autoescape off %} {{ thread.text.rendered|truncatewords_html:50 }} diff --git a/boards/templates/boards/settings.html b/boards/templates/boards/settings.html --- a/boards/templates/boards/settings.html +++ b/boards/templates/boards/settings.html @@ -9,7 +9,10 @@ {% block content %}
- {% trans 'User:' %} {{ request.session.user.user_id }} + {% trans 'User:' %} {{ user.user_id }}. + {% if user.is_moderator %} + {% trans 'You are moderator.' %} + {% endif %}
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,6 +41,14 @@ {% endif %} [>>] + + {% if user.is_moderator %} + + ({{ post.poster_ip }}) + [{% trans 'Delete' %}] + + {% endif %}
{% autoescape off %} {{ post.text.rendered }} diff --git a/boards/urls.py b/boards/urls.py --- a/boards/urls.py +++ b/boards/urls.py @@ -26,6 +26,7 @@ urlpatterns = patterns('', url(r'^captcha/', include('captcha.urls')), 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'), # RSS feeds url(r'^rss/$', AllThreadsFeed()), diff --git a/boards/views.py b/boards/views.py --- a/boards/views.py +++ b/boards/views.py @@ -10,7 +10,7 @@ from boards import utils from boards.forms import ThreadForm, PostForm, SettingsForm, PlainErrorList, \ ThreadCaptchaForm, PostCaptchaForm -from boards.models import Post, Admin, Tag, User +from boards.models import Post, Admin, Tag, User, RANK_USER, RANK_MODERATOR, NO_PARENT from boards import authors import neboard @@ -190,7 +190,6 @@ def settings(request): selected_theme = _get_theme(request) form = SettingsForm(initial={'theme': selected_theme}) context['form'] = form - _get_user(request) return render(request, 'boards/settings.html', context) @@ -224,6 +223,19 @@ def authors(request): return render(request, 'boards/authors.html', context) +def delete(request, post_id): + user = _get_user(request) + post = get_object_or_404(Post, id=post_id) + + if user.is_moderator(): + Post.objects.delete_post(post) + + if NO_PARENT == post.parent: + return redirect(index) + else: + return redirect(thread, post_id=post.parent) + + def _get_theme(request): """Get user's CSS theme""" @@ -250,6 +262,7 @@ def _init_default_context(request): context = RequestContext(request) context['tags'] = Tag.objects.get_popular_tags() context['theme'] = _get_theme(request) + context['user'] = _get_user(request) return context @@ -258,17 +271,17 @@ def _get_user(request): """Get current user from the session""" session = request.session - if not 'user' in session: + if not 'user_id' in session: request.session.save() md5 = hashlib.md5() md5.update(session.session_key) new_id = md5.hexdigest() - user = User.objects.create(user_id=new_id) + user = User.objects.create(user_id=new_id, rank=RANK_USER) - session['user'] = user + session['user_id'] = user.id else: - user = session['user'] + user = User.objects.get(id=session['user_id']) return user \ No newline at end of file