def ancien_by_id_api(id_ancien): """ API pour afficher un ancien. L'attribut complet=True permet d'avoir le profil complet de l'ancien, avec adresses et expérience. :param id_ancien: :return: """ # Problème de routing Flask, on raise une 500. # -> Normalement si id_ancien is None on devrait taper dans fulltext_api if id_ancien is None: abort(500) 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, "Ancien non trouvé, parce que : " "a. Il n'y a pas d'ancien avec cet identifiant " "b. Un ancien existe mais il a souhaité masquer sa fiche " "c. Un ancien exsite mais a été bloqué par un administrateur", ) # cas 2 : il est bloqué # (donc normalement ici c'est l'utilisateur concerné qui consulte la fiche) elif is_this_me and ancien["bloque"]: abort(403, "Ton profil a été bloqué par un administrateur ...") else: excluded_columns = ["id_linkedin", "actif", "bloque", "nouveau", "fulltext"] ancien_dict = helper.row_to_json(ancien, excluded_columns) if request.args.get("complet", None) is not None: ancien_dict["adresses"] = helper.row_to_json(annuaire.find_adresse_by_id_ancien(id_ancien)) ancien_dict["experiences"] = [ helper.row_to_json(r) for r in annuaire.find_experience_by_id_ancien(id_ancien) ] return json.dumps(ancien_dict)
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 )