示例#1
0
def entries_csv(request, sel_event_id):
    entries = []

    # Get event
    event = get_object_or_404(Event, pk=sel_event_id)

    # Find all compos and their top 3 entries
    compos = Compo.objects.filter(event=event)

    # Get the entries
    for compo in compos:
        compo_results = entrysort.sort_by_score(Entry.objects.filter(compo=compo))
        if len(compo_results) > 3:
            entries = entries + compo_results[:3]
        else:
            entries = entries + compo_results

    # Placements, copypasta
    for entry in entries:
        m = entry.get_rank()
        if m == 1:
            entry.placement = 'I'
        if m == 2:
            entry.placement = 'II'
        if m == 3:
            entry.placement = 'III'

    # Respond with entries CSV (text/csv)
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="instanssi_entries.csv"'
    t = loader.get_template('admin_kompomaatti/entries_csv.txt')
    response.write(t.render({
        'entries': entries,
    }))
    return response
示例#2
0
def json_event(request, event_id):
    _event = get_object_or_404(Event, pk=int(event_id), archived=True)

    # Get all compos that are active but not hidden from archive
    entries_out = []
    compos_out = []
    for c in Compo.objects.filter(event=_event, active=True, hide_from_archive=False):
        if c.show_voting_results:
            entries = entrysort.sort_by_score(Entry.objects.filter(compo=c))
        else:
            entries = Entry.objects.filter(compo=c).order_by("name")

        compos_out.append({"id": c.pk, "name": c.name, "entry_count": len(entries)})

        for e in entries:
            entries_out.append(
                {
                    "id": e.id,
                    "compo_name": c.name,
                    "compo_id": c.pk,
                    "entry_name": e.name,
                    "entry_author": e.creator,
                    "entry_score": round(e.get_score(), 2),
                    "entry_rank": e.get_rank(),
                    "entry_result_url": get_url(e.entryfile.url),
                    "entry_source_url": get_url(e.sourcefile.url) if e.sourcefile else None,
                    "entry_youtube_url": e.youtube_url if e.youtube_url else None,
                    "entry_image_thumbnail": get_url(e.imagefile_thumbnail.url) if e.imagefile_thumbnail else None,
                    "entry_image_medium": get_url(e.imagefile_medium.url) if e.imagefile_medium else None,
                    "entry_image_original": get_url(e.imagefile_original.url) if e.imagefile_original else None,
                }
            )

    return JsonResponse({"entries": entries_out, "compos": compos_out})
示例#3
0
def results(request, sel_event_id):
    # Get compos. competitions
    compos = Compo.objects.filter(event_id=int(sel_event_id))
    competitions = Competition.objects.filter(event_id=int(sel_event_id))

    # Get the entries
    compo_results = {}
    for compo in compos:
        compo_results[compo] = entrysort.sort_by_score(Entry.objects.filter(compo=compo))
    
    # Get competition participations
    competition_results = {}
    for competition in competitions:
        rankby = '-score'
        if competition.score_sort == 1:
            rankby = 'score'
        competition_results[competition.name] = \
            CompetitionParticipation.objects.filter(competition=competition).order_by(rankby)
    
    # Render response
    return admin_render(request, "admin_kompomaatti/results.html", {
        'compo_results': compo_results,
        'competition_results': competition_results,
        'selected_event_id': int(sel_event_id),
    })
示例#4
0
def slide_entries(request, sel_event_id, compo_id):
    # Get the compo
    c = get_object_or_404(Compo, pk=compo_id)
    
    # Get the entries
    s_entries = entrysort.sort_by_score(Entry.objects.filter(compo=c, disqualified=False))

    i = 0
    flip = False
    f_entries = []
    for entry in s_entries:
        if flip: g = 180
        else: g = 0
        f_entries.append({
            'id': entry.id,
            'creator': entry.creator,
            'name': entry.name,
            'x': 0,
            'y': -i * 2500,
            'z': 0,
            'rot_y': 0,
            'rot_x': g,
            'rot_z': 0,
        })
        i = i + 1
        flip = not flip

    # Render
    return admin_render(request, 'admin_slides/slide_entries.html', {
        'entries': f_entries,
        'compo': c,
        'last_y': - i * 2500,
        'last_rot_x': flip,
        'selected_event_id': int(sel_event_id),
    })
