This commit is contained in:
Emmanuel Viennet 2021-06-26 09:36:38 +02:00
commit 3bb69b4680
13 changed files with 60 additions and 65 deletions

View File

@ -760,6 +760,6 @@ def tf_error_message(msg):
if type(msg) == StringType: if type(msg) == StringType:
msg = [msg] msg = [msg]
return ( return (
'<ul class="tf-msg"><li id="errorMessage" class="tf-msg">%s</li></ul>' '<ul class="tf-msg"><li class="tf-msg error-message">%s</li></ul>'
% '</li><li class="tf-msg">'.join(msg) % '</li><li class="tf-msg">'.join(msg)
) )

View File

@ -376,7 +376,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
if editable: if editable:
H.append( H.append(
"""<p><a class="stdlink" href="formation_create" id="create_formation_link">Créer une formation</a></p> """<p><a class="stdlink" href="formation_create" id="link-create-formation">Créer une formation</a></p>
<p><a class="stdlink" href="formation_import_xml_form">Importer une formation (xml)</a></p> <p><a class="stdlink" href="formation_import_xml_form">Importer une formation (xml)</a></p>
<p class="help">Une "formation" est un programme pédagogique structuré en UE, matières et modules. Chaque semestre se réfère à une formation. La modification d'une formation affecte tous les semestres qui s'y réfèrent.</p> <p class="help">Une "formation" est un programme pédagogique structuré en UE, matières et modules. Chaque semestre se réfère à une formation. La modification d'une formation affecte tous les semestres qui s'y réfèrent.</p>
""" """

View File

@ -898,7 +898,9 @@ subversion: %(svn_version)s
# aucun departement defini: aide utilisateur # aucun departement defini: aide utilisateur
H.append("<p>Aucun département à ajouter !</p>") H.append("<p>Aucun département à ajouter !</p>")
else: else:
H.append("""<form action="create_dept" id="CreateDpt"><select name="DeptId"/>""") H.append(
"""<form action="create_dept" ><select id="create-dept" name="DeptId"/>"""
)
for deptId in addableDepts: for deptId in addableDepts:
H.append("""<option value="%s">%s</option>""" % (deptId, deptId)) H.append("""<option value="%s">%s</option>""" % (deptId, deptId))
H.append( H.append(
@ -915,7 +917,7 @@ subversion: %(svn_version)s
(le site peut donc être recréé sans perte de données). (le site peut donc être recréé sans perte de données).
</p> </p>
<form action="delete_dept"> <form action="delete_dept">
<select name="DeptId" id= "DeleteDept"> <select name="DeptId" id= "delete-dept">
""" """
) )
for deptFolder in self._list_depts(): for deptFolder in self._list_depts():

View File

@ -143,7 +143,7 @@ class ZScoUsers(
if authuser.has_permission(ScoUsersAdmin, self): if authuser.has_permission(ScoUsersAdmin, self):
H.append( H.append(
'<p><a id="creer_Utilisateur" href="create_user_form" class="stdlink">Ajouter un utilisateur</a>' '<p><a id="create-user" href="create_user_form" class="stdlink">Ajouter un utilisateur</a>'
) )
H.append( H.append(
'&nbsp;&nbsp; <a href="import_users_form" class="stdlink">Importer des utilisateurs</a></p>' '&nbsp;&nbsp; <a href="import_users_form" class="stdlink">Importer des utilisateurs</a></p>'

View File

@ -55,9 +55,9 @@ def sidebar_common(context, REQUEST=None):
% params, % params,
context.sidebar_dept(REQUEST), context.sidebar_dept(REQUEST),
"""<h2 class="insidebar">Scolarit&eacute;</h2> """<h2 class="insidebar">Scolarit&eacute;</h2>
<a id="SemestresLink" href="%(ScoURL)s" class="sidebar">Semestres</a> <br/> <a href="%(ScoURL)s" id="link-semestre" class="sidebar">Semestres</a> <br/>
<a id="ProgrammesLink" href="%(NotesURL)s" class="sidebar">Programmes</a> <br/> <a href="%(NotesURL)s" id="link-programmes" class="sidebar">Programmes</a> <br/>
<a id="AbsnecesLink" href="%(AbsencesURL)s" class="sidebar">Absences</a> <br/> <a href="%(AbsencesURL)s" id="link-absence" class="sidebar">Absences</a> <br/>
""" """
% params, % params,
] ]
@ -66,12 +66,13 @@ def sidebar_common(context, REQUEST=None):
ScoUsersView, context ScoUsersView, context
): ):
H.append( H.append(
"""<a id="utilisateurs_Vue" href="%(UsersURL)s" class="sidebar">Utilisateurs</a> <br/>""" % params """<a id = "link-view-users"href="%(UsersURL)s" class="sidebar">Utilisateurs</a> <br/>"""
% params
) )
if authuser.has_permission(ScoChangePreferences, context): if authuser.has_permission(ScoChangePreferences, context):
H.append( H.append(
"""<a id="preferences_Edit" href="%(ScoURL)s/edit_preferences" class="sidebar">Paramétrage</a> <br/>""" """<a id="link-preferences" href="%(ScoURL)s/edit_preferences" class="sidebar">Paramétrage</a> <br/>"""
% params % params
) )
@ -124,21 +125,21 @@ def sidebar(context, REQUEST=None):
if REQUEST.AUTHENTICATED_USER.has_permission(ScoAbsChange, context): if REQUEST.AUTHENTICATED_USER.has_permission(ScoAbsChange, context):
H.append( H.append(
""" """
<li> <a id="ajout_Absence" href="%(ScoURL)s/Absences/SignaleAbsenceEtud?etudid=%(etudid)s">Ajouter</a></li> <li> <a id="add-absence" href="%(ScoURL)s/Absences/SignaleAbsenceEtud?etudid=%(etudid)s">Ajouter</a></li>
<li> <a id="justifier_Absence" href="%(ScoURL)s/Absences/JustifAbsenceEtud?etudid=%(etudid)s">Justifier</a></li> <li> <a id="justify-absence" href="%(ScoURL)s/Absences/JustifAbsenceEtud?etudid=%(etudid)s">Justifier</a></li>
<li> <a id="supprimer_Absence" href="%(ScoURL)s/Absences/AnnuleAbsenceEtud?etudid=%(etudid)s">Supprimer</a></li> <li> <a id="delete-absence" href="%(ScoURL)s/Absences/AnnuleAbsenceEtud?etudid=%(etudid)s">Supprimer</a></li>
""" """
% params % params
) )
if context.get_preference("handle_billets_abs"): if context.get_preference("handle_billets_abs"):
H.append( H.append(
"""<li> <a id="afficher_Billets" href="%(ScoURL)s/Absences/listeBilletsEtud?etudid=%(etudid)s">Billets</a></li>""" """<li> <a id="display-billet" href="%(ScoURL)s/Absences/listeBilletsEtud?etudid=%(etudid)s">Billets</a></li>"""
% params % params
) )
H.append( H.append(
""" """
<li> <a id="afficher_Calendrier" href="%(ScoURL)s/Absences/CalAbs?etudid=%(etudid)s">Calendrier</a></li> <li> <a id="display-calendar" href="%(ScoURL)s/Absences/CalAbs?etudid=%(etudid)s">Calendrier</a></li>
<li> <a id="afficher_Liste_Absence" href="%(ScoURL)s/Absences/ListeAbsEtud?etudid=%(etudid)s">Liste</a></li> <li> <a id="display-list-absence" href="%(ScoURL)s/Absences/ListeAbsEtud?etudid=%(etudid)s">Liste</a></li>
</ul> </ul>
""" """
% params % params

View File

@ -143,7 +143,7 @@ Chercher étape courante: <input name="etape_apo" type="text" size="8" spellchec
"""<hr> """<hr>
<h3>Gestion des étudiants</h3> <h3>Gestion des étudiants</h3>
<ul> <ul>
<li><a class="stdlink" id="link_create_etudident" href="etudident_create_form">créer <em>un</em> nouvel étudiant</a></li> <li><a class="stdlink" id="link-create-student" href="etudident_create_form">créer <em>un</em> nouvel étudiant</a></li>
<li><a class="stdlink" href="form_students_import_excel">importer de nouveaux étudiants</a> (ne pas utiliser sauf cas particulier, utilisez plutôt le lien dans <li><a class="stdlink" href="form_students_import_excel">importer de nouveaux étudiants</a> (ne pas utiliser sauf cas particulier, utilisez plutôt le lien dans
le tableau de bord semestre si vous souhaitez inscrire les le tableau de bord semestre si vous souhaitez inscrire les
étudiants importés à un semestre)</li> étudiants importés à un semestre)</li>

View File

@ -58,7 +58,7 @@ def form_search_etud(
H.append( H.append(
"""<form action="search_etud_in_dept" method="POST"> """<form action="search_etud_in_dept" method="POST">
<b>%s</b> <b>%s</b>
<input type="text" name="expnom" id="searchEtud" width="12" spellcheck="false" value=""> <input type="text" name="expnom" id="search-student" width="12" spellcheck="false" value="">
<input type="submit" value="Chercher"> <input type="submit" value="Chercher">
<br/>(entrer une partie du nom) <br/>(entrer une partie du nom)
""" """
@ -171,8 +171,8 @@ def search_etud_in_dept(context, expnom="", REQUEST=None):
) )
) )
else: else:
H.append('<h2 style="color: red;">Aucun résultat pour "%s".</h2>' % expnom) H.append('<h2 id="title-no-result" style="color: red;">Aucun résultat pour "%s".</h2>' % expnom)
H.append( H.append(
"""<p class="help">La recherche porte sur tout ou partie du NOM ou du NIP de l'étudiant</p>""" """<p class="help">La recherche porte sur tout ou partie du NOM ou du NIP de l'étudiant</p>"""
) )
return "\n".join(H) + context.sco_footer(REQUEST) return "\n".join(H) + context.sco_footer(REQUEST)

View File

@ -229,7 +229,7 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
f["parcours_name"] = "" f["parcours_name"] = ""
f["_titre_target"] = "ue_list?formation_id=%(formation_id)s" % f f["_titre_target"] = "ue_list?formation_id=%(formation_id)s" % f
f["_titre_link_class"] = "stdlink" f["_titre_link_class"] = "stdlink"
f["_titre_id"] = "titre_%s" % f["acronyme"] f["_titre_id"] = "titre-%s" % f["acronyme"].lower().replace(" ","-")
# Ajoute les semestres associés à chaque formation: # Ajoute les semestres associés à chaque formation:
f["sems"] = sco_formsemestre.do_formsemestre_list( f["sems"] = sco_formsemestre.do_formsemestre_list(
context, args={"formation_id": f["formation_id"]} context, args={"formation_id": f["formation_id"]}
@ -242,8 +242,8 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
for s in f["sems"] for s in f["sems"]
] ]
+ [ + [
'<a class="stdlink" id="addSemestre_%s" href="formsemestre_createwithmodules?formation_id=%s&semestre_id=1">ajouter</a>' '<a class="stdlink" id="add-semestre-%s" href="formsemestre_createwithmodules?formation_id=%s&semestre_id=1">ajouter</a>'
% (f["acronyme"],f["formation_id"]) % (f["acronyme"].lower().replace(" ", "-"), f["formation_id"])
] ]
) )
if f["sems"]: if f["sems"]:
@ -260,15 +260,15 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
but_locked = '<span class="but_placeholder"></span>' but_locked = '<span class="but_placeholder"></span>'
if editable and not locked: if editable and not locked:
but_suppr = ( but_suppr = (
'<a class="stdlink" id="delete_Formation_%s" href="formation_delete?formation_id=%s">%s</a>' '<a class="stdlink" id="delete-formation-%s" href="formation_delete?formation_id=%s">%s</a>'
% (f["acronyme"],f["formation_id"], suppricon) % (f["acronyme"],f["formation_id"], suppricon)
) )
else: else:
but_suppr = '<span class="but_placeholder"></span>' but_suppr = '<span class="but_placeholder"></span>'
if editable: if editable:
but_edit = ( but_edit = (
'<a class="stdlink" id="edit_Formation_%s" href="formation_edit?formation_id=%s">%s</a>' '<a class="stdlink" id="edit-formation-%s" href="formation_edit?formation_id=%s">%s</a>'
% (f["acronyme"],f["formation_id"], editicon) % (f["acronyme"].lower().replace(" ","-"), f["formation_id"], editicon)
) )
else: else:
but_edit = '<span class="but_placeholder"></span>' but_edit = '<span class="but_placeholder"></span>'

