Show More
@@ -0,0 +1,19 b'' | |||||
|
1 | # -*- coding: utf-8 -*- | |||
|
2 | from __future__ import unicode_literals | |||
|
3 | ||||
|
4 | from django.db import models, migrations | |||
|
5 | ||||
|
6 | ||||
|
7 | class Migration(migrations.Migration): | |||
|
8 | ||||
|
9 | dependencies = [ | |||
|
10 | ('boards', '0023_auto_20150818_1026'), | |||
|
11 | ] | |||
|
12 | ||||
|
13 | operations = [ | |||
|
14 | migrations.AddField( | |||
|
15 | model_name='post', | |||
|
16 | name='tripcode', | |||
|
17 | field=models.CharField(max_length=50, null=True), | |||
|
18 | ), | |||
|
19 | ] |
@@ -1,3 +1,4 b'' | |||||
|
1 | import hashlib | |||
1 | import re |
|
2 | import re | |
2 | import time |
|
3 | import time | |
3 | import pytz |
|
4 | import pytz | |
@@ -151,6 +152,7 b' class PostForm(NeboardForm):' | |||||
151 | threads = forms.CharField(required=False, label=_('Additional threads'), |
|
152 | threads = forms.CharField(required=False, label=_('Additional threads'), | |
152 | widget=forms.TextInput(attrs={ATTRIBUTE_PLACEHOLDER: |
|
153 | widget=forms.TextInput(attrs={ATTRIBUTE_PLACEHOLDER: | |
153 | '123 456 789'})) |
|
154 | '123 456 789'})) | |
|
155 | tripcode = forms.BooleanField(label=_('Tripcode'), required=False) | |||
154 |
|
156 | |||
155 | session = None |
|
157 | session = None | |
156 | need_to_ban = False |
|
158 | need_to_ban = False | |
@@ -237,6 +239,10 b' class PostForm(NeboardForm):' | |||||
237 | file = self.cleaned_data['file'] |
|
239 | file = self.cleaned_data['file'] | |
238 | return file or self.cleaned_data['file_url'] |
|
240 | return file or self.cleaned_data['file_url'] | |
239 |
|
241 | |||
|
242 | def get_tripcode(self): | |||
|
243 | if self.cleaned_data['tripcode']: | |||
|
244 | return hashlib.sha1(self.session.session_key.encode()).hexdigest() | |||
|
245 | ||||
240 | def _clean_text_file(self): |
|
246 | def _clean_text_file(self): | |
241 | text = self.cleaned_data.get('text') |
|
247 | text = self.cleaned_data.get('text') | |
242 | file = self.get_file() |
|
248 | file = self.get_file() |
@@ -74,7 +74,7 b' IMAGE_TYPES = (' | |||||
74 | class PostManager(models.Manager): |
|
74 | class PostManager(models.Manager): | |
75 | @transaction.atomic |
|
75 | @transaction.atomic | |
76 | def create_post(self, title: str, text: str, file=None, thread=None, |
|
76 | def create_post(self, title: str, text: str, file=None, thread=None, | |
77 | ip=NO_IP, tags: list=None, opening_posts: list=None): |
|
77 | ip=NO_IP, tags: list=None, opening_posts: list=None, tripcode=None): | |
78 | """ |
|
78 | """ | |
79 | Creates new post |
|
79 | Creates new post | |
80 | """ |
|
80 | """ | |
@@ -106,7 +106,8 b' class PostManager(models.Manager):' | |||||
106 | pub_time=posting_time, |
|
106 | pub_time=posting_time, | |
107 | poster_ip=ip, |
|
107 | poster_ip=ip, | |
108 | thread=thread, |
|
108 | thread=thread, | |
109 |
last_edit_time=posting_time |
|
109 | last_edit_time=posting_time, | |
|
110 | tripcode=tripcode) | |||
110 | post.threads.add(thread) |
|
111 | post.threads.add(thread) | |
111 |
|
112 | |||
112 | logger = logging.getLogger('boards.post.create') |
|
113 | logger = logging.getLogger('boards.post.create') | |
@@ -201,6 +202,8 b' class Post(models.Model, Viewable):' | |||||
201 | url = models.TextField() |
|
202 | url = models.TextField() | |
202 | uid = models.TextField(db_index=True) |
|
203 | uid = models.TextField(db_index=True) | |
203 |
|
204 | |||
|
205 | tripcode = models.CharField(max_length=50, null=True) | |||
|
206 | ||||
204 | def __str__(self): |
|
207 | def __str__(self): | |
205 | return 'P#{}/{}'.format(self.id, self.title) |
|
208 | return 'P#{}/{}'.format(self.id, self.title) | |
206 |
|
209 | |||
@@ -436,3 +439,9 b' class Post(models.Model, Viewable):' | |||||
436 | thread.last_edit_time = self.last_edit_time |
|
439 | thread.last_edit_time = self.last_edit_time | |
437 | thread.save(update_fields=['last_edit_time', 'bumpable']) |
|
440 | thread.save(update_fields=['last_edit_time', 'bumpable']) | |
438 | self.threads.add(opening_post.get_thread()) |
|
441 | self.threads.add(opening_post.get_thread()) | |
|
442 | ||||
|
443 | def get_tripcode_color(self): | |||
|
444 | return self.tripcode[:6] | |||
|
445 | ||||
|
446 | def get_short_tripcode(self): | |||
|
447 | return self.tripcode[:10] No newline at end of file |
@@ -167,7 +167,7 b' p, .br {' | |||||
167 | display: table-cell; |
|
167 | display: table-cell; | |
168 | } |
|
168 | } | |
169 |
|
169 | |||
170 | .post-form input:not([name="image"]), .post-form textarea, .post-form select { |
|
170 | .post-form input:not([name="image"]):not([type="checkbox"]):not([type="submit"]), .post-form textarea, .post-form select { | |
171 | background: #333; |
|
171 | background: #333; | |
172 | color: #fff; |
|
172 | color: #fff; | |
173 | border: solid 1px; |
|
173 | border: solid 1px; | |
@@ -192,7 +192,7 b' p, .br {' | |||||
192 | margin-bottom: 0.5ex; |
|
192 | margin-bottom: 0.5ex; | |
193 | } |
|
193 | } | |
194 |
|
194 | |||
195 | .post-form input[type="submit"], input[type="submit"] { |
|
195 | input[type="submit"] { | |
196 | background: #222; |
|
196 | background: #222; | |
197 | border: solid 2px #fff; |
|
197 | border: solid 2px #fff; | |
198 | color: #fff; |
|
198 | color: #fff; |
@@ -8,6 +8,9 b'' | |||||
8 | <a class="post_id" href="{{ post.get_absolute_url }}">#{{ post.get_absolute_id }}</a> |
|
8 | <a class="post_id" href="{{ post.get_absolute_url }}">#{{ post.get_absolute_id }}</a> | |
9 | <span class="title">{{ post.title }}</span> |
|
9 | <span class="title">{{ post.title }}</span> | |
10 | <span class="pub_time"><time datetime="{{ post.pub_time|date:'c' }}">{{ post.pub_time }}</time></span> |
|
10 | <span class="pub_time"><time datetime="{{ post.pub_time|date:'c' }}">{{ post.pub_time }}</time></span> | |
|
11 | {% if post.tripcode %} | |||
|
12 | <span style="color: #{{post.get_tripcode_color}}">{{ post.get_short_tripcode }}</span> | |||
|
13 | {% endif %} | |||
11 | {% comment %} |
|
14 | {% comment %} | |
12 | Thread death time needs to be shown only if the thread is alredy archived |
|
15 | Thread death time needs to be shown only if the thread is alredy archived | |
13 | and this is an opening post (thread death time) or a post for popup |
|
16 | and this is an opening post (thread death time) or a post for popup |
@@ -151,7 +151,8 b' class AllThreadsView(PostMixin, BaseBoar' | |||||
151 | tags = self.parse_tags_string(tag_strings) |
|
151 | tags = self.parse_tags_string(tag_strings) | |
152 |
|
152 | |||
153 | post = Post.objects.create_post(title=title, text=text, file=file, |
|
153 | post = Post.objects.create_post(title=title, text=text, file=file, | |
154 |
ip=ip, tags=tags, opening_posts=threads |
|
154 | ip=ip, tags=tags, opening_posts=threads, | |
|
155 | tripcode=form.get_tripcode()) | |||
155 |
|
156 | |||
156 | # This is required to update the threads to which posts we have replied |
|
157 | # This is required to update the threads to which posts we have replied | |
157 | # when creating this one |
|
158 | # when creating this one |
@@ -1,3 +1,4 b'' | |||||
|
1 | import hashlib | |||
1 | from django.core.exceptions import ObjectDoesNotExist |
|
2 | from django.core.exceptions import ObjectDoesNotExist | |
2 | from django.http import Http404 |
|
3 | from django.http import Http404 | |
3 | from django.shortcuts import get_object_or_404, render, redirect |
|
4 | from django.shortcuts import get_object_or_404, render, redirect | |
@@ -111,7 +112,8 b' class ThreadView(BaseBoardView, PostMixi' | |||||
111 |
|
112 | |||
112 | post = Post.objects.create_post(title=title, text=text, file=file, |
|
113 | post = Post.objects.create_post(title=title, text=text, file=file, | |
113 | thread=post_thread, ip=ip, |
|
114 | thread=post_thread, ip=ip, | |
114 |
opening_posts=threads |
|
115 | opening_posts=threads, | |
|
116 | tripcode=form.get_tripcode()) | |||
115 | post.notify_clients() |
|
117 | post.notify_clients() | |
116 |
|
118 | |||
117 | if html_response: |
|
119 | if html_response: |
General Comments 0
You need to be logged in to leave comments.
Login now