Browse Source

Notify followers of name change

Ralfp 12 years ago
parent
commit
12539a49a5

+ 12 - 1
misago/alerts/models.py

@@ -25,6 +25,13 @@ class Alert(models.Model):
         except AttributeError:
             self.vars_raw = {var: value}
         return self
+    
+    def strong(self, var, value):
+        try:
+            self.vars_raw[var] = '<strong>%s</strong>' % cgi.escape(value, True)
+        except AttributeError:
+            self.vars_raw = {var: '<strong>%s</strong>' % cgi.escape(value, True)}
+        return self
 
     def url(self, var, value, href, attrs=None):
         url = '<a href="%s"' % cgi.escape(href, True)
@@ -54,10 +61,14 @@ class Alert(models.Model):
         self.save(force_insert=True)
         self.user.save(force_update=True)
 
-    def save(self, *args, **kwargs):
+    def hydrate(self):
         try:
             self.variables = base64.encodestring(pickle.dumps(self.vars_raw, pickle.HIGHEST_PROTOCOL))
         except AttributeError:
             self.variables = base64.encodestring(pickle.dumps({}, pickle.HIGHEST_PROTOCOL))
+        return self
+
+    def save(self, *args, **kwargs):
+        self.hydrate()
         super(Alert, self).save(*args, **kwargs)
         return self.user

+ 2 - 0
misago/profiles/decorators.py

@@ -1,4 +1,6 @@
 from functools import wraps
+from django.core.urlresolvers import reverse
+from django.shortcuts import redirect
 from misago.utils import slugify
 from misago.views import error404
 from misago.users.models import User

+ 19 - 1
misago/usercp/username/views.py

@@ -1,15 +1,19 @@
 from datetime import timedelta
 from django.core.urlresolvers import reverse
+from django.db.models import F
 from django.shortcuts import redirect
 from django.utils import timezone
 from django.utils.translation import ugettext as _
+from misago.alerts.models import Alert
 from misago.authn.decorators import block_guest
 from misago.forms import FormLayout
 from misago.messages import Message
+from misago.users.models import User
 from misago.usercp.template import RequestContext
 from misago.usercp.models import UsernameChange
 from misago.usercp.username.forms import UsernameChangeForm
 from misago.views import error404
+from misago.utils import ugettext_lazy
 
 @block_guest
 def username(request):
@@ -33,8 +37,22 @@ def username(request):
             request.user.set_username(form.cleaned_data['username'])
             request.user.save(force_update=True)
             request.user.namechanges.create(date=timezone.now(), old_username=org_username)
-
             request.messages.set_flash(Message(_("Your username has been changed.")), 'success', 'usercp_username')
+            # Alert followers of namechange
+            alert_time = timezone.now()
+            bulk_alerts = []
+            alerted_users = []
+            for follower in request.user.follows_set.iterator():
+                alerted_users.append(follower.pk)
+                alert = Alert(user=follower, message=ugettext_lazy("User that you are following, %(username)s, has changed his name to %(newname)s").message, date=alert_time)
+                alert.strong('username', org_username)
+                alert.profile('newname', request.user)
+                alert.hydrate()
+                bulk_alerts.append(alert)
+            if bulk_alerts:
+                Alert.objects.bulk_create(bulk_alerts)
+                User.objects.filter(id__in=alerted_users).update(alerts=F('alerts') + 1)
+            # Hop back
             return redirect(reverse('usercp_username'))
         message = Message(form.non_field_errors()[0], 'error')
     else:

+ 1 - 0
misago/users/views.py

@@ -1,5 +1,6 @@
 from django.core.urlresolvers import reverse as django_reverse
 from django.db.models import Q
+from django.shortcuts import redirect
 from django.utils.translation import ugettext as _
 from misago.admin import site
 from misago.admin.widgets import *

+ 1 - 1
misago/views.py

@@ -15,7 +15,7 @@ from misago.ranks.models import Rank
 from misago.sessions.models import Session
 from misago.threads.models import Thread
 
-def home(request):
+def home(request):     
     # Threads ranking
     popular_threads = cache.get('thread_ranking_%s' % request.user.make_acl_key(), 'nada')
     if popular_threads == 'nada' and request.settings['thread_ranking_size'] > 0: