def _get_experience_template(id_experience, form = None): """ Permet de render le template _experience_pro pour l'ancien en cours. :param id_experience: l'id de l'expérience considérée :param form: le formulaire d'expérience pro à inclure On prend des formulaires en entrée pour gérer les erreurs. NB: la modificaiton in-line des expériences pro (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 cf : _get_info_perso_template """ experience = None is_this_me = False if current_user is not None and current_user.id_ancien is not None: is_this_me = True experience = annuaire.find_experience_by_id_ancien_id_experience(current_user.id_ancien, id_experience).first() if form is None: form = user.update_experience_form() form.load_experience(experience) else: # attention, on ne devrait jamais arriver ici if form is None: form = user.update_experience_form() form.set_pays(PAYS) return render_template( 'annuaire/profile/_experience.html', exp=experience, form=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_experience(id_experience = None): """ Page pour mettre à jour / ajouter des expériences pro d'un ancien POST : "commit" les données """ id = id_experience res = {} res["content"] = None res["csrf_token"] = generate_csrf_token() res["success"] = False experience_form_to_render = None experience_form = user.update_experience_form() experience_form.set_pays(PAYS) if current_user.id_ancien is not None: experience_form = user.update_experience_form(request.form) experience_form.set_pays(PAYS) form_confirmed = experience_form.validate() if form_confirmed: try: date_debut = datetime.strptime(experience_form.date_debut.data, '%m/%Y') except ValueError: date_debut = None try: date_fin = datetime.strptime(experience_form.date_fin.data, '%m/%Y') except ValueError: date_fin = None success = annuaire.update_experience( current_user.id_ancien, id_experience, experience_form.ville.data, experience_form.pays.data, experience_form.adresse.data, experience_form.code.data, experience_form.entreprise.data, experience_form.poste.data, experience_form.description.data, experience_form.mail.data, experience_form.site.data, experience_form.telephone.data, experience_form.mobile.data, date_debut, date_fin ) if id_experience is not None: flash("Expérience professionnelle modifiée", "success") else: flash("Expérience professionnelle ajoutée", "success") res["success"] = True else: experience_form_to_render = experience_form if id_experience is not None: res["content"] = _get_experience_template(id, form=experience_form_to_render) else: res["content"] = _get_new_experience_template(experience_form_to_render) return json.dumps(res)