2020-08-17 15:02:18 +00:00
from django . contrib import messages
2018-08-18 13:26:49 +00:00
from django . contrib . auth . mixins import LoginRequiredMixin
2021-08-19 08:21:38 +00:00
from django . http import Http404
2020-08-17 15:02:18 +00:00
from django . shortcuts import redirect
from django . urls import reverse
2020-02-12 12:10:41 +00:00
from django . views . generic import DetailView , ListView
2021-08-19 08:21:38 +00:00
from . . utils . models import CampReadOnlyModeError
2018-08-18 13:26:49 +00:00
from . models import Token , TokenFind
2019-03-26 12:39:09 +00:00
2021-08-17 17:11:09 +00:00
class TokenFindView ( LoginRequiredMixin , DetailView ) :
2018-08-18 13:26:49 +00:00
model = Token
2019-06-16 12:32:24 +00:00
slug_field = " token "
slug_url_kwarg = " token "
2018-08-18 13:26:49 +00:00
def get ( self , request , * args , * * kwargs ) :
2021-08-19 08:21:38 +00:00
# register this token find if it isn't already
try :
token , created = TokenFind . objects . get_or_create (
token = self . get_object ( ) , user = request . user
)
except CampReadOnlyModeError :
raise Http404
2020-08-17 15:02:18 +00:00
if created :
messages . success (
self . request ,
2021-08-17 17:11:09 +00:00
f " Congratulations! You found a secret token: { self . get_object ( ) . description } - Your visit has been registered! Keep hunting, there might be more tokens out there. " ,
2019-08-13 15:53:13 +00:00
)
2020-08-17 15:02:18 +00:00
return redirect ( reverse ( " tokens:tokenfind_list " ) )
2018-08-18 13:26:49 +00:00
2019-03-26 20:22:54 +00:00
class TokenFindListView ( LoginRequiredMixin , ListView ) :
2019-03-27 11:33:14 +00:00
model = Token
2021-08-17 17:11:09 +00:00
template_name = " tokenfind_list.html "
2018-08-18 13:26:49 +00:00
2018-08-19 16:30:25 +00:00
def get_context_data ( self , * * kwargs ) :
context = super ( ) . get_context_data ( * * kwargs )
# find the tokens the user still needs to find
2019-06-16 12:32:24 +00:00
tokenfinds = TokenFind . objects . filter ( user = self . request . user ) . values_list (
" token__id " , flat = True
)
context [ " unfound_list " ] = Token . objects . all ( ) . exclude ( id__in = tokenfinds )
2018-08-19 16:30:25 +00:00
return context