Ejemplo n.º 1
0
    def clean(self):
        cleaned_data = super(RegisterForm, self).clean()
        password = self.cleaned_data.get('password')
        password2 = self.cleaned_data.get('password2')
        if password != password2:
            self._errors["password"] = self.error_class(
                [strLang()['error_register_passwords_differents']])
            self._errors["password2"] = self.error_class(
                [strLang()['error_register_passwords_differents']])

        return cleaned_data
Ejemplo n.º 2
0
    def clean(self):
        cleaned_data = super(LoginForm, self).clean()
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')
        user = authenticate(username=username, password=password)
        if user is not None:
            if not user.is_active:
                raise forms.ValidationError(strLang()['error_login_failed'])
        else:
            raise forms.ValidationError(strLang()['error_login_failed'])

        return cleaned_data
Ejemplo n.º 3
0
def ActiveTournaments(request):

    if not request.user.is_authenticated():
        return HttpResponseRedirect('/')

    activeTournaments = Tournament.objects.filter(
        start_date__lte=datetime.date.today(),
        finish_date__gte=datetime.date.today()).order_by('-start_date')
    tournamentCategories = []

    for t in activeTournaments:
        categories = t.categories.all()
        c = {}
        c['tid'] = t.pk
        c['categories'] = categories
        tournamentCategories.append(c)

    # Load strings language to template mytournaments.html
    try:
        lang = strLang()
    except:
        lang = ''

    template = 'pc/active-tournaments.html'

    if request.mobile:
        template = 'mobile/active-tournaments.html'

    return render_to_response(
        template, {
            'user_me': request.user,
            'activeTournaments': activeTournaments,
            'tournamentCategories': tournamentCategories,
            'lang': lang,
        })
Ejemplo n.º 4
0
 def clean_email(self):
     email = self.cleaned_data.get('email')
     try:
         email = User.objects.get(email=email)
     except User.DoesNotExist:
         return email
     raise forms.ValidationError(strLang()['error_register_email_exists'])
Ejemplo n.º 5
0
def NextGames(request):

	if not request.user.is_authenticated():
		return HttpResponseRedirect('/')

	myFutureGames = Game.objects.filter(Q(log = False), Q(player1 = request.user) | Q(player2 = request.user)).order_by('start_time')

	dates = []

	for game in myFutureGames:
		if not game.start_time_committed and (datetime.datetime.now() + datetime.timedelta(minutes=120)) > game.start_time:
			game.start_time_committed = True
			game.save()

		if not game.start_time.date() in dates:
			dates.append(game.start_time.date())

	# Load strings language to template mynextgames.html
	try:
		lang = strLang()
	except:
		lang = ''

	template = 'pc/next-games.html'

	if request.mobile:
		template = 'mobile/next-games.html'

	return render_to_response(template, {
		'user_me': request.user,
		'myNextGames': myFutureGames,
		'dates': dates,
		'lang': lang,
	})
Ejemplo n.º 6
0
def GameRoom(request, gid):

	if not request.user.is_authenticated():
		return HttpResponseRedirect('/')

	game = Game.objects.get(id = gid)

	if request.user != game.player1 and request.user != game.player2 and request.user.username != "FLEQBOT":
		return HttpResponseRedirect('/')

	tournament = game.round.tournament
	r = game.round.round_number
	startDate = game.start_time
	player1 = game.player1
	player2 = game.player2


	template = 'pc/game-room.html'
	dico = []
	
	if game.is_over():

		if request.mobile:
			return HttpResponseRedirect("/")

		lines = ""
		print os.getcwd()
		logfile = open(os.getcwd() + '/logs/' + str(game.id), 'r')
		lines = logfile.readlines()

		for line in lines:
			linesplit = {}
			line = line.split(";", 2)
			linesplit['timestamp'] = line[0].split(".")[0]
			linesplit['user'] = line[1]
			linesplit['message'] = line[2].replace('&amp;','&').replace('&lt;','<').replace('&gt;','>').replace('&quot;','"').replace('&#39;',"'").split(";")[0]
			dico.append(linesplit)

	else:
		if request.mobile:
			template = 'mobile/game-room.html'

	# Load strings language to template mytournaments.html
	try:
		lang = strLang()
	except:
		lang = ''


	return render_to_response(template, {
		'user_me': request.user,
		'game': game,
		'dico': dico,
		'tournament': tournament,
		'round': r,
		'player1': player1,
		'player2': player2,
		'lang': lang,
	})
