Просмотр исходного кода

Add delete report functionality

sh4nks 8 лет назад
Родитель
Сommit
8f8cb588dc

+ 32 - 1
flaskbb/management/views.py

@@ -384,7 +384,7 @@ def unread_reports():
         order_by(Report.id.desc()).\
         paginate(page, flaskbb_config['USERS_PER_PAGE'], False)
 
-    return render_template("management/unread_reports.html", reports=reports)
+    return render_template("management/reports.html", reports=reports)
 
 
 @management.route("/reports/<int:report_id>/markread", methods=["POST"])
@@ -444,6 +444,37 @@ def report_markread(report_id=None):
     return redirect(url_for("management.reports"))
 
 
+@management.route("/reports/<int:report_id>/delete", methods=["POST"])
+@management.route("/reports/delete", methods=["POST"])
+@allows.requires(IsAtleastModerator)
+def delete_report(report_id=None):
+    if request.is_xhr:
+        ids = request.get_json()["ids"]
+        data = []
+
+        for report in Report.query.filter(Report.id.in_(ids)).all():
+            if report.delete():
+                data.append({
+                    "id": report.id,
+                    "type": "delete",
+                    "reverse": False,
+                    "reverse_name": None,
+                    "reverse_url": None
+                })
+
+        return jsonify(
+            message="{} reports deleted.".format(len(data)),
+            category="success",
+            data=data,
+            status=200
+        )
+
+    report = Report.query.filter_by(id=report_id).first_or_404()
+    report.delete()
+    flash(_("Report deleted."), "success")
+    return redirect(url_for("management.reports"))
+
+
 # Groups
 @management.route("/groups")
 @allows.requires(IsAdmin)

+ 60 - 13
flaskbb/templates/management/reports.html

@@ -18,8 +18,8 @@
 <div class="col-md-3 settings-col">
     <div class="nav-sidebar">
         <ul class="nav">
-            {{ navlink('management.unread_reports', _("Show unread reports")) }}
-            {{ navlink('management.reports', _("Show all reports")) }}
+            {{ navlink('management.reports', _("Show all Reports")) }}
+            {{ navlink('management.unread_reports', _("Show unread Reports")) }}
         </ul>
     </div>
 </div>
@@ -28,37 +28,84 @@
 <div class="col-md-9 settings-col with-left-border">
     <div class="panel settings-panel">
         <div class="panel-heading settings-head">
-            <span class="fa fa-flag"></span> {% trans %}All Reports{% endtrans %}
+            <span class="fa fa-flag"></span> {% trans %}Reports{% endtrans %}
         </div>
         <div class="panel-body settings-body">
             <div class="settings-content">
                 <div class="settings-meta row">
-                    <div class="col-md-1 col-sm-1 col-xs-1 meta-item">#</div>
+                    <div class="col-md-1 col-sm-1 col-xs-1 meta-item"><input type="checkbox" name="rowtoggle" class="action-checkall" title="Select All"/></div>
                     <div class="col-md-1 col-sm-2 col-xs-2 meta-item">{% trans %}Poster{% endtrans %}</div>
-                    <div class="col-md-3 col-sm-3 col-xs-3 meta-item">{% trans %}Topic{% endtrans %}</div>
-                    <div class="col-md-3 col-sm-4 col-xs-3 meta-item">{% trans %}Reason{% endtrans %}</div>
-                    <div class="col-md-2 col-sm-2 col-xs-2 meta-item">{% trans %}Reporter{% endtrans %}</div>
+                    <div class="col-md-2 col-sm-3 col-xs-3 meta-item">{% trans %}Topic{% endtrans %}</div>
+                    <div class="col-md-2 col-sm-4 col-xs-3 meta-item">{% trans %}Reason{% endtrans %}</div>
+                    <div class="col-md-2 hidden-sm hidden-xs meta-item">{% trans %}Reporter{% endtrans %}</div>
                     <div class="col-md-2 hidden-sm hidden-xs meta-item">{% trans %}Reported{% endtrans %}</div>
