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

Added group and report ajax logic

sh4nks 9 лет назад
Родитель
Сommit
7ddb884a87

+ 9 - 3
flaskbb/management/forms.py

@@ -119,7 +119,9 @@ class UserForm(Form):
             raise ValidationError(_("This E-Mail Address is already taken."))
 
     def save(self):
-        user = User(**self.data)
+        data = self.data
+        data.pop('submit', None)
+        user = User(**data)
         return user.save()
 
 
@@ -243,7 +245,9 @@ class GroupForm(Form):
             raise ValidationError(_("There is already a Guest group."))
 
     def save(self):
-        group = Group(**self.data)
+        data = self.data
+        data.pop('submit', None)
+        group = Group(**data)
         return group.save()
 
 
@@ -398,5 +402,7 @@ class CategoryForm(Form):
     submit = SubmitField(_("Save"))
 
     def save(self):
-        category = Category(**self.data)
+        data = self.data
+        data.pop('submit', None)
+        category = Category(**data)
         return category.save()

+ 65 - 4
flaskbb/management/views.py

@@ -351,6 +351,30 @@ def unread_reports():
 @management.route("/reports/markread", methods=["POST"])
 @moderator_required
 def report_markread(report_id=None):
+    # AJAX request
+    if request.is_xhr:
+        ids = request.get_json()["ids"]
+        data = []
+
+        for report in Report.query.filter(Report.id.in_(ids)).all():
+            report.zapped_by = current_user.id
+            report.zapped = datetime.utcnow()
+            report.save()
+            data.append({
+                "id": report.id,
+                "type": "read",
+                "reverse": False,
+                "reverse_name": None,
+                "reverse_url": None
+            })
+
+        return jsonify(
+            message="{} Reports marked as read.".format(len(data)),
+            category="success",
+            data=data,
+            status=200
+        )
+
     # mark single report as read
     if report_id:
         report = Report.query.filter_by(id=report_id).first_or_404()
@@ -415,11 +439,48 @@ def edit_group(group_id):
 
 
 @management.route("/groups/<int:group_id>/delete", methods=["POST"])
+@management.route("/groups/delete", methods=["POST"])
 @admin_required
-def delete_group(group_id):
-    group = Group.query.filter_by(id=group_id).first_or_404()
-    group.delete()
-    flash(_("Group successfully deleted."), "success")
+def delete_group(group_id=None):
+    if request.is_xhr:
+        ids = request.get_json()["ids"]
+        if not (set(ids) & set(["1", "2", "3", "4", "5"])):
+            data = []
+            for group in Group.query.filter(Group.id.in_(ids)).all():
+                group.delete()
+                data.append({
+                    "id": group.id,
+                    "type": "delete",
+                    "reverse": False,
+                    "reverse_name": None,
+                    "reverse_url": None
+                })
+
+            return jsonify(
+                message="{} Groups deleted.".format(len(data)),
+                category="success",
+                data=data,
+                status=200
+            )
+        return jsonify(
+            message=_("You cannot delete one of the standard groups."),
+            category="danger",
+            data=None,
+            status=404
+        )
+
+    if group_id is not None:
+        if group_id <= 5:  # there are 5 standard groups
+            flash(_("You cannot delete the standard groups. "
+                    "Try renaming them instead.", "danger"))
+            return redirect(url_for("management.groups"))
+
+        group = Group.query.filter_by(id=group_id).first_or_404()
+        group.delete()
+        flash(_("Group successfully deleted."), "success")
+        return redirect(url_for("management.groups"))
+
+    flash(_("No group choosen.."), "danger")
     return redirect(url_for("management.groups"))
 
 

+ 0 - 3
flaskbb/static/js/flaskbb.js

@@ -11,8 +11,6 @@ var csrftoken = $('meta[name=csrf-token]').attr('content');
 var show_management_search = function() {
     var body = $('.management-body');
     var form = body.find('.search-form');
-    console.log(body);
-    console.log(form);
 
     // toggle
     form.slideToggle(function() {
@@ -98,7 +96,6 @@ var send_data = function(endpoint_url, data) {
 
             // check if there is something to reverse it, otherwise remove the DOM.
             if(v.reverse) {
-                console.log(v);
                 form.attr('action', v.reverse_url);
                 if(v.type == 'ban') {
                     reverse_html = '<span class="fa fa-flag text-success" data-toggle="tooltip" data-placement="top" title="'+ v.reverse_name +'"></span>'

+ 4 - 4
flaskbb/templates/management/groups.html

@@ -44,8 +44,8 @@
                             </tr>
                         </thead>
                         <tbody>
-                            {% for group in groups.items %}
-                            <tr>
+                        {% for group in groups.items %}
+                            <tr class="action-row">
                                 <td><input type="checkbox" name="rowid" class="action-checkbox" value="{{ group.id }}" title="Select Group"/></td>
                                 <td>{{ group.id }}</td>
                                 <td><a href="#">{{ group.name }}</a></td>
@@ -54,7 +54,7 @@
                                     <a href="{{ url_for('management.edit_group', group_id = group.id) }}">
                                         <span class="fa fa-pencil text-primary" data-toggle="tooltip" data-placement="top" title="{% trans %}Edit{% endtrans %}"></span>
                                     </a>
-                                    <form class="inline-form" method="post" action="{{ url_for('management.delete_group', group_id=group.id) }}">
+                                    <form class="inline-form" id="delete-{{group.id}}" method="post" action="{{ url_for('management.delete_group', group_id=group.id) }}">
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                         <button class="btn btn-link">
                                             <span class="fa fa-trash text-danger" data-toggle="tooltip" data-placement="top" title="{% trans %}Delete{% endtrans %}"></span>
@@ -62,7 +62,7 @@
                                     </form>
                                 </td>
                             </tr>
-                            {% endfor %}
+                        {% endfor %}
                         </tbody>
                     </table>
 

+ 4 - 2
flaskbb/templates/management/unread_reports.html

@@ -24,6 +24,7 @@
                 <table class="table table-hover">
                     <thead>
                         <tr>
+                            <th><input type="checkbox" name="rowtoggle" class="action-checkall" title="Select All"/></th>
                             <th>#</th>
                             <th>{% trans %}Poster{% endtrans %}</th>
                             <th>{% trans %}Topic{% endtrans %}</th>
@@ -48,7 +49,8 @@
                     </thead>
                     <tbody>
                         {% for report in reports.items %}
-                        <tr>
+                        <tr class="action-row">
+                            <td><input type="checkbox" name="rowid" class="action-checkbox" value="{{ report.id }}" title="Select Report"/></td>
                             <td>{{ report.id }}</td>
                             <td>{{ report.post.user.username }}</td>
                             <td><a href="{{ url_for('forum.view_post', post_id=report.post.id) }}" target="_blank">{{ report.post.topic.title }}</a></td>
@@ -56,7 +58,7 @@
                             <td>{{ report.reason }}</td>
                             <td>{{ report.reported|time_since }}</td>
                             <td>
-                                <form class="inline-form" method="post" action="{{ url_for('management.report_markread', report_id=report.id) }}">
+                                <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-link">
                                         <span class="fa fa-flag-o text-primary" data-toggle="tooltip" data-placement="top" title="{% trans %}Mark as Read{% endtrans %}"></span>