Skip to content

Commit

Permalink
Merge branch 'master' into dev_annuaire
Browse files Browse the repository at this point in the history
  • Loading branch information
marimmori authored Mar 25, 2019
2 parents f32b1ba + 48d423f commit bcebbed
Show file tree
Hide file tree
Showing 17 changed files with 453 additions and 175 deletions.
Binary file modified .DS_Store
Binary file not shown.
3 changes: 3 additions & 0 deletions app/modeles/utilisateurs.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class RegistrationForm(FlaskForm):
person_git = StringField('Compte Github (URL)')
person_linkedIn = StringField('Compte LinkedIn (URL)')
person_promotion = StringField('Promotion TNAH (année du diplôme)')
person_is_teacher = BooleanField('Je suis enseignant·e')
submit = SubmitField('S\'enregistrer')

def validate_username(self, person_login):
Expand All @@ -38,6 +39,7 @@ def validate_email(self, person_email):
raise ValidationError('Adresse mail déjà enregistrée')

class EditProfileForm(FlaskForm):
#formulaire pour la modification des infos utilisateur
person_login = StringField('Nom d\'utilisateur', validators=[DataRequired()])
person_email = StringField('Email', validators=[DataRequired(), Email()])
person_name = StringField('Nom', validators=[DataRequired()])
Expand All @@ -46,6 +48,7 @@ class EditProfileForm(FlaskForm):
person_git = StringField('Compte GitHub (URL)')
person_linkedIn= StringField('Compte LinkedIn (URL)')
person_description = TextAreaField('Description')
person_is_admin = BooleanField('ADMIN TNAHBox')
submit = SubmitField('Enregistrer les modifications')


81 changes: 77 additions & 4 deletions app/routes/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,14 +231,14 @@ def lenTitle(title):
)

@app.route("/document/<int:docu_id>", methods=['GET', "POST"])
@login_required
def document(docu_id):
"""
Route permettant l'affichage d'une notice affichant les métadonnées relatives
au document dont l'id est donnée en paramètre
:param docu_id: Identifiant d'un document de la base de données (int)
"""

# # # AJOUT D'UN NOUVEAU TAG AU DOCUMENT COURANT
tag_label = request.form.get("tag", None)
# on stocke le label du tag donné par l'utilisateur
Expand Down Expand Up @@ -268,13 +268,19 @@ def document(docu_id):
if unfav:
Person.remove_docu_to_favorites(current_user, requested_docu)


return render_template("pages/document.html",
docu = requested_docu,
auteur = auteur,
current_user = current_user)


@app.route('/login', methods=['GET', "POST"])
def login():
"""
Formulaire de connexion
:return: template de la page de connexion (connexion.html) avec le formulaire
"""
if current_user.is_authenticated:
return redirect('/')
form = LoginForm()
Expand All @@ -292,11 +298,19 @@ def login():

@app.route('/logout')
def logout():
"""
Déconnexion
:return: redirige à la racine = page d'accueil
"""
logout_user()
return redirect('/')

@app.route('/register', methods=['GET', 'POST'])
def register():
"""
Engregistrer une nouvelle entrée dans la table Person de la BDD qui correspond à un utilisateur du site
:return: page html "register" avec le formulaire d'inscription
"""
if current_user.is_authenticated:
return redirect('/')
form = RegistrationForm()
Expand All @@ -307,7 +321,9 @@ def register():
person_firstName=form.person_firstName.data,
person_git=form.person_git.data,
person_linkedIn=form.person_linkedIn.data,
person_promotion=form.person_promotion.data)
person_promotion=form.person_promotion.data,
person_last_seen= date.today(),
person_is_teacher=form.person_is_teacher.data)
user.set_password(form.person_password.data)
db.session.add(user)
db.session.commit()
Expand Down Expand Up @@ -414,12 +430,69 @@ def user(person_login):
if user in docu.loving_users:
docus.append(docu)

def lenDesc(desc):
'''
Fonction qui mesure la longueur d'une chaine de caractère et renvoie 1 si elle est supérieure à 60 caractères
:param desc: chaine de caractère à mesurer (str)
:return: 1 (si desc > 60) ou 0 (si desc < 60)
'''
if len(desc) > 60:
lendesc = 1
else:
lendesc = 0

return lendesc

def lenTitle(title):
'''
Fonction qui mesure la longueur d'une chaine de caractère et renvoie 1 si elle est supérieure à 20 caractères
:param title: chaine de caractère à mesurer (str)
:return: 1 (si desc > 20) ou 0 (si desc < 20)
'''
if len(title) > 20:
lentitle = 1
else:
lentitle = 0

return lentitle

return render_template('pages/profile.html',
user=user,
docus = docus)
docus = docus,
lenTitle = lenTitle,
lenDesc = lenDesc)
#permet de générer une page profil pour chaque login enregistré (différent des entrées BDD : car tout le monde dans
# la base de données n'a pas de profil enregistré

