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

+ 2 - 0
misago/profiles/decorators.py

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

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

@@ -1,15 +1,19 @@
 from datetime import timedelta
 from datetime import timedelta
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
+from django.db.models import F
 from django.shortcuts import redirect
 from django.shortcuts import redirect
 from django.utils import timezone
 from django.utils import timezone
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
+from misago.alerts.models import Alert
 from misago.authn.decorators import block_guest
 from misago.authn.decorators import block_guest
 from misago.forms import FormLayout
 from misago.forms import FormLayout
 from misago.messages import Message
 from misago.messages import Message
+from misago.users.models import User
 from misago.usercp.template import RequestContext
 from misago.usercp.template import RequestContext
 from misago.usercp.models import UsernameChange
 from misago.usercp.models import UsernameChange
 from misago.usercp.username.forms import UsernameChangeForm
 from misago.usercp.username.forms import UsernameChangeForm
 from misago.views import error404
 from misago.views import error404
+from misago.utils import ugettext_lazy
 
 
 @block_guest
 @block_guest
 def username(request):
 def username(request):
@@ -33,8 +37,22 @@ def username(request):
             request.user.set_username(form.cleaned_data['username'])
             request.user.set_username(form.cleaned_data['username'])
             request.user.save(force_update=True)
             request.user.save(force_update=True)
             request.user.namechanges.create(date=timezone.now(), old_username=org_username)
             request.user.namechanges.create(date=timezone.now(), old_username=org_username)
-
             request.messages.set_flash(Message(_("Your username has been changed.")), 'success', 'usercp_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'))
             return redirect(reverse('usercp_username'))
         message = Message(form.non_field_errors()[0], 'error')
         message = Message(form.non_field_errors()[0], 'error')
     else:
     else:

+ 1 - 0
misago/users/views.py

@@ -1,5 +1,6 @@
 from django.core.urlresolvers import reverse as django_reverse
 from django.core.urlresolvers import reverse as django_reverse
 from django.db.models import Q
 from django.db.models import Q
+from django.shortcuts import redirect
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
 from misago.admin import site
 from misago.admin import site
 from misago.admin.widgets import *
 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.sessions.models import Session
 from misago.threads.models import Thread
 from misago.threads.models import Thread
 
 
-def home(request):
+def home(request):     
     # Threads ranking
     # Threads ranking
     popular_threads = cache.get('thread_ranking_%s' % request.user.make_acl_key(), 'nada')
     popular_threads = cache.get('thread_ranking_%s' % request.user.make_acl_key(), 'nada')
     if popular_threads == 'nada' and request.settings['thread_ranking_size'] > 0:
     if popular_threads == 'nada' and request.settings['thread_ranking_size'] > 0: