initial commit
[ochimeru.git] / cards / views.py
blob9cd84e59af512471c7814eeea8923e32c5c1812b
1 from django.shortcuts import render_to_response
2 from django.http import HttpResponseRedirect, HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed, Http404, HttpResponseForbidden
3 from django.contrib.auth import authenticate, login, logout
4 from django.contrib.auth.models import User
5 from django.contrib.auth.decorators import login_required
6 from ochimeru.cards.models import Card, CardStatus
8 import random
10 WORKING_SET_SIZE = 50
12 def home(request):
13 if not request.user.is_authenticated():
14 return HttpResponseRedirect('/login')
16 levels = [x['level'] for x in CardStatus.objects.filter(user=request.user).values('level').distinct()]
17 if 0 not in levels: levels.append(0)
19 levels = range(min(levels), max(levels)+1)
20 levels.reverse()
22 return render_to_response('level.html', {
23 'levels': levels})
26 @login_required
27 def level(request, level):
28 set = [x.card for x in CardStatus.objects.filter(user=request.user, level=level, is_current=True)]
30 for c in Card.objects.order_by('?'):
32 if len(set) >= WORKING_SET_SIZE: break
34 status = CardStatus.objects.filter(user=request.user, card=c)
36 if status and status[0].level == level:
37 status[0].is_current = True
38 status[0].save()
39 set.append(c)
41 elif not status and int(level) == 0:
42 CardStatus.objects.create(user=request.user, card=c, is_current=True, level=0)
43 set.append(c)
45 if set:
46 card = random.choice(set)
47 return HttpResponseRedirect('/level/%s/%d' % (level, card.id))
48 else:
49 return HttpResponseRedirect('/')
52 @login_required
53 def card(request, level, card_id):
54 card = Card.objects.get(pk=card_id)
56 return render_to_response('card.html', {
57 'level': level,
58 'card': card
62 @login_required
63 def answer(request, level, card_id):
64 card = Card.objects.get(pk=card_id)
66 return render_to_response('answer.html', {
67 'level': level,
68 'card': card
71 def check(request, level, card_id):
72 card = Card.objects.get(pk=card_id)
73 status = CardStatus.objects.get(card=card, user=request.user)
75 if 'correct' in request.GET:
76 status.level += 1
78 else:
79 status.level = 0
81 status.save()
83 return HttpResponseRedirect('/level/%s/' % level)
86 def login_user(request):
87 try:
88 username = request.POST['user']
89 password = request.POST['pwd']
90 except:
91 return render_to_response('login.html')
93 user = authenticate(username=username, password=password)
95 if not user:
96 return render_to_response('login.html', {
97 'error_message': _('Unknown user or wrong password'),
100 login(request, user)
102 return HttpResponseRedirect('/')