Ejemplo n.º 7
0
 def clean_username(self):
     username = self.cleaned_data.get('username')
     try:
         user = User.objects.get(username=username)
     except User.DoesNotExist:
         return username
     raise forms.ValidationError(
         strLang()['error_register_username_exists'])
Ejemplo n.º 8
0
 def clean_name(self):
     name = self.cleaned_data.get('name')
     try:
         tournament = Tournament.objects.get(name=name)
     except Tournament.DoesNotExist:
         return name
     raise forms.ValidationError(
         strLang()['error_new_tournament_name_exists'])
Ejemplo n.º 9
0
def Signin(request):

    try:
        lang = strLang()
    except:
        lang = ''

    if request.method == 'POST':
        registerForm = RegisterForm(request.POST)

        if registerForm.is_valid():
            user = User.objects.create_user(request.POST['username'],
                                            request.POST['email'],
                                            request.POST['password'])
            user.is_staff = False
            user.first_name = request.POST['first_name']
            user.last_name = request.POST['last_name']
            userProfile = UserProfile(user=user)
            user.save()
            userProfile.save()

            user = authenticate(username=request.POST['username'],
                                password=request.POST['password'])
            login(request, user)

            if request.mobile:
                return render_to_response('mobile/welcome.html', {})

            return render_to_response('pc/welcome.html',
                                      {'user': request.user})

        else:
            template = 'pc/signin.html'

            if request.mobile:
                template = 'mobile/signin.html'

            return render_to_response(
                template, {
                    'user_me': request.user,
                    'registerForm': registerForm,
                    'lang': lang,
                })

    else:
        registerForm = RegisterForm()

        template = 'pc/signin.html'

        if request.mobile:
            template = 'mobile/signin.html'

        return render_to_response(template, {
            'user_me': request.user,
            'registerForm': registerForm,
            'lang': lang,
        })
Ejemplo n.º 10
0
def LoadQuestions(request):

    if not request.user.is_authenticated():
        return HttpResponseRedirect('/')

    if not request.user.is_superuser:
        return HttpResponseRedirect('/')

    # Load strings language to template loadquestions.html
    try:
        lang = strLang()
    except:
        lang = ''

    if request.method == 'POST':
        print "POST"
        form = LoadQuestionsForm(request.POST, request.FILES)
        # Load strings language to template loadquestions.html

        if form.is_valid():
            loadQuestionsFile(request.FILES['questions_file'])
            return HttpResponseRedirect(
                '/load-questions?status=success_load_questions')

        else:
            return render_to_response('pc/load-questions.html', {
                'user_me': request.user,
                'form': form,
                'lang': lang,
            })

    else:

        # Must we show a notification user?
        try:
            if request.GET['status']:
                box = setBox(request.GET['status'])

                return render_to_response('pc/load-questions.html', {
                    'box': box,
                    'user_me': request.user,
                    'lang': lang,
                })
        except:
            box = ''

        form = LoadQuestionsForm()
        return render_to_response('pc/load-questions.html', {
            'form': form,
            'box': box,
            'user_me': request.user,
            'lang': lang,
        })
Ejemplo n.º 11
0
class RegisterForm(forms.Form):
    username = forms.CharField(max_length=100)
    first_name = forms.CharField(max_length=100)
    last_name = forms.CharField(max_length=100)
    password = forms.CharField(widget=forms.PasswordInput(), max_length=100)
    password2 = forms.CharField(widget=forms.PasswordInput(),
                                max_length=100,
                                label=(strLang()['label_password2']))
    email = forms.EmailField(max_length=100)

    def clean_username(self):
        username = self.cleaned_data.get('username')
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            return username
        raise forms.ValidationError(
            strLang()['error_register_username_exists'])

    def clean_email(self):
        email = self.cleaned_data.get('email')
        try:
            email = User.objects.get(email=email)
        except User.DoesNotExist:
            return email
        raise forms.ValidationError(strLang()['error_register_email_exists'])

    def clean_first_name(self):
        first_name = self.cleaned_data.get('first_name')
        if not first_name:
            raise forms.ValidationError(
                strLang()['error_register_first_name_required'])
        return first_name

    def clean_last_name(self):
        last_name = self.cleaned_data.get('last_name')
        if not last_name:
            raise forms.ValidationError(
                strLang()['error_register_last_name_required'])
        return last_name

    def clean(self):
        cleaned_data = super(RegisterForm, self).clean()
        password = self.cleaned_data.get('password')
        password2 = self.cleaned_data.get('password2')
        if password != password2:
            self._errors["password"] = self.error_class(
                [strLang()['error_register_passwords_differents']])
            self._errors["password2"] = self.error_class(
                [strLang()['error_register_passwords_differents']])

        return cleaned_data