@app.route('/admin/<person_login>/edit_profile', methods=['GET', 'POST'])
@login_required
def admin(person_login):
user = Person.query.filter_by(person_login=person_login).first()
form = EditProfileForm()
if form.validate_on_submit():
user.person_login = form.person_login.data
user.person_email = form.person_email.data
user.person_name = form.person_name.data
user.person_firstName = form.person_firstName.data
user.person_promotion = form.person_promotion.data
user.person_git = form.person_git.data
user.person_linkedIn = form.person_linkedIn.data
user.person_description = form.person_description.data
user.person_is_admin = form.person_is_admin.data
db.session.commit()
return redirect(url_for('user', person_login = person_login))
elif request.method == 'GET':
form.person_login.data = user.person_login
form.person_email.data = user.person_email
form.person_name.data = user.person_name
form.person_firstName.data = user.person_firstName
form.person_promotion.data = user.person_promotion
form.person_git.data = user.person_git
form.person_linkedIn.data = user.person_linkedIn
form.person_description.data = user.person_description
form.person_is_admin.data = user.person_is_admin
return render_template('pages/admin.html', form=form)

@app.route('/edit_profile', methods=['GET', 'POST'])
@login_required
def edit_profile():
Expand All @@ -439,7 +512,7 @@ def edit_profile():
current_user.person_description = form.person_description.data
db.session.commit()
flash('Changement(s) sauvegardé(s)')
return redirect(url_for('edit_profile'))
return redirect(url_for('user', person_login=current_user.person_login))
elif request.method == 'GET':
#Si le formulaire n'est pas soumis ni modifier, l'utilisateur verra ses données enregistrées dans la BDD
form.person_login.data = current_user.person_login
Expand Down
Binary file added app/static/img/awe.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed app/static/img/coeur.png
Binary file not shown.
Binary file added app/static/img/faved.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed app/static/img/no_coeur.png
Binary file not shown.
Binary file added app/static/img/unfaved.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
43 changes: 21 additions & 22 deletions app/templates/conteneur.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,30 +26,29 @@

<ul class="navbar-nav mr-auto">
{% if current_user.is_anonymous %}
<li class="nav-item">
<a class="nav-link" href="{{url_for('login')}}">Connexion</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('register')}}">S'enregistrer</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('login')}}">Connexion</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('register')}}">S'enregistrer</a>
</li>
{% else %}
<li class="nav-item">
<a class="nav-link" href="{{url_for('user', person_login=current_user.person_login )}}">Mon profil</a>

</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('logout')}}">Déconnexion</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('user', person_login=current_user.person_login )}}">Mon profil</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('logout')}}">Déconnexion</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('recherche')}}">Recherche avancée</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('annuaire')}}">Annuaire</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('upload')}}">Ajouter un document</a>
</li>
{% endif %}
<li class="nav-item">
<a class="nav-link" href="{{url_for('recherche')}}">Recherche avancée</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('annuaire')}}">Annuaire</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{url_for('upload')}}">Ajouter un document</a>
</li>
</ul>
<form class="form-inline" action="{{url_for('recherche')}}"method="GET">
<input class="form-control" name="keyword" type="search" placeholder="Recherche rapide" aria-label="Recherche">
Expand Down
107 changes: 58 additions & 49 deletions app/templates/pages/accueil.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,68 +6,77 @@
<body>
<div style="text-align: center">
<!-- conserver cette ligne ? correspond au premier code de la page <p><a href="{{url_for('recherche')}}">Lien vers la page de recherche parmi les documents</a></p> -->
<h1 class="h3 mb-3 font-weight-normal">Bienvenue sur la page d'accueil du projet TNAHBox !</h1>
<a href="{{url_for('register')}}" class="btn btn-dark btn-lg active" role="button" aria-pressed="true">Inscription</a>
<a href="{{url_for('login')}}" class="btn btn-dark btn-lg active" role="button" aria-pressed="true">Connexion</a>
<p class="lead text-muted container">Rendu final du cours de <a href="/personne/3">Thibaut Clérice</a> en M2 TNAH à l'ENC, <br>le projet TNAHBox a été développé grâce au langage de programmation python. Bienvenue sur la page d'accueil !</p>

{% if current_user.is_anonymous %}

<p class="h3 mb-3 font-weight-normal container"><br>Ancien étudiant·e ou enseignant·e ?
Inscrivez-vous et accédez aux documents enregistrés ou ajoutez-les et explorez l'annuaire du master !</p>
<a href="{{url_for('register')}}" class="btn btn-dark btn-md active" role="button" aria-pressed="true" style="margin-right: 0.5em">Inscription</a>
<a href="{{url_for('login')}}" class="btn btn-dark btn-md active" role="button" aria-pressed="true" style="margin-right: 0.5em">Connexion</a>
<!-- deux boutons menant aux pages inscription et description -->
{% endif %}
</div>


