Browse Source

Make Private Threads unaccessible when they are turned off.

Ralfp 12 years ago
parent
commit
5eafab91c8

+ 3 - 0
misago/apps/privatethreads/mixins.py

@@ -6,6 +6,9 @@ from misago.acl.exceptions import ACLError404
 class TypeMixin(object):
 class TypeMixin(object):
     type_prefix = 'private_thread'
     type_prefix = 'private_thread'
 
 
+    def type_available(self):
+        return self.request.settings['enable_private_threads']
+
     def check_permissions(self):
     def check_permissions(self):
         try:
         try:
             if self.thread.pk:
             if self.thread.pk:

+ 7 - 0
misago/apps/threadtype/base.py

@@ -9,6 +9,13 @@ class ViewBase(object):
         obj = super(ViewBase, cls).__new__(cls)
         obj = super(ViewBase, cls).__new__(cls)
         return obj(request, **kwargs)
         return obj(request, **kwargs)
         
         
+    def _type_available(self):
+        try:
+            if not self.type_available():
+                raise Http404()
+        except AttributeError:
+            pass
+
     def set_forum_context(self):
     def set_forum_context(self):
         pass
         pass
 
 

+ 1 - 0
misago/apps/threadtype/changelog.py

@@ -36,6 +36,7 @@ class ChangelogBaseView(ViewBase):
         self.post = None
         self.post = None
         self.parents = []
         self.parents = []
         try:
         try:
+            self._type_available()
             self.fetch_target()
             self.fetch_target()
             self._check_permissions()
             self._check_permissions()
             if not request.user.is_authenticated():
             if not request.user.is_authenticated():

+ 1 - 0
misago/apps/threadtype/delete.py

@@ -30,6 +30,7 @@ class DeleteHideBaseView(ViewBase):
         self.kwargs = kwargs
         self.kwargs = kwargs
         self.parents = []
         self.parents = []
         try:
         try:
+            self._type_available()
             self._set_context()
             self._set_context()
             self._check_permissions()
             self._check_permissions()
             self.delete()
             self.delete()

+ 1 - 0
misago/apps/threadtype/details.py

@@ -26,6 +26,7 @@ class ExtraBaseView(ViewBase):
         self.post = None
         self.post = None
         self.parents = []
         self.parents = []
         try:
         try:
+            self._type_available()
             self.fetch_target()
             self.fetch_target()
             self.check_acl()
             self.check_acl()
             self._check_permissions()
             self._check_permissions()

+ 1 - 0
misago/apps/threadtype/jumps.py

@@ -30,6 +30,7 @@ class JumpView(ViewBase):
         self.request = request
         self.request = request
         self.parents = []
         self.parents = []
         try:
         try:
+            self._type_available()
             self.fetch_thread(thread)
             self.fetch_thread(thread)
             if self.forum.level:
             if self.forum.level:
                 self.parents = Forum.objects.forum_parents(self.forum.pk, True)
                 self.parents = Forum.objects.forum_parents(self.forum.pk, True)

+ 1 - 0
misago/apps/threadtype/list/views.py

@@ -94,6 +94,7 @@ class ThreadsListBaseView(ViewBase):
         self.threads = []
         self.threads = []
         self.message = request.messages.get_message('threads')
         self.message = request.messages.get_message('threads')
         try:
         try:
+            self._type_available()
             self._fetch_forum()
             self._fetch_forum()
             self._check_permissions()
             self._check_permissions()
             self.fetch_threads()
             self.fetch_threads()

+ 1 - 0
misago/apps/threadtype/posting/base.py

@@ -80,6 +80,7 @@ class PostingBaseView(ViewBase):
         form = None
         form = None
 
 
         try:
         try:
+            self._type_available()
             self._set_context()
             self._set_context()
             self.check_forum_type()
             self.check_forum_type()
             self._check_permissions()
             self._check_permissions()

+ 1 - 0
misago/apps/threadtype/thread/views.py

@@ -169,6 +169,7 @@ class ThreadBaseView(ViewBase):
         self.watcher = False
         self.watcher = False
         self.message = request.messages.get_message('threads')
         self.message = request.messages.get_message('threads')
         try:
         try:
