Still lot of forum improvements, both rights and cosmetic

This commit is contained in:
Skia 2017-02-24 15:55:50 +01:00
parent 10d96de385
commit fe07ee0963
6 changed files with 86 additions and 23 deletions

View File

@ -414,23 +414,43 @@ textarea {
.message { .message {
padding: 2px; padding: 2px;
margin: 2px; margin: 2px;
background: skyblue; background: #eff7ff;
}
.unread {
background: #e6ddad;
} }
.message h5 { .message h5 {
font-size: 100%; font-size: 100%;
} }
.unread {
background: #d8e7f3;
}
.msg_author.deleted {
background: #ffcfcf;
}
.msg_content.deleted {
background: #ffefef;
}
.msg_content {
display: inline-block;
width: 80%;
vertical-align: top;
}
.msg_author { .msg_author {
display: inline-block; display: inline-block;
width: 19%; width: 19%;
text-align: center; text-align: center;
background: #d8e7f3;
} }
.msg_author img { .msg_author img {
max-width: 80%; max-width: 70%;
margin: 0px auto; margin: 0px auto;
} }
.msg_meta {
font-size: small;
list-style-type: none;
}
.msg_meta li {
padding: 2px;
margin: 2px;
}
/*------------------------------SAS------------------------------------*/ /*------------------------------SAS------------------------------------*/
.album { .album {
display: inline-block; display: inline-block;

View File

@ -126,7 +126,7 @@ class ForumTopic(models.Model):
ordering = ['-id'] # TODO: add date message ordering ordering = ['-id'] # TODO: add date message ordering
def is_owned_by(self, user): def is_owned_by(self, user):
return self.forum.is_owned_by(user) or user.id == self.author.id return self.forum.is_owned_by(user)
def can_be_edited_by(self, user): def can_be_edited_by(self, user):
return user.can_edit(self.forum) return user.can_edit(self.forum)
@ -169,10 +169,10 @@ class ForumMessage(models.Model):
return user.can_edit(self.topic.forum) return user.can_edit(self.topic.forum)
def can_be_viewed_by(self, user): def can_be_viewed_by(self, user):
return user.can_view(self.topic) return (not self.deleted and user.can_view(self.topic))
def can_be_moderated_by(self, user): def can_be_moderated_by(self, user):
return self.topic.forum.is_owned_by(user) return self.topic.forum.is_owned_by(user) or user.id == self.author.id
def get_absolute_url(self): def get_absolute_url(self):
return self.topic.get_absolute_url() + "#msg_" + str(self.id) return self.topic.get_absolute_url() + "#msg_" + str(self.id)

View File

@ -20,12 +20,45 @@
{% endif %} {% endif %}
<a href="{{ url('forum:new_topic', forum_id=forum.id) }}">{% trans %}New topic{% endtrans %}</a> <a href="{{ url('forum:new_topic', forum_id=forum.id) }}">{% trans %}New topic{% endtrans %}</a>
</p> </p>
{% if forum.children.exists() %}
<div>
<div class="ib w_big">
Title
</div>
<div class="ib w_small">
<div class="ib w_medium">
Topics
</div>
<div class="ib w_small">
Last message
</div>
</div>
</div>
{% for f in forum.children.all() %} {% for f in forum.children.all() %}
{{ display_forum(f, user) }} {{ display_forum(f, user) }}
{% endfor %} {% endfor %}
{% endif %}
{% if topics %}
<div>
<div class="ib w_medium">
Title
</div>
<div class="ib w_medium">
<div class="ib w_small">
Author
</div>
<div class="ib w_medium">
Messages
</div>
<div class="ib w_small">
Last message
</div>
</div>
</div>
{% for t in topics %} {% for t in topics %}
{{ display_topic(t, user) }} {{ display_topic(t, user) }}
{% endfor %} {% endfor %}
{% endif %}
{% endblock %} {% endblock %}

View File

@ -47,7 +47,7 @@
<h5>{{ topic.title }}</h5> <h5>{{ topic.title }}</h5>
<p>{{ topic.description }}</p> <p>{{ topic.description }}</p>
</a> </a>
{% if user.is_owner(topic) %} {% if user.can_edit(topic) %}
<div class="ib" style="text-align: center;"> <div class="ib" style="text-align: center;">
<a href="{{ url('forum:edit_topic', topic_id=topic.id) }}">{% trans %}Edit{% endtrans %}</a> <a href="{{ url('forum:edit_topic', topic_id=topic.id) }}">{% trans %}Edit{% endtrans %}</a>
</div> </div>

View File

@ -37,23 +37,23 @@
<p>{{ topic.description }}</p> <p>{{ topic.description }}</p>
<p><a href="{{ url('forum:new_message', topic_id=topic.id) }}">Reply</a></p> <p><a href="{{ url('forum:new_message', topic_id=topic.id) }}">Reply</a></p>
{% for m in topic.messages.select_related('author__profile_pict').all() %} {% for m in topic.messages.select_related('author__avatar_pict').all() %}
{% if user.can_view(m) %}
{% if m.id >= first_unread_message_id %} {% if m.id >= first_unread_message_id %}
<div id="msg_{{ m.id }}" class="message unread"> <div id="msg_{{ m.id }}" class="message unread">
{% else %} {% else %}
<div id="msg_{{ m.id }}" class="message"> <div id="msg_{{ m.id }}" class="message">
{% endif %} {% endif %}
<div class="msg_author"> <div class="msg_author {% if m.deleted %}deleted{% endif %}">
{% if m.author.profile_pict %} {% if m.author.avatar_pict %}
<img src="{{ m.author.profile_pict.get_download_url() }}" alt="{% trans %}Profile{% endtrans %}" id="picture" /> <img src="{{ m.author.avatar_pict.get_download_url() }}" alt="{% trans %}Profile{% endtrans %}" id="picture" />
{% else %} {% else %}
<img src="{{ static('core/img/unknown.jpg') }}" alt="{% trans %}Profile{% endtrans %}" id="picture" /> <img src="{{ static('core/img/unknown.jpg') }}" alt="{% trans %}Profile{% endtrans %}" id="picture" />
{% endif %} {% endif %}
<br/> <br/>
<strong>{{ user_profile_link(m.author) }}</strong> <strong><a href="{{ m.author.get_absolute_url() }}">{{ m.author.get_short_name() }}</a></strong>
</div> </div>
<div {% if m.id == first_unread_message_id %}id="first_unread"{% endif %} style="display: inline-block; width: <div class="msg_content {% if m.deleted %}deleted{% endif %}" {% if m.id == first_unread_message_id %}id="first_unread"{% endif %}>
80%; vertical-align: top; {% if m.deleted %}background: #FFAAAA;{% endif %}">
<div style="display: inline-block; width: 74%;"> <div style="display: inline-block; width: 74%;">
{% if m.title %} {% if m.title %}
<h5>{{ m.title }}</h5> <h5>{{ m.title }}</h5>
@ -73,24 +73,26 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
<br/> <br/>
<span>{{ m.date|date(DATETIME_FORMAT) }} {{ m.date|time(DATETIME_FORMAT) }}</span> <span>{{ m.date|localtime|date(DATETIME_FORMAT) }} {{ m.date|localtime|time(DATETIME_FORMAT) }}</span>
</div> </div>
<hr> <hr>
<div> <div>
{{ m.message|markdown }} {{ m.message|markdown }}
</div> </div>
{% if m.can_be_moderated_by(user) %} {% if m.can_be_moderated_by(user) %}
<ul> <ul class="msg_meta">
{% for meta in m.metas.select_related('user').all() %} {% for meta in m.metas.select_related('user').order_by('id') %}
<li>{{ meta.get_action_display() }} {{ meta.user.get_display_name() }} <li style="background: {% if m.author == meta.user %}#bfffbf{% else %}#ffffbf{% endif %}">
{% trans %} at {% endtrans %}{{ meta.date|time(DATETIME_FORMAT) }} {{ meta.get_action_display() }} {{ meta.user.get_display_name() }}
{% trans %} the {% endtrans %}{{ meta.date|date(DATETIME_FORMAT)}}</li> {% trans %} at {% endtrans %}{{ meta.date|localtime|time(DATETIME_FORMAT) }}
{% trans %} the {% endtrans %}{{ meta.date|localtime|date(DATETIME_FORMAT)}}</li>
{% endfor %} {% endfor %}
</ul> </ul>
{% endif %} {% endif %}
</div> </div>
</div> </div>
{{ m.mark_as_read(user) or "" }} {{ m.mark_as_read(user) or "" }}
{% endif %}
{% endfor %} {% endfor %}
<p><a href="{{ url('forum:new_message', topic_id=topic.id) }}">Reply</a></p> <p><a href="{{ url('forum:new_message', topic_id=topic.id) }}">Reply</a></p>
{% endblock %} {% endblock %}

View File

@ -58,6 +58,8 @@ class ForumCreateView(CanCreateMixin, CreateView):
parent = Forum.objects.filter(id=self.request.GET['parent']).first() parent = Forum.objects.filter(id=self.request.GET['parent']).first()
init['parent'] = parent init['parent'] = parent
init['owner_club'] = parent.owner_club init['owner_club'] = parent.owner_club
init['edit_groups'] = parent.edit_groups.all()
init['view_groups'] = parent.view_groups.all()
except: pass except: pass
return init return init
@ -93,9 +95,15 @@ class ForumDetailView(CanViewMixin, DetailView):
kwargs['topics'] = self.object.topics.annotate(models.Max('messages__date')).order_by('-messages__date__max') kwargs['topics'] = self.object.topics.annotate(models.Max('messages__date')).order_by('-messages__date__max')
return kwargs return kwargs
class ForumTopicCreateView(CanCreateMixin, CreateView): class TopicForm(forms.ModelForm):
class Meta:
model = ForumMessage model = ForumMessage
fields = ['title', 'message'] fields = ['title', 'message']
title = forms.CharField(required=True)
class ForumTopicCreateView(CanCreateMixin, CreateView):
model = ForumMessage
form_class = TopicForm
template_name = "core/create.jinja" template_name = "core/create.jinja"
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):