Commit 69144042dc03637b2b98e0e22407db0ff8716b10

Authored by Zambom
1 parent 7b215765

Adjusting subject mural post with resource visualization permissions

Showing 2 changed files with 52 additions and 22 deletions   Show diff stats
mural/utils.py
1 1 from django.db.models import Q
2 2  
  3 +from .models import SubjectPost
  4 +
3 5 from users.models import User
4 6  
5 7 def getSpaceUsers(user, post):
... ... @@ -19,4 +21,50 @@ def getSpaceUsers(user, post):
19 21 else:
20 22 return User.objects.filter(Q(is_staff = True) | Q(professors__id = space) | Q(coordinators__subject_category__id = space) | Q(subject_student__id = space)).exclude(id = user).distinct()
21 23  
22   - return None
23 24 \ No newline at end of file
  25 + return None
  26 +
  27 +def getSubjectPosts(subject, user, favorites, mines):
  28 + if not favorites:
  29 + if mines:
  30 + if not user.is_staff:
  31 + posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(mural_mural.last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(
  32 + Q(space__id = subject) & Q(mural_ptr__user = user) & (
  33 + Q(space__category__coordinators = user) |
  34 + Q(space__professor = user) |
  35 + Q(resource__isnull = True) |
  36 + (Q(resource__isnull = False) & (Q(resource__all_students = True) | Q(resource__students = user) | Q(resource__groups__participants = user))))).distinct()
  37 + else:
  38 + posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(mural_mural.last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(space__id = subject, mural_ptr__user = user)
  39 + else:
  40 + if not user.is_staff:
  41 + posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(mural_mural.last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(
  42 + Q(space__id = subject) & (
  43 + Q(space__category__coordinators = user) |
  44 + Q(space__professor = user) |
  45 + Q(resource__isnull = True) |
  46 + (Q(resource__isnull = False) & (Q(resource__all_students = True) | Q(resource__students = user) | Q(resource__groups__participants = user))))).distinct()
  47 + else:
  48 + posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(mural_mural.last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(space__id = subject)
  49 + else:
  50 + if mines:
  51 + if not user.is_staff:
  52 + posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(mural_mural.last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(
  53 + Q(space__id = subject) & Q(favorites_post__isnull = False) & Q(favorites_post__user = user) & Q(mural_ptr__user = user) & (
  54 + Q(space__category__coordinators = user) |
  55 + Q(space__professor = user) |
  56 + Q(resource__isnull = True) |
  57 + (Q(resource__isnull = False) & (Q(resource__all_students = True) | Q(resource__students = user) | Q(resource__groups__participants = user))))).distinct()
  58 + else:
  59 + posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(mural_mural.last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(space__id = subject, favorites_post__isnull = False, favorites_post__user = user, mural_ptr__user = user)
  60 + else:
  61 + if not user.is_staff:
  62 + posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(mural_mural.last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(
  63 + Q(space__id = subject) & Q(favorites_post__isnull = False) & Q(favorites_post__user = user) & (
  64 + Q(space__category__coordinators = user) |
  65 + Q(space__professor = user) |
  66 + Q(resource__isnull = True) |
  67 + (Q(resource__isnull = False) & (Q(resource__all_students = True) | Q(resource__students = user) | Q(resource__groups__participants = user))))).distinct()
  68 + else:
  69 + posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(mural_mural.last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(space__id = subject, favorites_post__isnull = False, favorites_post__user = user)
  70 +
  71 + return posts
24 72 \ No newline at end of file
... ...
mural/views.py
... ... @@ -29,7 +29,7 @@ from api.utils import sendMuralPushNotification
29 29  
30 30 from .models import Mural, GeneralPost, CategoryPost, SubjectPost, MuralVisualizations, MuralFavorites, Comment
31 31 from .forms import GeneralPostForm, CategoryPostForm, SubjectPostForm, ResourcePostForm, CommentForm
32   -from .utils import getSpaceUsers
  32 +from .utils import getSpaceUsers, getSubjectPosts
33 33  
34 34 from amadeus.permissions import has_subject_view_permissions, has_resource_permissions
35 35  
... ... @@ -593,16 +593,7 @@ def load_subject_posts(request, subject):
593 593 showing = request.GET.get('showing', '')
594 594 n_views = 0
595 595  
596   - if not favorites:
597   - if mines:
598   - posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(space__id = subject, mural_ptr__user = user)
599   - else:
600   - posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(space__id = subject)
601   - else:
602   - if mines:
603   - posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(space__id = subject, favorites_post__isnull = False, favorites_post__user = user, mural_ptr__user = user)
604   - else:
605   - posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(space__id = subject, favorites_post__isnull = False, favorites_post__user = user)
  596 + posts = getSubjectPosts(subject, user, favorites, mines)
606 597  
607 598 if showing: #Exclude ajax creation posts results
608 599 showing = showing.split(',')
... ... @@ -937,16 +928,7 @@ class SubjectView(LoginRequiredMixin, LogMixin, generic.ListView):
937 928 slug = self.kwargs.get('slug')
938 929 subject = get_object_or_404(Subject, slug = slug)
939 930  
940   - if not favorites:
941   - if mines:
942   - posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(mural_ptr__user = user, space = subject)
943   - else:
944   - posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(space = subject)
945   - else:
946   - if mines:
947   - posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(favorites_post__isnull = False, favorites_post__user = user, mural_ptr__user = user, space = subject)
948   - else:
949   - posts = SubjectPost.objects.extra(select = {"most_recent": "greatest(last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_subjectpost.mural_ptr_id))"}).filter(favorites_post__isnull = False, favorites_post__user = user, space = subject)
  931 + posts = getSubjectPosts(subject, user, favorites, mines)
950 932  
951 933 if showing: #Exclude ajax creation posts results
952 934 showing = showing.split(',')
... ...