def view(request):
    rankings = Ranking.objects.all()
    today = datetime.date.today()
    yearLoop = range(1900, today.year - 7)
    try:
        request.user.participant
    except ObjectDoesNotExist:
        Participant(user=request.user, titre = "Mr", nom="", prenom="", rue="",
        numero="", boite="", codepostal="", localite="", telephone="", fax="",
        gsm="", classement=rankings.first(), oldparticipant=False,
        datenaissance=today, latitude=0.0, isClassementVerified=False,
         longitude=0.0).save()
    birthdate = request.user.participant.datenaissance
    formatedBirthdate = birthdate.strftime('%d/%m/%Y')
    if request.method == "POST":
        if request.POST['action'] == 'sendMailConfirmationMail':
            # Send email with code to finish registration and validate account
            participant = Participant.objects.get(user=request.user)
            activationObject = UserInWaitOfActivation.objects.get(
                participant=participant)
            activationObject.dayOfRegistration = datetime.datetime.now()
            activationObject.save()
            link = "http://" + request.get_host() + "/tennis/emailValidation/"
            if send_register_confirmation_email(activationObject, participant, link):
                successSendMail = u"Un email vous a été renvoyé sur votre adresse courante. En cas de non-réception, veuillez revérifier l'adresse enregistrée ci-dessous."
            else:
                echecSendMail = u"Une erreur s'est produite lors de l'envois de votre message,\nle problème a été signaler au staff et sera résolu dans les plus bref délais.\nDésole de l'inconvénience, réessayer dans quelques heures"
            return render(request, 'profil.html', locals())
        if request.POST['action'] == 'updatePassword':

            password1 = request.POST['password1']
            password2 = request.POST['password2']

            # On vérifie que les password sont les memes
            if password1 != password2:
                errorMDP = "Les mots de passes sont différents !"
                return render(request, 'profil.html', locals())

            # On vérifie la longeur du password
            if(len(password1) < 2):
                errorMDP = "Votre mot de passe doit contenir au moins 3 caractères"
                return render(request, 'profil.html', locals())

            request.user.set_password(password1)
            request.user.save()
            successMDP = "Le mot de passe a bien été changé"
            user2 = authenticate(username=request.user, password=password1)
            login(request, user2)
            return render(request, 'profil.html', locals())

        if request.POST['action'] == 'editProfil':

            firstname = request.POST['firstname']
            lastname = request.POST['lastname']
            gsm = request.POST['gsm']
            tel = request.POST['tel']
            fax = request.POST['fax']
            title = request.POST['title']
            boite = request.POST['boite']
            street = request.POST['street']
            number = request.POST['number']
            locality = request.POST['locality']
            postalcode = request.POST['postalcode']
            birthdate = request.POST['birthdate']
            classement = request.POST['classement']
            lat = request.POST['lat']
            lng = request.POST['lng']

            if request.POST.__contains__("participated"):
                oldparticipant = True
            else:
                oldparticipant = False

            # check champs
            if (firstname == "" or lastname == "" or (tel == ""
                                                      and gsm == "") or street == "" or number == "" or locality == "" or postalcode == "" or birthdate == ""):
                errorEdit = "Veuillez remplir tous les champs obligatoires !"
                return render(request, 'profil.html', locals())

            # check format date
            if re.match(r"^[0-3][0-9]/[0-1][0-9]/[1-2][0-9]{3}$", birthdate) is None:
                errorEdit = "La date de naissance n'a pas le bon format"
                return render(request, 'profil.html', locals())

            # On formate la date
            birthdate2 = birthdate.split("/")
            datenaissance = datetime.datetime(
                int(birthdate2[2]), int(birthdate2[1]), int(birthdate2[0]))

            formatedBirthdate = birthdate
            participant = request.user.participant
            participant.titre = title
            participant.nom = lastname
            participant.prenom = firstname
            participant.rue = street
            participant.numero = number
            participant.boite = boite
            participant.codepostal = postalcode
            participant.localite = locality
            participant.telephone = tel
            participant.fax = fax
            participant.gsm = gsm
            participant.datenaissance = datenaissance
            participant.classement = Ranking.objects.get(nom=classement)
            participant.oldparticipant = oldparticipant
            participant.latitude = lat
            participant.longitude = lng
            participant.save()

            # Validate classement
            validate_classement_thread(participant)

            successEdit = "Le profil a bien été changé"
            return render(request, 'profil.html', locals())

    if request.user.is_authenticated():

        return render(request, 'profil.html', locals())
    return redirect(reverse(home))
