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
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
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
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
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))