Esempio n. 1
0
    def post(self, request, *args, **kwargs):
        if request.is_ajax():
            image = get_object_or_404(Image, pk=kwargs.get('pk'))
            ret = None

            try:
                # Only delete it if it's in the future and from the same
                # judge.
                iotd = Iotd.objects.get(image=image)
                if iotd.date <= datetime.now().date():
                    ret = {
                        'iotd': iotd.pk,
                        'date': formats.date_format(iotd.date, "SHORT_DATE_FORMAT"),
                        'used_today': iotd_elections_today(request.user),
                        'error': ugettext("You cannot unelect a past or current IOTD."),
                    }
                elif iotd.judge != request.user:
                    ret = {
                        'iotd': iotd.pk,
                        'date': formats.date_format(iotd.date, "SHORT_DATE_FORMAT"),
                        'used_today': iotd_elections_today(request.user),
                        'error': ugettext("You cannot unelect an IOTD elected by another judge."),
                    }
                else:
                    iotd.delete()
                    ret = {
                        'used_today': iotd_elections_today(request.user),
                    }
            except Iotd.DoesNotExist:
                max_days = settings.IOTD_JUDGEMENT_MAX_FUTURE_DAYS
                for date in (datetime.now().date() + timedelta(n) for n in range(max_days)):
                    try:
                        iotd = Iotd.objects.get(date=date)
                    except Iotd.DoesNotExist:
                        may, reason = may_elect_iotd(request.user, image)
                        if may:
                            iotd = Iotd.objects.create(
                                judge=request.user,
                                image=image,
                                date=date)
                            ret = {
                                'iotd': iotd.pk,
                                'date': formats.date_format(iotd.date, "SHORT_DATE_FORMAT"),
                                'used_today': iotd_elections_today(request.user),
                            }
                        else:
                            ret = {
                                'error': reason,
                            }

                        break
                if not ret:
                    ret = {
                        'error': ugettext("All IOTD slots for the next %(days)s days are already filled.") % {
                            'days': max_days,
                        },
                    }
            return self.render_json_response(ret)

        return HttpResponseForbidden()
Esempio n. 2
0
 def create(self, request, *args, **kwargs):
     try:
         image = Image.objects.get(pk=str(request.data.get('image')))
         may, reason = may_elect_iotd(request.user, image)
         if not may:
             return HttpResponseForbidden(reason)
         return super().create(request, *args, **kwargs)
     except ValidationError as e:
         return HttpResponseForbidden(str(e))
Esempio n. 3
0
def may_not_elect_reason(user, image):
    may, reason = may_elect_iotd(user, image)
    return reason
Esempio n. 4
0
def may_elect(user, image):
    may, reason = may_elect_iotd(user, image)
    return may
Esempio n. 5
0
 def clean(self):
     may, reason = may_elect_iotd(self.judge, self.image)
     if not may:
         raise ValidationError(reason)