def view(request):
    today = datetime.date.today()
    yearLoop = range(1900, today.year - 7)
    rankings = Ranking.objects.all()
    if request.method == "POST":
        # Recuperation des donnees
        username = request.POST['username']
        password = request.POST['password']
        firstname = request.POST['firstname']
        lastname = request.POST['lastname']
        email = request.POST['email']
        gsm = request.POST['gsm']
        tel = request.POST['tel']
        fax = request.POST['fax']
        title = request.POST['title']
        boite = request.POST['boite']
        street = request.POST['street']
        number = request.POST['number']
        locality = request.POST['locality']
        postalcode = request.POST['postalcode']
        birthdate = request.POST['birthdate']
        classement = request.POST['classement']
        lat = request.POST['lat']
        lng = request.POST['lng']

        if request.POST.__contains__("participated"):
            oldparticipant = True
        else:
            oldparticipant = False

        # check champs
        if (username == "" or password == "" or firstname == "" or lastname == "" or email == "" or (tel == ""
                                                                                                     and gsm == "") or street == "" or number == "" or locality == "" or postalcode == "" or birthdate == ""):
            error = "Veuillez remplir tous les champs obligatoires !"
            return render(request, 'register.html', locals())

        # Check username et email already taken
        if username_present(username):
            error = "Ce nom d'utilisateur n'est plus disponible !"
            return render(request, 'register.html', locals())

        # On vérifie si l'email est deja dans la db
        if(email_present(email)):
            error = "Un compte avec cette addresse email existe déjà !"
            return render(request, 'register.html', locals())

        # check username length
        if len(username) < 2:
            error = "Votre nom d'utilisateur doit contenir au moins 3 caractères"
            return render(request, 'register.html', locals())

        # check password length
        if len(password) < 2:
            error = "Votre mot de passe doit contenir au moins 3 caractères"
            return render(request, 'register.html', locals())

        # check format date
        if re.match(r"^[0-3][0-9]/[0-1][0-9]/[1-2][0-9]{3}$", birthdate) is None:
            error = "La date de naissance n'a pas le bon format"
            return render(request, 'register.html', locals())

        # On format la date
        birthdate2 = birthdate.split("/")
        datenaissance = datetime.datetime(
            int(birthdate2[2]), int(birthdate2[1]), int(birthdate2[0]))

        # Account creation & redirect
        user = User.objects.create_user(username, email, password)
        user.save()
        # TODO verfied = FALSE
        participant = Participant(user=user, titre=title, nom=lastname, prenom=firstname, rue=street, numero=number, boite=boite, codepostal=postalcode, localite=locality, telephone=tel, fax=fax, gsm=gsm,
                                  classement=Ranking.objects.get(nom=classement), oldparticipant=oldparticipant, datenaissance=datenaissance, isClassementVerified=True, isAccountActivated=False, latitude=lat, longitude=lng)
        participant.save()

        # Create UserInWaitOfActivation object to keep track of the activation
        today = datetime.datetime.now()
        key = get_random_string(20, allowed_chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
        while len(UserInWaitOfActivation.objects.filter(confirmation_key=key)) > 0:
            # Key already in user, generate new one
            key = get_random_string(20, allowed_chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
        activationObject = UserInWaitOfActivation(participant=participant, dayOfRegistration=today, confirmation_key=key)
        activationObject.save()
        link = "http://" + request.get_host() + "/tennis/emailValidation/"

        # Verify user classement
        validate_classement_thread(participant)

        # Send email with code to finish registration and validate account
        send_register_confirmation_email(activationObject, participant, link)

        # On connecte l'utilisateur
        user2 = authenticate(username=username, password=password)
        login(request, user2)
        return redirect(reverse(tournoi))

    if request.user.is_authenticated():
        return redirect(reverse(tournoi))
    return render(request, 'register.html', locals())