Ejemplo n.º 12
0
def WonGames(request):
	if not request.user.is_authenticated():
		return HttpResponseRedirect('/')
	
	# Select all won games
	wonGames = Game.objects.filter(Q(winner = request.user), Q(log=True)).order_by('-start_time')

	# Load strings language to template mynextgames.html
	try:
		lang = strLang()
	except:
		lang = ''

	template = 'pc/won-games.html'

	if request.mobile:
		template = 'mobile/won-games.html'

	return render_to_response(template, {
		'user_me': request.user,
		'lang': lang,
		'wonGames': wonGames,
	})
Ejemplo n.º 13
0
def MyTournaments(request):

    if not request.user.is_authenticated():
        return HttpResponseRedirect('/')

    dateNow = datetime.datetime.now()
    myTournaments = Tournament.objects.filter(
        players=request.user).order_by('-start_date')

    tournamentCategories = []

    for t in myTournaments:
        categories = t.categories.all()
        c = {}
        c['tid'] = t.pk
        c['categories'] = categories
        tournamentCategories.append(c)

    # Load strings language to template mytournaments.html
    try:
        lang = strLang()
    except:
        lang = ''

    template = 'pc/my-tournaments.html'

    if request.mobile:
        template = 'pc/my-tournaments.html'

    return render_to_response(
        template, {
            'user_me': request.user,
            'myTournaments': myTournaments,
            'tournamentCategories': tournamentCategories,
            'lang': lang,
        })
Ejemplo n.º 14
0
def TournamentStatistics(request, gid):

    if not request.user.is_authenticated():
        return HttpResponseRedirect('/')

    tournament = Tournament.objects.get(id=gid)
    rounds = Round.objects.filter(
        tournament=tournament).order_by('round_number')

    # Generate Score Table by this Tournament
    allscores = Score.objects.filter(tournament=tournament).order_by(
        '-points', '-questions_won', 'questions_lost', 'player')
    scores = []
    pos = 0

    for userScore in allscores:
        userProfile = UserProfile.objects.get(user=userScore.player)
        user = {}
        user['profile'] = userProfile
        user['score'] = userScore.points

        # Create tournament positions
        if pos == 0:
            user['pos'] = pos + 1
        else:
            if scores[pos - 1]['score'] == userScore.points:
                user['pos'] = scores[pos - 1]['pos']
            else:
                user['pos'] = pos + 1

        # Initializing vars for question stats
        user['winner_questions'] = userScore.questions_won
        user['loser_questions'] = userScore.questions_lost
        user['winner_games'] = 0
        user['loser_games'] = 0

        # For each user, calculate how many games did he play
        gamesUser = []
        for r in rounds:
            game = Game.objects.filter(
                Q(round=r),
                Q(player1=userProfile.user) | Q(player2=userProfile.user),
                Q(log=True))
            try:
                #if game[0] and game[0].log:
                if game[0]:
                    gamesUser.append(game)
                    # Total points won and lost
                    try:
                        if game[0].winner != userScore.player and game[
                                0].winner.username != "jgonzalez":
                            print "LOST"
                            user['loser_games'] += 1
                        elif game[0].winner.username == "FLEQBOT":
                            user['loser_games'] += 1
                        elif game[0].winner == userScore.player:
                            user['winner_games'] += 1
                    except:
                        continue
            except:
                continue

        user['reflection_days'] = user['score'] - user['winner_games']
        user['total_games'] = user['loser_games'] + user['winner_games']

        # Save user stats and increment counter var
        scores.append(user)
        pos += 1

    rounds = Round.objects.filter(tournament=tournament)
    games = Game.objects.all()

    join = False
    disjoin = False

    if not (request.user in tournament.players.all()) and (
            datetime.date.today() < tournament.start_date):
        join = True
    elif (request.user in tournament.players.all()) and (
            datetime.date.today() < tournament.start_date):
        disjoin = True

    # Load strings language to template mytournaments.html
    try:
        lang = strLang()
    except:
        lang = ''

    template = 'pc/tournament-statistics.html'

    if request.mobile:
        template = 'mobile/tournament-statistics.html'

    return render_to_response(
        template, {
            'user_me': request.user,
            'tournament': tournament,
            'join': join,
            'disjoin': disjoin,
            'scores': scores,
            'rounds': rounds,
            'games': games,
            'lang': lang,
        })
