示例#1
0
 def can_vote(self, user=None):
     from votes.models import Vote
     if (user and user.is_authenticated() and
         self.exhibition.can_see(user) and
         not Vote.can_delete_queryset(user=user, submission=self)):
         return True
     return False
示例#2
0
    def get_context_data(self, **kwargs):

        context = super(ListArtworkView, self).get_context_data(**kwargs)
        user_model = get_user_model()
        author_id = self._get_author_id()
        try:
            author = user_model.objects.get(id=author_id)
        except user_model.DoesNotExist:
            author = None
        context['author'] = author

        context['shared'] = self._get_shared()

        # Fetch submissions for these artworks
        artwork_ids = [ a.id for a in context['object_list']]
        submissions = Submission.objects.filter(artwork__id__in=artwork_ids).all()
        context['submissions'] = { s.artwork_id:s for s in submissions }

        # Fetch votes for these submissions
        submission_ids = [ s.id for s in submissions ]
        votes = Vote.can_delete_queryset(user=self.request.user, submission=submission_ids).all()
        context['votes'] = { v.submission_id:v for v in votes }

        # Store url for downloading code zip file
        url_name = self.request.resolver_match.url_name
        if not 'zip' in url_name:
            url_name = '%s-zip' % url_name
        kwargs = self.kwargs.copy()
        kwargs['shared'] = context['shared']
        context['zip_file_url'] = reverse(url_name, kwargs=kwargs)

        return context
示例#3
0
    def get_context_data(self, **kwargs):

        context = super(ListArtworkView, self).get_context_data(**kwargs)
        user_model = get_user_model()
        author_id = self._get_author_id()
        try:
            author = user_model.objects.get(id=author_id)
        except user_model.DoesNotExist:
            author = None
        context['author'] = author

        context['shared'] = self._get_shared()

        # Fetch submissions for these artworks
        artwork_ids = [a.id for a in context['object_list']]
        submissions = Submission.objects.filter(
            artwork__id__in=artwork_ids).all()
        context['submissions'] = {s.artwork_id: s for s in submissions}

        # Fetch votes for these submissions
        submission_ids = [s.id for s in submissions]
        votes = Vote.can_delete_queryset(user=self.request.user,
                                         submission=submission_ids).all()
        context['votes'] = {v.submission_id: v for v in votes}

        # Store url for downloading code zip file
        url_name = self.request.resolver_match.url_name
        if not 'zip' in url_name:
            url_name = '%s-zip' % url_name
        kwargs = self.kwargs.copy()
        kwargs['shared'] = context['shared']
        context['zip_file_url'] = reverse(url_name, kwargs=kwargs)

        return context
示例#4
0
    def get_context_data(self, **kwargs):
        context = super(ListSubmissionView, self).get_context_data(**kwargs)
        context['order'] = self._get_order_by()

        # Include in the current user's votes for this exhibition
        # as a dict of submission.id:vote
        exhibition = self._get_exhibition_id()
        votes = Vote.can_delete_queryset(user=self.request.user, exhibition=exhibition).all()
        context['votes'] = { v.submission_id:v for v in votes }

        # Store url for downloading code zip file
        if self.show_download:
            url_name = self.request.resolver_match.url_name
            if not 'zip' in url_name:
                url_name = '%s-zip' % url_name
            kwargs = self.kwargs.copy()
            context['zip_file_url'] = reverse(url_name, kwargs=kwargs)

        return context
    def get_context_data(self, **kwargs):
        context = super(ListSubmissionView, self).get_context_data(**kwargs)
        context['order'] = self._get_order_by()

        # Include in the current user's votes for this exhibition
        # as a dict of submission.id:vote
        exhibition = self._get_exhibition_id()
        votes = Vote.can_delete_queryset(user=self.request.user,
                                         exhibition=exhibition).all()
        context['votes'] = {v.submission_id: v for v in votes}

        # Store url for downloading code zip file
        if self.show_download:
            url_name = self.request.resolver_match.url_name
            if not 'zip' in url_name:
                url_name = '%s-zip' % url_name
            kwargs = self.kwargs.copy()
            context['zip_file_url'] = reverse(url_name, kwargs=kwargs)

        return context
