75 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from django.shortcuts import get_object_or_404
 | |
| from django.urls import reverse
 | |
| from django.views.generic import FormView, ListView
 | |
| 
 | |
| from various.views.pomocne import formularOKView
 | |
| from .forms import SifrovackaForm, NapovedaForm
 | |
| from .models import OdpovedUcastnika, SpravnaOdpoved, Napoveda, NapovezenoUcastnikovi, SeznamSifer
 | |
| from personalni.models import Resitel
 | |
| 
 | |
| 
 | |
| class SifrovackaView(FormView):
 | |
| 	template_name = 'sifrovacka/sifrovacka.html'
 | |
| 	form_class = SifrovackaForm
 | |
| 
 | |
| 	def form_valid(self, form):
 | |
| 		instance = form.save(commit=False)
 | |
| 		resitel = Resitel.objects.get(osoba__user=self.request.user)
 | |
| 		instance.resitel = resitel
 | |
| 		instance.save()
 | |
| 		sifra = SpravnaOdpoved.objects.filter(sifra__iexact=instance.sifra, odpoved__iexact=instance.odpoved.strip()).first()
 | |
| 		if sifra is None:
 | |
| 			return formularOKView(self.request, f'<h1>Bohužel vám hvězdy nebyly nakloněny. Rozumějte <i>máte to blbě</i>.</h1> <p><a href="{reverse("sifrovacka")}">Zkusit znovu.</a></p><br><br><br>')
 | |
| 
 | |
| 		instance.uspech = True
 | |
| 		instance.save()
 | |
| 
 | |
| 		return formularOKView(self.request, f'<h1>{sifra.skryty_text}</h1> <p><a href="{reverse("sifrovacka")}">Odevzdat další.</a></p><br><br><br>')
 | |
| 
 | |
| 
 | |
| class SifrovackaListView(ListView):
 | |
| 	template_name = 'sifrovacka/odpovedi_list.html'
 | |
| 	model = OdpovedUcastnika
 | |
| 
 | |
| class SifrovackaNektereListView(SifrovackaListView):
 | |
| 	def get_queryset(self):
 | |
| 		seznam = get_object_or_404(SeznamSifer, jmeno=self.kwargs['seznam'])
 | |
| 		orig = super().get_queryset()
 | |
| 		return orig.filter(sifra__in=seznam.sifry.all().values('sifra')) # poslední je kvůli tomu, že máme odkaz na celý objekt a ne jen na jméno šifry.
 | |
| 
 | |
| 
 | |
| class NapovedaView(FormView):
 | |
| 	template_name = 'sifrovacka/napoveda.html'
 | |
| 	form_class = NapovedaForm
 | |
| 
 | |
| 	def form_valid(self, form):
 | |
| 		instance = form.save(commit=False)
 | |
| 		resitel = Resitel.objects.get(osoba__user=self.request.user)
 | |
| 		instance.resitel = resitel
 | |
| 
 | |
| 		if NapovezenoUcastnikovi.objects.filter(resitel=resitel, sifra__iexact=instance.sifra).first() is None:
 | |
| 			instance.save()
 | |
| 
 | |
| 		napoveda = Napoveda.objects.filter(sifra__iexact=instance.sifra).first()
 | |
| 		return formularOKView(self.request, f'<h1>Nápověda k šifře číslo {instance.sifra} je:</h1><p>{napoveda.text}</p> <p><a href="{reverse("sifrovacka")}">Odevzdat řešení.</a></p><br><br><br>')
 | |
| 
 | |
| 
 | |
| class NapovedaListView(ListView):
 | |
| 	template_name = 'sifrovacka/napovedy_list.html'
 | |
| 	model = NapovezenoUcastnikovi
 | |
| 
 | |
| 
 | |
| class PreskoceniView(FormView):
 | |
| 	template_name = 'sifrovacka/preskoceni.html'
 | |
| 	form_class = SifrovackaForm
 | |
| 	initial = {"odpoved": "=======PŘESKOČENO======="}
 | |
| 
 | |
| 	def form_valid(self, form):
 | |
| 		instance = form.save(commit=False)
 | |
| 		instance.odpoved = "=======PŘESKOČENO======="
 | |
| 		resitel = Resitel.objects.get(osoba__user=self.request.user)
 | |
| 		instance.resitel = resitel
 | |
| 		instance.save()
 | |
| 		sifra = SpravnaOdpoved.objects.filter(sifra__iexact=instance.sifra).first()  # FIXME co když je více "správných" odpovědí?
 | |
| 
 | |
| 		return formularOKView(self.request, f'<h1>{sifra.skryty_text}</h1> <p><a href="{reverse("sifrovacka")}">Zpět na odevzdávátko.</a></p><br><br><br>')
 |