Browse Source

Default/auto watching threads

Ralfp 12 years ago
parent
commit
f407210639

+ 21 - 0
misago/register/fixtures.py

@@ -23,6 +23,27 @@ settings_fixtures = (
                 'name':         _("Default Timezone"),
                 'description':  _("Used by guests, crawlers and newly registered users."),
             }),
+            ('subscribe_start', {
+                'value':        2,
+                'type':         "integer",
+                'input':        "select",
+                'extra':        {'choices': ((0, _("Don't watch")),
+                                             (1, _("Put on watched threads list")),
+                                             (2, _("Put on watched threads list and e-mail user when somebody replies")),
+                                             )},
+                'separator':    _("Default Watching Preferences"),
+                'name':         _("Watch threads user started"),
+            }),
+            ('subscribe_reply', {
+                'value':        2,
+                'type':         "integer",
+                'input':        "select",
+                'extra':        {'choices': ((0, _("Don't watch")),
+                                             (1, _("Put on watched threads list")),
+                                             (2, _("Put on watched threads list and e-mail user when somebody replies")),
+                                             )},
+                'name':         _("Watch threads user replied in"),
+            }),
             ('password_length', {
                 'value':        4,
                 'type':         "integer",

+ 23 - 0
misago/threads/views/posting.py

@@ -15,6 +15,7 @@ from misago.threads.models import Thread, Post
 from misago.threads.views.base import BaseView
 from misago.views import error403, error404
 from misago.utils import make_pagination, slugify, ugettext_lazy
+from misago.watcher.models import ThreadWatch
 
 class PostingView(BaseView):
     def fetch_target(self, kwargs):
@@ -320,6 +321,28 @@ class PostingView(BaseView):
                         post.notify_mentioned(request, md.mentions)
                         post.save(force_update=True)
 
+                # Set thread watch status
+                if self.mode == 'new_thread' and request.user.subscribe_start:
+                    ThreadWatch.objects.create(
+                                               user=request.user,
+                                               forum=self.forum,
+                                               thread=thread,
+                                               last_read=now,
+                                               email=(request.user.subscribe_start == 2),
+                                               )
+                    
+                if self.mode in ['new_post', 'new_post_quick'] and request.user.subscribe_reply:
+                    try:
+                        watcher = ThreadWatch.objects.get(user=request.user, thread=self.thread)
+                    except ThreadWatch.DoesNotExist:
+                        ThreadWatch.objects.create(
+                                                   user=request.user,
+                                                   forum=self.forum,
+                                                   thread=thread,
+                                                   last_read=now,
+                                                   email=(request.user.subscribe_reply == 2),
+                                                   )
+
                 # Set flash and redirect user to his post
                 if self.mode == 'new_thread':
                     if moderation:

+ 17 - 0
misago/usercp/options/forms.py

@@ -12,6 +12,16 @@ class UserForumOptionsForm(Form):
                                                (1, _("Show my presence to people I follow")),
                                                (2, _("Show my presence to nobody")),
                                                ))
+    subscribe_start = forms.ChoiceField(choices=(
+                                                 (0, _("Don't watch")),
+                                                 (1, _("Put on watched threads list")),
+                                                 (2, _("Put on watched threads list and e-mail me when somebody replies")),
+                                                 ))
+    subscribe_reply = forms.ChoiceField(choices=(
+                                                 (0, _("Don't watch")),
+                                                 (1, _("Put on watched threads list")),
+                                                 (2, _("Put on watched threads list and e-mail me when somebody replies")),
+                                                 ))
 
     layout = (
               (
@@ -22,4 +32,11 @@ class UserForumOptionsForm(Form):
                 ('newsletters', {'label': _("Newsletters"), 'help_text': _("On occasion board administrator may want to send e-mail message to multiple members."), 'inline': _("Yes, I want to subscribe forum newsletter")}),
                 )
                ),
+              (
+               _("Watching Threads"),
+               (
+                ('subscribe_start', {'label': _("Threads I start")}),
+                ('subscribe_reply', {'label': _("Threads I reply to")}),
+                )
+               ),
               )

+ 4 - 0
misago/usercp/options/views.py

@@ -17,6 +17,8 @@ def options(request):
             request.user.receive_newsletters = form.cleaned_data['newsletters']
             request.user.hide_activity = form.cleaned_data['hide_activity']
             request.user.timezone = form.cleaned_data['timezone']
+            request.user.subscribe_start = form.cleaned_data['subscribe_start']
+            request.user.subscribe_reply = form.cleaned_data['subscribe_reply']
             request.user.save(force_update=True)
             request.messages.set_flash(Message(_("Forum options have been changed.")), 'success', 'usercp_options')
             return redirect(reverse('usercp'))
@@ -26,6 +28,8 @@ def options(request):
                                                              'newsletters': request.user.receive_newsletters,
                                                              'hide_activity': request.user.hide_activity,
                                                              'timezone': request.user.timezone,
+                                                             'subscribe_start': request.user.subscribe_start,
+                                                             'subscribe_reply': request.user.subscribe_reply,
                                                              })
 
     return request.theme.render_to_response('usercp/options.html',

+ 4 - 1
misago/users/models.py

@@ -70,6 +70,8 @@ class UserManager(models.Manager):
                         token=token,
                         timezone=timezone,
                         rank=default_rank,
+                        subscribe_start=db_settings['subscribe_start'],
+                        subscribe_reply=db_settings['subscribe_reply'],
                         )
 
         new_user.set_username(username)
@@ -136,8 +138,9 @@ class User(models.Model):
     last_ip = models.GenericIPAddressField(null=True, blank=True)
     last_agent = models.TextField(null=True, blank=True)
     hide_activity = models.PositiveIntegerField(default=0)
-    alert_ats = models.PositiveIntegerField(default=0)
     allow_pms = models.PositiveIntegerField(default=0)
+    subscribe_start = models.PositiveIntegerField(default=0)
+    subscribe_reply = models.PositiveIntegerField(default=0)
     receive_newsletters = models.BooleanField(default=True)
     threads = models.PositiveIntegerField(default=0)
     posts = models.PositiveIntegerField(default=0)