Пример #1
0
def _get_info_perso_template(ancien_form=None, adresse_form=None):
    """
    Permet de render le template _info_perso pour l'ancien en cours.

    :param adresse_form:    le formulaire d'adresse à inclure
    :param ancien_form:     le formulaire d'infos persos à inclure

    On prend des formulaires en entrée pour gérer les erreurs.


    NB: la modificaiton in-line des infos perso (sans page reload) ne
        permet plus de render des templates complets côté serveur. Plutôt
        que de réécrire l'intégralité de l'appli côté client, on render des
        templates partiels qu'on injecte dans la page sur des appels POST.

        Ce n'est pas super propre, mais c'est la vie :3
    """
    ancien = None
    adresse = None

    if current_user is not None and current_user.id_ancien is not None:

        ancien = annuaire.find_ancien_by_id(current_user.id_ancien)

        #~~~~~~~~~~~~~#
        # INFOS PERSO #
        #~~~~~~~~~~~~~#
        if ancien_form is None:
            ancien_form = user.update_ancien_form()
            ancien_form.load_ancien(ancien)

        #~~~~~~~~~#
        # ADRESSE #
        #~~~~~~~~~#
        if adresse_form is None:
            adresse_form = user.update_adresse_form()
            adresse_form.set_pays(PAYS)
            adresse = annuaire.find_adresse_by_id_ancien(current_user.id_ancien)
            if adresse is not None:
                adresse_form.load_adresse(adresse)

    else:
        if ancien_form is None:
            ancien_form = user.update_ancien_form()

        if adresse_form is None:
            adresse_form = user.update_adresse_form()
            adresse_form.set_pays(PAYS)


    return render_template(
        'annuaire/profile/_infos_perso.html',
        ancien=ancien,
        adresse=adresse,
        ancien_form=ancien_form,
        adresse_form=adresse_form,
        utilisateur=current_user,
        editable=True
    )
Пример #2
0
def ancien(id_ancien):
    """
    Afficher le profil d'un ancien.

    Si l'ancien est l'ancien associé à l'utilisateur, alors on affiche des formulaires d'update pour :
    - Les infos perso
    - L'adresse perso
    - Les expériences pros
    - Le mot de passe

    On affiche également les fonctionnalités linkedin :
    - Associer / dissocier mon compte
    - Importer des expériences

    :param int id_ancien: L'id de l'ancien étudié
    :return:
    """

    is_this_me =  current_user is not None and current_user.id_ancien == id_ancien

    kwargs = { "actif" : True, "bloque" : False }
    if is_this_me or current_user.admin:
        kwargs = { "actif" : None, "bloque" : None }

    # Chargement de l'ancien
    ancien = annuaire.find_ancien_by_id(id_ancien, **kwargs)


    # Cas 1 : il n'existe pas
    if ancien is None:
        abort(404, "Il semblerait que la page n'existe pas ...")

    # cas 2 : il est bloqué
    # (donc normalement ici c'est l'utilisateur concerné qui consulte la fiche)
    elif is_this_me and ancien['bloque']:
        flash(
            "Ton compte a été désactivé par les administrateurs."
            "Nous t'invitons à les contacter pour le débloquer.",
            "danger"
        )
        return redirect(url_for("annuaire_view"))

    # Cas 3 : cas nominal !
    else:
        ancien_form = user.update_ancien_form()
        adresse_form = user.update_adresse_form()
        adresse_form.set_pays(PAYS)
        experience_forms = {}
        new_experience_form = None
        linkedin_url = None
        import_linkedin_url = None
        password_form = user.change_password_form()


        # get data by id ancien
        adresse = annuaire.find_adresse_by_id_ancien(id_ancien)
        experiences = annuaire.find_experience_by_id_ancien(id_ancien).fetchall()

        for exp in experiences:
            form = user.update_experience_form()
            form.set_pays(PAYS)
            form.load_experience(exp)
            experience_forms[exp['experience_id_experience']] = form

        # Ici on regarde si il s'agit bien de l'utilisateur
        if is_this_me:

            #~~~~~~~~~#
            # ADRESSE #
            #~~~~~~~~~#
            adresse = annuaire.find_adresse_by_id_ancien(current_user.id_ancien)
            if adresse is not None:
                adresse_form.load_adresse(adresse)

            #~~~~~~~~~~~~~#
            # INFOS PERSO #
            #~~~~~~~~~~~~~#
            ancien_form = user.update_ancien_form()
            ancien_form.load_ancien(ancien)

            #~~~~~~~~~~~~~~~~~~#
            # AJOUT EXPERIENCE #
            #~~~~~~~~~~~~~~~~~~#
            new_experience_form = user.update_experience_form()
            new_experience_form.set_pays(PAYS)


            #~~~~~~~~~~~~~~~~~~#
            # Gestion LinkedIn #
            #~~~~~~~~~~~~~~~~~~#
            # Connexion à LinkedIn
            if ancien['url_linkedin'] is None:
                linkedin_url = ("https://www.linkedin.com/uas/oauth2/authorization?"
                                    "response_type=code&"
                                    "client_id=%s&"
                                    "scope=r_basicprofile"
                                    "&state=%s"
                                    "&redirect_uri=%s" %
                                    (app.config['LINKEDIN_KEY'],
                                     #app.config['LINKEDIN_SCOPE'],
                                     generate_csrf_token(),
                                     url_for('linkedin_associer', _external=True)))

            # import des expériences pro linkeding
            import_linkedin_url = ("https://www.linkedin.com/uas/oauth2/authorization?"
                                "response_type=code&"
                                "client_id=%s&"
                                "scope=r_basicprofile"
                                "&state=%s"
                                "&redirect_uri=%s" %
                                (app.config['LINKEDIN_KEY'],
                                 #app.config['LINKEDIN_SCOPE'],
                                 generate_csrf_token(),
                                 url_for('linkedin_importer', _external=True)))

            print import_linkedin_url



        # load page
        return render_template(
            'annuaire/ancien.html',
            admin=current_user.admin,
            ancien=ancien,
            adresse=adresse,
            ancien_form=ancien_form,
            adresse_form=adresse_form,
            experiences=experiences,
            utilisateur=current_user,
            editable=is_this_me,
            experience_forms=experience_forms,
            new_experience_form = new_experience_form,
            linkedin_url = linkedin_url,
            import_linkedin_url= import_linkedin_url,
            password_form = password_form
        )
