summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2014-07-11 09:59:38 -0300
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2014-07-11 09:59:38 -0300
commit03e84e6853da0ca4fa0158c88fc10bc4c6978a1b (patch)
treeb8d4f587acad10c2a35ed60fa108779daaf1a277
parent1988db81a4e338c77f0a7b0d10459a68bfdc6a9f (diff)
downloadaskbot-03e84e6853da0ca4fa0158c88fc10bc4c6978a1b.tar.gz
askbot-03e84e6853da0ca4fa0158c88fc10bc4c6978a1b.tar.bz2
askbot-03e84e6853da0ca4fa0158c88fc10bc4c6978a1b.zip
update item count upon changes in the moderator queue, improve layout, show user email/ip address
-rw-r--r--askbot/media/js/user.js9
-rw-r--r--askbot/media/style/style.css10
-rw-r--r--askbot/media/style/style.less7
-rw-r--r--askbot/templates/macros.html16
-rw-r--r--askbot/templates/moderation/queue.html16
-rw-r--r--askbot/templates/user_inbox/base.html4
-rw-r--r--askbot/views/moderation.py3
-rw-r--r--askbot/views/users.py33
8 files changed, 81 insertions, 17 deletions
diff --git a/askbot/media/js/user.js b/askbot/media/js/user.js
index b2ff5658..d79a3986 100644
--- a/askbot/media/js/user.js
+++ b/askbot/media/js/user.js
@@ -120,11 +120,15 @@ PostModerationControls.prototype.removeEntries = function(entryIds) {
var id = entryIds[i];
var elem = this._element.find('.message[data-message-id="' + id + '"]');
if (elem.length) {
- elem.fadeOut('fast');
+ elem.fadeOut('fast', function() { elem.remove() });
}
}
};
+PostModerationControls.prototype.setEntryCount = function(count) {
+ this._entryCount.html(count);
+};
+
PostModerationControls.prototype.getCheckBoxes = function() {
return this._element.find('.messages input[type="checkbox"]');
};
@@ -174,6 +178,7 @@ PostModerationControls.prototype.getModHandler = function(action, items, optReas
success: function(response_data){
if (response_data['success'] == true){
me.removeEntries(response_data['memo_ids']);
+ me.setEntryCount(response_data['memo_count']);
}
if (response_data['message']) {
me.showMessage(response_data['message']);
@@ -195,6 +200,8 @@ PostModerationControls.prototype.decorate = function(element) {
this._element = element;
this._notification = element.find('.action-status span');
this.hideMessage();
+
+ this._entryCount = $('.mod-memo-count');
//approve posts button
var button = $('.approve-posts');
setupButtonEventHandlers(button, this.getModHandler('approve', ['posts']));
diff --git a/askbot/media/style/style.css b/askbot/media/style/style.css
index a22c5e48..928b1c00 100644
--- a/askbot/media/style/style.css
+++ b/askbot/media/style/style.css
@@ -2909,6 +2909,13 @@ ul#related-tags li {
.user-profile-page.inbox-flags .messages {
margin-bottom: 14px;
}
+.user-profile-page.inbox-flags .message {
+ border-bottom: 1px solid #ccc;
+ padding: 12px 0;
+}
+.user-profile-page.inbox-flags .message:last-child {
+ border: none;
+}
.user-profile-page.inbox-flags .select-items {
margin-bottom: 10px;
}
@@ -4290,6 +4297,9 @@ textarea.tipped-input {
width: 515px;
font-style: normal;
}
+.alert .close {
+ right: -38px;
+}
.tag-subscriptions {
border-spacing: 10px;
border-collapse: separate;
diff --git a/askbot/media/style/style.less b/askbot/media/style/style.less
index e0ea5942..1de3698d 100644
--- a/askbot/media/style/style.less
+++ b/askbot/media/style/style.less
@@ -3041,6 +3041,13 @@ ul#related-tags li {
.messages {
margin-bottom: 14px;
}
+ .message {
+ border-bottom: 1px solid #ccc;
+ padding: 12px 0;
+ }
+ .message:last-child {
+ border: none;
+ }
.select-items {
margin-bottom: 10px;
}
diff --git a/askbot/templates/macros.html b/askbot/templates/macros.html
index b6f64401..d6845c08 100644
--- a/askbot/templates/macros.html
+++ b/askbot/templates/macros.html
@@ -18,6 +18,22 @@
</div>
{%- endmacro -%}
+{%- macro moderation_queue_message(message) -%}
+<div class="message-details" data-message-id="{{ message.id }}">
+ <input type="checkbox" />
+ {{ gravatar(message.user, 24) }}
+ <a class="username" href="{{ message.user.get_absolute_url() }}">{{ message.user.username|escape }}</a> |
+ {% if message['memo_type'] == 'edit' %}
+ <a href="mailto:{{ message.user.email }}">{{ message.user.email }}</a> |
+ ip=<span class="ip-addr">{{ message.ip_addr }}</span> |
+ {% endif %}
+ <a class="forum-post-link" href="{{ message.url }}">{{ message.message_type }}</a>
+ ({{ timeago(message.timestamp) }})
+ {#<div class="snippet">{{ message.snippet }}</div>#}
+ <div class="post-content">{{ message.content }}</div>
+</div>
+{%- endmacro -%}
+
{%- macro post_vote_buttons(post = None) -%}
<div id="{{post.post_type}}-img-upvote-{{ post.id }}"
class="{{post.post_type}}-img-upvote post-vote upvote">
diff --git a/askbot/templates/moderation/queue.html b/askbot/templates/moderation/queue.html
index a0789a6d..772aa48c 100644
--- a/askbot/templates/moderation/queue.html
+++ b/askbot/templates/moderation/queue.html
@@ -44,13 +44,17 @@
data-message-id="{{ message.id }}"
>
{#<h2>"{{ message.title.strip()|escape}}"</h2>#}
- {{ macros.inbox_message_snippet(message) }}
- {# "nested" messages are further response messages to the same question #}
- {% for followup_message in message.followup_messages %}
- {{ macros.inbox_message_snippet(followup_message) }}
- {% endfor %}
+ {{ macros.moderation_queue_message(message) }}
</div>
- <div class="clearfix"></div>
+ {# "nested" messages are further response messages to the same question #}
+ {% for followup_message in message.followup_messages %}
+ <div
+ class="message{% if followup_message.is_new %} highlight new{% else %} seen{% endif %}"
+ data-message-id="{{ followup_message.id }}"
+ >
+ {{ macros.moderation_queue_message(followup_message) }}
+ </div>
+ {% endfor %}
{% endfor %}
</div>
{% endblock %}
diff --git a/askbot/templates/user_inbox/base.html b/askbot/templates/user_inbox/base.html
index 0bfbf5e4..4687c62a 100644
--- a/askbot/templates/user_inbox/base.html
+++ b/askbot/templates/user_inbox/base.html
@@ -22,14 +22,14 @@
<a href="{{request.user.get_absolute_url()}}?sort=inbox&section=forum"
{% if inbox_section == 'forum' %}class="on"{% endif %}
>
- {% trans %}forum responses ({{re_count}}){% endtrans -%}
+ {% trans %}forum responses (<span class="response-count">{{re_count}}</span>){% endtrans -%}
</a>
{% endif %}
{% if flags_count > 0 %}{{ sep() }}
<a href="{{request.user.get_absolute_url()}}?sort=inbox&section=flags"
{% if inbox_section == 'flags' %}class="on"{% endif %}
>
- {% trans %}flagged items ({{flags_count}}){% endtrans %}
+ {% trans %}flagged items (<span class="mod-memo-count">{{flags_count}}</span>){% endtrans %}
</a>
{% endif %}
{% if group_join_requests_count %}{{ sep() }}
diff --git a/askbot/views/moderation.py b/askbot/views/moderation.py
index a27e8a79..fc88210a 100644
--- a/askbot/views/moderation.py
+++ b/askbot/views/moderation.py
@@ -209,7 +209,7 @@ def moderate_post_edits(request):
ips_message = ungettext('%d ip blocked', '%d ips blocked', num_ips) % num_ips
result['message'] = concat_messages(result['message'], ips_message)
- result['memo_ids'] = list(memo_set.values_list('id', flat=True))
+ result['memo_ids'] = [memo.id for memo in memo_set]#why values_list() fails here?
result['message'] = force_text(result['message'])
#delete items from the moderation queue
@@ -221,4 +221,5 @@ def moderate_post_edits(request):
memo_set.delete()
acts.delete()
request.user.update_response_counts()
+ result['memo_count'] = request.user.get_notifications(MOD_ACTIVITY_TYPES).count()
return result
diff --git a/askbot/views/users.py b/askbot/views/users.py
index 09c4e987..83aed098 100644
--- a/askbot/views/users.py
+++ b/askbot/views/users.py
@@ -788,17 +788,36 @@ def user_responses(request, user, context):
for memo in memo_set:
obj = memo.activity.content_object
if obj is None:
+ memo.activity.delete()
continue#a temp plug due to bug in the comment deletion
+
+ act = memo.activity
+ if act.activity_type == const.TYPE_ACTIVITY_MARK_OFFENSIVE:
+ #todo: two issues here - flags are stored differently
+ #from activity of new posts and edits
+ #second issue: on posts with many edits we don't know whom to block
+ act_user = act.content_object.author
+ act_message = _('post was flagged as offensive')
+ act_type = 'flag'
+ ip_addr = None
+ else:
+ act_user = act.user
+ act_message = act.get_activity_type_display()
+ act_type = 'edit'
+ ip_addr = act.content_object.ip_addr
+
response = {
'id': memo.id,
- 'timestamp': memo.activity.active_at,
- 'user': memo.activity.user,
+ 'timestamp': act.active_at,
+ 'user': act_user,
+ 'ip_addr': ip_addr,
'is_new': memo.is_new(),
- 'url': memo.activity.get_absolute_url(),
- 'snippet': memo.activity.get_snippet(),
- 'title': memo.activity.question.thread.title,
- 'message_type': memo.activity.get_activity_type_display(),
- 'question_id': memo.activity.question.id,
+ 'url': act.get_absolute_url(),
+ 'snippet': act.get_snippet(),
+ 'title': act.question.thread.title,
+ 'message_type': act_message,
+ 'memo_type': act_type,
+ 'question_id': act.question.id,
'followup_messages': list(),
'content': obj.html or obj.text,
}