Ejemplo n.º 15
0
def Home(request):

    if request.user.is_authenticated():

        nextGames = len(
            Game.objects.filter(
                Q(log=False), Q(start_time__gte=datetime.datetime.now()),
                Q(player1=request.user) | Q(player2=request.user)))
        wonGames = len(Game.objects.filter(Q(winner=request.user),
                                           Q(log=True)))
        lostGames = len(
            Game.objects.filter(
                Q(player1=request.user) | Q(player2=request.user),
                ~Q(winner=request.user), Q(log=True)))
        myTournaments = len(Tournament.objects.filter(players=request.user))
        activeTournaments = len(
            Tournament.objects.filter(start_date__lte=datetime.date.today(),
                                      finish_date__gte=datetime.date.today()))
        nextTournaments = len(
            Tournament.objects.filter(start_date__gt=datetime.date.today()))
        finishedTournaments = len(
            Tournament.objects.filter(finish_date__lt=datetime.datetime.now()))

        if request.mobile:
            return render_to_response(
                'mobile/home.html', {
                    'nextGames': nextGames,
                    'wonGames': wonGames,
                    'lostGames': lostGames,
                    'myTournaments': myTournaments,
                    'activeTournaments': activeTournaments,
                    'nextTournaments': nextTournaments,
                    'finishedTournaments': finishedTournaments,
                })

        return HttpResponseRedirect("/next-games")

    else:

        # Load strings language to template login.html
        try:
            lang = strLang()
        except:
            lang = ''

        if request.method == 'POST':
            loginForm = LoginForm(request.POST)
            if loginForm.is_valid():
                user = authenticate(username=request.POST['username'],
                                    password=request.POST['password'])
                login(request, user)

                if request.mobile:
                    return render_to_response('mobile/home.html', {})
                else:
                    return HttpResponseRedirect('/next-games')

            else:
                registerForm = RegisterForm()
                template = 'pc/splash.html'

                if request.mobile:
                    template = 'mobile/login.html'

                return render_to_response(template, {
                    'loginForm': loginForm,
                    'lang': lang,
                })

        else:
            if request.mobile:
                return render_to_response('mobile/login.html', {})

            return render_to_response('pc/splash.html', {})
Ejemplo n.º 16
0
 def clean_username(self):
     username = self.cleaned_data.get('username')
     if not username:
         raise forms.ValidationError(
             strLang()['error_login_username_required'])
     return username
Ejemplo n.º 17
0
 def clean_password(self):
     password = self.cleaned_data.get('password')
     if not password:
         raise forms.ValidationError(
             strLang()['error_login_password_required'])
     return password
Ejemplo n.º 18
0
 def clean_last_name(self):
     last_name = self.cleaned_data.get('last_name')
     if not last_name:
         raise forms.ValidationError(
             strLang()['error_register_last_name_required'])
     return last_name
Ejemplo n.º 19
0
def NewTournament(request):

    if not request.user.is_authenticated():
        return HttpResponseRedirect('/register')

    elif not request.user.is_superuser and not request.user.has_perm(
            'quizbowl.add_tournament'):
        return HttpResponseRedirect('/my-tournaments')

    if request.user.has_perm('quizbowl.add_tournament'):
        admin_user = True
    else:
        admin_user = False

    # Load strings language to template newtournament.html
    try:
        lang = strLang()
    except:
        lang = ''

    # Info about user
    user_me = UserProfile.objects.get(user=request.user)

    if request.method == 'POST':  # If the form has been submitted...
        form = TournamentForm(request.POST)  # A form bound to the POST data
        if form.is_valid():

            t = form.save()
            t.admin = request.user

            # Generate sid name
            sid = t.name.lower()
            sid = sid.replace(" ", "")
            # Remove accents
            sid = ''.join((c for c in unicodedata.normalize('NFD', sid)
                           if unicodedata.category(c) != 'Mn'))
            # Remove special chars
            sid = re.sub(r"\W+", "", sid)
            # Check if this sid exists or similars
            ts = Tournament.objects.filter(sid__startswith=sid)
            if len(ts) > 0:
                sid = sid + '-' + str(len(ts))

            t.sid = sid

            t.finish_date = t.start_date + datetime.timedelta(
                (t.rounds * t.days_per_round) - 1)
            t.save()
            return HttpResponseRedirect('/next-tournaments')

        else:
            return render_to_response('pc/new-tournament.html', {
                'user_me': request.user,
                'form': form,
                'lang': lang,
            })

    else:

        form = TournamentForm(initial={
            'start_date': (datetime.date.today() + datetime.timedelta(days=1))
        })

        return render_to_response('pc/new-tournament.html', {
            'user_me': request.user,
            'form': form,
            'lang': lang,
        })