fix migration adresses + cosmetique
This commit is contained in:
parent
4b2d5f01a4
commit
badf83cc7f
@ -148,9 +148,15 @@ Mémo pour développeurs: séquence re-création d'une base:
|
||||
flask import-scodoc7-users
|
||||
flask import-scodoc7-dept STID SCOSTID
|
||||
|
||||
Si la base utilisée pour les dev n'est plus en phase avec les scripts de
|
||||
migration, utiliser les commandes `flask db history`et `flask db stamp`pour se
|
||||
positionner à la bonne étape.
|
||||
|
||||
# Paquet debian 11
|
||||
|
||||
Les scripts associés au paquet Debian (.deb) sont dans `tools/debian`.
|
||||
Les scripts associés au paquet Debian (.deb) sont dans `tools/debian`. Le plus
|
||||
important est `postinst`qui se charge de configurer le système (install ou
|
||||
upgrade de scodoc9).
|
||||
|
||||
La préparation d'une release se fait à l'aide du script
|
||||
`tools/build_release.sh`.
|
||||
|
@ -32,7 +32,7 @@ db = SQLAlchemy()
|
||||
migrate = Migrate(compare_type=True)
|
||||
login = LoginManager()
|
||||
login.login_view = "auth.login"
|
||||
login.login_message = "Please log in to access this page."
|
||||
login.login_message = "Identifiez-vous pour accéder à cette page."
|
||||
mail = Mail()
|
||||
bootstrap = Bootstrap()
|
||||
moment = Moment()
|
||||
|
@ -16,20 +16,20 @@ _l = _
|
||||
|
||||
|
||||
class LoginForm(FlaskForm):
|
||||
user_name = StringField(_l("Username"), validators=[DataRequired()])
|
||||
password = PasswordField(_l("Password"), validators=[DataRequired()])
|
||||
remember_me = BooleanField(_l("Remember Me"))
|
||||
submit = SubmitField(_l("Sign In"))
|
||||
user_name = StringField(_l("Nom d'utilisateur"), validators=[DataRequired()])
|
||||
password = PasswordField(_l("Mot de passe"), validators=[DataRequired()])
|
||||
remember_me = BooleanField(_l("mémoriser la connexion"))
|
||||
submit = SubmitField(_l("Suivant"))
|
||||
|
||||
|
||||
class UserCreationForm(FlaskForm):
|
||||
user_name = StringField(_l("Username"), validators=[DataRequired()])
|
||||
user_name = StringField(_l("Nom d'utilisateur"), validators=[DataRequired()])
|
||||
email = StringField(_l("Email"), validators=[DataRequired(), Email()])
|
||||
password = PasswordField(_l("Password"), validators=[DataRequired()])
|
||||
password = PasswordField(_l("Mot de passe"), validators=[DataRequired()])
|
||||
password2 = PasswordField(
|
||||
_l("Repeat Password"), validators=[DataRequired(), EqualTo("password")]
|
||||
_l("Répéter"), validators=[DataRequired(), EqualTo("password")]
|
||||
)
|
||||
submit = SubmitField(_l("Register"))
|
||||
submit = SubmitField(_l("Inscrire"))
|
||||
|
||||
def validate_user_name(self, user_name):
|
||||
user = User.query.filter_by(user_name=user_name.data).first()
|
||||
@ -48,9 +48,9 @@ class ResetPasswordRequestForm(FlaskForm):
|
||||
|
||||
|
||||
class ResetPasswordForm(FlaskForm):
|
||||
password = PasswordField(_l("Password"), validators=[DataRequired()])
|
||||
password = PasswordField(_l("Mot de passe"), validators=[DataRequired()])
|
||||
password2 = PasswordField(
|
||||
_l("Repeat Password"), validators=[DataRequired(), EqualTo("password")]
|
||||
_l("Répéter"), validators=[DataRequired(), EqualTo("password")]
|
||||
)
|
||||
submit = SubmitField(_l("Request Password Reset"))
|
||||
|
||||
|
@ -38,7 +38,7 @@ def login():
|
||||
user = User.query.filter_by(user_name=form.user_name.data).first()
|
||||
if user is None or not user.check_password(form.password.data):
|
||||
current_app.logger.info("login: invalid (%s)", form.user_name.data)
|
||||
flash(_("Invalid user name or password"))
|
||||
flash(_("Nom ou mot de passe invalide"))
|
||||
return redirect(url_for("auth.login"))
|
||||
login_user(user, remember=form.remember_me.data)
|
||||
current_app.logger.info("login: success (%s)", form.user_name.data)
|
||||
@ -95,7 +95,7 @@ def reset_password_request():
|
||||
current_app.logger.info(
|
||||
"reset_password_request: for unkown user '{}'".format(form.email.data)
|
||||
)
|
||||
flash(_("Check your email for the instructions to reset your password"))
|
||||
flash(_("Voir les instructions enoyez par mail"))
|
||||
return redirect(url_for("auth.login"))
|
||||
return render_template(
|
||||
"auth/reset_password_request.html", title=_("Reset Password"), form=form
|
||||
|
@ -152,10 +152,10 @@ def sidebar():
|
||||
# Logo
|
||||
H.append(
|
||||
f"""<div class="logo-insidebar">
|
||||
<div class="sidebar-bottom"><a href="{ url_for( 'scolar.about', scodoc_dept=g.scodoc_dept ) }" class="sidebar">À propos</a><br/>
|
||||
<div class="sidebar-bottom"><a href="{ url_for( 'scodoc.about', scodoc_dept=g.scodoc_dept ) }" class="sidebar">À propos</a><br/>
|
||||
<a href="{ scu.SCO_USER_MANUAL }" target="_blank" class="sidebar">Aide</a>
|
||||
</div></div>
|
||||
<div class="logo-logo"><a href= { url_for( 'scolar.about', scodoc_dept=g.scodoc_dept ) }
|
||||
<div class="logo-logo"><a href= { url_for( 'scodoc.about', scodoc_dept=g.scodoc_dept ) }
|
||||
">{ scu.icontag("scologo_img", no_size=True) }</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -258,6 +258,7 @@ def user_info(user_name_or_id=None, user=None):
|
||||
info = u.to_dict()
|
||||
else:
|
||||
info = None
|
||||
user_name = "inconnu"
|
||||
else:
|
||||
info = user.to_dict()
|
||||
user_name = user.user_name
|
||||
|
@ -2615,6 +2615,7 @@ div.maindiv {
|
||||
}
|
||||
ul.main {
|
||||
list-style-type: square;
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
ul.main li {
|
||||
|
25
app/templates/about.html
Normal file
25
app/templates/about.html
Normal file
@ -0,0 +1,25 @@
|
||||
{% extends 'base.html' %}
|
||||
{% import 'bootstrap/wtf.html' as wtf %}
|
||||
|
||||
{% block app_content %}
|
||||
|
||||
<h2>Système de gestion scolarité</h2>
|
||||
|
||||
<p>© Emmanuel Viennet 2021</p>
|
||||
|
||||
<p>Version {{ version }}</p>
|
||||
|
||||
<p>ScoDoc est un logiciel libre écrit en
|
||||
<a href="http://www.python.org" target="_blank" rel="noopener noreferrer">Python</a>.
|
||||
Information et documentation sur <a href="https://scodoc.org" target="_blank">scodoc.org</a>.
|
||||
</p>
|
||||
|
||||
<h2>Dernières évolutions</h2>
|
||||
|
||||
{{ news|safe }}
|
||||
|
||||
<div class="about-logo">
|
||||
{{ logo|safe }}
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
@ -2,14 +2,19 @@
|
||||
{% import 'bootstrap/wtf.html' as wtf %}
|
||||
|
||||
{% block app_content %}
|
||||
<h1>Sign In</h1>
|
||||
<h1>Connexion</h1>
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{{ wtf.quick_form(form) }}
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
Forgot Your Password?
|
||||
<a href="{{ url_for('auth.reset_password_request') }}">Click to Reset It</a>
|
||||
En cas d'oubli de votre mot de passe
|
||||
<a href="{{ url_for('auth.reset_password_request') }}">cliquez ici pour le réinitialiser</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="help">L'accès à ScoDoc est strictement réservé aux personnels de
|
||||
l'établissement. Les étudiants n'y ont pas accès. Pour toute information,
|
||||
contactez la personne responsable de votre établissement.</p>
|
||||
{% endblock %}
|
@ -2,7 +2,7 @@
|
||||
{% import 'bootstrap/wtf.html' as wtf %}
|
||||
|
||||
{% block app_content %}
|
||||
<h2>ScoDoc: gestion scolarité (version béta)</h2>
|
||||
<h2>ScoDoc 9 - suivi scolarité</h2>
|
||||
|
||||
{% if not current_user.is_anonymous %}
|
||||
<p>Bonjour <font color="red"><b>{{current_user.get_nomcomplet()}}</b>
|
||||
@ -24,10 +24,6 @@
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<font color="red">Ceci est une version de test,
|
||||
ne pas utiliser en production !</font>
|
||||
</p>
|
||||
|
||||
{% if current_user.is_authenticated %}
|
||||
<form action="{{url_for('scodoc.table_etud_in_accessible_depts')}}" method="POST">
|
||||
@ -43,4 +39,9 @@
|
||||
<p><a href="/ScoDoc/static/mobile">Charger la version mobile (expérimentale)</a></p>
|
||||
</div> -->
|
||||
|
||||
<div style="margin-top: 1cm;">
|
||||
Service réservé aux personnels et enseignants, basé sur <a href="{{url_for('scodoc.about')}}">le logiciel libre
|
||||
ScoDoc.</a>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
@ -131,6 +131,18 @@ def get_etud_dept():
|
||||
return Departement.query.get(last_etud.dept_id).acronym
|
||||
|
||||
|
||||
@bp.route("/ScoDoc/about")
|
||||
@bp.route("/ScoDoc/Scolarite/<scodoc_dept>/about")
|
||||
def about(scodoc_dept=None):
|
||||
"version info"
|
||||
return render_template(
|
||||
"about.html",
|
||||
version=scu.get_scodoc_version(),
|
||||
news=sco_version.SCONEWS,
|
||||
logo=scu.icontag("borgne_img"),
|
||||
)
|
||||
|
||||
|
||||
# ---- CONFIGURATION
|
||||
|
||||
|
||||
|
@ -131,34 +131,6 @@ def sco_publish(route, function, permission, methods=["GET"]):
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
|
||||
@bp.route("/about")
|
||||
@scodoc
|
||||
@permission_required(Permission.ScoView)
|
||||
@scodoc7func
|
||||
def about():
|
||||
"version info"
|
||||
H = [
|
||||
"""<h2>Système de gestion scolarité</h2>
|
||||
<p>© Emmanuel Viennet 1997-2021</p>
|
||||
<p>Version %s</p>
|
||||
"""
|
||||
% (scu.get_scodoc_version())
|
||||
]
|
||||
H.append(
|
||||
'<p>Logiciel libre écrit en <a href="http://www.python.org" target="_blank" rel="noopener noreferrer">Python</a>.</p>'
|
||||
)
|
||||
H.append("<h2>Dernières évolutions</h2>" + sco_version.SCONEWS)
|
||||
H.append(
|
||||
'<div class="about-logo">'
|
||||
+ scu.icontag("borgne_img")
|
||||
+ " <em>Au pays des aveugles...</em></div>"
|
||||
)
|
||||
d = ""
|
||||
return (
|
||||
html_sco_header.sco_header() + "\n".join(H) + d + html_sco_header.sco_footer()
|
||||
)
|
||||
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
#
|
||||
# PREFERENCES
|
||||
@ -311,15 +283,6 @@ def showEtudLog(etudid, format="html", REQUEST=None):
|
||||
|
||||
|
||||
# ---------- PAGE ACCUEIL (listes) --------------
|
||||
# @bp.route("/")
|
||||
@bp.route("/kimo")
|
||||
@scodoc
|
||||
@permission_required(Permission.ScoView)
|
||||
@scodoc7func
|
||||
def kimo(REQUEST=None, showcodes=0, showsemtable=0):
|
||||
import time
|
||||
|
||||
return f"{time.time()} := {g.scodoc_dept}"
|
||||
|
||||
|
||||
@bp.route("/")
|
||||
|
@ -1,14 +1,14 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
SCOVERSION = "9.0.13"
|
||||
SCOVERSION = "9.0.14"
|
||||
|
||||
SCONAME = "ScoDoc"
|
||||
|
||||
SCONEWS = """
|
||||
<h4>Année 2021</h4>
|
||||
<ul>
|
||||
<li>ScoDoc 9: nouvelle architecture logicielle</li>
|
||||
<li>ScoDoc 9: nouvelle architecture logicielle (Flask/Python3/Debian 11)</li>
|
||||
<li>Version mobile (en test)</li>
|
||||
<li>Évaluations de type "deuxième session"</li>
|
||||
<li>Gestion du genre neutre (pas d'affichage de la civilité)</li>
|
||||
|
@ -380,6 +380,7 @@ def convert_object(
|
||||
"absences",
|
||||
"absences_notifications",
|
||||
"itemsuivi", # etudid n'était pas une clé
|
||||
"adresse", # etudid n'était pas une clé
|
||||
}:
|
||||
# tables avec "fausses" clés
|
||||
# (l'object référencé a pu disparaitre)
|
||||
|
Loading…
Reference in New Issue
Block a user