示例#5
0
def results(request, sel_event_id):
    # Get compos. competitions
    compos = Compo.objects.filter(event_id=int(sel_event_id))
    competitions = Competition.objects.filter(event_id=int(sel_event_id))

    # Get the entries
    compo_results = {}
    for compo in compos:
        compo_results[compo] = entrysort.sort_by_score(
            Entry.objects.filter(compo=compo))

    # Get competition participations
    competition_results = {}
    for competition in competitions:
        rankby = '-score'
        if competition.score_sort == 1:
            rankby = 'score'
        competition_results[competition.name] = \
            CompetitionParticipation.objects.filter(competition=competition).order_by(rankby)

    # Render response
    return admin_render(
        request, "admin_kompomaatti/results.html", {
            'compo_results': compo_results,
            'competition_results': competition_results,
            'selected_event_id': int(sel_event_id),
        })
示例#6
0
def json_event(request, event_id):
    _event = get_object_or_404(Event, pk=int(event_id), archived=True)

    # Get all compos that are active but not hidden from archive
    entries_out = []
    compos_out = []
    for c in Compo.objects.filter(event=_event,
                                  active=True,
                                  hide_from_archive=False):
        if c.show_voting_results:
            entries = entrysort.sort_by_score(Entry.objects.filter(compo=c))
        else:
            entries = Entry.objects.filter(compo=c).order_by('name')

        compos_out.append({
            'id': c.pk,
            'name': c.name,
            'entry_count': len(entries)
        })

        for e in entries:
            entries_out.append({
                'id':
                e.id,
                'compo_name':
                c.name,
                'compo_id':
                c.pk,
                'entry_name':
                e.name,
                'entry_author':
                e.creator,
                'entry_score':
                round(e.get_score(), 2),
                'entry_rank':
                e.get_rank(),
                'entry_result_url':
                get_url(e.entryfile.url),
                'entry_source_url':
                get_url(e.sourcefile.url) if e.sourcefile else None,
                'entry_youtube_url':
                e.youtube_url if e.youtube_url else None,
                'entry_image_thumbnail':
                get_url(e.imagefile_thumbnail.url)
                if e.imagefile_thumbnail else None,
                'entry_image_medium':
                get_url(e.imagefile_medium.url)
                if e.imagefile_medium else None,
                'entry_image_original':
                get_url(e.imagefile_original.url)
                if e.imagefile_original else None
            })

    return JsonResponse({'entries': entries_out, 'compos': compos_out})
示例#7
0
def slide_results(request, sel_event_id, compo_id):
    # Get the compo
    c = get_object_or_404(Compo, pk=compo_id)

    # Get the entries
    s_entries = entrysort.sort_by_score(
        Entry.objects.filter(compo=c, disqualified=False))

    i = 0
    f_entries = []
    for entry in reversed(s_entries[:3]):
        f_entries.append({
            'id': entry.id,
            'creator': entry.creator,
            'name': entry.name,
            'platform': entry.platform,
            'score': entry.get_score(),
            'score_x': 0,
            'score_y': i * 2000,
            'score_z': i * 2000,
            'info_x': 0,
            'info_y': i * 2000 + 2000,
            'info_z': i * 2000 + 2000,
            'rank': entry.get_rank(),
        })
        i += 2

    r_entries = []
    for entry in s_entries[3:]:
        r_entries.append({
            'id': entry.id,
            'creator': entry.creator,
            'name': entry.name,
            'score': entry.get_score(),
            'rank': entry.get_rank(),
        })

    i += 1

    # Render
    return admin_render(
        request, 'admin_slides/slide_results.html', {
            'entries': f_entries,
            'r_entries': r_entries,
            'compo': c,
            'endinfo_x': 0,
            'endinfo_y': (i + 1) * 2000,
            'endinfo_z': (i + 1) * 2000,
            'last_x': 0,
            'last_y': (i + 2) * 2000,
            'last_z': (i + 2) * 2000,
            'selected_event_id': int(sel_event_id),
        })
示例#8
0
    def get_rank(self):
        # If rank has been predefined, then use that
        if self.archive_rank:
            return self.archive_rank

        # Otherwise calculate ranks by score
        entries = entrysort.sort_by_score(Entry.objects.filter(compo=self.compo))
        n = 1
        for e in entries:
            if e.id == self.id:
                return n
            n += 1
        return n
示例#9
0
 def get_rank(self):
     # If rank has been predefined, then use that
     if self.archive_rank:
         return self.archive_rank
     
     # Otherwise calculate ranks by score
     entries = entrysort.sort_by_score(Entry.objects.filter(compo=self.compo))
     n = 1
     for e in entries:
         if e.id == self.id:
             return n
         n += 1
     return n