示例#6
0
    def get_context_data(self, **kwargs):

        context = super(ShowSubmissionView, self).get_context_data(**kwargs)
        submission = self.get_object()

        # Include share url
        pk = submission.id
        context['share_url'] = ShareView.reverse_share_url(
            'submission-view',
            kwargs={'pk': pk})

        # Include in the current user's votes for this submission
        # as a dict of submission.id:vote
        votes = Vote.can_delete_queryset(user=self.request.user, submission=pk).all()
        context['votes'] = { v.submission_id:v for v in votes }

        context['DISQUS_IDENTIFIER'] = submission.disqus_identifier
        context['DISQUS_TITLE'] = '%s' % submission
        context['DISQUS_URL'] = self.request.build_absolute_uri(submission.get_absolute_url())

        return context
    def get_context_data(self, **kwargs):

        context = super(ShowSubmissionView, self).get_context_data(**kwargs)
        submission = self.get_object()

        # Include share url
        pk = submission.id
        context['share_url'] = ShareView.reverse_share_url('submission-view',
                                                           kwargs={'pk': pk})

        # Include in the current user's votes for this submission
        # as a dict of submission.id:vote
        votes = Vote.can_delete_queryset(user=self.request.user,
                                         submission=pk).all()
        context['votes'] = {v.submission_id: v for v in votes}

        context['DISQUS_IDENTIFIER'] = submission.disqus_identifier
        context['DISQUS_TITLE'] = '%s' % submission
        context['DISQUS_URL'] = self.request.build_absolute_uri(
            submission.get_absolute_url())

        return context
    def test_can_delete_queryset(self):

        exhibition1 = Exhibition.objects.create(
            title="Student Exhibition", description="description goes here", author=self.user
        )
        submission1 = Submission.objects.create(exhibition=exhibition1, artwork=self.artwork, submitted_by=self.user)

        exhibition2 = Exhibition.objects.create(
            title="Staff Exhibition", description="description goes here", author=self.user
        )
        submission2 = Submission.objects.create(
            exhibition=exhibition2, artwork=self.artwork, submitted_by=self.staff_user
        )

        student_vote1 = Vote.objects.create(submission=submission1, status=Vote.THUMBS_UP, voted_by=self.user)
        staff_vote1 = Vote.objects.create(submission=submission1, status=Vote.THUMBS_UP, voted_by=self.staff_user)
        super_vote1 = Vote.objects.create(submission=submission1, status=Vote.THUMBS_UP, voted_by=self.super_user)

        student_vote2 = Vote.objects.create(submission=submission2, status=Vote.THUMBS_UP, voted_by=self.user)
        staff_vote2 = Vote.objects.create(submission=submission2, status=Vote.THUMBS_UP, voted_by=self.staff_user)
        super_vote2 = Vote.objects.create(submission=submission2, status=Vote.THUMBS_UP, voted_by=self.super_user)

        # public can't delete any votes
        public_qs = Vote.can_delete_queryset()
        self.assertEquals(0, len(public_qs.all()))

        # students can delete own votes
        student_qs = Vote.can_delete_queryset(user=self.user)
        self.assertEquals(2, len(student_qs.all()))
        self.assertTrue(student_qs.all()[0].can_delete(user=self.user))
        self.assertTrue(student_qs.all()[1].can_delete(user=self.user))

        student_sub1_qs = Vote.can_delete_queryset(user=self.user, submission=submission1)
        self.assertEquals(1, len(student_sub1_qs.all()))
        self.assertEquals(student_vote1.id, student_sub1_qs.all()[0].id)
        self.assertTrue(student_sub1_qs.all()[0].can_delete(user=self.user))

        student_sub2_qs = Vote.can_delete_queryset(user=self.user, submission=submission2)
        self.assertEquals(1, len(student_sub2_qs.all()))
        self.assertEquals(student_vote2.id, student_sub2_qs.all()[0].id)
        self.assertTrue(student_sub2_qs.all()[0].can_delete(user=self.user))

        student_subs_qs = Vote.can_delete_queryset(user=self.user, submission=[submission1.id, submission2.id])
        self.assertEquals(2, len(student_subs_qs.all()))
        self.assertEquals(student_vote1.id, student_subs_qs.all()[0].id)
        self.assertEquals(student_vote2.id, student_subs_qs.all()[1].id)
        self.assertTrue(student_subs_qs.all()[0].can_delete(user=self.user))
        self.assertTrue(student_subs_qs.all()[1].can_delete(user=self.user))

        student_exh1_qs = Vote.can_delete_queryset(user=self.user, exhibition=exhibition1)
        self.assertEquals(1, len(student_exh1_qs.all()))
        self.assertEquals(student_vote1.id, student_exh1_qs.all()[0].id)
        self.assertTrue(student_qs.all()[0].can_delete(user=self.user))

        student_exh2_qs = Vote.can_delete_queryset(user=self.user, exhibition=exhibition2)
        self.assertEquals(1, len(student_exh2_qs.all()))
        self.assertEquals(student_vote2.id, student_exh2_qs.all()[0].id)
        self.assertTrue(student_exh2_qs.all()[0].can_delete(user=self.user))

        # staff can delete own votes
        staff_qs = Vote.can_delete_queryset(user=self.staff_user)
        self.assertEquals(2, len(staff_qs.all()))
        self.assertTrue(staff_qs.all()[0].can_delete(user=self.staff_user))
        self.assertTrue(staff_qs.all()[1].can_delete(user=self.staff_user))

        staff_sub1_qs = Vote.can_delete_queryset(user=self.staff_user, submission=submission1)
        self.assertEquals(1, len(staff_sub1_qs.all()))
        self.assertEquals(staff_vote1.id, staff_sub1_qs.all()[0].id)
        self.assertTrue(staff_sub1_qs.all()[0].can_delete(user=self.staff_user))

        staff_sub2_qs = Vote.can_delete_queryset(user=self.staff_user, submission=submission2)
        self.assertEquals(1, len(staff_sub2_qs.all()))
        self.assertEquals(staff_vote2.id, staff_sub2_qs.all()[0].id)
        self.assertTrue(staff_sub2_qs.all()[0].can_delete(user=self.staff_user))

        staff_subs_qs = Vote.can_delete_queryset(user=self.staff_user, submission=[submission1.id, submission2.id])
        self.assertEquals(2, len(staff_subs_qs.all()))
        self.assertEquals(staff_vote1.id, staff_subs_qs.all()[0].id)
        self.assertEquals(staff_vote2.id, staff_subs_qs.all()[1].id)
        self.assertTrue(staff_subs_qs.all()[0].can_delete(user=self.staff_user))
        self.assertTrue(staff_subs_qs.all()[1].can_delete(user=self.staff_user))

        staff_exh1_qs = Vote.can_delete_queryset(user=self.staff_user, exhibition=exhibition1)
        self.assertEquals(1, len(staff_exh1_qs.all()))
        self.assertEquals(staff_vote1.id, staff_exh1_qs.all()[0].id)
        self.assertTrue(staff_exh1_qs.all()[0].can_delete(user=self.staff_user))

        staff_exh2_qs = Vote.can_delete_queryset(user=self.staff_user, exhibition=exhibition2)
        self.assertEquals(1, len(staff_exh2_qs.all()))
        self.assertEquals(staff_vote2.id, staff_exh2_qs.all()[0].id)
        self.assertTrue(staff_exh2_qs.all()[0].can_delete(user=self.staff_user))

        # superusers can delete own votes
        super_qs = Vote.can_delete_queryset(user=self.super_user)
        self.assertEquals(2, len(super_qs.all()))
        self.assertTrue(super_qs.all()[0].can_delete(user=self.super_user))
        self.assertTrue(super_qs.all()[1].can_delete(user=self.super_user))

        super_sub1_qs = Vote.can_delete_queryset(user=self.super_user, submission=submission1)
        self.assertEquals(1, len(super_sub1_qs.all()))
        self.assertEquals(super_vote1.id, super_sub1_qs.all()[0].id)
        self.assertTrue(super_sub1_qs.all()[0].can_delete(user=self.super_user))

        super_sub2_qs = Vote.can_delete_queryset(user=self.super_user, submission=submission2)
        self.assertEquals(1, len(super_sub2_qs.all()))
        self.assertEquals(super_vote2.id, super_sub2_qs.all()[0].id)
        self.assertTrue(super_sub2_qs.all()[0].can_delete(user=self.super_user))

        super_subs_qs = Vote.can_delete_queryset(user=self.super_user, submission=[submission1.id, submission2.id])
        self.assertEquals(2, len(super_subs_qs.all()))
        self.assertEquals(super_vote1.id, super_subs_qs.all()[0].id)
        self.assertEquals(super_vote2.id, super_subs_qs.all()[1].id)
        self.assertTrue(super_subs_qs.all()[0].can_delete(user=self.super_user))
        self.assertTrue(super_subs_qs.all()[1].can_delete(user=self.super_user))

        super_exh1_qs = Vote.can_delete_queryset(user=self.super_user, exhibition=exhibition1)
        self.assertEquals(1, len(super_exh1_qs.all()))
        self.assertEquals(super_vote1.id, super_exh1_qs.all()[0].id)
        self.assertTrue(super_exh1_qs.all()[0].can_delete(user=self.super_user))

        super_exh2_qs = Vote.can_delete_queryset(user=self.super_user, exhibition=exhibition2)
        self.assertEquals(1, len(super_exh2_qs.all()))
        self.assertEquals(super_vote2.id, super_exh2_qs.all()[0].id)
        self.assertTrue(super_exh2_qs.all()[0].can_delete(user=self.super_user))
    def test_can_delete_queryset(self):

        exhibition1 = Exhibition.objects.create(
            title='Student Exhibition',
            description='description goes here',
            author=self.user)
        submission1 = Submission.objects.create(exhibition=exhibition1,
                                                artwork=self.artwork,
                                                submitted_by=self.user)

        exhibition2 = Exhibition.objects.create(
            title='Staff Exhibition',
            description='description goes here',
            author=self.user)
        submission2 = Submission.objects.create(exhibition=exhibition2,
                                                artwork=self.artwork,
                                                submitted_by=self.staff_user)

        student_vote1 = Vote.objects.create(submission=submission1,
                                            status=Vote.THUMBS_UP,
                                            voted_by=self.user)
        staff_vote1 = Vote.objects.create(submission=submission1,
                                          status=Vote.THUMBS_UP,
                                          voted_by=self.staff_user)
        super_vote1 = Vote.objects.create(submission=submission1,
                                          status=Vote.THUMBS_UP,
                                          voted_by=self.super_user)

        student_vote2 = Vote.objects.create(submission=submission2,
                                            status=Vote.THUMBS_UP,
                                            voted_by=self.user)
        staff_vote2 = Vote.objects.create(submission=submission2,
                                          status=Vote.THUMBS_UP,
                                          voted_by=self.staff_user)
        super_vote2 = Vote.objects.create(submission=submission2,
                                          status=Vote.THUMBS_UP,
                                          voted_by=self.super_user)

        # public can't delete any votes
        public_qs = Vote.can_delete_queryset()
        self.assertEquals(0, len(public_qs.all()))

        # students can delete own votes
        student_qs = Vote.can_delete_queryset(user=self.user)
        self.assertEquals(2, len(student_qs.all()))
        self.assertTrue(student_qs.all()[0].can_delete(user=self.user))
        self.assertTrue(student_qs.all()[1].can_delete(user=self.user))

        student_sub1_qs = Vote.can_delete_queryset(user=self.user,
                                                   submission=submission1)
        self.assertEquals(1, len(student_sub1_qs.all()))
        self.assertEquals(student_vote1.id, student_sub1_qs.all()[0].id)
        self.assertTrue(student_sub1_qs.all()[0].can_delete(user=self.user))

        student_sub2_qs = Vote.can_delete_queryset(user=self.user,
                                                   submission=submission2)
        self.assertEquals(1, len(student_sub2_qs.all()))
        self.assertEquals(student_vote2.id, student_sub2_qs.all()[0].id)
        self.assertTrue(student_sub2_qs.all()[0].can_delete(user=self.user))

        student_subs_qs = Vote.can_delete_queryset(
            user=self.user, submission=[submission1.id, submission2.id])
        self.assertEquals(2, len(student_subs_qs.all()))
        self.assertEquals(student_vote1.id, student_subs_qs.all()[0].id)
        self.assertEquals(student_vote2.id, student_subs_qs.all()[1].id)
        self.assertTrue(student_subs_qs.all()[0].can_delete(user=self.user))
        self.assertTrue(student_subs_qs.all()[1].can_delete(user=self.user))

        student_exh1_qs = Vote.can_delete_queryset(user=self.user,
                                                   exhibition=exhibition1)
        self.assertEquals(1, len(student_exh1_qs.all()))
        self.assertEquals(student_vote1.id, student_exh1_qs.all()[0].id)
        self.assertTrue(student_qs.all()[0].can_delete(user=self.user))

        student_exh2_qs = Vote.can_delete_queryset(user=self.user,
                                                   exhibition=exhibition2)
        self.assertEquals(1, len(student_exh2_qs.all()))
        self.assertEquals(student_vote2.id, student_exh2_qs.all()[0].id)
        self.assertTrue(student_exh2_qs.all()[0].can_delete(user=self.user))

        # staff can delete own votes
        staff_qs = Vote.can_delete_queryset(user=self.staff_user)
        self.assertEquals(2, len(staff_qs.all()))
        self.assertTrue(staff_qs.all()[0].can_delete(user=self.staff_user))
        self.assertTrue(staff_qs.all()[1].can_delete(user=self.staff_user))

        staff_sub1_qs = Vote.can_delete_queryset(user=self.staff_user,
                                                 submission=submission1)
        self.assertEquals(1, len(staff_sub1_qs.all()))
        self.assertEquals(staff_vote1.id, staff_sub1_qs.all()[0].id)
        self.assertTrue(
            staff_sub1_qs.all()[0].can_delete(user=self.staff_user))

        staff_sub2_qs = Vote.can_delete_queryset(user=self.staff_user,
                                                 submission=submission2)
        self.assertEquals(1, len(staff_sub2_qs.all()))
        self.assertEquals(staff_vote2.id, staff_sub2_qs.all()[0].id)
        self.assertTrue(
            staff_sub2_qs.all()[0].can_delete(user=self.staff_user))

        staff_subs_qs = Vote.can_delete_queryset(
            user=self.staff_user, submission=[submission1.id, submission2.id])
        self.assertEquals(2, len(staff_subs_qs.all()))
        self.assertEquals(staff_vote1.id, staff_subs_qs.all()[0].id)
        self.assertEquals(staff_vote2.id, staff_subs_qs.all()[1].id)
        self.assertTrue(
            staff_subs_qs.all()[0].can_delete(user=self.staff_user))
        self.assertTrue(
            staff_subs_qs.all()[1].can_delete(user=self.staff_user))

        staff_exh1_qs = Vote.can_delete_queryset(user=self.staff_user,
                                                 exhibition=exhibition1)
        self.assertEquals(1, len(staff_exh1_qs.all()))
        self.assertEquals(staff_vote1.id, staff_exh1_qs.all()[0].id)
        self.assertTrue(
            staff_exh1_qs.all()[0].can_delete(user=self.staff_user))

        staff_exh2_qs = Vote.can_delete_queryset(user=self.staff_user,
                                                 exhibition=exhibition2)
        self.assertEquals(1, len(staff_exh2_qs.all()))
        self.assertEquals(staff_vote2.id, staff_exh2_qs.all()[0].id)
        self.assertTrue(
            staff_exh2_qs.all()[0].can_delete(user=self.staff_user))

        # superusers can delete own votes
        super_qs = Vote.can_delete_queryset(user=self.super_user)
        self.assertEquals(2, len(super_qs.all()))
        self.assertTrue(super_qs.all()[0].can_delete(user=self.super_user))
        self.assertTrue(super_qs.all()[1].can_delete(user=self.super_user))

        super_sub1_qs = Vote.can_delete_queryset(user=self.super_user,
                                                 submission=submission1)
        self.assertEquals(1, len(super_sub1_qs.all()))
        self.assertEquals(super_vote1.id, super_sub1_qs.all()[0].id)
        self.assertTrue(
            super_sub1_qs.all()[0].can_delete(user=self.super_user))

        super_sub2_qs = Vote.can_delete_queryset(user=self.super_user,
                                                 submission=submission2)
        self.assertEquals(1, len(super_sub2_qs.all()))
        self.assertEquals(super_vote2.id, super_sub2_qs.all()[0].id)
        self.assertTrue(
            super_sub2_qs.all()[0].can_delete(user=self.super_user))

        super_subs_qs = Vote.can_delete_queryset(
            user=self.super_user, submission=[submission1.id, submission2.id])
        self.assertEquals(2, len(super_subs_qs.all()))
        self.assertEquals(super_vote1.id, super_subs_qs.all()[0].id)
        self.assertEquals(super_vote2.id, super_subs_qs.all()[1].id)
        self.assertTrue(
            super_subs_qs.all()[0].can_delete(user=self.super_user))
        self.assertTrue(
            super_subs_qs.all()[1].can_delete(user=self.super_user))

        super_exh1_qs = Vote.can_delete_queryset(user=self.super_user,
                                                 exhibition=exhibition1)
        self.assertEquals(1, len(super_exh1_qs.all()))
        self.assertEquals(super_vote1.id, super_exh1_qs.all()[0].id)
        self.assertTrue(
            super_exh1_qs.all()[0].can_delete(user=self.super_user))

        super_exh2_qs = Vote.can_delete_queryset(user=self.super_user,
                                                 exhibition=exhibition2)
        self.assertEquals(1, len(super_exh2_qs.all()))
        self.assertEquals(super_vote2.id, super_exh2_qs.all()[0].id)
        self.assertTrue(
            super_exh2_qs.all()[0].can_delete(user=self.super_user))
 def can_vote(self, user=None):
     from votes.models import Vote
     if (user and user.is_authenticated() and self.exhibition.can_see(user)
             and not Vote.can_delete_queryset(user=user, submission=self)):
         return True
     return False