Show More
@@ -0,0 +1,31 b'' | |||
|
1 | from boards import utils | |
|
2 | from boards.models import Post | |
|
3 | from boards.models.post import SETTING_MODERATE | |
|
4 | import neboard | |
|
5 | ||
|
6 | __author__ = 'neko259' | |
|
7 | ||
|
8 | ||
|
9 | def user_and_ui_processor(request): | |
|
10 | context = {} | |
|
11 | ||
|
12 | user = utils.get_user(request) | |
|
13 | context['user'] = user | |
|
14 | context['tags'] = user.fav_tags.all() | |
|
15 | context['posts_per_day'] = float(Post.objects.get_posts_per_day()) | |
|
16 | ||
|
17 | theme = utils.get_theme(request, user) | |
|
18 | context['theme'] = theme | |
|
19 | context['theme_css'] = 'css/' + theme + '/base_page.css' | |
|
20 | ||
|
21 | # This shows the moderator panel | |
|
22 | moderate = user.get_setting(SETTING_MODERATE) | |
|
23 | if moderate == 'True': | |
|
24 | context['moderator'] = user.is_moderator() | |
|
25 | else: | |
|
26 | context['moderator'] = False | |
|
27 | ||
|
28 | context['version'] = neboard.settings.VERSION | |
|
29 | context['site_name'] = neboard.settings.SITE_NAME | |
|
30 | ||
|
31 | return context No newline at end of file |
@@ -0,0 +1,14 b'' | |||
|
1 | from haystack import indexes | |
|
2 | from boards.models import Post | |
|
3 | ||
|
4 | __author__ = 'neko259' | |
|
5 | ||
|
6 | ||
|
7 | class PostIndex(indexes.SearchIndex, indexes.Indexable): | |
|
8 | text = indexes.CharField(document=True, use_template=True) | |
|
9 | ||
|
10 | def get_model(self): | |
|
11 | return Post | |
|
12 | ||
|
13 | def index_queryset(self, using=None): | |
|
14 | return self.get_model().objects.all() No newline at end of file |
@@ -0,0 +1,29 b'' | |||
|
1 | {% extends 'boards/base.html' %} | |
|
2 | ||
|
3 | {% load board %} | |
|
4 | {% load i18n %} | |
|
5 | ||
|
6 | {% block content %} | |
|
7 | <div class="post-form-w"> | |
|
8 | <h3>{% trans 'Search' %}</h3> | |
|
9 | <form method="get" action="."> | |
|
10 | {{ form.as_p }} | |
|
11 | <input type="submit" value="{% trans 'Search' %}"> | |
|
12 | </form> | |
|
13 | </div> | |
|
14 | ||
|
15 | {% if query %} | |
|
16 | {% for result in page.object_list %} | |
|
17 | {% post_view result.object %} | |
|
18 | {% empty %} | |
|
19 | <p>{% trans 'No results found.' %}</p> | |
|
20 | {% endfor %} | |
|
21 | ||
|
22 | {% if page.has_previous or page.has_next %} | |
|
23 | <div> | |
|
24 | {% if page.has_previous %}<a href="?q={{ query }}&page={{ page.previous_page_number }}">{% endif %}« {% trans 'Previous' %}{% if page.has_previous %}</a>{% endif %} | |
|
25 | {% if page.has_next %}<a href="?q={{ query }}&page= {{ page.next_page_number }}">{% endif %}{% trans 'Next' %} » {% if page.has_next %}</a>{% endif %} | |
|
26 | </div> | |
|
27 | {% endif %} | |
|
28 | {% endif %} | |
|
29 | {% endblock %} No newline at end of file |
|
1 | NO CONTENT: modified file, binary diff hidden |
@@ -7,7 +7,7 b' msgid ""' | |||
|
7 | 7 | msgstr "" |
|
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
|
9 | 9 | "Report-Msgid-Bugs-To: \n" |
|
10 |
"POT-Creation-Date: 2014-0 |
|
|
10 | "POT-Creation-Date: 2014-06-15 12:34+0300\n" | |
|
11 | 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
|
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
|
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
@@ -98,27 +98,27 b' msgstr "\xd0\x9f\xd0\xbe\xd0\xb4\xd0\xbe\xd0\xb6\xd0\xb4\xd0\xb8\xd1\x82\xd0\xb5 %s \xd1\x81\xd0\xb5\xd0\xba\xd1\x83\xd0\xbd\xd0\xb4 \xd0\xbf\xd0\xbe\xd1\x81\xd0\xbb\xd0\xb5 \xd0\xbf\xd0\xbe\xd1\x81\xd0\xbb\xd0\xb5\xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb3\xd0\xbe \xd0\xbf\xd0\xbe\xd1\x81\xd1\x82\xd0\xb8\xd0\xbd\xd0\xb3\xd0\xb0"' | |||
|
98 | 98 | msgid "Tags" |
|
99 | 99 | msgstr "Π’Π΅Π³ΠΈ" |
|
100 | 100 | |
|
101 |
#: forms.py:22 |
|
|
101 | #: forms.py:224 forms.py:343 | |
|
102 | 102 | msgid "Inappropriate characters in tags." |
|
103 | 103 | msgstr "ΠΠ΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΡΠ΅Π³Π°Ρ ." |
|
104 | 104 | |
|
105 |
#: forms.py:25 |
|
|
105 | #: forms.py:252 forms.py:273 | |
|
106 | 106 | msgid "Captcha validation failed" |
|
107 | 107 | msgstr "ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠ°ΠΏΡΠΈ ΠΏΡΠΎΠ²Π°Π»Π΅Π½Π°" |
|
108 | 108 | |
|
109 |
#: forms.py:2 |
|
|
109 | #: forms.py:279 | |
|
110 | 110 | msgid "Theme" |
|
111 | 111 | msgstr "Π’Π΅ΠΌΠ°" |
|
112 | 112 | |
|
113 |
#: forms.py:28 |
|
|
113 | #: forms.py:284 | |
|
114 | 114 | msgid "Enable moderation panel" |
|
115 | 115 | msgstr "ΠΠΊΠ»ΡΡΠΈΡΡ ΠΏΠ°Π½Π΅Π»Ρ ΠΌΠΎΠ΄Π΅ΡΠ°ΡΠΈΠΈ" |
|
116 | 116 | |
|
117 |
#: forms.py: |
|
|
117 | #: forms.py:299 | |
|
118 | 118 | msgid "No such user found" |
|
119 | 119 | msgstr "ΠΠ°Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½" |
|
120 | 120 | |
|
121 |
#: forms.py:31 |
|
|
121 | #: forms.py:313 | |
|
122 | 122 | #, python-format |
|
123 | 123 | msgid "Wait %s minutes after last login" |
|
124 | 124 | msgstr "ΠΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡΠ΅ %s ΠΌΠΈΠ½ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π²Ρ ΠΎΠ΄Π°" |
@@ -147,41 +147,41 b' msgstr "\xd0\xbb\xd0\xb8\xd1\x86\xd0\xb5\xd0\xbd\xd0\xb7\xd0\xb8\xd0\xb5\xd0\xb9"' | |||
|
147 | 147 | msgid "Repository" |
|
148 | 148 | msgstr "Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ" |
|
149 | 149 | |
|
150 |
#: templates/boards/base.html:1 |
|
|
150 | #: templates/boards/base.html:11 | |
|
151 | 151 | msgid "Feed" |
|
152 | 152 | msgstr "ΠΠ΅Π½ΡΠ°" |
|
153 | 153 | |
|
154 |
#: templates/boards/base.html: |
|
|
154 | #: templates/boards/base.html:28 | |
|
155 | 155 | msgid "All threads" |
|
156 | 156 | msgstr "ΠΡΠ΅ ΡΠ΅ΠΌΡ" |
|
157 | 157 | |
|
158 |
#: templates/boards/base.html:3 |
|
|
158 | #: templates/boards/base.html:33 | |
|
159 | 159 | msgid "Tag management" |
|
160 | 160 | msgstr "Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π³Π°ΠΌΠΈ" |
|
161 | 161 | |
|
162 |
#: templates/boards/base.html:3 |
|
|
162 | #: templates/boards/base.html:35 templates/boards/settings.html:7 | |
|
163 | 163 | msgid "Settings" |
|
164 | 164 | msgstr "ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ" |
|
165 | 165 | |
|
166 |
#: templates/boards/base.html: |
|
|
167 |
#: templates/boards/login.html.py: |
|
|
166 | #: templates/boards/base.html:47 templates/boards/login.html:6 | |
|
167 | #: templates/boards/login.html.py:16 | |
|
168 | 168 | msgid "Login" |
|
169 | 169 | msgstr "ΠΡ ΠΎΠ΄" |
|
170 | 170 | |
|
171 |
#: templates/boards/base.html: |
|
|
171 | #: templates/boards/base.html:48 | |
|
172 | msgid "Search" | |
|
173 | msgstr "ΠΠΎΠΈΡΠΊ" | |
|
174 | ||
|
175 | #: templates/boards/base.html:50 | |
|
172 | 176 | #, python-format |
|
173 | 177 | msgid "Speed: %(ppd)s posts per day" |
|
174 | 178 | msgstr "Π‘ΠΊΠΎΡΠΎΡΡΡ: %(ppd)s ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² Π΄Π΅Π½Ρ" |
|
175 | 179 | |
|
176 |
#: templates/boards/base.html:5 |
|
|
180 | #: templates/boards/base.html:52 | |
|
177 | 181 | msgid "Up" |
|
178 | 182 | msgstr "ΠΠ²Π΅ΡΡ " |
|
179 | 183 | |
|
180 |
#: templates/boards/login.html:1 |
|
|
181 | msgid "User ID" | |
|
182 | msgstr "ID ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ" | |
|
183 | ||
|
184 | #: templates/boards/login.html:24 | |
|
184 | #: templates/boards/login.html:19 | |
|
185 | 185 | msgid "Insert your user id above" |
|
186 | 186 | msgstr "ΠΡΡΠ°Π²ΡΡΠ΅ ΡΠ²ΠΎΠΉ ID ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΡΠ΅" |
|
187 | 187 | |
@@ -386,5 +386,5 b' msgstr "\xd0\x9f\xd0\xb5\xd1\x80\xd0\xb5\xd0\xb4 \xd1\x8d\xd1\x82\xd0\xb8\xd0\xbc\xd0\xb8 \xd1\x82\xd0\xb5\xd0\xb3\xd0\xb0\xd0\xbc\xd0\xb8 \xd0\xbd\xd1\x83\xd0\xb6\xd0\xbd\xd0\xb0 \xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x8f \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0:"' | |||
|
386 | 386 | msgid "Comment" |
|
387 | 387 | msgstr "ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ" |
|
388 | 388 | |
|
389 |
#~ msgid " |
|
|
390 | #~ msgstr "ΠΡΡ ΠΈΠ²" | |
|
389 | #~ msgid "User ID" | |
|
390 | #~ msgstr "ID ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ" |
@@ -1,8 +1,9 b'' | |||
|
1 | 1 | from django.shortcuts import redirect |
|
2 |
from boards import |
|
|
2 | from boards import utils | |
|
3 | 3 | from boards.models import Ban |
|
4 | 4 | from django.utils.html import strip_spaces_between_tags |
|
5 | 5 | from django.conf import settings |
|
6 | from boards.views.banned import BannedView | |
|
6 | 7 | |
|
7 | 8 | RESPONSE_CONTENT_TYPE = 'Content-Type' |
|
8 | 9 | |
@@ -17,7 +18,7 b' class BanMiddleware:' | |||
|
17 | 18 | |
|
18 | 19 | def process_view(self, request, view_func, view_args, view_kwargs): |
|
19 | 20 | |
|
20 |
if view_func != |
|
|
21 | if view_func != BannedView.as_view: | |
|
21 | 22 | ip = utils.get_client_ip(request) |
|
22 | 23 | bans = Ban.objects.filter(ip=ip) |
|
23 | 24 |
@@ -6,12 +6,9 b'' | |||
|
6 | 6 | <!DOCTYPE html> |
|
7 | 7 | <html> |
|
8 | 8 | <head> |
|
9 | <link rel="stylesheet" type="text/css" | |
|
10 |
|
|
|
11 | <link rel="stylesheet" type="text/css" | |
|
12 | href="{% static theme_css %}" media="all"/> | |
|
13 | <link rel="alternate" type="application/rss+xml" href="rss/" title= | |
|
14 | "{% trans 'Feed' %}"/> | |
|
9 | <link rel="stylesheet" type="text/css" href="{% static 'css/base.css' %}" media="all"/> | |
|
10 | <link rel="stylesheet" type="text/css" href="{% static theme_css %}" media="all"/> | |
|
11 | <link rel="alternate" type="application/rss+xml" href="rss/" title="{% trans 'Feed' %}"/> | |
|
15 | 12 | |
|
16 | 13 | <link rel="icon" type="image/png" |
|
17 | 14 | href="{% static 'favicon.png' %}"> |
@@ -48,6 +45,7 b'' | |||
|
48 | 45 | <div class="navigation_panel"> |
|
49 | 46 | {% block metapanel %}{% endblock %} |
|
50 | 47 | [<a href="{% url "login" %}">{% trans 'Login' %}</a>] |
|
48 | [<a href="{% url "haystack_search" %}">{% trans 'Search' %}</a>] | |
|
51 | 49 | {% with ppd=posts_per_day|floatformat:2 %} |
|
52 | 50 | {% blocktrans %}Speed: {{ ppd }} posts per day{% endblocktrans %} |
|
53 | 51 | {% endwith %} |
@@ -75,7 +75,10 b" urlpatterns = patterns(''," | |||
|
75 | 75 | name='get_thread'), |
|
76 | 76 | url(r'^api/add_post/(?P<opening_post_id>\w+)/$', api.api_add_post, |
|
77 | 77 | name='add_post'), |
|
78 | url(r'api/get_tag_popularity/(?P<tag_name>\w+)$', api.get_tag_popularity, | |
|
78 | url(r'^api/get_tag_popularity/(?P<tag_name>\w+)$', api.get_tag_popularity, | |
|
79 | 79 | name='get_tag_popularity'), |
|
80 | 80 | |
|
81 | # Search | |
|
82 | url(r'^search/', include('haystack.urls')), | |
|
83 | ||
|
81 | 84 | ) |
@@ -1,10 +1,15 b'' | |||
|
1 | 1 | """ |
|
2 | 2 | This module contains helper functions and helper classes. |
|
3 | 3 | """ |
|
4 | import hashlib | |
|
4 | 5 | from django.utils import timezone |
|
5 | 6 | |
|
6 | 7 | from neboard import settings |
|
8 | from boards.models import Post, User | |
|
9 | from boards.models.post import SETTING_MODERATE | |
|
10 | from boards.models.user import RANK_USER | |
|
7 | 11 | import time |
|
12 | import neboard | |
|
8 | 13 | |
|
9 | 14 | |
|
10 | 15 | KEY_CAPTCHA_FAILS = 'key_captcha_fails' |
@@ -77,4 +82,48 b' def get_client_ip(request):' | |||
|
77 | 82 | def datetime_to_epoch(datetime): |
|
78 | 83 | return int(time.mktime(timezone.localtime( |
|
79 | 84 | datetime,timezone.get_current_timezone()).timetuple()) |
|
80 | * 1000000 + datetime.microsecond) No newline at end of file | |
|
85 | * 1000000 + datetime.microsecond) | |
|
86 | ||
|
87 | ||
|
88 | def get_user(request): | |
|
89 | """ | |
|
90 | Get current user from the session. If the user does not exist, create | |
|
91 | a new one. | |
|
92 | """ | |
|
93 | ||
|
94 | session = request.session | |
|
95 | if not 'user_id' in session: | |
|
96 | request.session.save() | |
|
97 | ||
|
98 | md5 = hashlib.md5() | |
|
99 | md5.update(session.session_key) | |
|
100 | new_id = md5.hexdigest() | |
|
101 | ||
|
102 | while User.objects.filter(user_id=new_id).exists(): | |
|
103 | md5.update(str(timezone.now())) | |
|
104 | new_id = md5.hexdigest() | |
|
105 | ||
|
106 | time_now = timezone.now() | |
|
107 | user = User.objects.create(user_id=new_id, rank=RANK_USER, | |
|
108 | registration_time=time_now) | |
|
109 | ||
|
110 | session['user_id'] = user.id | |
|
111 | else: | |
|
112 | user = User.objects.select_related('fav_tags').get( | |
|
113 | id=session['user_id']) | |
|
114 | ||
|
115 | return user | |
|
116 | ||
|
117 | ||
|
118 | def get_theme(request, user=None): | |
|
119 | """ | |
|
120 | Get user's CSS theme | |
|
121 | """ | |
|
122 | ||
|
123 | if not user: | |
|
124 | user = get_user(request) | |
|
125 | theme = user.get_setting('theme') | |
|
126 | if not theme: | |
|
127 | theme = neboard.settings.DEFAULT_THEME | |
|
128 | ||
|
129 | return theme No newline at end of file |
@@ -3,6 +3,7 b' from django.shortcuts import render' | |||
|
3 | 3 | from boards.views.base import BaseBoardView |
|
4 | 4 | from boards.models.tag import Tag |
|
5 | 5 | |
|
6 | ||
|
6 | 7 | class AllTagsView(BaseBoardView): |
|
7 | 8 | |
|
8 | 9 | def get(self, request): |
@@ -1,6 +1,5 b'' | |||
|
1 | 1 | import string |
|
2 | 2 | |
|
3 | from django.core.urlresolvers import reverse | |
|
4 | 3 | from django.db import transaction |
|
5 | 4 | from django.shortcuts import render, redirect |
|
6 | 5 | |
@@ -30,7 +29,7 b' class AllThreadsView(PostMixin, BaseBoar' | |||
|
30 | 29 | def get(self, request, page=DEFAULT_PAGE, form=None): |
|
31 | 30 | context = self.get_context_data(request=request) |
|
32 | 31 | |
|
33 |
self.user = |
|
|
32 | self.user = utils.get_user(request) | |
|
34 | 33 | |
|
35 | 34 | if not form: |
|
36 | 35 | form = ThreadForm(error_class=PlainErrorList) |
@@ -70,7 +69,8 b' class AllThreadsView(PostMixin, BaseBoar' | |||
|
70 | 69 | context[PARAMETER_PAGINATOR] = paginator |
|
71 | 70 | context[PARAMETER_CURRENT_PAGE] = paginator.page(int(page)) |
|
72 | 71 | |
|
73 | def parse_tags_string(self, tag_strings): | |
|
72 | @staticmethod | |
|
73 | def parse_tags_string(tag_strings): | |
|
74 | 74 | """ |
|
75 | 75 | Parses tag list string and returns tag object list. |
|
76 | 76 | """ |
@@ -120,7 +120,7 b' class AllThreadsView(PostMixin, BaseBoar' | |||
|
120 | 120 | |
|
121 | 121 | post = Post.objects.create_post(title=title, text=text, ip=ip, |
|
122 | 122 | image=image, tags=tags, |
|
123 |
user=s |
|
|
123 | user=utils.get_user(request)) | |
|
124 | 124 | |
|
125 | 125 | if html_response: |
|
126 | 126 | return redirect(post.get_url()) |
@@ -87,7 +87,7 b' def api_add_post(request, opening_post_i' | |||
|
87 | 87 | status = STATUS_ERROR |
|
88 | 88 | if form.is_valid(): |
|
89 | 89 | post = ThreadView().new_post(request, form, opening_post, |
|
90 |
|
|
|
90 | html_response=False) | |
|
91 | 91 | if not post: |
|
92 | 92 | status = STATUS_ERROR |
|
93 | 93 | else: |
@@ -153,7 +153,7 b' def api_get_threads(request, count):' | |||
|
153 | 153 | |
|
154 | 154 | # TODO Add tags, replies and images count |
|
155 | 155 | opening_posts.append(_get_post_data(opening_post.id, |
|
156 | include_last_update=True)) | |
|
156 | include_last_update=True)) | |
|
157 | 157 | |
|
158 | 158 | return HttpResponse(content=json.dumps(opening_posts)) |
|
159 | 159 | |
@@ -241,5 +241,5 b' def _get_post_data(post_id, format_type=' | |||
|
241 | 241 | post_json['image_preview'] = post.image.url_200x150 |
|
242 | 242 | if include_last_update: |
|
243 | 243 | post_json['bump_time'] = datetime_to_epoch( |
|
244 |
|
|
|
244 | post.thread_new.bump_time) | |
|
245 | 245 | return post_json |
@@ -1,5 +1,6 b'' | |||
|
1 | 1 | from django.db import transaction |
|
2 | 2 | from django.shortcuts import get_object_or_404 |
|
3 | from boards import utils | |
|
3 | 4 | |
|
4 | 5 | from boards.views.base import BaseBoardView |
|
5 | 6 | from boards.models import Post, Ban |
@@ -10,7 +11,7 b' class BanUserView(BaseBoardView, Redirec' | |||
|
10 | 11 | |
|
11 | 12 | @transaction.atomic |
|
12 | 13 | def get(self, request, post_id): |
|
13 |
user = s |
|
|
14 | user = utils.get_user(request) | |
|
14 | 15 | post = get_object_or_404(Post, id=post_id) |
|
15 | 16 | |
|
16 | 17 | if user.is_moderator(): |
@@ -1,15 +1,10 b'' | |||
|
1 | from datetime import datetime, timedelta | |
|
2 | import hashlib | |
|
3 | 1 |
|
|
4 | from django.db.models import Count | |
|
5 | 2 | from django.template import RequestContext |
|
6 | from django.utils import timezone | |
|
7 | 3 | from django.views.generic import View |
|
4 | ||
|
8 | 5 | from boards import utils |
|
9 |
from boards.models import |
|
|
10 | from boards.models.post import SETTING_MODERATE | |
|
11 | from boards.models.user import RANK_USER, Ban | |
|
12 | import neboard | |
|
6 | from boards.models.user import Ban | |
|
7 | ||
|
13 | 8 | |
|
14 | 9 | BAN_REASON_SPAM = 'Autoban: spam bot' |
|
15 | 10 | |
@@ -20,78 +15,11 b' class BaseBoardView(View):' | |||
|
20 | 15 | |
|
21 | 16 | def get_context_data(self, **kwargs): |
|
22 | 17 | request = kwargs['request'] |
|
23 | context = self._default_context(request) | |
|
24 | ||
|
25 | context['version'] = neboard.settings.VERSION | |
|
26 | context['site_name'] = neboard.settings.SITE_NAME | |
|
27 | ||
|
28 | return context | |
|
29 | ||
|
30 | def _default_context(self, request): | |
|
31 | """Create context with default values that are used in most views""" | |
|
32 | ||
|
18 | # context = self._default_context(request) | |
|
33 | 19 | context = RequestContext(request) |
|
34 | 20 | |
|
35 | user = self._get_user(request) | |
|
36 | context['user'] = user | |
|
37 | context['tags'] = user.fav_tags.all() | |
|
38 | context['posts_per_day'] = float(Post.objects.get_posts_per_day()) | |
|
39 | ||
|
40 | theme = self._get_theme(request, user) | |
|
41 | context['theme'] = theme | |
|
42 | context['theme_css'] = 'css/' + theme + '/base_page.css' | |
|
43 | ||
|
44 | # This shows the moderator panel | |
|
45 | moderate = user.get_setting(SETTING_MODERATE) | |
|
46 | if moderate == 'True': | |
|
47 | context['moderator'] = user.is_moderator() | |
|
48 | else: | |
|
49 | context['moderator'] = False | |
|
50 | ||
|
51 | 21 | return context |
|
52 | 22 | |
|
53 | def _get_user(self, request): | |
|
54 | """ | |
|
55 | Get current user from the session. If the user does not exist, create | |
|
56 | a new one. | |
|
57 | """ | |
|
58 | ||
|
59 | session = request.session | |
|
60 | if not 'user_id' in session: | |
|
61 | request.session.save() | |
|
62 | ||
|
63 | md5 = hashlib.md5() | |
|
64 | md5.update(session.session_key) | |
|
65 | new_id = md5.hexdigest() | |
|
66 | ||
|
67 | while User.objects.filter(user_id=new_id).exists(): | |
|
68 | md5.update(str(timezone.now())) | |
|
69 | new_id = md5.hexdigest() | |
|
70 | ||
|
71 | time_now = timezone.now() | |
|
72 | user = User.objects.create(user_id=new_id, rank=RANK_USER, | |
|
73 | registration_time=time_now) | |
|
74 | ||
|
75 | session['user_id'] = user.id | |
|
76 | else: | |
|
77 | user = User.objects.select_related('fav_tags').get( | |
|
78 | id=session['user_id']) | |
|
79 | ||
|
80 | return user | |
|
81 | ||
|
82 | def _get_theme(self, request, user=None): | |
|
83 | """ | |
|
84 | Get user's CSS theme | |
|
85 | """ | |
|
86 | ||
|
87 | if not user: | |
|
88 | user = self._get_user(request) | |
|
89 | theme = user.get_setting('theme') | |
|
90 | if not theme: | |
|
91 | theme = neboard.settings.DEFAULT_THEME | |
|
92 | ||
|
93 | return theme | |
|
94 | ||
|
95 | 23 | @transaction.atomic |
|
96 | 24 | def _ban_current_user(self, request): |
|
97 | 25 | """ |
@@ -1,5 +1,6 b'' | |||
|
1 | 1 | from django.shortcuts import redirect, get_object_or_404 |
|
2 | 2 | from django.db import transaction |
|
3 | from boards import utils | |
|
3 | 4 | |
|
4 | 5 | from boards.views.base import BaseBoardView |
|
5 | 6 | from boards.views.mixins import RedirectNextMixin |
@@ -10,7 +11,7 b' class DeletePostView(BaseBoardView, Redi' | |||
|
10 | 11 | |
|
11 | 12 | @transaction.atomic |
|
12 | 13 | def get(self, request, post_id): |
|
13 |
user = s |
|
|
14 | user = utils.get_user(request) | |
|
14 | 15 | post = get_object_or_404(Post, id=post_id) |
|
15 | 16 | |
|
16 | 17 | opening_post = post.is_opening() |
@@ -9,7 +9,7 b' from boards.forms import AddTagForm, Pla' | |||
|
9 | 9 | class PostAdminView(BaseBoardView, DispatcherMixin): |
|
10 | 10 | |
|
11 | 11 | def get(self, request, post_id, form=None): |
|
12 |
user = s |
|
|
12 | user = utils.get_user(request) | |
|
13 | 13 | if not user.is_moderator: |
|
14 | 14 | redirect('index') |
|
15 | 15 | |
@@ -30,7 +30,7 b' class PostAdminView(BaseBoardView, Dispa' | |||
|
30 | 30 | return render(request, 'boards/post_admin.html', context) |
|
31 | 31 | |
|
32 | 32 | def post(self, request, post_id): |
|
33 |
user = s |
|
|
33 | user = utils.get_user(request) | |
|
34 | 34 | if not user.is_moderator: |
|
35 | 35 | redirect('index') |
|
36 | 36 |
@@ -1,5 +1,6 b'' | |||
|
1 | 1 | from django.db import transaction |
|
2 | 2 | from django.shortcuts import render, redirect |
|
3 | from boards import utils | |
|
3 | 4 | |
|
4 | 5 | from boards.views.base import BaseBoardView, PARAMETER_FORM |
|
5 | 6 | from boards.forms import SettingsForm, ModeratorSettingsForm, PlainErrorList |
@@ -10,15 +11,16 b' class SettingsView(BaseBoardView):' | |||
|
10 | 11 | |
|
11 | 12 | def get(self, request): |
|
12 | 13 | context = self.get_context_data(request=request) |
|
13 |
user = |
|
|
14 | user = utils.get_user(request) | |
|
14 | 15 | is_moderator = user.is_moderator() |
|
15 | 16 | |
|
16 |
selected_theme = |
|
|
17 | selected_theme = utils.get_theme(request, user) | |
|
17 | 18 | |
|
18 | 19 | if is_moderator: |
|
19 | 20 | form = ModeratorSettingsForm(initial={ |
|
20 | 21 | 'theme': selected_theme, |
|
21 | 'moderate': context['moderator'] | |
|
22 | 'moderate': user.get_setting(SETTING_MODERATE) and \ | |
|
23 | user.is_moderator() | |
|
22 | 24 | }, error_class=PlainErrorList) |
|
23 | 25 | else: |
|
24 | 26 | form = SettingsForm(initial={'theme': selected_theme}, |
@@ -29,8 +31,7 b' class SettingsView(BaseBoardView):' | |||
|
29 | 31 | return render(request, 'boards/settings.html', context) |
|
30 | 32 | |
|
31 | 33 | def post(self, request): |
|
32 | context = self.get_context_data(request=request) | |
|
33 | user = context['user'] | |
|
34 | user = utils.get_user(request) | |
|
34 | 35 | is_moderator = user.is_moderator() |
|
35 | 36 | |
|
36 | 37 | with transaction.atomic(): |
@@ -2,6 +2,7 b' from django.shortcuts import render' | |||
|
2 | 2 | |
|
3 | 3 | from boards.views.base import BaseBoardView |
|
4 | 4 | |
|
5 | ||
|
5 | 6 | class StaticPageView(BaseBoardView): |
|
6 | 7 | |
|
7 | 8 | def get(self, request, name): |
@@ -1,4 +1,5 b'' | |||
|
1 | 1 | from django.shortcuts import get_object_or_404 |
|
2 | from boards import utils | |
|
2 | 3 | from boards.models import Tag, Post |
|
3 | 4 | from boards.views.all_threads import AllThreadsView, DEFAULT_PAGE |
|
4 | 5 | from boards.views.mixins import DispatcherMixin, RedirectNextMixin |
@@ -47,7 +48,7 b' class TagView(AllThreadsView, Dispatcher' | |||
|
47 | 48 | return self.get(request, tag_name, page, form) |
|
48 | 49 | |
|
49 | 50 | def subscribe(self, request): |
|
50 |
user = s |
|
|
51 | user = utils.get_user(request) | |
|
51 | 52 | tag = get_object_or_404(Tag, name=self.tag_name) |
|
52 | 53 | |
|
53 | 54 | if not tag in user.fav_tags.all(): |
@@ -56,7 +57,7 b' class TagView(AllThreadsView, Dispatcher' | |||
|
56 | 57 | return self.redirect_to_next(request) |
|
57 | 58 | |
|
58 | 59 | def unsubscribe(self, request): |
|
59 |
user = s |
|
|
60 | user = utils.get_user(request) | |
|
60 | 61 | tag = get_object_or_404(Tag, name=self.tag_name) |
|
61 | 62 | |
|
62 | 63 | if tag in user.fav_tags.all(): |
@@ -70,7 +71,7 b' class TagView(AllThreadsView, Dispatcher' | |||
|
70 | 71 | shown. |
|
71 | 72 | """ |
|
72 | 73 | |
|
73 |
user = s |
|
|
74 | user = utils.get_user(request) | |
|
74 | 75 | tag = get_object_or_404(Tag, name=self.tag_name) |
|
75 | 76 | |
|
76 | 77 | user.hide_tag(tag) |
@@ -80,7 +81,7 b' class TagView(AllThreadsView, Dispatcher' | |||
|
80 | 81 | Removed tag from user's hidden tags. |
|
81 | 82 | """ |
|
82 | 83 | |
|
83 |
user = s |
|
|
84 | user = utils.get_user(request) | |
|
84 | 85 | tag = get_object_or_404(Tag, name=self.tag_name) |
|
85 | 86 | |
|
86 | 87 | user.unhide_tag(tag) |
@@ -1,17 +1,18 b'' | |||
|
1 | import string | |
|
2 | 1 |
|
|
3 | 2 | from django.db import transaction |
|
4 | 3 | from django.http import Http404 |
|
5 | 4 | from django.shortcuts import get_object_or_404, render, redirect |
|
6 | 5 | from django.views.generic.edit import FormMixin |
|
6 | ||
|
7 | 7 | from boards import utils |
|
8 | 8 | from boards.forms import PostForm, PlainErrorList |
|
9 |
from boards.models import Post, Ban |
|
|
9 | from boards.models import Post, Ban | |
|
10 | 10 | from boards.views.banned import BannedView |
|
11 | 11 | from boards.views.base import BaseBoardView, PARAMETER_FORM |
|
12 | 12 | from boards.views.posting_mixin import PostMixin |
|
13 | 13 | import neboard |
|
14 | 14 | |
|
15 | ||
|
15 | 16 | MODE_GALLERY = 'gallery' |
|
16 | 17 | MODE_NORMAL = 'normal' |
|
17 | 18 | |
@@ -119,7 +120,7 b' class ThreadView(BaseBoardView, PostMixi' | |||
|
119 | 120 | post = Post.objects.create_post(title=title, text=text, ip=ip, |
|
120 | 121 | thread=post_thread, image=image, |
|
121 | 122 | tags=tags, |
|
122 |
user=s |
|
|
123 | user=utils.get_user(request)) | |
|
123 | 124 | |
|
124 | 125 | thread_to_show = (opening_post.id if opening_post else post.id) |
|
125 | 126 |
@@ -105,6 +105,7 b' TEMPLATE_CONTEXT_PROCESSORS = (' | |||
|
105 | 105 | 'django.core.context_processors.static', |
|
106 | 106 | 'django.core.context_processors.request', |
|
107 | 107 | 'django.contrib.auth.context_processors.auth', |
|
108 | 'boards.context_processors.user_and_ui_processor', | |
|
108 | 109 | ) |
|
109 | 110 | |
|
110 | 111 | MIDDLEWARE_CLASSES = ( |
@@ -137,15 +138,22 b' INSTALLED_APPS = (' | |||
|
137 | 138 | 'django.contrib.messages', |
|
138 | 139 | 'django.contrib.staticfiles', |
|
139 | 140 | # Uncomment the next line to enable the admin: |
|
140 |
|
|
|
141 | 'django.contrib.admin', | |
|
141 | 142 | # Uncomment the next line to enable admin documentation: |
|
142 | 143 | # 'django.contrib.admindocs', |
|
143 | 144 | 'django.contrib.humanize', |
|
144 | 145 | 'django_cleanup', |
|
145 | 'boards', | |
|
146 | 'captcha', | |
|
146 | ||
|
147 | # Migrations | |
|
147 | 148 | 'south', |
|
148 | 149 | 'debug_toolbar', |
|
150 | ||
|
151 | 'captcha', | |
|
152 | ||
|
153 | # Search | |
|
154 | 'haystack', | |
|
155 | ||
|
156 | 'boards', | |
|
149 | 157 | ) |
|
150 | 158 | |
|
151 | 159 | DEBUG_TOOLBAR_PANELS = ( |
@@ -201,6 +209,15 b' LOGGING = {' | |||
|
201 | 209 | }, |
|
202 | 210 | } |
|
203 | 211 | |
|
212 | HAYSTACK_CONNECTIONS = { | |
|
213 | 'default': { | |
|
214 | 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', | |
|
215 | 'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'), | |
|
216 | }, | |
|
217 | } | |
|
218 | ||
|
219 | HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor' | |
|
220 | ||
|
204 | 221 | MARKUP_FIELD_TYPES = ( |
|
205 | 222 | ('markdown', markdown_extended), |
|
206 | 223 | ) |
General Comments 0
You need to be logged in to leave comments.
Login now