+                    <div class="col-md-2 col-sm-2 col-xs-2">
+                        <div class="btn-group">
+                            <button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown">
+                                <span class="fa fa-fw fa-cog"></span> {% trans %}Actions{% endtrans %}
+                            </button>
+                            <ul class="dropdown-menu slidedown">
+                                <li>
+                                    <button class="btn btn-link" onclick="return bulk_actions.execute('{{ url_for('management.report_markread') }}')">
+                                        <span class="fa fa-fw fa-flag-o text-primary"></span> {% trans %}Mark as Read{% endtrans %}
+                                    </button>
+                                </li>
+                                <li>
+                                    <button class="btn btn-link" onclick="return bulk_actions.execute('{{ url_for('management.delete_report') }}')">
+                                        <span class="fa fa-fw fa-trash text-danger"></span> {% trans %}Delete selected reports{% endtrans %}
+                                    </button>
+                                </li>
+                            </ul>
+                        </div>
+                    </div>
                 </div>
             {% for report in reports.items %}
                 <div class="row settings-row hover clearfix">
-                    <div class="col-md-1 col-sm-1 col-xs-1">{{ report.id }}</div>
+                    <div class="col-md-1 col-sm-1 col-xs-1"><input type="checkbox" name="rowid" class="action-checkbox" value="{{ report.id }}" title="Select Report"/></div>
                     <div class="col-md-1 col-sm-2 col-xs-2"><a href="{{ report.post.user.url }}">{{ report.post.user.username }}</a></div>
-                    <div class="col-md-3 col-sm-3 col-xs-3"><a href="{{ report.post.url }}" target="_blank">{{ report.post.topic.title }}</a></div>
-                    <div class="col-md-3 col-sm-4 col-xs-3">{{ report.reason }}</div>
-                    <div class="col-md-2 col-sm-2 col-xs-2">{{ report.reporter.username }}</div>
+                    <div class="col-md-2 col-sm-3 col-xs-3"><a href="{{ report.post.url }}" target="_blank">{{ report.post.topic.title }}</a></div>
+                    <div class="col-md-2 col-sm-4 col-xs-3">{{ report.reason }}</div>
+                    <div class="col-md-2 hidden-sm hidden-xs">{{ report.reporter.username }}</div>
                     <div class="col-md-2 hidden-sm hidden-xs">{{ report.reported|time_since }}</div>
+                    <div class="col-md-2 col-sm-2 col-xs-2">
+                        {% if not report.zapped %}
+                        <form class="inline-form" id="read-{{report.id}}" method="post" action="{{ url_for('management.report_markread', report_id=report.id) }}">
+                            <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
+                            <button class="btn btn-icon" name="confirmDialog" data-toggle="tooltip" data-placement="top" title="{% trans %}Mark as Read{% endtrans %}">
+                                <span class="fa fa-flag-o text-primary"></span>
+                            </button>
+                        </form>
+                        {% endif %}
+                        <form class="inline-form" id="delete-{{report.id}}" method="post" action="{{ url_for('management.delete_report', report_id=report.id) }}">
+                            <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
+
+                            <button class="btn btn-icon" name="confirmDialog" data-toggle="tooltip" data-placement="top" title="{% trans %}Delete{% endtrans %}">
+                                <span class="fa fa-trash text-danger"></span>
+                            </button>
+                        </form>
+                    </div>
                 </div>
             {% else %}
                 <div class="row settings-row clearfix">
-                    <div class="col-md-12 col-sm-12 col-xs-12">{% trans %}No unread reports.{% endtrans %}</div>
+                    <div class="col-md-12 col-sm-12 col-xs-12">{% trans %}No reports.{% endtrans %}</div>
                 </div>
             {% endfor %}
             </div>
             <div class="panel-footer settings-footer">
-                {{ render_pagination(reports, url_for('management.unread_reports')) }}
+                {{ render_pagination(reports, url_for(request.endpoint)) }}
             </div>
         </div>
     </div>
 </div>
+{% include theme('confirm_dialog.html') %}
+{% endblock %}
+
+{% block scripts %}
+    <script>
+    var bulk_actions = new BulkActions();
+
+    $(function () {
+        $('[data-toggle="tooltip"]').tooltip()
+    })
+    </script>
 {% endblock %}

+ 0 - 97
flaskbb/templates/management/unread_reports.html

