Skip to content

Commit 4e711c0

Browse files
committed
progress in reviving the moderation queue
askbot_add_osqa_content management command: fixes issue with the arguments
1 parent 57afe9a commit 4e711c0

18 files changed

+316
-200
lines changed

askbot/__init__.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
"""
77
import os
88
import platform
9+
import sys
10+
import traceback
911

1012
VERSION = (0, 11, 3)
1113

12-
default_app_config = 'askbot.apps.AskbotConfig'
14+
default_app_config = 'askbot.apps.AskbotConfig' #pylint: disable=invalid-name
1315

1416
#keys are module names used by python imports,
1517
#values - the package qualifier to use for pip
@@ -30,7 +32,7 @@
3032
'jsonfield': 'jsonfield>=2.0.0',
3133
'jwt': 'pyjwt<=1.7.1',
3234
'keyedcache': 'django-keyedcache3>=1.5.1',
33-
'livesettings': 'django-livesettings3==1.5.0',
35+
'livesettings': 'django-livesettings3==1.5.1',
3436
'markdown2': 'markdown2<=2.3.9',
3537
'mock': 'mock==3.0.5',
3638
'oauth2': 'oauth2<=1.9.0.post1',
@@ -80,18 +82,16 @@ def get_database_engine_name():
8082
independently of the version of django.
8183
This was required for the django 1.0 -> 1.1 migration
8284
"""
83-
from django.conf import settings as django_settings
85+
from django.conf import settings as django_settings #pylint: disable=import-outside-toplevel
8486
return django_settings.DATABASES['default']['ENGINE']
8587

8688

8789
def get_lang_mode():
88-
from django.conf import settings as django_settings
90+
from django.conf import settings as django_settings #pylint: disable=import-outside-toplevel
8991
try:
9092
return django_settings.ASKBOT_LANGUAGE_MODE
91-
except:
92-
import traceback
93+
except AttributeError:
9394
traceback.print_stack()
94-
import sys
9595
sys.exit()
9696