示例#10
0
def slide_results(request, sel_event_id, compo_id):
    # Get the compo
    c = get_object_or_404(Compo, pk=compo_id)
    
    # Get the entries
    s_entries = entrysort.sort_by_score(Entry.objects.filter(compo=c, disqualified=False))
    
    i = 0
    f_entries = []
    for entry in reversed(s_entries[:3]):
        f_entries.append({
            'id': entry.id,
            'creator': entry.creator,
            'name': entry.name,
            'score': entry.get_score(),
            'score_x': 0,
            'score_y': i * 2000,
            'score_z': i * 2000,
            'info_x': 0,
            'info_y': i * 2000 + 2000,
            'info_z': i * 2000 + 2000,
            'rank': entry.get_rank(),
        })
        i = i + 2

    r_entries = []
    for entry in s_entries[3:]:
        r_entries.append({
            'id': entry.id,
            'creator': entry.creator,
            'name': entry.name,
            'score': entry.get_score(),
            'rank': entry.get_rank(),
        })

    i = i + 1

    # Render
    return admin_render(request, 'admin_slides/slide_results.html', {
        'entries': f_entries,
        'r_entries': r_entries,
        'compo': c,
        'endinfo_x': 0,
        'endinfo_y': (i+1) * 2000,
        'endinfo_z': (i+1) * 2000,
        'last_x': 0,
        'last_y': (i+2) * 2000,
        'last_z': (i+2) * 2000,
        'selected_event_id': int(sel_event_id),
    })
示例#11
0
def text_event(request, event_id):
    _event = get_object_or_404(Event, pk=int(event_id), archived=True)

    # Get all compos that are active but not hidden from archive
    compos = []
    for compo in Compo.objects.filter(event=_event, active=True, hide_from_archive=False):
        if compo.show_voting_results:
            compo.entries = entrysort.sort_by_score(Entry.objects.filter(compo=compo))
        else:
            compo.entries = Entry.objects.filter(compo=compo).order_by("name")
        compos.append(compo)

    # Render Event frontpage
    return render(
        request, "arkisto/results.txt", {"event": _event, "compos": compos}, content_type="text/plain; charset=utf-8"
    )
示例#12
0
def event(request, event_id):
    # Get event
    event_obj = get_object_or_404(Event, pk=event_id, archived=True)

    # Filter compos, videos and competitions
    compos_q = Compo.objects.filter(event=event_obj,
                                    active=True,
                                    hide_from_archive=False)
    videos_q = OtherVideoCategory.objects.filter(
        event=event_obj).order_by('name')
    competitions_q = Competition.objects.filter(
        event=event_obj, active=True, hide_from_archive=False).order_by('name')

    # Get all compos that are active but not hidden from archive
    compo_list = []
    for compo in compos_q:
        if compo.show_voting_results:
            compo.entries = entrysort.sort_by_score(
                Entry.objects.filter(compo=compo))
        else:
            compo.entries = Entry.objects.filter(compo=compo).order_by('name')
        compo_list.append(copy(compo))

    # Get other videos
    video_list = []
    for cat in videos_q:
        cat.videos = OtherVideo.objects.filter(category=cat)
        video_list.append(copy(cat))

    # Get competitions
    competition_list = []
    for comp in competitions_q:
        rankby = '-score'
        if comp.score_sort == 1:
            rankby = 'score'
        comp.participants = CompetitionParticipation.objects.filter(
            competition=comp).order_by(rankby)
        competition_list.append(copy(comp))

    # Render Event frontpage
    return render(
        request, 'arkisto/index.html', {
            'event': event_obj,
            'compos': compo_list,
            'videos': video_list,
            'competitions': competition_list,
        })
示例#13
0
def text_event(request, event_id):
    _event = get_object_or_404(Event, pk=int(event_id), archived=True)

    # Get all compos that are active but not hidden from archive
    compos = []
    for compo in Compo.objects.filter(event=_event, active=True, hide_from_archive=False):
        if compo.show_voting_results:
            compo.entries = entrysort.sort_by_score(Entry.objects.filter(compo=compo))
        else:
            compo.entries = Entry.objects.filter(compo=compo).order_by('name')
        compos.append(compo)

    # Render Event frontpage
    return render(request, 'arkisto/results.txt', {
        'event': _event,
        'compos': compos,
    }, content_type='text/plain; charset=utf-8')
