from django.template import Context, RequestContext, loader from django.db.models import Q from django.http import HttpResponse, Http404 from django.shortcuts import get_list_or_404, render_to_response from django.utils.translation import ugettext as _ from random import randint #from django.contrib.admin.views.decorators import _encode_post_data, _decode_post_data from game import * from forms import * from qagame import * # comment this out # DEBUG = open('/dev/ttys001', 'w') from courses.models import UserGrade class Gameview: def init_settings(self): show_data=0 self.settings = {} self.gamenames = { 'ATTR' : _('Practise attributes'), 'ATTRPOS' : _('Practise attributes in positive'), 'ATTRCOMP' : _('Practise attributes in comparative'), 'ATTRSUP' : _('Practise attributes in superlative'), 'PREDPOS' : _('Practise predicative in positive'), 'PREDCOMP' : _('Practise predicative in comparative'), 'PREDSUP' : _('Practise predicative in superlative'), 'NUM-ATTR' : _('Practise numeral attributes'), 'NOMPL' : _('Practise plural'), 'N-ILL' : _('Practise illative'), 'N-ACC' : _('Practise accusative'), 'N-COM' : _('Practise comitative'), 'N-ESS' : _('Practise essive'), 'N-GEN' : _('Practise genitive'), 'N-NOM-PL' : _('Practise plural'), 'N-INE' : _('Practise inessive'), 'N-ELA' : _('Practise elative'), 'NUM-ILL' : _('Practise numerals in illative'), 'NUM-ACC' : _('Practise numerals in accusative'), 'NUM-COM' : _('Practise numerals in comitative'), 'NUM-ESS' : _('Practise numerals in essive'), 'NUM-GEN' : _('Practise numerals in genitive'), 'NUM-NOM-PL' : _('Practise numerals in plural'), 'NUM-LOC' : _('Practise numerals in locative'), 'COLL-NUM' : _('Practise collective numerals'), 'ORD-NUM' : _('Practise ordinal numbers'), 'PRS' : _('Practise present'), 'PRT' : _('Practise past'), 'COND' : _('Practise conditional'), 'IMPRT' : _('Practise imperative'), 'POT' : _('Practise potential'), 'V-COND' : _('Practise conditional'), 'V-IMPRT' : _('Practise imperative'), 'V-POT' : _('Practise potential') } def syll_settings(self,settings_form): self.settings['syll'] = [] if 'bisyllabic' in settings_form.data: self.settings['syll'].append('bisyllabic') if 'trisyllabic' in settings_form.data: self.settings['syll'].append('trisyllabic') if 'contracted' in settings_form.data: self.settings['syll'].append('contracted') if len(self.settings['syll']) == 0: self.settings['syll'].append('bisyllabic') def create_morfagame(self, request): count, correct = 0, 0 if request.method == 'POST': data = request.POST.copy() # Settings form is checked and handled. settings_form = MorfaSettings(request.POST) for k in settings_form.data.keys(): self.settings[k] = settings_form.data[k] if request.session.has_key('dialect'): self.settings['dialect'] = request.session['dialect'] if hasattr(request, 'LANGUAGE_CODE'): self.settings['language'] = request.LANGUAGE_CODE self.syll_settings(settings_form) # if settings_form.data.has_key('level'): # self.settings['level'] = settings_form.levels[settings_form.data['level']] if settings_form.data.has_key('source'): self.settings['source'] = settings_form.source[settings_form.data['source']] self.settings['allcase'] = settings_form.allcase # Create game if self.settings['gametype'] == "bare": game = BareGame(self.settings) else: # Contextual morfa game = QAGame(self.settings) game.init_tags() # If settings are changed, a new game is created # Otherwise the game is created using the user input. # TODO: this doesn't seem to be working. no settings in data, # even when settings are changed. if "settings" in data: game.new_game() else: game.check_game(data) game.get_score(data) if 'test' in data: game.count = 1 if "show_correct" in data: show_correct = 1 # If there is no POST data, default settings are applied else: settings_form = MorfaSettings() # Find out the default data for this form. for k in settings_form.default_data.keys(): if not self.settings.has_key(k): self.settings[k] = settings_form.default_data[k] # self.settings['level'] = settings_form.levels[settings_form.default_data['level']] self.settings['source'] = settings_form.default_data['source'] if request.session.has_key('dialect'): self.settings['dialect'] = request.session['dialect'] if hasattr(request, 'LANGUAGE_CODE'): self.settings['language'] = request.LANGUAGE_CODE if self.settings['gametype'] == "bare": game = BareGame(self.settings) else: # Contextual morfa game = QAGame(self.settings) game.init_tags() game.new_game() if self.settings['pos'] == "N": if self.settings['gametype'] == "bare": self.settings['gamename'] = self.gamenames[self.settings['case']] else: self.settings['gamename'] = self.gamenames[self.settings['case_context']] if self.settings['pos'] == "Num": if self.settings['gametype'] == "bare": self.settings['gamename'] = self.gamenames[self.settings['num_bare']] else: self.settings['gamename'] = self.gamenames[self.settings['num_context']] if self.settings['pos'] == "V": if self.settings['gametype'] == "bare": self.settings['gamename'] = self.gamenames[self.settings['vtype']] else: self.settings['gamename'] = self.gamenames[self.settings['vtype_context']] if self.settings['pos'] == "A": if self.settings['gametype'] == "bare": self.settings['gamename'] = self.gamenames[self.settings['adjcase']] else: self.settings['gamename'] = self.gamenames[self.settings['adj_context']] c = RequestContext(request, { 'settingsform': settings_form, 'settings' : self.settings, 'forms': game.form_list, 'count': game.count, 'score': game.score, 'comment': game.comment, 'all_correct': game.all_correct, 'show_correct': game.show_correct, 'language' : self.settings['language'], }) return c def oahpa(request): c = RequestContext(request, { 'jee': "joku arvo", }) return render_to_response('oahpa_base.html', c, context_instance=RequestContext(request)) def updating(request): c = RequestContext(request, { 'jee': "joku arvo", }) return render_to_response('drills/updating.html', c, context_instance=RequestContext(request)) class Quizzview(Gameview): def placename_settings(self, settings_form): self.settings['frequency'] = [] self.settings['geography']= [] if 'common' in settings_form.data: self.settings['frequency'].append('common') if 'rare' in settings_form.data: self.settings['frequency'].append('rare') if 'world' in settings_form.data: self.settings['geography'].append('world') if 'sapmi' in settings_form.data: self.settings['geography'].append('sapmi') if 'suopma' in settings_form.data: self.settings['geography'].append('suopma') if len(self.settings['frequency']) == 0: self.settings['frequency'].append('common') if len(self.settings['geography']) == 0: self.settings['geography'].append('sapmi') def create_leksagame(self, request): if request.method == 'POST': data = request.POST.copy() # Settings form is checked and handled. settings_form = LeksaSettings(data) # Possible old form should be passed here for k in settings_form.data.keys(): if not self.settings.has_key(k): self.settings[k] = settings_form.data[k] if request.session.has_key('dialect'): self.settings['dialect'] = request.session['dialect'] if hasattr(request, 'LANGUAGE_CODE'): self.settings['language'] = request.LANGUAGE_CODE self.placename_settings(settings_form) self.settings['allsem'] = settings_form.allsem # self.settings['level'] = settings_form.levels[settings_form.data['level']] game = QuizzGame(self.settings) if "settings" in data: game.new_game() else: game.check_game(data) game.get_score(data) if 'test' in data: game.count = 1 if "show_correct" in data: game.show_correct = 1 # If there is no POST data, default settings are applied else: settings_form = LeksaSettings() self.placename_settings(settings_form) for k in settings_form.default_data.keys(): if not self.settings.has_key(k): self.settings[k] = settings_form.default_data[k] if request.session.has_key('dialect'): self.settings['dialect'] = request.session['dialect'] if hasattr(request, 'LANGUAGE_CODE'): self.settings['language'] = request.LANGUAGE_CODE game = QuizzGame(self.settings) game.new_game() c = Context({ 'settingsform': settings_form, 'forms': game.form_list, 'count': game.count, 'score': game.score, 'comment': game.comment, 'all_correct': game.all_correct, 'show_correct': game.show_correct, }) return c def leksa_game(request): leksagame = Quizzview() leksagame.init_settings() c = leksagame.create_leksagame(request) # Not true or false if c['show_correct'] == 1: if request.user.is_authenticated: points, _, total = c['score'].partition('/') new_grade = UserGrade.objects.create(user=request.user.get_profile(), game='Leksa', score=points, total=total) return render_to_response('drills/quizz.html', c, context_instance=RequestContext(request)) class Numview(Gameview): def create_numgame(self,request): if request.method == 'POST': data = request.POST.copy() # Settings form is checked and handled. settings_form = NumSettings(data) for k in settings_form.data.keys(): if not self.settings.has_key(k): self.settings[k] = settings_form.data[k] if request.session.has_key('dialect'): self.settings['dialect'] = request.session['dialect'] if hasattr(request, 'LANGUAGE_CODE'): self.settings['language'] = request.LANGUAGE_CODE game = NumGame(self.settings) if "settings" in data: game.new_game() else: game.check_game(data) game.get_score(data) if 'test' in data: game.count=1 if "show_correct" in data: game.show_correct = 1 # If there is no POST data, default settings are applied else: settings_form = NumSettings() for k in settings_form.default_data.keys(): if not self.settings.has_key(k): self.settings[k] = settings_form.default_data[k] game = NumGame(self.settings) game.new_game() #numstring=0 #if game.form_list[0].has_key('numstring'): # numstring=1 c = Context({ 'settingsform': settings_form, 'forms': game.form_list, 'count': game.count, 'score': game.score, 'comment': game.comment, 'all_correct': game.all_correct, 'show_correct': game.show_correct, # 'numstring': numstring, }) return c def num(request): numgame = Numview() numgame.init_settings() numgame.settings['gametype'] = "card" c = numgame.create_numgame(request) return render_to_response('drills/num.html', c, context_instance=RequestContext(request)) def morfa_game(request, pos): """ View for Morfa game. Requires pos argument, ['N', 'V', 'A', 'Num'] """ mgame = Gameview() mgame.init_settings() mgame.settings['pos'] = pos.upper() mgame.settings['gametype'] = "bare" template = 'drills/mgame_%s.html' % pos.lower() c = mgame.create_morfagame(request) if c['show_correct'] == 1: if request.user.is_authenticated and not request.user.is_anonymous: points, _, total = c['score'].partition('/') new_grade = UserGrade.objects.create(user=request.user.get_profile(), game='Morfa', score=points, total=total) return render_to_response(template, c, context_instance=RequestContext(request))