9797

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<div class="empty-content-box">
2+
{% trans %}Moderation queue is empty.{% endtrans %}
3+
</div>
+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<ul class="info-box">
2+
<li>If necessary, select individual posts</li>
3+
<li>Approval of users removes them from the queue and approves ALL of their posts.</li>
4+
<li>Blocking spammers denies them future access and deletes ALL their posts.</li>
5+
{% if settings.IP_MODERATION_ENABLED %}
6+
<li>Blocking IPs denies access by IP address and blocks all accounts using those IPs (and mass deletes content as above).</li>
7+
{% endif %}
8+
</ul>
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{% compress js %}
2+
<script type="text/javascript" src="{{ '/js/user/response_notifs.js'|media }}"></script>
3+
<script type="text/javascript" src="{{ '/js/user/decline_and_explain_menu.js'|media }}"></script>
4+
<script type="text/javascript" src="{{ '/js/user/post_moderation_controls.js'|media }}"></script>
5+
<script type="text/javascript" src="{{ '/js/user/manage_reject_reasons_dialog.js'|media }}"></script>
6+
<script type="text/javascript" src="{{ '/js/user/user_group.js'|media }}"></script>
7+
<script type="text/javascript" src="{{ '/js/user/groups_container.js'|media }}"></script>
8+
<script type="text/javascript" src="{{ '/js/user/group_adder_widget.js'|media }}"></script>
9+
<script type="text/javascript" src="{{ '/js/user/user_groups_editor.js'|media }}"></script>
10+
<script type="text/javascript" src="{{ '/js/user/tweeting.js'|media }}"></script>
11+
<script type="text/javascript" src="{{ '/js/user/user_questions_paginator.js'|media }}"></script>
12+
<script type="text/javascript" src="{{ '/js/user.js'|media }}"></script>
13+
{% endcompress %}
14+
<script type="text/javascript">
15+
(function() {
16+
askbot['urls']['save_post_reject_reason'] = '{{ url('save_post_reject_reason') }}';
17+
askbot['urls']['delete_post_reject_reason'] = '{{ url('delete_post_reject_reason') }}';
18+
{% if request.user.is_administrator_or_moderator() %}
19+
askbot['data']['postRejectReasons'] = [
20+
{% for reason in post_reject_reasons %}
21+
{'id': {{reason.id}}, 'title': '{{reason.title|escapejs}}'},
22+
{% endfor %}
23+
];
24+
{% endif %}
25+
askbot['urls']['moderatePostEdits'] = '{{ url('moderate_post_edits') }}';
26+
var modControls = new PostModerationControls();
27+
modControls.decorate($('body'));
28+
})();
29+
</script>
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<div class="messages">
2+
{% for mod_item in queue %}
3+
<div class="js-message-container">
4+
<div
5+
class="message{% if mod_item.is_new %} highlight new{% else %} seen{% endif %}"
6+
data-message-id="{{ mod_item.id }}"
7+
>
8+
{{ macros.moderation_queue_message(mod_item) }}
9+
</div>
10+
<div class="js-expander">expand</div>
11+
</div>
12+
{% endfor %}
13+
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<div class="moderation-header">
2+
<div class="tools">
3+
<div class="js-approve-block">
4+
<div class="js-label">
5+
{% trans %}first post{% endtrans %}
6+
</div>
7+
<div class="buttons">
8+
<button class="btn approve-posts">{% trans %}approve posts{% endtrans %}</button>
9+
<button class="btn approve-posts-users" id="re_approve_posts_users">{% trans %}approve posts and users{% endtrans %}</button>
10+
</div>
11+
</div>
12+
<div class="js-decline-block">
13+
<div class="js-label">
14+
{% trans %}visible posts{% endtrans %}
15+
</div>
16+
<div class="buttons">
17+
<div class="select-decline-reason-btn js-dropdown-menu decline-reasons-menu">
18+
<button class="btn js-dropdown-trigger">
19+
{% trans %}decline and explain why{% endtrans %}
20+
<span class="with-caret-down-icon"></span>
21+
</button>
22+
<ul class="js-dropdown-target">
23+
{% for reason in post_reject_reasons %}
24+
<li>
25+
<a class="decline-with-reason" data-reason-id="{{ reason.id }}">{{ reason.title|escape }}</a>
26+
</li>
27+
{% endfor %}
28+
<li>
29+
<a class="manage-reasons">{% trans %}add/manage reject reasons{% endtrans %}</a>
30+
</li>
31+
</ul>
32+
</div>
33+
<button class="btn btn-danger decline-block-users">{% trans %}block spammers{% endtrans %}</button>
34+
{% if settings.IP_MODERATION_ENABLED %}
35+
<button class="btn btn-danger decline-block-users-ips">{% trans %}block spammers and IPs{% endtrans %}</button>
36+
{% endif %}
37+
</div>
38+
</div>
39+
</div>
40+
{% include "moderation/info_box.html" %}
41+
</div>
42+
{% include "moderation/manage_reject_reasons_dialog.html" %}
43+
<div class="action-status"><span></span></div>

askbot/jinja2/moderation/queue.html

