Browse Source

Notify user of moderation actions.

Rafał Pitoń 10 years ago
parent
commit
f84d502d13
3 changed files with 88 additions and 2 deletions
  1. 61 0
      misago/users/views/moderation.py
  2. 19 2
      misago/users/views/profile.py
  3. 8 0
      misago/users/views/usercp.py

+ 61 - 0
misago/users/views/moderation.py

@@ -10,6 +10,7 @@ from misago.core.decorators import require_POST
 from misago.core.shortcuts import get_object_or_404, validate_slug
 from misago.core.shortcuts import get_object_or_404, validate_slug
 from misago.core.utils import clean_return_path
 from misago.core.utils import clean_return_path
 from misago.markup import Editor
 from misago.markup import Editor
+from misago.notifications import notify_user
 
 
 from misago.users.avatars.dynamic import set_avatar as set_dynamic_avatar
 from misago.users.avatars.dynamic import set_avatar as set_dynamic_avatar
 from misago.users import warnings
 from misago.users import warnings
@@ -79,6 +80,15 @@ def warn(request, user, reason=None):
         if form.is_valid():
         if form.is_valid():
             warnings.warn_user(request.user, user, form.cleaned_data['reason'])
             warnings.warn_user(request.user, user, form.cleaned_data['reason'])
 
 
+            notify_user(user,
+                _("%(user)s has given you an warning."),
+                reverse('misago:user_warnings', kwargs={
+                    'user_slug': user.slug, 'user_id': user.pk
+                }),
+                "warnings_%s" % user.pk,
+                formats={'user': request.user.username},
+                sender=request.user)
+
             message = _("%(user)s has been warned.")
             message = _("%(user)s has been warned.")
             message = message % {'user': user.username}
             message = message % {'user': user.username}
             messages.success(request, message)
             messages.success(request, message)
@@ -131,6 +141,15 @@ def cancel_warning(request, user, warning):
     message = message % {'user': user.username}
     message = message % {'user': user.username}
     messages.success(request, message)
     messages.success(request, message)
 
 
+    notify_user(user,
+        _("%(user)s has canceled your warning."),
+        reverse('misago:user_warnings', kwargs={
+            'user_slug': user.slug, 'user_id': user.pk
+        }),
+        "warnings_%s" % user.pk,
+        formats={'user': request.user.username},
+        sender=request.user)
+
 
 
 @user_moderation_view(allow_see_warnings)
 @user_moderation_view(allow_see_warnings)
 @warning_moderation_view(allow_delete_warning)
 @warning_moderation_view(allow_delete_warning)
@@ -141,6 +160,15 @@ def delete_warning(request, user, warning):
     message = message % {'user': user.username}
     message = message % {'user': user.username}
     messages.success(request, message)
     messages.success(request, message)
 
 
+    notify_user(user,
+        _("%(user)s has deleted your warning."),
+        reverse('misago:user_warnings', kwargs={
+            'user_slug': user.slug, 'user_id': user.pk
+        }),
+        "warnings_%s" % user.pk,
+        formats={'user': request.user.username},
+        sender=request.user)
+
 
 
 @user_moderation_view(allow_rename_user)
 @user_moderation_view(allow_rename_user)
 def rename(request, user):
 def rename(request, user):
@@ -153,6 +181,19 @@ def rename(request, user):
         if form.is_valid():
         if form.is_valid():
             try:
             try:
                 form.change_username(changed_by=request.user)
                 form.change_username(changed_by=request.user)
+
+                notify_user(user,
+                    _("%(user)s has changed your name to %(newname)s."),
+                    reverse('misago:user_warnings', kwargs={
+                        'user_slug': user.slug, 'user_id': user.pk
+                    }),
+                    "name_history_%s" % user.pk,
+                    formats={
+                        'user': request.user.username,
+                        'newname': user.username,
+                    },
+                    sender=request.user)
+
                 message = _("%(old_username)s's username has been changed.")
                 message = _("%(old_username)s's username has been changed.")
                 message = message % {'old_username': old_username}
                 message = message % {'old_username': old_username}
                 messages.success(request, message)
                 messages.success(request, message)
@@ -185,6 +226,19 @@ def moderate_avatar(request, user):
                 'avatar_lock_staff_message'
                 'avatar_lock_staff_message'
             ))
             ))
 
 
+            if avatar_locked != user.is_avatar_locked:
+                if user.is_avatar_locked:
+                    message = _("%(user)s has locked your avatar.")
+                else:
+                    message = _("%(user)s has unlocked your avatar.")
+
+                notify_user(user,
+                    message,
+                    reverse('misago:usercp_change_avatar'),
+                    "usercp_avatar_%s" % user.pk,
+                    formats={'user': request.user.username},
+                    sender=request.user)
+
             message = _("%(user)s's avatar has been moderated.")
             message = _("%(user)s's avatar has been moderated.")
             message = message % {'user': user.username}
             message = message % {'user': user.username}
             messages.success(request, message)
             messages.success(request, message)
@@ -219,6 +273,13 @@ def moderate_signature(request, user):
             message = message % {'user': user.username}
             message = message % {'user': user.username}
             messages.success(request, message)
             messages.success(request, message)
 
 
