Show More
@@ -0,0 +1,20 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', '0025_auto_20150825_2049'), | |||
|
11 | ] | |||
|
12 | ||||
|
13 | operations = [ | |||
|
14 | migrations.AddField( | |||
|
15 | model_name='post', | |||
|
16 | name='opening', | |||
|
17 | field=models.BooleanField(default=False), | |||
|
18 | preserve_default=False, | |||
|
19 | ), | |||
|
20 | ] |
@@ -0,0 +1,22 b'' | |||||
|
1 | # -*- coding: utf-8 -*- | |||
|
2 | from __future__ import unicode_literals | |||
|
3 | ||||
|
4 | from django.db import migrations | |||
|
5 | ||||
|
6 | ||||
|
7 | class Migration(migrations.Migration): | |||
|
8 | ||||
|
9 | def build_opening_flag(apps, schema_editor): | |||
|
10 | Post = apps.get_model('boards', 'Post') | |||
|
11 | for post in Post.objects.all(): | |||
|
12 | op = Post.objects.filter(threads__in=[post.thread]).order_by('pub_time').first() | |||
|
13 | post.opening = op.id == post.id | |||
|
14 | post.save(update_fields=['opening']) | |||
|
15 | ||||
|
16 | dependencies = [ | |||
|
17 | ('boards', '0026_post_opening'), | |||
|
18 | ] | |||
|
19 | ||||
|
20 | operations = [ | |||
|
21 | migrations.RunPython(build_opening_flag), | |||
|
22 | ] |
@@ -20,7 +20,7 b' from boards import utils' | |||||
20 | from boards.models.post.export import get_exporter, DIFF_TYPE_JSON |
|
20 | from boards.models.post.export import get_exporter, DIFF_TYPE_JSON | |
21 | from boards.models.user import Notification, Ban |
|
21 | from boards.models.user import Notification, Ban | |
22 | import boards.models.thread |
|
22 | import boards.models.thread | |
23 |
|
23 | from boards.utils import cached_result | ||
24 |
|
24 | |||
25 | APP_LABEL_BOARDS = 'boards' |
|
25 | APP_LABEL_BOARDS = 'boards' | |
26 |
|
26 | |||
@@ -106,7 +106,8 b' class PostManager(models.Manager):' | |||||
106 | poster_ip=ip, |
|
106 | poster_ip=ip, | |
107 | thread=thread, |
|
107 | thread=thread, | |
108 | last_edit_time=posting_time, |
|
108 | last_edit_time=posting_time, | |
109 |
tripcode=tripcode |
|
109 | tripcode=tripcode, | |
|
110 | opening=new_thread) | |||
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') | |
@@ -202,6 +203,7 b' class Post(models.Model, Viewable):' | |||||
202 | uid = models.TextField(db_index=True) |
|
203 | uid = models.TextField(db_index=True) | |
203 |
|
204 | |||
204 | tripcode = models.CharField(max_length=50, null=True) |
|
205 | tripcode = models.CharField(max_length=50, null=True) | |
|
206 | opening = models.BooleanField() | |||
205 |
|
207 | |||
206 | def __str__(self): |
|
208 | def __str__(self): | |
207 | return 'P#{}/{}'.format(self.id, self.title) |
|
209 | return 'P#{}/{}'.format(self.id, self.title) | |
@@ -241,7 +243,7 b' class Post(models.Model, Viewable):' | |||||
241 | Checks if this is an opening post or just a reply. |
|
243 | Checks if this is an opening post or just a reply. | |
242 | """ |
|
244 | """ | |
243 |
|
245 | |||
244 | return self.get_thread().get_opening_post_id() == self.id |
|
246 | return self.opening | |
245 |
|
247 | |||
246 | def get_absolute_url(self): |
|
248 | def get_absolute_url(self): | |
247 | if self.url: |
|
249 | if self.url: | |
@@ -271,12 +273,6 b' class Post(models.Model, Viewable):' | |||||
271 | """ |
|
273 | """ | |
272 |
|
274 | |||
273 | thread = self.get_thread() |
|
275 | thread = self.get_thread() | |
274 | is_opening = kwargs.get(PARAMETER_IS_OPENING, self.is_opening()) |
|
|||
275 |
|
||||
276 | if is_opening: |
|
|||
277 | opening_post_id = self.id |
|
|||
278 | else: |
|
|||
279 | opening_post_id = thread.get_opening_post_id() |
|
|||
280 |
|
276 | |||
281 | css_class = 'post' |
|
277 | css_class = 'post' | |
282 | if thread.archived: |
|
278 | if thread.archived: | |
@@ -291,10 +287,9 b' class Post(models.Model, Viewable):' | |||||
291 |
|
287 | |||
292 | params.update({ |
|
288 | params.update({ | |
293 | PARAMETER_POST: self, |
|
289 | PARAMETER_POST: self, | |
294 | PARAMETER_IS_OPENING: is_opening, |
|
290 | PARAMETER_IS_OPENING: self.is_opening(), | |
295 | PARAMETER_THREAD: thread, |
|
291 | PARAMETER_THREAD: thread, | |
296 | PARAMETER_CSS_CLASS: css_class, |
|
292 | PARAMETER_CSS_CLASS: css_class, | |
297 | PARAMETER_OP_ID: opening_post_id, |
|
|||
298 | }) |
|
293 | }) | |
299 |
|
294 | |||
300 | return render_to_string('boards/post.html', params) |
|
295 | return render_to_string('boards/post.html', params) |
@@ -151,7 +151,8 b' class Thread(models.Model):' | |||||
151 | """ |
|
151 | """ | |
152 |
|
152 | |||
153 | query = Post.objects.filter(threads__in=[self]) |
|
153 | query = Post.objects.filter(threads__in=[self]) | |
154 |
query = query.order_by('pub_time').prefetch_related( |
|
154 | query = query.order_by('pub_time').prefetch_related( | |
|
155 | 'images', 'thread', 'threads', 'attachments') | |||
155 | if view_fields_only: |
|
156 | if view_fields_only: | |
156 | query = query.defer('poster_ip') |
|
157 | query = query.defer('poster_ip') | |
157 | return query.all() |
|
158 | return query.all() |
@@ -93,7 +93,7 b'' | |||||
93 |
|
93 | |||
94 | {% for thread in threads %} |
|
94 | {% for thread in threads %} | |
95 | <div class="thread"> |
|
95 | <div class="thread"> | |
96 |
{% post_view thread.get_opening_post moderator=moderator |
|
96 | {% post_view thread.get_opening_post moderator=moderator thread=thread truncated=True need_open_link=True %} | |
97 | {% if not thread.archived %} |
|
97 | {% if not thread.archived %} | |
98 | {% with last_replies=thread.get_last_replies %} |
|
98 | {% with last_replies=thread.get_last_replies %} | |
99 | {% if last_replies %} |
|
99 | {% if last_replies %} | |
@@ -108,7 +108,7 b'' | |||||
108 | {% endwith %} |
|
108 | {% endwith %} | |
109 | <div class="last-replies"> |
|
109 | <div class="last-replies"> | |
110 | {% for post in last_replies %} |
|
110 | {% for post in last_replies %} | |
111 |
{% post_view post |
|
111 | {% post_view post moderator=moderator truncated=True %} | |
112 | {% endfor %} |
|
112 | {% endfor %} | |
113 | </div> |
|
113 | </div> | |
114 | {% endif %} |
|
114 | {% endif %} |
@@ -57,16 +57,12 b'' | |||||
57 | Post images. Currently only 1 image can be posted and shown, but post model |
|
57 | Post images. Currently only 1 image can be posted and shown, but post model | |
58 | supports multiple. |
|
58 | supports multiple. | |
59 | {% endcomment %} |
|
59 | {% endcomment %} | |
60 |
{% |
|
60 | {% for image in post.images.all %} | |
61 | {% with post.images.first as image %} |
|
|||
62 |
|
|
61 | {{ image.get_view|safe }} | |
63 |
|
|
62 | {% endfor %} | |
64 | {% endif %} |
|
63 | {% for file in post.attachments.all %} | |
65 | {% if post.attachments.exists %} |
|
|||
66 | {% with post.attachments.first as file %} |
|
|||
67 |
|
|
64 | {{ file.get_view|safe }} | |
68 |
|
|
65 | {% endfor %} | |
69 | {% endif %} |
|
|||
70 | {% comment %} |
|
66 | {% comment %} | |
71 | Post message (text) |
|
67 | Post message (text) | |
72 | {% endcomment %} |
|
68 | {% endcomment %} |
General Comments 0
You need to be logged in to leave comments.
Login now