+10-96
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,18 @@
11
{% extends "one_column_body.html" %}
22
{% import "macros.html" as macros %}
33
{% block title %}
4-
{% trans %}Moderation queue{% endtrans %}
4+
{% trans %}Moderation queue{% endtrans %}
55
{% endblock %}
6-
{% block page_class %}moderation-queue-page{% endblock %}
6+
{% block layout_class %}moderation-queue-page{% endblock %}
77
{% block content %}
8-
<h1 class="section-title">{% trans %}Moderation queue{% endtrans %}</h1>
9-
<div class="moderation-header">
10-
<div class="tools">
11-
<div class="js-approve-block">
12-
<div class="js-label">
13-
{% trans %}first post{% endtrans %}
14-
</div>
15-
<div class="buttons">
16-
<a class="btn approve-posts">{% trans %}approve posts{% endtrans %}</a>
17-
<a class="btn approve-posts-users" id="re_approve_posts_users">{% trans %}approve posts and users{% endtrans %}</a>
18-
</div>
19-
</div>
20-
<div class="js-decline-block">
21-
<div class="js-label">
22-
{% trans %}visible posts{% endtrans %}
23-
</div>
24-
<div class="buttons">
25-
<div class="btn-group dropdown decline-reasons-menu">
26-
<span class="btn btn-info dropdown-toggle">
27-
<span>{% trans %}decline and explain why{% endtrans %}</span>
28-
<span class="caret"></span>
29-
</span>
30-
<ul class="dropdown-menu">
31-
{% for reason in post_reject_reasons %}
32-
<li>
33-
<a class="decline-with-reason" data-reason-id="{{ reason.id }}">{{ reason.title|escape }}</a>
34-
</li>
35-
{% endfor %}
36-
<li>
37-
<a class="manage-reasons">{% trans %}add/manage reject reasons{% endtrans %}</a>
38-
</li>
39-
</ul>
40-
</div>
41-
<a class="btn btn-danger decline-block-users">{% trans %}block spammers{% endtrans %}</a>
42-
{% if settings.IP_MODERATION_ENABLED %}
43-
<a class="btn btn-danger decline-block-users-ips">{% trans %}block spammers and IPs{% endtrans %}</a>
44-
{% endif %}
45-
</div>
46-
</div>
47-
</div>
48-
<ul class="mod-queue-info">
49-
<li>If necessary, select individual posts</li>
50-
<li>Approval of users removes them from the queue and approves ALL of their posts.</li>
51-
<li>Blocking spammers denies them future access and deletes ALL their posts.</li>
52-
{% if settings.IP_MODERATION_ENABLED %}
53-
<li>Blocking IPs denies access by IP address and blocks all accounts using those IPs (and mass deletes content as above).</li>
54-
{% endif %}
55-
</ul>
56-
</div>
57-
{% include "moderation/manage_reject_reasons_dialog.html" %}
58-
<div class="action-status"><span></span></div>
59-
<div class="messages">
60-
{% for message in messages %}
61-
<div class="js-message-container">
62-
<div
63-
class="message{% if message.is_new %} highlight new{% else %} seen{% endif %}"
64-
data-message-id="{{ message.id }}"
65-
>
66-
{{ macros.moderation_queue_message(message) }}
67-
</div>
68-
<div class="js-expander">expand</div>
69-
</div>
70-
{% endfor %}
71-
</div>
8+
<h1>{% trans %}Moderation queue{% endtrans %}</h1>
9+
{% if queue %}
10+
{% include "moderation/moderation_header.html" %}
11+
{% include "moderation/messages.html" %}
12+
{% else %}
13+
{% include "moderation/blank_state.html" %}
14+
{% endif %}
7215
{% endblock %}
7316
{% block endjs %}
74-
{# todo: factor out moderation.js file #}
75-
{% compress js %}
76-
<script type="text/javascript" src="{{ '/js/user/response_notifs.js'|media }}"></script>
77-
<script type="text/javascript" src="{{ '/js/user/decline_and_explain_menu.js'|media }}"></script>
78-
<script type="text/javascript" src="{{ '/js/user/post_moderation_controls.js'|media }}"></script>
79-
<script type="text/javascript" src="{{ '/js/user/manage_reject_reasons_dialog.js'|media }}"></script>
80-
<script type="text/javascript" src="{{ '/js/user/user_group.js'|media }}"></script>
81-
<script type="text/javascript" src="{{ '/js/user/groups_container.js'|media }}"></script>
82-
<script type="text/javascript" src="{{ '/js/user/group_adder_widget.js'|media }}"></script>
83-
<script type="text/javascript" src="{{ '/js/user/user_groups_editor.js'|media }}"></script>
84-
<script type="text/javascript" src="{{ '/js/user/tweeting.js'|media }}"></script>
85-
<script type="text/javascript" src="{{ '/js/user/user_questions_paginator.js'|media }}"></script>
86-
<script type="text/javascript" src="{{ '/js/user.js'|media }}"></script>
87-
{% endcompress %}
88-
<script type="text/javascript">
89-
(function() {
90-
askbot['urls']['save_post_reject_reason'] = '{{ url('save_post_reject_reason') }}';
91-
askbot['urls']['delete_post_reject_reason'] = '{{ url('delete_post_reject_reason') }}';
92-
{% if request.user.is_administrator_or_moderator() %}
93-
askbot['data']['postRejectReasons'] = [
94-
{% for reason in post_reject_reasons %}
95-
{'id': {{reason.id}}, 'title': '{{reason.title|escapejs}}'},
96-
{% endfor %}
97-
];
98-
{% endif %}
99-
askbot['urls']['moderatePostEdits'] = '{{ url('moderate_post_edits') }}';
100-
var modControls = new PostModerationControls();
101-
modControls.decorate($('body'));
102-
})();
103-
</script>
17+
{% include "moderation/javascript.html" %}
10418
{% endblock %}

0 commit comments

Comments
 (0)