+            self._type_available()
             self.fetch_thread()
             self.fetch_thread()
             self.check_forum_type()
             self.check_forum_type()
             self._check_permissions()
             self._check_permissions()

+ 4 - 1
misago/apps/watchedthreads/views.py

@@ -13,7 +13,10 @@ from misago.utils.pagination import make_pagination
 @block_guest
 @block_guest
 def watched_threads(request, page=0, new=False):
 def watched_threads(request, page=0, new=False):
     # Find mode and fetch threads
     # Find mode and fetch threads
-    queryset = WatchedThread.objects.filter(user=request.user).filter(forum_id__in=Forum.objects.readable_forums(request.acl, True)).select_related('thread').filter(thread__moderated=False).filter(thread__deleted=False)
+    readable_forums = Forum.objects.readable_forums(request.acl, True)
+    if not request.settings['enable_private_threads']:
+        readable_forums.remove(Forum.objects.special_pk('private_threads'))
+    queryset = WatchedThread.objects.filter(user=request.user).filter(forum_id__in=readable_forums).select_related('thread').filter(thread__moderated=False).filter(thread__deleted=False)
     if new:
     if new:
         queryset = queryset.filter(last_read__lt=F('thread__last'))
         queryset = queryset.filter(last_read__lt=F('thread__last'))
     count = queryset.count()
     count = queryset.count()

+ 1 - 1
templates/cranefly/layout.html

@@ -51,7 +51,7 @@
         <ul class="nav navbar-blocks pull-right">
         <ul class="nav navbar-blocks pull-right">
           <li class="user-profile"><a href="{% url 'user' user=user.id, username=user.username_slug %}" title="{% trans %}Go to your profile{% endtrans %}" class="tooltip-bottom"><div><img src="{{ user.get_avatar(28) }}" alt=""> {{ user.username }}</div></a></li>
           <li class="user-profile"><a href="{% url 'user' user=user.id, username=user.username_slug %}" title="{% trans %}Go to your profile{% endtrans %}" class="tooltip-bottom"><div><img src="{{ user.get_avatar(28) }}" alt=""> {{ user.username }}</div></a></li>
           <li><a href="{% url 'alerts' %}" title="{% if user.alerts %}{% trans %}You have new notifications!{% endtrans %}{% else %}{% trans %}Your Notifications{% endtrans %}{% endif %}" class="tooltip-bottom"><i class="icon-asterisk"></i>{% if user.alerts %}<span class="label label-important">{{ user.alerts }}</span>{% endif %}</a></li>
           <li><a href="{% url 'alerts' %}" title="{% if user.alerts %}{% trans %}You have new notifications!{% endtrans %}{% else %}{% trans %}Your Notifications{% endtrans %}{% endif %}" class="tooltip-bottom"><i class="icon-asterisk"></i>{% if user.alerts %}<span class="label label-important">{{ user.alerts }}</span>{% endif %}</a></li>
-          {% if settings.enable_private_threads and acl.forums.can_browse(private_threads) and acl.threads.can_read_threads(private_threads) %}
+          {% if settings.enable_private_threads and acl.private_threads.can_participate() %}
           <li><a href="{% url 'private_threads' %}" title="{% if user.unread_pds %}{% trans %}There are unread Private Threads!{% endtrans %}{% else %}{% trans %}Your Private Threads{% endtrans %}{% endif %}" class="tooltip-bottom"><i class="icon-inbox"></i>{% if user.unread_pds %}<span class="label label-important">{{ user.unread_pds }}</span>{% endif %}</a></li>
           <li><a href="{% url 'private_threads' %}" title="{% if user.unread_pds %}{% trans %}There are unread Private Threads!{% endtrans %}{% else %}{% trans %}Your Private Threads{% endtrans %}{% endif %}" class="tooltip-bottom"><i class="icon-inbox"></i>{% if user.unread_pds %}<span class="label label-important">{{ user.unread_pds }}</span>{% endif %}</a></li>
           {% endif %}
           {% endif %}
           <li><a href="{% url 'newsfeed' %}" title="{% trans %}Your News Feed{% endtrans %}" class="tooltip-bottom"><i class="icon-signal"></i></a></li>
           <li><a href="{% url 'newsfeed' %}" title="{% trans %}Your News Feed{% endtrans %}" class="tooltip-bottom"><i class="icon-signal"></i></a></li>