@@ -1,97 +0,0 @@
-{% set page_title = _("Unread Reports") %}
-{% set active_management_report_nav=True %}
-
-{% extends theme("management/management_layout.html") %}
-
-{% block breadcrumb %}
-<ol class="breadcrumb flaskbb-breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
-    <li><a href="{{ url_for('management.overview') }}">{% trans %}Management{% endtrans %}</a></li>
-    <li class="active">{% trans %}Unread Reports{% endtrans %}</li>
-</ol>
-{% endblock %}
-
-{% block management_content %}
-{% from theme('macros.html') import render_pagination, navlink with context %}
-
-
-<div class="col-md-3 settings-col">
-    <div class="nav-sidebar">
-        <ul class="nav">
-            {{ navlink('management.unread_reports', _("Show unread reports")) }}
-            {{ navlink('management.reports', _("Show all reports")) }}
-        </ul>
-    </div>
-</div>
-
-
-<div class="col-md-9 settings-col with-left-border">
-    <div class="panel settings-panel">
-        <div class="panel-heading settings-head">
-            <span class="fa fa-flag"></span> {% trans %}Unread Reports{% endtrans %}
-        </div>
-        <div class="panel-body settings-body">
-            <div class="settings-content">
-                <div class="settings-meta row">
-                    <div class="col-md-1 col-sm-1 col-xs-1 meta-item"><input type="checkbox" name="rowtoggle" class="action-checkall" title="Select All"/></div>
-                    <div class="col-md-1 col-sm-2 col-xs-2 meta-item">{% trans %}Poster{% endtrans %}</div>
-                    <div class="col-md-2 col-sm-3 col-xs-3 meta-item">{% trans %}Topic{% endtrans %}</div>
-                    <div class="col-md-2 col-sm-4 col-xs-3 meta-item">{% trans %}Reason{% endtrans %}</div>
-                    <div class="col-md-2 hidden-sm hidden-xs meta-item">{% trans %}Reporter{% endtrans %}</div>
-                    <div class="col-md-2 hidden-sm hidden-xs meta-item">{% trans %}Reported{% endtrans %}</div>
-                    <div class="col-md-2 col-sm-2 col-xs-2">
-                        <div class="btn-group">
-                            <button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown">
-                                <span class="fa fa-fw fa-cog"></span> {% trans %}Actions{% endtrans %}
-                            </button>
-                            <ul class="dropdown-menu slidedown">
-                                <li>
-                                    <button class="btn btn-link" onclick="return bulk_actions.execute('{{ url_for('management.report_markread') }}')">
-                                        <span class="fa fa-fw fa-flag-o text-primary"></span> {% trans %}Mark as Read{% endtrans %}
-                                    </button>
-                                </li>
-                            </ul>
-                        </div>
-                    </div>
-                </div>
-            {% for report in reports.items %}
-                <div class="row settings-row hover clearfix">
-                    <div class="col-md-1 col-sm-1 col-xs-1"><input type="checkbox" name="rowid" class="action-checkbox" value="{{ report.id }}" title="Select Report"/></div>
-                    <div class="col-md-1 col-sm-2 col-xs-2"><a href="{{ report.post.user.url }}">{{ report.post.user.username }}</a></div>
-                    <div class="col-md-2 col-sm-3 col-xs-3"><a href="{{ report.post.url }}" target="_blank">{{ report.post.topic.title }}</a></div>
-                    <div class="col-md-2 col-sm-4 col-xs-3">{{ report.reason }}</div>
-                    <div class="col-md-2 hidden-sm hidden-xs">{{ report.reporter.username }}</div>
-                    <div class="col-md-2 hidden-sm hidden-xs">{{ report.reported|time_since }}</div>
-                    <div class="col-md-2 col-sm-2 col-xs-2">
-                        <form class="inline-form" id="read-{{report.id}}" method="post" action="{{ url_for('management.report_markread', report_id=report.id) }}">
-                            <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                            <button class="btn btn-icon" name="confirmDialog">
-                                <span class="fa fa-flag-o text-primary" data-toggle="tooltip" data-placement="top" title="{% trans %}Mark as Read{% endtrans %}"></span>
-                            </button>
-                        </form>
-                    </div>
-                </div>
-            {% else %}
-                <div class="row settings-row clearfix">
-                    <div class="col-md-12 col-sm-12 col-xs-12">{% trans %}No unread reports.{% endtrans %}</div>
-                </div>
-            {% endfor %}
-            </div>
-            <div class="panel-footer settings-footer">
-                {{ render_pagination(reports, url_for('management.unread_reports')) }}
-            </div>
-        </div>
-    </div>
-</div>
-{% include theme('confirm_dialog.html') %}
-{% endblock %}
-
-{% block scripts %}
-    <script>
-    var bulk_actions = new BulkActions();
-
-    $(function () {
-        $('[data-toggle="tooltip"]').tooltip()
-    })
-    </script>
-{% endblock %}