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

Working cancel/delete warnings. #37

Rafał Pitoń 11 лет назад
Родитель
Сommit
b2509e1bbe
2 измененных файлов с 41 добавлено и 3 удалено
  1. 23 1
      misago/models/usermodel.py
  2. 18 2
      templates/cranefly/profiles/warnings.html

+ 23 - 1
misago/models/usermodel.py

@@ -579,9 +579,31 @@ class User(models.Model):
 
         return self.get_warning_level()
 
+    def get_latest_activte_warning(self):
+        return self.warning_set.filter(canceled=False).order_by('-id')[:1][0]
+
+    def freeze_warning_level(self):
+        self.warning_level_update_on = tz_util.now() + timedelta(days=1)
+
+    def set_warning_level_update_date(self, warning, warning_level):
+        if warning_level.expires_after_minutes:
+            self.warning_level_update_on = warning.given_on + timedelta(
+                minutes=warning_level.expires_after_minutes)
+        else:
+            self.warning_level_update_on = None
+
     def decrease_warning_level(self):
-        raise NotImplementedError("Not finished!")
         if self.get_current_warning_level():
+            self.warning_level -= 1
+            if self.warning_level:
+                self.freeze_warning_level()
+                latest_warning = self.get_latest_activte_warning()
+                new_warning_level = self.get_current_warning_level()
+                self.set_warning_level_update_date(
+                    latest_warning, new_warning_level)
+                self.get_current_warning_level()
+            else:
+                self.warning_level_update_on = None
             self.save(force_update=True)
 
     def is_warning_active(self, warning):

+ 18 - 2
templates/cranefly/profiles/warnings.html

@@ -61,13 +61,13 @@
       </div>
       <div class="media-footer">
         {% if acl.warnings.can_cancel_warning(user, profile, item) and not warnings_tracker.is_warning_expired(item) %}
-        <form action="{{ url('user_warnings_cancel', user=profile.pk, username=profile.username_slug, warning=item.pk) }}" method="post">
+        <form action="{{ url('user_warnings_cancel', user=profile.pk, username=profile.username_slug, warning=item.pk) }}" class="confirm-cancel" method="post">
           <input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}">
           <button type="submit" class="btn btn-mini"><i class="icon-ban-circle"></i> {% trans %}Cancel{% endtrans %}</button>
         </form>
         {% endif %}
         {% if acl.warnings.can_delete_warnings() %}
-        <form action="{{ url('user_warnings_delete', user=profile.pk, username=profile.username_slug, warning=item.pk) }}" method="post">
+        <form action="{{ url('user_warnings_delete', user=profile.pk, username=profile.username_slug, warning=item.pk) }}" class="confirm-delete" method="post">
           <input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}">
           <button type="submit" class="btn btn-mini"><i class="icon-remove"></i> {% trans %}Delete{% endtrans %}</button>
         </form>
@@ -97,6 +97,22 @@
 {% endblock %}
 
 
+{% block javascripts -%}{{ super() }}
+<script type="text/javascript">
+  $(function() {
+    $('.confirm-cancel').submit(function() {
+      var decision = confirm("{% trans %}Are you sure you want to cancel this warning?{% endtrans %}");
+      return decision;
+    });
+    $('.confirm-delete').submit(function() {
+      var decision = confirm("{% trans %}Are you sure you want to delete this warning?{% endtrans %}");
+      return decision;
+    });
+  });
+</script>
+{%- endblock %}
+
+
 {% macro format_warning_expiration(expires) %}
 <strong>{{ expires }}</strong>
 {% endmacro %}