示例#14
0
def event(request, event_id):
    # Get event
    event_obj = get_object_or_404(Event, pk=event_id, archived=True)

    # Filter compos, videos and competitions
    compos_q = Compo.objects.filter(event=event_obj, active=True, hide_from_archive=False).order_by('name')
    videos_q = OtherVideoCategory.objects.filter(event=event_obj).order_by('name')
    competitions_q = Competition.objects.filter(event=event_obj, active=True, hide_from_archive=False).order_by('name')

    # Get all compos that are active but not hidden from archive
    compo_list = []
    for compo in compos_q:
        if compo.show_voting_results:
            compo.entries = entrysort.sort_by_score(Entry.objects.filter(compo=compo))
        else:
            compo.entries = Entry.objects.filter(compo=compo).order_by('name')
        compo_list.append(copy(compo))
        
    # Get other videos
    video_list = []
    for cat in videos_q:
        cat.videos = OtherVideo.objects.filter(category=cat)
        video_list.append(copy(cat))
        
    # Get competitions
    competition_list = []
    for comp in competitions_q:
        rankby = '-score'
        if comp.score_sort == 1:
            rankby = 'score'
        comp.participants = CompetitionParticipation.objects.filter(competition=comp).order_by(rankby)
        competition_list.append(copy(comp))
    
    # Render Event frontpage
    return render(request, 'arkisto/index.html', {
        'event': event_obj,
        'compos': compo_list,
        'videos': video_list,
        'competitions': competition_list,
    })
示例#15
0
def slide_entries(request, sel_event_id, compo_id):
    # Get the compo
    c = get_object_or_404(Compo, pk=compo_id)

    # Get the entries
    s_entries = entrysort.sort_by_score(
        Entry.objects.filter(compo=c, disqualified=False))

    i = 0
    flip = False
    f_entries = []
    for entry in s_entries:
        if flip:
            g = 180
        else:
            g = 0
        f_entries.append({
            'id': entry.id,
            'creator': entry.creator,
            'name': entry.name,
            'platform': entry.platform,
            'x': 0,
            'y': -i * 2500,
            'z': 0,
            'rot_y': 0,
            'rot_x': g,
            'rot_z': 0,
        })
        i += 1
        flip = not flip

    # Render
    return admin_render(
        request, 'admin_slides/slide_entries.html', {
            'entries': f_entries,
            'compo': c,
            'last_y': -i * 2500,
            'last_rot_x': flip,
            'selected_event_id': int(sel_event_id),
        })
示例#16
0
def entries_csv(request, sel_event_id):
    entries = []

    # Get event
    event = get_object_or_404(Event, pk=sel_event_id)

    # Find all compos and their top 3 entries
    compos = Compo.objects.filter(event=event)

    # Get the entries
    for compo in compos:
        compo_results = entrysort.sort_by_score(
            Entry.objects.filter(compo=compo))
        if len(compo_results) > 3:
            entries = entries + compo_results[:3]
        else:
            entries = entries + compo_results

    # Placements, copypasta
    for entry in entries:
        m = entry.get_rank()
        if m == 1:
            entry.placement = 'I'
        if m == 2:
            entry.placement = 'II'
        if m == 3:
            entry.placement = 'III'

    # Respond with entries CSV (text/csv)
    response = HttpResponse(content_type='text/csv')
    response[
        'Content-Disposition'] = 'attachment; filename="instanssi_entries.csv"'
    t = loader.get_template('admin_kompomaatti/entries_csv.txt')
    c = Context({
        'entries': entries,
    })
    response.write(t.render(c))
    return response
示例#17
0
def event(request, event_id):
    # Get event
    event = get_object_or_404(Event, pk=int(event_id), archived=True)
    
    # Get all compos that are active but not hidden from archive
    compos = Compo.objects.filter(event=event, active=True, hide_from_archive=False)
    compolist = []
    for compo in compos:
        if compo.show_voting_results:
            compo.entries = entrysort.sort_by_score(Entry.objects.filter(compo=compo))
        else:
            compo.entries = Entry.objects.filter(compo=compo).order_by('name')
        compolist.append(compo)
        
    # Get other videos
    cats = OtherVideoCategory.objects.filter(event=event).order_by('name')
    videolist = []
    for cat in cats:
        cat.videos = OtherVideo.objects.filter(category=cat)
        videolist.append(cat)
        
    # Get competitions
    competitionlist = []
    comps = Competition.objects.filter(event=event, active=True, hide_from_archive=False).order_by('name')
    for comp in comps:
        rankby = '-score'
        if comp.score_sort == 1:
            rankby = 'score'
        comp.participants = CompetitionParticipation.objects.filter(competition=comp).order_by(rankby)
        competitionlist.append(comp)
    
    # Render Event frontpage
    return render_to_response('arkisto/index.html', {
        'event': event,
        'compos': compolist,
        'videos': videolist,
        'competitionlist': competitionlist,
    }, context_instance=RequestContext(request))