View File

@ -147,7 +147,7 @@ def formsemestre_inscription_with_modules_form(
if (not only_ext) or (sem["modalite"] == "EXT"): if (not only_ext) or (sem["modalite"] == "EXT"):
H.append( H.append(
""" """
<li><a class="stdlink" id="inscription_Semestre_%s" href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s">%s</a> <li><a class="stdlink" id="inscription-semestre-%s" href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s">%s</a>
""" """
% (sem["formsemestre_id"],etudid, sem["formsemestre_id"], sem["titremois"]) % (sem["formsemestre_id"],etudid, sem["formsemestre_id"], sem["titremois"])
) )

View File

@ -454,7 +454,7 @@ def decisions_possible_rows(Se, assiduite, subtitle="", trclass=""):
H.append("<th>Code %s</th><th>Devenir</th></tr>" % TitleCur) H.append("<th>Code %s</th><th>Devenir</th></tr>" % TitleCur)
for ch in choices: for ch in choices:
H.append( H.append(
"""<tr class="%s"><td title="règle %s"><input type="radio" name="codechoice" value="%s" id="choice_input_%s" onClick="document.getElementById('subut').disabled=false;">""" """<tr class="%s"><td title="règle %s"><input type="radio" name="codechoice" value="%s" id="input-choice-%s" onClick="document.getElementById('subut').disabled=false;">"""
% (trclass, ch.rule_id, ch.codechoice,ch.rule_id) % (trclass, ch.rule_id, ch.codechoice,ch.rule_id)
) )
H.append("%s </input></td>" % ch.explication) H.append("%s </input></td>" % ch.explication)
@ -640,8 +640,13 @@ def formsemestre_recap_parcours_table(
# log('') # log('')
H.append( H.append(
'<td class="%s" id="ue_%s" title="%s">%s</td>' '<td class="%s" id="ue-%s" title="%s">%s</td>'
% (class_ue,ue["acronyme"], " ".join(explanation_ue), scu.fmt_note(moy_ue)) % (
class_ue,
ue["acronyme"].lower().replace(" ","-"),
" ".join(explanation_ue),
scu.fmt_note(moy_ue),
)
) )
if len(ues) < Se.nb_max_ue: if len(ues) < Se.nb_max_ue:
H.append('<td colspan="%d"></td>' % (Se.nb_max_ue - len(ues))) H.append('<td colspan="%d"></td>' % (Se.nb_max_ue - len(ues)))

View File

@ -169,7 +169,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
<table> <table>
<tr> <tr>
<td class="fichetitre2">Responsable: </td><td class="redboldtext">""", <td class="fichetitre2">Responsable: </td><td id="ens-responsable" class="redboldtext">""",
context.Users.user_info(M["responsable_id"])["nomprenom"], context.Users.user_info(M["responsable_id"])["nomprenom"],
"""<span class="blacktt">(%(responsable_id)s)</span>""" % M, """<span class="blacktt">(%(responsable_id)s)</span>""" % M,
] ]
@ -181,7 +181,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
) )
except: except:
pass pass
H.append("""</td><td>""") H.append("""</td><td class="ens-in-module">""")
H.append( H.append(
", ".join([context.Users.user_info(m["ens_id"])["nomprenom"] for m in M["ens"]]) ", ".join([context.Users.user_info(m["ens_id"])["nomprenom"] for m in M["ens"]])
) )
@ -321,7 +321,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
top_table_links = "" top_table_links = ""
if sem["etat"] == "1": # non verrouillé if sem["etat"] == "1": # non verrouillé
top_table_links = ( top_table_links = (
"""<a class="stdlink" id="add_Evaluation_Link" href="evaluation_create?moduleimpl_id=%(moduleimpl_id)s">Créer nouvelle évaluation</a> """<a class="stdlink" id="link-add-evaluation" href="evaluation_create?moduleimpl_id=%(moduleimpl_id)s">Créer nouvelle évaluation</a>
<a class="stdlink" style="margin-left:2em;" href="module_evaluation_renumber?moduleimpl_id=%(moduleimpl_id)s&redirect=1">Trier par date</a> <a class="stdlink" style="margin-left:2em;" href="module_evaluation_renumber?moduleimpl_id=%(moduleimpl_id)s&redirect=1">Trier par date</a>
""" """
% M % M
@ -365,7 +365,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
H.append( H.append(
"""<span class="mievr_rattr" title="remplace si meilleure note">rattrapage</span>""" """<span class="mievr_rattr" title="remplace si meilleure note">rattrapage</span>"""
) )
H.append("<div id='hidden_id' style='visibility:hidden'>%(evaluation_id)s</div>") H.append("<div id='hidden-id' style='visibility:hidden'>%(evaluation_id)s</div>")
elif eval["evaluation_type"] == EVALUATION_SESSION2: elif eval["evaluation_type"] == EVALUATION_SESSION2:
H.append( H.append(
"""<span class="mievr_rattr" title="remplace autres notes">session 2</span>""" """<span class="mievr_rattr" title="remplace autres notes">session 2</span>"""
@ -454,7 +454,14 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
"""<a class="smallbutton" href="evaluation_delete?evaluation_id=%(evaluation_id)s">""" """<a class="smallbutton" href="evaluation_delete?evaluation_id=%(evaluation_id)s">"""
% eval % eval
) )
H.append(scu.icontag("delete_img", alt="supprimer", title="Supprimer", id="delete_buttion_%s" %eval["evaluation_id"])) H.append(
scu.icontag(
"delete_img",
alt="supprimer",
title="Supprimer",
id="button-delete-%s" % eval["evaluation_id"],
)
)
if caneditevals: if caneditevals:
H.append("""</a>""") H.append("""</a>""")
elif etat["evalcomplete"]: elif etat["evalcomplete"]:

View File

@ -26,9 +26,7 @@
############################################################################## ##############################################################################
"""ScoDoc ficheEtud """ScoDoc ficheEtud
Fiche description d'un étudiant et de son parcours Fiche description d'un étudiant et de son parcours
""" """
import sco_utils as scu import sco_utils as scu
@ -74,27 +72,21 @@ def _menuScolarite(context, authuser, sem, etudid):
if ins["etat"] != "D": if ins["etat"] != "D":
dem_title = "Démission" dem_title = "Démission"
dem_url = ( dem_url = "formDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
"formDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
)
else: else:
dem_title = "Annuler la démission" dem_title = "Annuler la démission"
dem_url = ( dem_url = (
"doCancelDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" "doCancelDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
% args
) )
# Note: seul un etudiant inscrit (I) peut devenir défaillant. # Note: seul un etudiant inscrit (I) peut devenir défaillant.
if ins["etat"] != sco_codes_parcours.DEF: if ins["etat"] != sco_codes_parcours.DEF:
def_title = "Déclarer défaillance" def_title = "Déclarer défaillance"
def_url = ( def_url = "formDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
"formDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
)
elif ins["etat"] == sco_codes_parcours.DEF: elif ins["etat"] == sco_codes_parcours.DEF:
def_title = "Annuler la défaillance" def_title = "Annuler la défaillance"
def_url = ( def_url = (
"doCancelDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" "doCancelDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
% args
) )
def_enabled = ( def_enabled = (
(ins["etat"] != "D") (ins["etat"] != "D")
@ -421,46 +413,36 @@ def ficheEtud(context, etudid=None, REQUEST=None):
<div class="ficheEtud" id="ficheEtud"><table> <div class="ficheEtud" id="ficheEtud"><table>
<tr><td> <tr><td>
<h2>%(nomprenom)s (%(inscription)s)</h2> <h2>%(nomprenom)s (%(inscription)s)</h2>
<span>%(emaillink)s</span> <span>%(emaillink)s</span>
</td><td class="photocell"> </td><td class="photocell">
<a href="etud_photo_orig_page?etudid=%(etudid)s">%(etudfoto)s</a> <a href="etud_photo_orig_page?etudid=%(etudid)s">%(etudfoto)s</a>
</td></tr></table> </td></tr></table>
<div class="fichesituation"> <div class="fichesituation">
<div class="fichetablesitu"> <div class="fichetablesitu">
<table> <table>
<tr><td class="fichetitre2">Situation :</td><td id="situation_etudiant">%(situation)s</td></tr> <tr><td class="fichetitre2">Situation :</td><td id="student-situation">%(situation)s</td></tr>
%(groupes_row)s %(groupes_row)s
<tr><td class="fichetitre2">%(ne)s le :</td><td id="naissance_etudiant">%(info_naissance)s</td></tr> <tr><td class="fichetitre2">%(ne)s le :</td><td id="student-birth">%(info_naissance)s</td></tr>
</table> </table>
<!-- Adresse --> <!-- Adresse -->
<div class="ficheadresse" id="ficheadresse"> <div class="ficheadresse" id="fiche-adresse">
<table><tr> <table><tr>
<td class="fichetitre2">Adresse :</td><td id="adresse_etudiant> %(domicile)s %(codepostaldomicile)s %(villedomicile)s %(paysdomicile)s <td class="fichetitre2">Adresse :</td><td id="student-address"> %(domicile)s %(codepostaldomicile)s %(villedomicile)s %(paysdomicile)s
%(modifadresse)s %(modifadresse)s
%(telephones)s %(telephones)s
</td></tr></table> </td></tr></table>
</div> </div>
</div> </div>
</div> </div>
%(inscriptions_mkup)s %(inscriptions_mkup)s
<div class="ficheadmission"> <div class="ficheadmission">
%(adm_data)s %(adm_data)s
%(fichiers_archive_htm)s %(fichiers_archive_htm)s
</div> </div>
%(debouche_html)s %(debouche_html)s
<div class="ficheannotations"> <div class="ficheannotations">
%(tit_anno)s %(tit_anno)s
<table id="etudannotations">%(liste_annotations)s</table> <table id="etudannotations">%(liste_annotations)s</table>
<form action="doAddAnnotation" method="GET" class="noprint"> <form action="doAddAnnotation" method="GET" class="noprint">
<input type="hidden" name="etudid" value="%(etudid)s"> <input type="hidden" name="etudid" value="%(etudid)s">
<b>Ajouter une annotation sur %(nomprenom)s: </b> <b>Ajouter une annotation sur %(nomprenom)s: </b>
@ -478,9 +460,7 @@ def ficheEtud(context, etudid=None, REQUEST=None):
</table> </table>
</form> </form>
</div> </div>
<div class="code_nip">code NIP: %(code_nip)s</div> <div class="code_nip">code NIP: %(code_nip)s</div>
</div> </div>
""" """
header = context.sco_header( header = context.sco_header(

View File

@ -361,7 +361,7 @@ def _check_duplicate_code(cnx, args, code_name, context, edit=True, REQUEST=None
parameters = {} parameters = {}
if context: if context:
err_page = context.confirmDialog( err_page = context.confirmDialog(
message="""<h3 id= "titleError">Code étudiant (%s) dupliqué !</h3>""" % code_name, message="""<h3 class="title-error">Code étudiant (%s) dupliqué !</h3>""" % code_name,
helpmsg="""Le %s %s est déjà utilisé: un seul étudiant peut avoir ce code. Vérifier votre valeur ou supprimer l'autre étudiant avec cette valeur.<p><ul><li>""" helpmsg="""Le %s %s est déjà utilisé: un seul étudiant peut avoir ce code. Vérifier votre valeur ou supprimer l'autre étudiant avec cette valeur.<p><ul><li>"""
% (code_name, args[code_name]) % (code_name, args[code_name])
+ "</li><li>".join(listh) + "</li><li>".join(listh)
@ -372,7 +372,7 @@ def _check_duplicate_code(cnx, args, code_name, context, edit=True, REQUEST=None
REQUEST=REQUEST, REQUEST=REQUEST,
) )
else: else:
err_page = """<h3 id="titleError">Code étudiant (%s) dupliqué !</h3>""" % code_name err_page = """<h3 class="title-error">Code étudiant (%s) dupliqué !</h3>""" % code_name
log("*** error: code %s duplique: %s" % (code_name, args[code_name])) log("*** error: code %s duplique: %s" % (code_name, args[code_name]))
raise ScoGenError(err_page) raise ScoGenError(err_page)