Пример #3
0
def update_info_perso():
    """
    Page pour mettre à jour les infos perso d'un ancien.
        -> Infos perso
        -> Adresse perso

    Deux fois (adresse+infos) trois étapes :
        1. Valider les données
        2. Le cas échéant, les sauvegarder
        3. Regénérer le template et le renvoyer avec un nouveau csrf token
    """

    res = {}
    res["content"] = None
    res["csrf_token"] = generate_csrf_token()
    res["success"] = False

    form_ancien_to_render = None

    form = user.update_ancien_form()

    info_ok = False

    if current_user is not None:

        #~~~~~~~~~~~~~#
        # INFOS PERSO #
        #~~~~~~~~~~~~~#
        ancien = annuaire.find_ancien_by_id(current_user.id_ancien)

        if ancien is not None:
            form.load_ancien(ancien)

            # Confirmer
            form = user.update_ancien_form(request.form)
            form_confirmed = form.validate()


            # si tout va bien, mettre a jour.
            if form_confirmed:
                success = annuaire.update_fiche_ancien(
                    ancien['id_ancien'],
                    form.telephone.data,
                    form.mobile.data,
                    form.site.data,
                    form.mail_perso.data
                )
                if success:
                    app.logger.info(
                        "UPDATE INFO - successfully update info for user with id %s, id ancien : %s",
                        current_user.id,
                        ancien['id_ancien']
                        )
                    info_ok = True

                else:
                    app.logger.info("UPDATE INFO - failed insert for user with id %s", current_user.id)

            else:
                form_ancien_to_render = form
                app.logger.info("UPDATE INFO - failed insert for user with id %s", current_user.id)


        #~~~~~~~~~#
        # ADRESSE #
        #~~~~~~~~~#
        adresse_form = user.update_adresse_form()
        adresse_form.set_pays(PAYS)

        if current_user.id_ancien is not None:
            adresse = annuaire.find_adresse_by_id_ancien(current_user.id_ancien)
            if adresse is not None:
                adresse_form.load_adresse(adresse)

            # Confirmer
            adresse_form = user.update_adresse_form(request.form)
            adresse_form.set_pays(PAYS)
            form_confirmed = adresse_form.validate()

            # si tout va bien, mettre a jour.
            if form_confirmed:
                annuaire.update_adresse_perso(
                    current_user.id_ancien,
                    adresse_form.ville.data,
                    adresse_form.pays.data,
                    adresse_form.adresse.data,
                    adresse_form.code.data
                )
                if info_ok:
                    flash("Informations personnelles mises à jour", "success")


        res["content"] = _get_info_perso_template(ancien_form=form_ancien_to_render)
        res["success"] = True

    return json.dumps(res)