示例#18
0
def compo_details(request, event_id, compo_id):
    # Get compo
    compo = compo_times_formatter(get_object_or_404(Compo, pk=compo_id, active=True, event=event_id))
    
    # Check if user may vote (voting open, user has code)
    can_vote = False
    if request.user.is_active and request.user.is_authenticated():
        try:
            VoteCode.objects.get(associated_to=request.user, event=event_id)
            can_vote = True
        except VoteCode.DoesNotExist:
            pass

        # See if ticket is used as votecode
        try:
            TicketVoteCode.objects.get(associated_to=request.user, event=event_id)
            can_vote = True
        except TicketVoteCode.DoesNotExist:
            pass
        
    # Handle entry adding
    if request.method == 'POST' and compo.is_adding_open():
        # Make sure user is authenticated
        if not request.user.is_active or not request.user.is_authenticated():
            raise Http403
        
        # Handle data
        entryform = EntryForm(request.POST, request.FILES, compo=compo)
        if entryform.is_valid():
            entry = entryform.save(commit=False)
            entry.user = request.user
            entry.compo = compo
            entry.save()
            return HttpResponseRedirect(reverse('km:compo', args=(event_id, compo_id,)))
    else:
        entryform = EntryForm(compo=compo)
    
    # Get entries, and only show them if voting has started
    # (only show results if it has been allowed in model)
    all_entries = []
    if compo.has_voting_started:
        if compo.show_voting_results:
            all_entries = entrysort.sort_by_score(Entry.objects.filter(compo=compo))
        else:
            all_entries = Entry.objects.filter(compo=compo).order_by('name')
    
    # Stuff for users that have logged in 
    my_entries = []
    has_voted = False
    if request.user.is_active and request.user.is_authenticated():
        # Get all entries added by the user
        my_entries = Entry.objects.filter(compo=compo, user=request.user)
    
        # Check if user has already voted
        if Vote.objects.filter(user=request.user, compo=compo).count() > 0:
            has_voted = True
    
    # Dump template
    return render(request, 'kompomaatti/compo_details.html', {
        'sel_event_id': int(event_id),
        'compo': compo,
        'entryform': entryform,
        'can_vote': can_vote,
        'all_entries': all_entries,
        'my_entries': my_entries,
        'has_voted': has_voted,
    })
示例#19
0
def compo_details(request, event_id, compo_id):
    # Get compo
    compo = compo_times_formatter(get_object_or_404(Compo, pk=compo_id, active=True, event=event_id))
    
    # Check if user may vote (voting open, user has code)
    can_vote = False
    if request.user.is_active and request.user.is_authenticated:
        # See if ticket is used as votecode
        try:
            TicketVoteCode.objects.get(associated_to=request.user, event=event_id)
            can_vote = True
        except TicketVoteCode.DoesNotExist:
            pass

        if not can_vote:
            try:
                VoteCodeRequest.objects.get(user=request.user, event=event_id, status=1)
                can_vote = True
            except VoteCodeRequest.DoesNotExist:
                pass

    # Handle entry adding
    if request.method == 'POST' and compo.is_adding_open():
        # Make sure user is authenticated
        if not request.user.is_active or not request.user.is_authenticated:
            raise Http403
        
        # Handle data
        entryform = EntryForm(request.POST, request.FILES, compo=compo)
        if entryform.is_valid():
            entry = entryform.save(commit=False)
            entry.user = request.user
            entry.compo = compo
            entry.save()
            return HttpResponseRedirect(reverse('km:compo', args=(event_id, compo_id,)))
    else:
        entryform = EntryForm(compo=compo)
    
    # Get entries, and only show them if voting has started
    # (only show results if it has been allowed in model)
    all_entries = []
    if compo.has_voting_started:
        if compo.show_voting_results:
            all_entries = entrysort.sort_by_score(Entry.objects.filter(compo=compo))
        else:
            all_entries = Entry.objects.filter(compo=compo).order_by('name')
    
    # Stuff for users that have logged in 
    my_entries = []
    has_voted = False
    if request.user.is_active and request.user.is_authenticated:
        # Get all entries added by the user
        my_entries = Entry.objects.filter(compo=compo, user=request.user)
    
        # Check if user has already voted
        if Vote.objects.filter(user=request.user, compo=compo).count() > 0:
            has_voted = True
    
    # Dump template
    return render(request, 'kompomaatti/compo_details.html', {
        'sel_event_id': int(event_id),
        'compo': compo,
        'entryform': entryform,
        'can_vote': can_vote,
        'all_entries': all_entries,
        'my_entries': my_entries,
        'has_voted': has_voted,
    })