From a4e68f8941437c39fa4bb762c3803238339a171f Mon Sep 17 00:00:00 2001 From: jordan Date: Mon, 14 Mar 2011 22:14:37 +0000 Subject: [PATCH] #OSQAAWS-79, the improved filtration of the content, now we check if the moderation module has been enabled or not. git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@838 0cfe37f9-358a-4d5e-be75-b63607b5c754 --- forum/models/node.py | 31 ++++++++++++++++++++++++++++--- forum/models/tag.py | 31 ++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/forum/models/node.py b/forum/models/node.py index d4d0442..b3ae67e 100644 --- a/forum/models/node.py +++ b/forum/models/node.py @@ -143,12 +143,37 @@ class NodeManager(CachedManager): use_for_related_fields = True def get_query_set(self): + CurrentUserHolder = None + + # We try to import from the moderation module. + try: + moderation_import = 'from %s.moderation.startup import CurrentUserHolder' % MODULES_PACKAGE + exec moderation_import + + moderation_enabled = True + except: + moderation_enabled = False + qs = NodeQuerySet(self.model) if self.model is not Node: - return qs.filter(node_type=self.model.get_type()) - else: - return qs + qs = qs.filter(node_type=self.model.get_type()) + + # If the moderation module has been enabled we make the filtration + if CurrentUserHolder is not None and moderation_enabled: + user = CurrentUserHolder.user + + try: + filter_content = not user.is_staff and not user.is_superuser + except: + filter_content = True + + if filter_content: + qs = qs.exclude(state_string__contains="(in_moderation)").exclude(state_string__contains="(deleted)").exclude( + state_string__contains="(rejected)" + ) + + return qs def get_for_types(self, types, *args, **kwargs): kwargs['node_type__in'] = [t.get_type() for t in types] diff --git a/forum/models/tag.py b/forum/models/tag.py index d189a1c..ce0d8de 100644 --- a/forum/models/tag.py +++ b/forum/models/tag.py @@ -8,7 +8,36 @@ import django.dispatch class ActiveTagManager(models.Manager): def get_query_set(self): - return super(ActiveTagManager, self).get_query_set().exclude(used_count__lt=1) + qs = super(ActiveTagManager, self).get_query_set().exclude(used_count__lt=1) + + CurrentUserHolder = None + + # We try to import the moderation module and if the import is successful we make the filtration + try: + moderation_import = 'from %s.moderation.startup import CurrentUserHolder' % MODULES_PACKAGE + exec moderation_import + + moderation_enabled= True + except: + moderation_enabled = False + + # If the moderation module has been enabled we make the filtration + if CurrentUserHolder is not None and moderation_enabled: + user = CurrentUserHolder.user + + try: + filter_content = not user.is_staff and not user.is_superuser + except: + filter_content = True + + if filter_content: + moderation_import = 'from %s.moderation.hooks import get_tag_ids' % MODULES_PACKAGE + exec moderation_import + qs = qs.exclude(id__in=get_tag_ids('deleted')).exclude(id__in=get_tag_ids('rejected')).exclude( + id__in=get_tag_ids('in_moderation') + ) + + return qs class Tag(BaseModel): name = models.CharField(max_length=255, unique=True) -- 2.39.5