Browse Source

PD's privacy settings

Ralfp 12 years ago
parent
commit
f69b25db6d

+ 2 - 2
misago/apps/privatethreads/forms.py

@@ -28,8 +28,8 @@ class InviteUsersMixin(object):
                     if not user.acl(self.request).private_threads.can_participate():
                         raise forms.ValidationError(_('%(user)s cannot participate in private threads.') % {'user': user.username})
                     if (not self.request.acl.private_threads.can_invite_ignoring() and
-                        user.is_ignoring(self.request.user)):
-                        raise forms.ValidationError(_('%(user)s does not wish to participate in your private threads.') % {'user': user.username})
+                        user.allow_pd_invite(self.request.user)):
+                        raise forms.ValidationError(_('%(user)s restricts who can invite him to private threads.') % {'user': user.username})
                     self.invite_users.append(user)
                 except User.DoesNotExist:
                     raise forms.ValidationError(_('User "%(username)s" could not be found.') % {'username': username})

+ 2 - 2
misago/apps/privatethreads/jumps.py

@@ -62,8 +62,8 @@ class InviteUserView(JumpView, TypeMixin):
             if not acl.private_threads.can_participate():
                     self.request.messages.set_flash(Message(_('%(user)s cannot participate in private threads.') % {'user': user.username}), 'info', 'threads')
             elif (not self.request.acl.private_threads.can_invite_ignoring() and
-                    user.is_ignoring(self.request.user)):
-                self.request.messages.set_flash(Message(_('%(user)s does not wish to participate in your private threads.') % {'user': user.username}), 'info', 'threads')
+                    user.allow_pd_invite(self.request.user)):
+                self.request.messages.set_flash(Message(_('%(user)s restricts who can invite him to private threads.') % {'user': user.username}), 'info', 'threads')
             else:
                 self.thread.participants.add(user)
                 user.sync_pds = True

+ 28 - 16
misago/apps/usercp/options/forms.py

@@ -6,27 +6,39 @@ from misago.utils.timezones import tzlist
 class UserForumOptionsForm(Form):
     newsletters = forms.BooleanField(required=False)
     timezone = forms.ChoiceField(choices=tzlist())
-    hide_activity = forms.ChoiceField(choices=(
-                                               (0, _("Show my presence to everyone")),
-                                               (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")),
-                                                 ))
+    hide_activity = forms.TypedChoiceField(choices=(
+                                                    (0, _("Show my presence to everyone")),
+                                                    (1, _("Show my presence to people I follow")),
+                                                    (2, _("Show my presence to nobody")),
+                                                    ), coerce=int)
+    subscribe_start = forms.TypedChoiceField(choices=(
+                                                      (0, _("Don't watch")),
+                                                      (1, _("Put on watched threads list")),
+                                                      (2, _("Put on watched threads list and e-mail me when somebody replies")),
+                                                      ), coerce=int)
+    subscribe_reply = forms.TypedChoiceField(choices=(
+                                                      (0, _("Don't watch")),
+                                                      (1, _("Put on watched threads list")),
+                                                      (2, _("Put on watched threads list and e-mail me when somebody replies")),
+                                                      ), coerce=int)
+    allow_pds = forms.TypedChoiceField(choices=(
+                                                (0, _("From everyone")),
+                                                (1, _("From everyone but not members I ignore")),
+                                                (2, _("From members I follow")),
+                                                (2, _("From nobody")),
+                                                ), coerce=int)
 
     layout = (
               (
-               _("Forum Options"),
+               _("Privacy"),
                (
                 ('hide_activity', {'label': _("Your Visibility"), 'help_text': _("If you want to, you can limit other members ability to track your presence on forums.")}),
+                ('allow_pds', {'label': _("Allow Private Threads Invitations"), 'help_text': _("If you wish, you can restrict who can invite you to private threads. Keep in mind some groups or members may be allowed to override this preference.")}),
+                )
+               ),
+              (
+               _("Forum Options"),
+               (
                 ('timezone', {'label': _("Your Current Timezone"), 'help_text': _("If dates and hours displayed by forums are inaccurate, you can fix it by adjusting timezone setting.")}),
                 ('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")}),
                 )

+ 3 - 1
misago/apps/usercp/options/views.py

@@ -13,8 +13,9 @@ def options(request):
     if request.method == 'POST':
         form = UserForumOptionsForm(request.POST, request=request)
         if form.is_valid():
-            request.user.receive_newsletters = form.cleaned_data['newsletters']
             request.user.hide_activity = form.cleaned_data['hide_activity']
+            request.user.allow_pds = form.cleaned_data['allow_pds']
+            request.user.receive_newsletters = form.cleaned_data['newsletters']
             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']
@@ -26,6 +27,7 @@ def options(request):
         form = UserForumOptionsForm(request=request, initial={
                                                              'newsletters': request.user.receive_newsletters,
                                                              'hide_activity': request.user.hide_activity,
+                                                             'allow_pds': request.user.allow_pds,
                                                              'timezone': request.user.timezone,
                                                              'subscribe_start': request.user.subscribe_start,
                                                              'subscribe_reply': request.user.subscribe_reply,

+ 13 - 1
misago/models/usermodel.py

@@ -139,7 +139,6 @@ 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)
-    allow_pms = models.PositiveIntegerField(default=0)
     subscribe_start = models.PositiveIntegerField(default=0)
     subscribe_reply = models.PositiveIntegerField(default=0)
     receive_newsletters = models.BooleanField(default=True)
@@ -163,6 +162,7 @@ class User(models.Model):
     last_search = models.DateTimeField(null=True, blank=True)
     alerts = models.PositiveIntegerField(default=0)
     alerts_date = models.DateTimeField(null=True, blank=True)
+    allow_pds = models.PositiveIntegerField(default=0)
     unread_pds = models.PositiveIntegerField(default=0)
     sync_pds = models.BooleanField(default=False)
     activation = models.IntegerField(default=0)
@@ -405,6 +405,18 @@ class User(models.Model):
     def ignored_users(self):
         return [item['id'] for item in self.ignores.values('id')]
 
+    def allow_pd_invite(self, user):
+        # PD's from nobody
+        if self.allow_pds == 3:
+            return False
+        # PD's from followed
+        if self.allow_pds == 2:
+            return self.is_following(user)
+        # PD's from non-ignored
+        if self.allow_pds == 1:
+            return not self.is_ignoring(user)
+        return True
+
     def get_roles(self):
         return self.roles.all()