+            notify_user(user,
+                _("%(user)s has moderated your signature."),
+                reverse('misago:usercp_edit_signature'),
+                "usercp_signature_%s" % user.pk,
+                formats={'user': request.user.username},
+                sender=request.user)
+
             if 'stay' not in request.POST:
             if 'stay' not in request.POST:
                 return redirect(return_path)
                 return redirect(return_path)
 
 

+ 19 - 2
misago/users/views/profile.py

@@ -46,7 +46,7 @@ def profile_view(f):
             profile.is_blocked = False
             profile.is_blocked = False
 
 
         if request.user.is_authenticated and request.method == "GET":
         if request.user.is_authenticated and request.method == "GET":
-            read_user_notification(request.user, "followed_%s" % profile.pk)
+            read_user_notification(request.user, "profile_%s" % profile.pk)
 
 
         return f(request, *args, **kwargs)
         return f(request, *args, **kwargs)
     return decorator
     return decorator
@@ -65,6 +65,21 @@ def profile_view_restricted_visibility(f):
     return decorator
     return decorator
 
 
 
 
+def notification_view(trigger):
+    def function_decorator(f):
+        def decorator(*args, **kwargs):
+            request = args[0]
+            user = request.user
+            profile = kwargs.get('profile')
+
+            if user.is_authenticated and request.method == "GET":
+                read_user_notification(user, trigger % profile.pk)
+
+            return f(*args, **kwargs)
+        return decorator
+    return function_decorator
+
+
 def render(request, template, context):
 def render(request, template, context):
     context['pages'] = user_profile.get_pages(request, context['profile'])
     context['pages'] = user_profile.get_pages(request, context['profile'])
     for page in context['pages']:
     for page in context['pages']:
@@ -137,6 +152,7 @@ def follows(request, profile, page=0):
 
 
 
 
 @profile_view_restricted_visibility
 @profile_view_restricted_visibility
+@notification_view("warnings_%s")
 def warnings(request, profile, page=0):
 def warnings(request, profile, page=0):
     warnings_qs = profile.warnings.order_by('-id')
     warnings_qs = profile.warnings.order_by('-id')
     warnings = paginate(warnings_qs, page, 5, 2)
     warnings = paginate(warnings_qs, page, 5, 2)
@@ -175,6 +191,7 @@ def warnings(request, profile, page=0):
 
 
 
 
 @profile_view_restricted_visibility
 @profile_view_restricted_visibility
+@notification_view("name_history_%s")
 def name_history(request, profile, page=0):
 def name_history(request, profile, page=0):
     name_changes_qs = profile.namechanges.all().order_by('-id')
     name_changes_qs = profile.namechanges.all().order_by('-id')
     name_changes = paginate(name_changes_qs, page, 12, 4)
     name_changes = paginate(name_changes_qs, page, 12, 4)
@@ -242,7 +259,7 @@ def follow_user(request, profile):
             reverse(user_profile.get_default_link(), kwargs={
             reverse(user_profile.get_default_link(), kwargs={
                 'user_slug': user_locked.slug, 'user_id': user_locked.id
                 'user_slug': user_locked.slug, 'user_id': user_locked.id
             }),
             }),
-            "followed_%s" % user_locked.pk,
+            "profile_%s" % user_locked.pk,
             formats={'user': user_locked.username},
             formats={'user': user_locked.username},
             sender=user_locked,
             sender=user_locked,
             update_user=False)
             update_user=False)

+ 8 - 0
misago/users/views/usercp.py

@@ -13,6 +13,7 @@ from misago.core.decorators import ajax_only, require_POST
 from misago.core.exceptions import AjaxError
 from misago.core.exceptions import AjaxError
 from misago.core.mail import mail_user
 from misago.core.mail import mail_user
 from misago.markup import Editor
 from misago.markup import Editor
+from misago.notifications import read_user_notification
 
 
 from misago.users import avatars
 from misago.users import avatars
 from misago.users.decorators import deny_guests
 from misago.users.decorators import deny_guests
@@ -88,6 +89,9 @@ def change_avatar(request):
 
 
 def avatar_not_locked(f):
 def avatar_not_locked(f):
     def decorator(request, *args, **kwargs):
     def decorator(request, *args, **kwargs):
+        if request.method == "GET":
+            read_user_notification(request.user,
+                                   'usercp_avatar_%s' % request.user.pk)
         if request.user.is_avatar_locked:
         if request.user.is_avatar_locked:
             message = _("Your avatar is locked and can't be changed.")
             message = _("Your avatar is locked and can't be changed.")
             messages.info(request, message)
             messages.info(request, message)
@@ -218,6 +222,10 @@ def edit_signature(request):
     if not request.user.acl['can_have_signature']:
     if not request.user.acl['can_have_signature']:
         raise Http404()
         raise Http404()
 
 
+    if request.method == "GET":
+        read_user_notification(request.user,
+                               'usercp_signature_%s' % request.user.pk)
+
     form = EditSignatureForm(instance=request.user)
     form = EditSignatureForm(instance=request.user)
     if not request.user.is_signature_locked and request.method == 'POST':
     if not request.user.is_signature_locked and request.method == 'POST':
         form = EditSignatureForm(request.POST, instance=request.user)
         form = EditSignatureForm(request.POST, instance=request.user)