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 )
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 )
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)