<div class="container marketing" style="margin-top: 2em">
<!-- pour une raison que je n'explique pas, les boutons sont recouverts par les "ronds" svg des docs sans un petit margin-top-->
<h4>Voici les trois derniers documents ajoutés à la base : </h4>
<div class="container marketing" style="margin-top: 2em">
<!-- pour une raison que je n'explique pas, les boutons sont recouverts par les "ronds" svg des docs sans un petit margin-top-->
<h4 style="padding: 1em">Voici les trois derniers documents ajoutés à la TNAHBox : </h4>
<div class="row">
{% for found_document in resultats %}
{% for found_document in resultats %}

<div class="col-lg-4 col-md-6 mb-4">
<div class="card h-100">
{% if found_document.document_format == "image" %}
<img class="bd-placeholder-img card-img-top" src="{{url_for('static', filename='img/img.png')}}">
{% elif found_document.document_format == "texte" %}
<img class="bd-placeholder-img card-img-top" src="{{url_for('static', filename='img/txt.png')}}">
{% elif found_document.document_format == "code" %}
<img class="bd-placeholder-img card-img-top" src="{{url_for('static', filename='img/code.png')}}">
{% elif found_document.document_format == "autre" %}
<img class="bd-placeholder-img card-img-top" src="{{url_for('static', filename='img/autre.png')}}">
{% else %}
<img class="bd-placeholder-img card-img-top" src="{{url_for('static', filename='img/autre.png')}}">
{% endif %}
<!-- ici : si le format correspond à , alors appliquer l'image choisie ; la boucle for au dessus permet itération facile -->
<div class="card-body">
<div class="row">
<h4 class="card-title col-md-8">
<a href="{{url_for('document', docu_id = found_document.document_id)}}">{{found_document.document_title}}</a>
</h4>
<div class="col-md-4">
<b>
{% if found_document.document_teaching %}
<p>{{found_document.document_teaching}}</p>
{% else %}
<p>Il n'y a pas de matière renseignée pour ce document</p>
<!-- Si la matière du document a été remplie dans la BDD, afficher sinon phrase -->
{% endif %}
</b>
</div>
</div>
<p class="card-text">{% if found_document.document_description %}
<p>{{found_document.document_description}}</p>
{% else %}
<p>Il n'y a pas de description pour ce document</p>
<!-- Si la description du document a été remplie dans la BDD, afficher sinon phrase -->
{% endif %}
</p>
</div>
<div class="col-lg-4 col-md-6 mb-4">
<div class="card h-100">
{% if found_document.document_format == "Image" %}
<img class="bd-placeholder-img card-img-top" src="{{url_for('static', filename='img/img.png')}}">
{% elif found_document.document_format == "Texte" %}
<img class="bd-placeholder-img card-img-top" src="{{url_for('static', filename='img/txt.png')}}">
{% elif found_document.document_format == "Code" %}
<img class="bd-placeholder-img card-img-top" src="{{url_for('static', filename='img/code.png')}}">
{% elif found_document.document_format == "Autre" %}
<img class="bd-placeholder-img card-img-top" src="{{url_for('static', filename='img/autre.png')}}">
{% else %}
<img class="bd-placeholder-img card-img-top" src="{{url_for('static', filename='img/autre.png')}}">
{% endif %}
<!-- ici : si le format correspond à , alors appliquer l'image choisie ; la boucle for au dessus permet itération facile -->
<div class="card-body">
<div class="row">
<h4 class="card-title col-md-8">
<a href="{{url_for('document', docu_id = found_document.document_id)}}">{{found_document.document_title}}</a>
</h4>
<div><!-- pour question d'affichage et responsive design class="col-md-4"retiré balise div-->
<b>
{% if found_document.document_teaching %}
<span class="badge badge-light">{{found_document.document_teaching}}</span>
{% else %}
<p>Il n'y a pas de matière renseignée pour ce document</p>
<!-- Si la matière du document a été remplie dans la BDD, afficher sinon phrase -->
{% endif %}
</b>
</div>
</div>
{% if found_document.document_description %}
<p>{{found_document.document_description}}</p>
<!-- permet de n'afficher que les 59 premiers caractères de la description, ainsi il n'y a pas de dépassement possible en dehors de la card -->
{% else %}
<p>Il n'y a pas de description pour ce document</p>
<!-- Si la description du document a été remplie dans la BDD, afficher sinon phrase -->
{% endif %}

</div>
</div>
</div>

{% endfor %}
</div>

{% endfor %}

<!-- essayer : si personne connectée, donner accès à la page, sinon, envoyer un message "vous n'êtes pas connecté"
problème : idée que les documents ne sont accessibles si l'user est logué-->
<!-- essayer : si personne connectée, donner accès à la page, sinon, envoyer un message "vous n'êtes pas connecté"
problème : idée que les documents ne sont accessibles si l'user est logué-->

<!-- design repris depuis page recherche avec les card de bootstrap -->
</div>
</div>
</div>
</body>
{% include "partials/footer_accueil.html" %}
{% endblock %}
Loading

0 comments on commit bcebbed

Please sign in to comment.