forked from ScoDoc/ScoDoc
WIP migration
This commit is contained in:
parent
ea09f18377
commit
3af2c460b7
@ -239,7 +239,7 @@ def students_import_excel(
|
|||||||
if formsemestre_id:
|
if formsemestre_id:
|
||||||
dest = "formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
dest = "formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
||||||
else:
|
else:
|
||||||
dest = context.NotesURL()
|
dest = scu.NotesURL()
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.sco_header(context, REQUEST, page_title="Import etudiants")
|
html_sco_header.sco_header(context, REQUEST, page_title="Import etudiants")
|
||||||
]
|
]
|
||||||
|
@ -133,7 +133,7 @@ class ZAbsences(
|
|||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
# used to view content of the object
|
# used to view content of the object
|
||||||
security.declareProtected(ScoView, "index_html")
|
security.declareProtected(ScoView, "index_html")
|
||||||
index_html = sco_abs_views.absences_index_html
|
index_html = sco_abs_views.index_html
|
||||||
|
|
||||||
security.declareProtected(ScoView, "EtatAbsences")
|
security.declareProtected(ScoView, "EtatAbsences")
|
||||||
EtatAbsences = sco_abs_views.EtatAbsences
|
EtatAbsences = sco_abs_views.EtatAbsences
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -60,7 +60,7 @@ import sco_bulletins_xml
|
|||||||
def go(app, n=0, verbose=True):
|
def go(app, n=0, verbose=True):
|
||||||
context = app.ScoDoc.objectValues("Folder")[n].Scolarite
|
context = app.ScoDoc.objectValues("Folder")[n].Scolarite
|
||||||
if verbose:
|
if verbose:
|
||||||
print("context in dept ", sco_core.get_dept_id())
|
print("context in dept ", scu.get_dept_id())
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
@ -72,9 +72,9 @@ def go_dept(app, dept, verbose=True):
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
# ignore other folders, like old "icons"
|
# ignore other folders, like old "icons"
|
||||||
continue
|
continue
|
||||||
if sco_core.get_dept_id() == dept:
|
if scu.get_dept_id() == dept:
|
||||||
if verbose:
|
if verbose:
|
||||||
print("context in dept ", sco_core.get_dept_id())
|
print("context in dept ", scu.get_dept_id())
|
||||||
return context
|
return context
|
||||||
raise ValueError("dep %s not found" % dept)
|
raise ValueError("dep %s not found" % dept)
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
import cgi
|
import cgi
|
||||||
|
|
||||||
import sco_utils as scu
|
import sco_utils as scu
|
||||||
|
import html_sidebar
|
||||||
import VERSION
|
import VERSION
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@ -169,7 +170,7 @@ def sco_header(
|
|||||||
params = {
|
params = {
|
||||||
"page_title": page_title or VERSION.SCONAME,
|
"page_title": page_title or VERSION.SCONAME,
|
||||||
"no_side_bar": no_side_bar,
|
"no_side_bar": no_side_bar,
|
||||||
"ScoURL": context.ScoURL(),
|
"ScoURL": scu.ScoURL(),
|
||||||
"encoding": scu.SCO_ENCODING,
|
"encoding": scu.SCO_ENCODING,
|
||||||
"titrebandeau_mkup": "<td>" + titrebandeau + "</td>",
|
"titrebandeau_mkup": "<td>" + titrebandeau + "</td>",
|
||||||
"authuser": str(REQUEST.AUTHENTICATED_USER),
|
"authuser": str(REQUEST.AUTHENTICATED_USER),
|
||||||
@ -319,7 +320,7 @@ def sco_header(
|
|||||||
Vous avez reçu un mot de passe temporaire.<br/>
|
Vous avez reçu un mot de passe temporaire.<br/>
|
||||||
Vous devez le changer: <a href="%s/Users/form_change_password?user_name=%s">cliquez ici</a>
|
Vous devez le changer: <a href="%s/Users/form_change_password?user_name=%s">cliquez ici</a>
|
||||||
</div>"""
|
</div>"""
|
||||||
% (context.ScoURL(), str(authuser))
|
% (scu.ScoURL(), str(authuser))
|
||||||
)
|
)
|
||||||
#
|
#
|
||||||
if head_message:
|
if head_message:
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import sco_utils as scu
|
import sco_utils as scu
|
||||||
|
import sco_preferences
|
||||||
from sco_abs import getAbsSemEtud
|
from sco_abs import getAbsSemEtud
|
||||||
from sco_permissions import (
|
from sco_permissions import (
|
||||||
ScoUsersAdmin,
|
ScoUsersAdmin,
|
||||||
@ -43,10 +44,10 @@ def sidebar_common(context, REQUEST=None):
|
|||||||
"partie commune a toutes les sidebar"
|
"partie commune a toutes les sidebar"
|
||||||
authuser = REQUEST.AUTHENTICATED_USER
|
authuser = REQUEST.AUTHENTICATED_USER
|
||||||
params = {
|
params = {
|
||||||
"ScoURL": context.ScoURL(),
|
"ScoURL": scu.ScoURL(),
|
||||||
"UsersURL": context.UsersURL(),
|
"UsersURL": scu.UsersURL(),
|
||||||
"NotesURL": context.NotesURL(),
|
"NotesURL": scu.NotesURL(),
|
||||||
"AbsencesURL": context.AbsencesURL(),
|
"AbsencesURL": scu.AbsencesURL(),
|
||||||
"authuser": str(authuser),
|
"authuser": str(authuser),
|
||||||
}
|
}
|
||||||
H = [
|
H = [
|
||||||
@ -81,7 +82,7 @@ def sidebar_common(context, REQUEST=None):
|
|||||||
def sidebar(context, REQUEST=None):
|
def sidebar(context, REQUEST=None):
|
||||||
"Main HTML page sidebar"
|
"Main HTML page sidebar"
|
||||||
# rewritten from legacy DTML code
|
# rewritten from legacy DTML code
|
||||||
params = {"ScoURL": context.ScoURL(), "SCO_USER_MANUAL": scu.SCO_USER_MANUAL}
|
params = {"ScoURL": scu.ScoURL(), "SCO_USER_MANUAL": scu.SCO_USER_MANUAL}
|
||||||
|
|
||||||
H = ['<div class="sidebar">', sidebar_common(context, REQUEST)]
|
H = ['<div class="sidebar">', sidebar_common(context, REQUEST)]
|
||||||
|
|
||||||
@ -171,7 +172,7 @@ def sidebar_dept(context, REQUEST=None):
|
|||||||
),
|
),
|
||||||
"DeptIntranetURL": sco_preferences.get_preference(context, "DeptIntranetURL"),
|
"DeptIntranetURL": sco_preferences.get_preference(context, "DeptIntranetURL"),
|
||||||
"DeptName": sco_preferences.get_preference(context, "DeptName"),
|
"DeptName": sco_preferences.get_preference(context, "DeptName"),
|
||||||
"ScoURL": context.ScoURL(),
|
"ScoURL": scu.ScoURL(),
|
||||||
}
|
}
|
||||||
|
|
||||||
H = [
|
H = [
|
||||||
|
@ -244,7 +244,7 @@ def abs_notification_message(context, sem, prefs, etudid, nbabs, nbabsjust):
|
|||||||
values["nbabs"] = nbabs
|
values["nbabs"] = nbabs
|
||||||
values["nbabsjust"] = nbabsjust
|
values["nbabsjust"] = nbabsjust
|
||||||
values["nbabsnonjust"] = nbabs - nbabsjust
|
values["nbabsnonjust"] = nbabs - nbabsjust
|
||||||
values["url_ficheetud"] = context.ScoURL() + "/ficheEtud?etudid=" + etudid
|
values["url_ficheetud"] = scu.ScoURL() + "/ficheEtud?etudid=" + etudid
|
||||||
|
|
||||||
template = prefs["abs_notification_mail_tmpl"]
|
template = prefs["abs_notification_mail_tmpl"]
|
||||||
if template:
|
if template:
|
||||||
|
@ -217,7 +217,7 @@ def SignaleAbsenceEtud(context, REQUEST=None): # etudid implied
|
|||||||
</td><td>
|
</td><td>
|
||||||
"""
|
"""
|
||||||
% etud,
|
% etud,
|
||||||
"""<a href="%s/ficheEtud?etudid=%s">""" % (context.ScoURL(), etud["etudid"]),
|
"""<a href="%s/ficheEtud?etudid=%s">""" % (scu.ScoURL(), etud["etudid"]),
|
||||||
sco_photos.etud_photo_html(
|
sco_photos.etud_photo_html(
|
||||||
context,
|
context,
|
||||||
etudid=etudid,
|
etudid=etudid,
|
||||||
@ -370,7 +370,7 @@ def JustifAbsenceEtud(context, REQUEST=None): # etudid implied
|
|||||||
</td><td>
|
</td><td>
|
||||||
"""
|
"""
|
||||||
% etud,
|
% etud,
|
||||||
"""<a href="%s/ficheEtud?etudid=%s">""" % (context.ScoURL(), etud["etudid"]),
|
"""<a href="%s/ficheEtud?etudid=%s">""" % (scu.ScoURL(), etud["etudid"]),
|
||||||
sco_photos.etud_photo_html(
|
sco_photos.etud_photo_html(
|
||||||
context,
|
context,
|
||||||
etudid=etudid,
|
etudid=etudid,
|
||||||
@ -480,7 +480,7 @@ def AnnuleAbsenceEtud(context, REQUEST=None): # etudid implied
|
|||||||
</td><td>
|
</td><td>
|
||||||
"""
|
"""
|
||||||
% etud, # "
|
% etud, # "
|
||||||
"""<a href="%s/ficheEtud?etudid=%s">""" % (context.ScoURL(), etud["etudid"]),
|
"""<a href="%s/ficheEtud?etudid=%s">""" % (scu.ScoURL(), etud["etudid"]),
|
||||||
sco_photos.etud_photo_html(
|
sco_photos.etud_photo_html(
|
||||||
context,
|
context,
|
||||||
etudid=etudid,
|
etudid=etudid,
|
||||||
@ -707,7 +707,7 @@ def CalAbs(context, REQUEST=None): # etud implied
|
|||||||
</tr>
|
</tr>
|
||||||
</table>"""
|
</table>"""
|
||||||
% (
|
% (
|
||||||
context.ScoURL(),
|
scu.ScoURL(),
|
||||||
etudid,
|
etudid,
|
||||||
sco_photos.etud_photo_html(
|
sco_photos.etud_photo_html(
|
||||||
context,
|
context,
|
||||||
@ -843,7 +843,7 @@ def ListeAbsEtud(
|
|||||||
raise ValueError("Invalid format !")
|
raise ValueError("Invalid format !")
|
||||||
|
|
||||||
|
|
||||||
def absences_index_html(context, REQUEST=None):
|
def index_html(context, REQUEST=None):
|
||||||
"""Gestionnaire absences, page principale"""
|
"""Gestionnaire absences, page principale"""
|
||||||
# crude portage from 1999 DTML
|
# crude portage from 1999 DTML
|
||||||
sems = sco_formsemestre.do_formsemestre_list(context)
|
sems = sco_formsemestre.do_formsemestre_list(context)
|
||||||
|
@ -93,7 +93,7 @@ class BaseArchiver:
|
|||||||
:return: path to directory of archives for this object (eg formsemestre_id or etudid).
|
:return: path to directory of archives for this object (eg formsemestre_id or etudid).
|
||||||
If directory does not yet exist, create it.
|
If directory does not yet exist, create it.
|
||||||
"""
|
"""
|
||||||
dept_dir = os.path.join(self.root, sco_core.get_dept_id())
|
dept_dir = os.path.join(self.root, scu.get_dept_id())
|
||||||
try:
|
try:
|
||||||
scu.GSL.acquire()
|
scu.GSL.acquire()
|
||||||
if not os.path.isdir(dept_dir):
|
if not os.path.isdir(dept_dir):
|
||||||
@ -111,7 +111,7 @@ class BaseArchiver:
|
|||||||
"""
|
"""
|
||||||
:return: list of archive oids
|
:return: list of archive oids
|
||||||
"""
|
"""
|
||||||
base = os.path.join(self.root, sco_core.get_dept_id()) + os.path.sep
|
base = os.path.join(self.root, scu.get_dept_id()) + os.path.sep
|
||||||
dirs = glob.glob(base + "*")
|
dirs = glob.glob(base + "*")
|
||||||
return [os.path.split(x)[1] for x in dirs]
|
return [os.path.split(x)[1] for x in dirs]
|
||||||
|
|
||||||
@ -368,7 +368,7 @@ def formsemestre_archive(context, REQUEST, formsemestre_id, group_ids=[]):
|
|||||||
"""Make and store new archive for this formsemestre.
|
"""Make and store new archive for this formsemestre.
|
||||||
(all students or only selected groups)
|
(all students or only selected groups)
|
||||||
"""
|
"""
|
||||||
if not context._can_edit_pv(REQUEST, formsemestre_id):
|
if not sco_permissions.can_edit_pv(context, REQUEST, formsemestre_id):
|
||||||
raise AccessDenied(
|
raise AccessDenied(
|
||||||
"opération non autorisée pour %s" % str(REQUEST.AUTHENTICATED_USER)
|
"opération non autorisée pour %s" % str(REQUEST.AUTHENTICATED_USER)
|
||||||
)
|
)
|
||||||
@ -551,7 +551,7 @@ def formsemestre_delete_archive(
|
|||||||
context, REQUEST, formsemestre_id, archive_name, dialog_confirmed=False
|
context, REQUEST, formsemestre_id, archive_name, dialog_confirmed=False
|
||||||
):
|
):
|
||||||
"""Delete an archive"""
|
"""Delete an archive"""
|
||||||
if not context._can_edit_pv(REQUEST, formsemestre_id):
|
if not sco_permissions.can_edit_pv(context, REQUEST, formsemestre_id):
|
||||||
raise AccessDenied(
|
raise AccessDenied(
|
||||||
"opération non autorisée pour %s" % str(REQUEST.AUTHENTICATED_USER)
|
"opération non autorisée pour %s" % str(REQUEST.AUTHENTICATED_USER)
|
||||||
)
|
)
|
||||||
|
@ -165,9 +165,7 @@ def etud_upload_file_form(context, REQUEST, etudid):
|
|||||||
if tf[0] == 0:
|
if tf[0] == 0:
|
||||||
return "\n".join(H) + tf[1] + html_sco_header.sco_footer(context, REQUEST)
|
return "\n".join(H) + tf[1] + html_sco_header.sco_footer(context, REQUEST)
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(scu.NotesURL() + "/ficheEtud?etudid=" + etudid)
|
||||||
context.NotesURL() + "/ficheEtud?etudid=" + etudid
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
data = tf[2]["datafile"].read()
|
data = tf[2]["datafile"].read()
|
||||||
descr = tf[2]["description"]
|
descr = tf[2]["description"]
|
||||||
@ -175,9 +173,7 @@ def etud_upload_file_form(context, REQUEST, etudid):
|
|||||||
_store_etud_file_to_new_archive(
|
_store_etud_file_to_new_archive(
|
||||||
context, REQUEST, etudid, data, filename, description=descr
|
context, REQUEST, etudid, data, filename, description=descr
|
||||||
)
|
)
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(scu.NotesURL() + "/ficheEtud?etudid=" + etudid)
|
||||||
context.NotesURL() + "/ficheEtud?etudid=" + etudid
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def _store_etud_file_to_new_archive(
|
def _store_etud_file_to_new_archive(
|
||||||
|
@ -1181,7 +1181,9 @@ def _formsemestre_bulletinetud_header_html(
|
|||||||
"formsemestre_id": formsemestre_id,
|
"formsemestre_id": formsemestre_id,
|
||||||
"etudid": etudid,
|
"etudid": etudid,
|
||||||
},
|
},
|
||||||
"enabled": context._can_validate_sem(REQUEST, formsemestre_id),
|
"enabled": sco_permcan_validate_semdate_sem(
|
||||||
|
context, REQUEST, formsemestre_id
|
||||||
|
),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Enregistrer note d'une UE externe",
|
"title": "Enregistrer note d'une UE externe",
|
||||||
@ -1190,7 +1192,9 @@ def _formsemestre_bulletinetud_header_html(
|
|||||||
"formsemestre_id": formsemestre_id,
|
"formsemestre_id": formsemestre_id,
|
||||||
"etudid": etudid,
|
"etudid": etudid,
|
||||||
},
|
},
|
||||||
"enabled": context._can_validate_sem(REQUEST, formsemestre_id),
|
"enabled": sco_permcan_validate_semdate_sem(
|
||||||
|
context, REQUEST, formsemestre_id
|
||||||
|
),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Entrer décisions jury",
|
"title": "Entrer décisions jury",
|
||||||
@ -1199,7 +1203,9 @@ def _formsemestre_bulletinetud_header_html(
|
|||||||
"formsemestre_id": formsemestre_id,
|
"formsemestre_id": formsemestre_id,
|
||||||
"etudid": etudid,
|
"etudid": etudid,
|
||||||
},
|
},
|
||||||
"enabled": context._can_validate_sem(REQUEST, formsemestre_id),
|
"enabled": sco_permcan_validate_semdate_sem(
|
||||||
|
context, REQUEST, formsemestre_id
|
||||||
|
),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Editer PV jury",
|
"title": "Editer PV jury",
|
||||||
@ -1231,7 +1237,7 @@ def _formsemestre_bulletinetud_header_html(
|
|||||||
<a href="%s/ficheEtud?etudid=%s">%s</a>
|
<a href="%s/ficheEtud?etudid=%s">%s</a>
|
||||||
"""
|
"""
|
||||||
% (
|
% (
|
||||||
context.ScoURL(),
|
scu.ScoURL(),
|
||||||
etudid,
|
etudid,
|
||||||
sco_photos.etud_photo_html(
|
sco_photos.etud_photo_html(
|
||||||
context, etud, title="fiche de " + etud["nom"], REQUEST=REQUEST
|
context, etud, title="fiche de " + etud["nom"], REQUEST=REQUEST
|
||||||
|
@ -143,7 +143,7 @@ def process_field(
|
|||||||
return text
|
return text
|
||||||
# --- PDF format:
|
# --- PDF format:
|
||||||
# handle logos:
|
# handle logos:
|
||||||
image_dir = scu.SCODOC_LOGOS_DIR + "/logos_" + sco_core.get_dept_id() + "/"
|
image_dir = scu.SCODOC_LOGOS_DIR + "/logos_" + scu.get_dept_id() + "/"
|
||||||
if not os.path.exists(image_dir):
|
if not os.path.exists(image_dir):
|
||||||
image_dir = scu.SCODOC_LOGOS_DIR + "/" # use global logos
|
image_dir = scu.SCODOC_LOGOS_DIR + "/" # use global logos
|
||||||
text = re.sub(
|
text = re.sub(
|
||||||
|
@ -85,7 +85,7 @@ et sur page "réglages bulletin" (avec formsemestre_id)
|
|||||||
# def _sig_filename(context, side, formsemestre_id=None):
|
# def _sig_filename(context, side, formsemestre_id=None):
|
||||||
# if not side in ("left", "right"):
|
# if not side in ("left", "right"):
|
||||||
# raise ValueError("side must be left or right")
|
# raise ValueError("side must be left or right")
|
||||||
# dirs = [SCODOC_LOGOS_DIR, sco_core.get_dept_id()]
|
# dirs = [SCODOC_LOGOS_DIR, scu.get_dept_id()]
|
||||||
# if formsemestre_id:
|
# if formsemestre_id:
|
||||||
# dirs.append(formsemestre_id)
|
# dirs.append(formsemestre_id)
|
||||||
# dirs.append("bul_sig_{}".format(side))
|
# dirs.append("bul_sig_{}".format(side))
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
import types
|
import types
|
||||||
|
|
||||||
|
from flask import url_for
|
||||||
|
|
||||||
import sco_utils as scu
|
import sco_utils as scu
|
||||||
from notes_table import NOTES_CACHE_INST, CacheNotesTable
|
from notes_table import NOTES_CACHE_INST, CacheNotesTable
|
||||||
from scodoc_manager import sco_mgr
|
from scodoc_manager import sco_mgr
|
||||||
@ -30,12 +32,6 @@ def test_refactor(context, x=1):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_dept_id():
|
|
||||||
if g.scodoc_dept in sco_mgr.get_dept_ids():
|
|
||||||
return g.scodoc_dept
|
|
||||||
raise ScoInvalidDept("département invalide: %s" % g.scodoc_dept)
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Cache global: chaque instance, repérée par sa connexion db, a un cache
|
# Cache global: chaque instance, repérée par sa connexion db, a un cache
|
||||||
# qui est recréé à la demande
|
# qui est recréé à la demande
|
||||||
|
@ -211,7 +211,7 @@ def report_debouche_ask_date(context, REQUEST=None):
|
|||||||
# def debouche_set(context, object, value, REQUEST=None):
|
# def debouche_set(context, object, value, REQUEST=None):
|
||||||
# """Set debouche (field in admission table, may be deprecated ?)
|
# """Set debouche (field in admission table, may be deprecated ?)
|
||||||
# """
|
# """
|
||||||
# if not context.can_edit_suivi(REQUEST):
|
# if not sco_permissions.can_edit_suivi(context, REQUEST):
|
||||||
# raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
# raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
||||||
# adm_id = object
|
# adm_id = object
|
||||||
# debouche = value.strip('-_ \t')
|
# debouche = value.strip('-_ \t')
|
||||||
@ -263,7 +263,7 @@ def itemsuivi_get(cnx, itemsuivi_id, ignore_errors=False):
|
|||||||
|
|
||||||
def itemsuivi_suppress(context, itemsuivi_id, REQUEST=None):
|
def itemsuivi_suppress(context, itemsuivi_id, REQUEST=None):
|
||||||
"""Suppression d'un item"""
|
"""Suppression d'un item"""
|
||||||
if not context.can_edit_suivi(REQUEST):
|
if not sco_permissions.can_edit_suivi(context, REQUEST):
|
||||||
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
||||||
cnx = context.GetDBConnexion()
|
cnx = context.GetDBConnexion()
|
||||||
item = itemsuivi_get(cnx, itemsuivi_id, ignore_errors=True)
|
item = itemsuivi_get(cnx, itemsuivi_id, ignore_errors=True)
|
||||||
@ -277,7 +277,7 @@ def itemsuivi_create(
|
|||||||
context, etudid, item_date=None, situation="", REQUEST=None, format=None
|
context, etudid, item_date=None, situation="", REQUEST=None, format=None
|
||||||
):
|
):
|
||||||
"""Creation d'un item"""
|
"""Creation d'un item"""
|
||||||
if not context.can_edit_suivi(REQUEST):
|
if not sco_permissions.can_edit_suivi(context, REQUEST):
|
||||||
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
||||||
cnx = context.GetDBConnexion()
|
cnx = context.GetDBConnexion()
|
||||||
itemsuivi_id = _itemsuivi_create(
|
itemsuivi_id = _itemsuivi_create(
|
||||||
@ -295,7 +295,7 @@ def itemsuivi_set_date(context, itemsuivi_id, item_date, REQUEST=None):
|
|||||||
"""set item date
|
"""set item date
|
||||||
item_date is a string dd/mm/yyyy
|
item_date is a string dd/mm/yyyy
|
||||||
"""
|
"""
|
||||||
if not context.can_edit_suivi(REQUEST):
|
if not sco_permissions.can_edit_suivi(context, REQUEST):
|
||||||
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
||||||
# log('itemsuivi_set_date %s : %s' % (itemsuivi_id, item_date))
|
# log('itemsuivi_set_date %s : %s' % (itemsuivi_id, item_date))
|
||||||
cnx = context.GetDBConnexion()
|
cnx = context.GetDBConnexion()
|
||||||
@ -306,7 +306,7 @@ def itemsuivi_set_date(context, itemsuivi_id, item_date, REQUEST=None):
|
|||||||
|
|
||||||
def itemsuivi_set_situation(context, object, value, REQUEST=None):
|
def itemsuivi_set_situation(context, object, value, REQUEST=None):
|
||||||
"""set situation"""
|
"""set situation"""
|
||||||
if not context.can_edit_suivi(REQUEST):
|
if not sco_permissions.can_edit_suivi(context, REQUEST):
|
||||||
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
||||||
itemsuivi_id = object
|
itemsuivi_id = object
|
||||||
situation = value.strip("-_ \t")
|
situation = value.strip("-_ \t")
|
||||||
@ -364,7 +364,7 @@ def itemsuivi_tag_set(context, itemsuivi_id="", taglist=[], REQUEST=None):
|
|||||||
a string with tag names separated by commas ("un;deux")
|
a string with tag names separated by commas ("un;deux")
|
||||||
or a list of strings (["un", "deux"])
|
or a list of strings (["un", "deux"])
|
||||||
"""
|
"""
|
||||||
if not context.can_edit_suivi(REQUEST):
|
if not sco_permissions.can_edit_suivi(context, REQUEST):
|
||||||
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
||||||
if not taglist:
|
if not taglist:
|
||||||
taglist = []
|
taglist = []
|
||||||
|
@ -134,7 +134,7 @@ Chercher étape courante: <input name="etape_apo" type="text" size="8" spellchec
|
|||||||
</form
|
</form
|
||||||
</p>
|
</p>
|
||||||
"""
|
"""
|
||||||
% context.NotesURL()
|
% scu.NotesURL()
|
||||||
)
|
)
|
||||||
#
|
#
|
||||||
authuser = REQUEST.AUTHENTICATED_USER
|
authuser = REQUEST.AUTHENTICATED_USER
|
||||||
@ -159,7 +159,7 @@ Chercher étape courante: <input name="etape_apo" type="text" size="8" spellchec
|
|||||||
<li><a class="stdlink" href="%s/semset_page">Années scolaires / exports Apogée</a></li>
|
<li><a class="stdlink" href="%s/semset_page">Années scolaires / exports Apogée</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
"""
|
"""
|
||||||
% context.NotesURL()
|
% scu.NotesURL()
|
||||||
)
|
)
|
||||||
#
|
#
|
||||||
H.append(
|
H.append(
|
||||||
@ -205,7 +205,7 @@ def _sem_table(context, sems):
|
|||||||
cur_idx = sem["semestre_id"]
|
cur_idx = sem["semestre_id"]
|
||||||
else:
|
else:
|
||||||
sem["trclass"] = ""
|
sem["trclass"] = ""
|
||||||
sem["notes_url"] = context.NotesURL()
|
sem["notes_url"] = scu.NotesURL()
|
||||||
H.append(tmpl % sem)
|
H.append(tmpl % sem)
|
||||||
H.append("</table>")
|
H.append("</table>")
|
||||||
return "\n".join(H)
|
return "\n".join(H)
|
||||||
@ -254,7 +254,7 @@ def _sem_table_gt(context, sems, showcodes=False):
|
|||||||
def _style_sems(context, sems):
|
def _style_sems(context, sems):
|
||||||
"""ajoute quelques attributs de présentation pour la table"""
|
"""ajoute quelques attributs de présentation pour la table"""
|
||||||
for sem in sems:
|
for sem in sems:
|
||||||
sem["notes_url"] = context.NotesURL()
|
sem["notes_url"] = scu.NotesURL()
|
||||||
sem["_groupicon_target"] = (
|
sem["_groupicon_target"] = (
|
||||||
"%(notes_url)s/formsemestre_status?formsemestre_id=%(formsemestre_id)s"
|
"%(notes_url)s/formsemestre_status?formsemestre_id=%(formsemestre_id)s"
|
||||||
% sem
|
% sem
|
||||||
|
@ -65,7 +65,7 @@ def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST
|
|||||||
'<li><a href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%(titremois)s</a></li>'
|
'<li><a href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%(titremois)s</a></li>'
|
||||||
% sem
|
% sem
|
||||||
)
|
)
|
||||||
H.append('</ul><p><a href="%s">Revenir</a></p>' % context.NotesURL())
|
H.append('</ul><p><a href="%s">Revenir</a></p>' % scu.NotesURL())
|
||||||
else:
|
else:
|
||||||
if not dialog_confirmed:
|
if not dialog_confirmed:
|
||||||
return scu.confirm_dialog(
|
return scu.confirm_dialog(
|
||||||
@ -77,7 +77,7 @@ def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST
|
|||||||
% F,
|
% F,
|
||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
OK="Supprimer cette formation",
|
OK="Supprimer cette formation",
|
||||||
cancel_url=context.NotesURL(),
|
cancel_url=scu.NotesURL(),
|
||||||
parameters={"formation_id": formation_id},
|
parameters={"formation_id": formation_id},
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
@ -85,7 +85,7 @@ def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST
|
|||||||
H.append(
|
H.append(
|
||||||
"""<p>OK, formation supprimée.</p>
|
"""<p>OK, formation supprimée.</p>
|
||||||
<p><a class="stdlink" href="%s">continuer</a></p>"""
|
<p><a class="stdlink" href="%s">continuer</a></p>"""
|
||||||
% context.NotesURL()
|
% scu.NotesURL()
|
||||||
)
|
)
|
||||||
|
|
||||||
H.append(html_sco_header.sco_footer(context, REQUEST))
|
H.append(html_sco_header.sco_footer(context, REQUEST))
|
||||||
@ -199,7 +199,7 @@ def formation_edit(context, formation_id=None, create=False, REQUEST=None):
|
|||||||
if tf[0] == 0:
|
if tf[0] == 0:
|
||||||
return "\n".join(H) + tf[1] + html_sco_header.sco_footer(context, REQUEST)
|
return "\n".join(H) + tf[1] + html_sco_header.sco_footer(context, REQUEST)
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(context.NotesURL())
|
return REQUEST.RESPONSE.redirect(scu.NotesURL())
|
||||||
else:
|
else:
|
||||||
# check unicity : constraint UNIQUE(acronyme,titre,version)
|
# check unicity : constraint UNIQUE(acronyme,titre,version)
|
||||||
if create:
|
if create:
|
||||||
|
@ -77,7 +77,7 @@ associé.
|
|||||||
submitlabel="Créer cette matière",
|
submitlabel="Créer cette matière",
|
||||||
)
|
)
|
||||||
|
|
||||||
dest_url = context.NotesURL() + "/ue_list?formation_id=" + UE["formation_id"]
|
dest_url = scu.NotesURL() + "/ue_list?formation_id=" + UE["formation_id"]
|
||||||
|
|
||||||
if tf[0] == 0:
|
if tf[0] == 0:
|
||||||
return "\n".join(H) + tf[1] + html_sco_header.sco_footer(context, REQUEST)
|
return "\n".join(H) + tf[1] + html_sco_header.sco_footer(context, REQUEST)
|
||||||
@ -108,7 +108,7 @@ def matiere_delete(context, matiere_id=None, REQUEST=None):
|
|||||||
"<h2>Suppression de la matière %(titre)s" % M,
|
"<h2>Suppression de la matière %(titre)s" % M,
|
||||||
" dans l'UE (%(acronyme)s))</h2>" % UE,
|
" dans l'UE (%(acronyme)s))</h2>" % UE,
|
||||||
]
|
]
|
||||||
dest_url = context.NotesURL() + "/ue_list?formation_id=" + str(UE["formation_id"])
|
dest_url = scu.NotesURL() + "/ue_list?formation_id=" + str(UE["formation_id"])
|
||||||
tf = TrivialFormulator(
|
tf = TrivialFormulator(
|
||||||
REQUEST.URL0,
|
REQUEST.URL0,
|
||||||
REQUEST.form,
|
REQUEST.form,
|
||||||
@ -185,7 +185,7 @@ associé.
|
|||||||
submitlabel="Modifier les valeurs",
|
submitlabel="Modifier les valeurs",
|
||||||
)
|
)
|
||||||
|
|
||||||
dest_url = context.NotesURL() + "/ue_list?formation_id=" + U["formation_id"]
|
dest_url = scu.NotesURL() + "/ue_list?formation_id=" + U["formation_id"]
|
||||||
|
|
||||||
if tf[0] == 0:
|
if tf[0] == 0:
|
||||||
return (
|
return (
|
||||||
|
@ -174,7 +174,7 @@ def module_create(context, matiere_id=None, REQUEST=None):
|
|||||||
else:
|
else:
|
||||||
context.do_module_create(tf[2], REQUEST)
|
context.do_module_create(tf[2], REQUEST)
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.NotesURL() + "/ue_list?formation_id=" + UE["formation_id"]
|
scu.NotesURL() + "/ue_list?formation_id=" + UE["formation_id"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ def module_delete(context, module_id=None, REQUEST=None):
|
|||||||
"""<h2>Suppression du module %(titre)s (%(code)s)</h2>""" % Mod,
|
"""<h2>Suppression du module %(titre)s (%(code)s)</h2>""" % Mod,
|
||||||
]
|
]
|
||||||
|
|
||||||
dest_url = context.NotesURL() + "/ue_list?formation_id=" + Mod["formation_id"]
|
dest_url = scu.NotesURL() + "/ue_list?formation_id=" + Mod["formation_id"]
|
||||||
tf = TrivialFormulator(
|
tf = TrivialFormulator(
|
||||||
REQUEST.URL0,
|
REQUEST.URL0,
|
||||||
REQUEST.form,
|
REQUEST.form,
|
||||||
@ -242,7 +242,7 @@ def module_edit(context, module_id=None, REQUEST=None):
|
|||||||
|
|
||||||
semestres_indices = range(1, parcours.NB_SEM + 1)
|
semestres_indices = range(1, parcours.NB_SEM + 1)
|
||||||
|
|
||||||
dest_url = context.NotesURL() + "/ue_list?formation_id=" + Mod["formation_id"]
|
dest_url = scu.NotesURL() + "/ue_list?formation_id=" + Mod["formation_id"]
|
||||||
|
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.sco_header(
|
html_sco_header.sco_header(
|
||||||
|
@ -223,7 +223,7 @@ def ue_edit(context, ue_id=None, create=False, formation_id=None, REQUEST=None):
|
|||||||
else:
|
else:
|
||||||
do_ue_edit(context, tf[2])
|
do_ue_edit(context, tf[2])
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.NotesURL() + "/ue_list?formation_id=" + formation_id
|
scu.NotesURL() + "/ue_list?formation_id=" + formation_id
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ def do_evaluation_delete(context, REQUEST, evaluation_id):
|
|||||||
mod = context.do_module_list(args={"module_id": M["module_id"]})[0]
|
mod = context.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
mod["moduleimpl_id"] = M["moduleimpl_id"]
|
mod["moduleimpl_id"] = M["moduleimpl_id"]
|
||||||
mod["url"] = (
|
mod["url"] = (
|
||||||
context.NotesURL() + "/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod
|
scu.NotesURL() + "/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod
|
||||||
)
|
)
|
||||||
sco_news.add(
|
sco_news.add(
|
||||||
context,
|
context,
|
||||||
@ -787,7 +787,7 @@ def evaluation_describe(context, evaluation_id="", edit_in_place=True, REQUEST=N
|
|||||||
group_id = sco_groups.get_default_group(context, formsemestre_id)
|
group_id = sco_groups.get_default_group(context, formsemestre_id)
|
||||||
H.append(
|
H.append(
|
||||||
'<span class="noprint"><a href="%s/Absences/EtatAbsencesDate?group_ids=%s&date=%s">(absences ce jour)</a></span>'
|
'<span class="noprint"><a href="%s/Absences/EtatAbsencesDate?group_ids=%s&date=%s">(absences ce jour)</a></span>'
|
||||||
% (context.ScoURL(), group_id, urllib.quote(E["jour"], safe=""))
|
% (scu.ScoURL(), group_id, urllib.quote(E["jour"], safe=""))
|
||||||
)
|
)
|
||||||
H.append(
|
H.append(
|
||||||
'</p><p>Coefficient dans le module: <b>%s</b>, notes sur <span id="eval_note_max">%g</span> '
|
'</p><p>Coefficient dans le module: <b>%s</b>, notes sur <span id="eval_note_max">%g</span> '
|
||||||
|
@ -174,7 +174,7 @@ def _build_results_list(context, dpv_by_sem, etuds_infos):
|
|||||||
"nom_usuel": etud["nom_usuel"],
|
"nom_usuel": etud["nom_usuel"],
|
||||||
"prenom": etud["prenom"],
|
"prenom": etud["prenom"],
|
||||||
"civilite_str": etud["civilite_str"],
|
"civilite_str": etud["civilite_str"],
|
||||||
"_nom_target": "%s/ficheEtud?etudid=%s" % (context.ScoURL(), etudid),
|
"_nom_target": "%s/ficheEtud?etudid=%s" % (scu.ScoURL(), etudid),
|
||||||
"_nom_td_attrs": 'id="%s" class="etudinfo"' % etudid,
|
"_nom_td_attrs": 'id="%s" class="etudinfo"' % etudid,
|
||||||
"bac": bac.abbrev(),
|
"bac": bac.abbrev(),
|
||||||
"parcours": dec["parcours"],
|
"parcours": dec["parcours"],
|
||||||
@ -198,7 +198,7 @@ def _build_results_list(context, dpv_by_sem, etuds_infos):
|
|||||||
int(sem["annee_debut"]), sem["mois_debut_ord"]
|
int(sem["annee_debut"]), sem["mois_debut_ord"]
|
||||||
)
|
)
|
||||||
r["sid"] = "{} {} {}".format(
|
r["sid"] = "{} {} {}".format(
|
||||||
sem["sem_id_txt"], sco_core.get_dept_id(), sem["modalite"]
|
sem["sem_id_txt"], scu.get_dept_id(), sem["modalite"]
|
||||||
)
|
)
|
||||||
rows.append(r)
|
rows.append(r)
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ def search_etud_in_dept(context, expnom="", REQUEST=None):
|
|||||||
if len(etuds) == 1:
|
if len(etuds) == 1:
|
||||||
# va directement a la fiche
|
# va directement a la fiche
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.NotesURL() + "/ficheEtud?etudid=" + etuds[0]["etudid"]
|
scu.NotesURL() + "/ficheEtud?etudid=" + etuds[0]["etudid"]
|
||||||
)
|
)
|
||||||
|
|
||||||
H = [
|
H = [
|
||||||
|
@ -80,7 +80,7 @@ def formsemestre_custommenu_edit(context, formsemestre_id, REQUEST=None):
|
|||||||
"""Dialog to edit the custom menu"""
|
"""Dialog to edit the custom menu"""
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
||||||
dest_url = (
|
dest_url = (
|
||||||
context.NotesURL() + "/formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
scu.NotesURL() + "/formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
||||||
)
|
)
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header(
|
html_sco_header.html_sem_header(
|
||||||
|
@ -1273,9 +1273,7 @@ def formsemestre_delete(context, formsemestre_id, REQUEST=None):
|
|||||||
return "\n".join(H) + html_sco_header.sco_footer(context, REQUEST)
|
return "\n".join(H) + html_sco_header.sco_footer(context, REQUEST)
|
||||||
elif tf[0] == -1: # cancel
|
elif tf[0] == -1: # cancel
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.NotesURL()
|
scu.NotesURL() + "/formsemestre_status?formsemestre_id=" + formsemestre_id
|
||||||
+ "/formsemestre_status?formsemestre_id="
|
|
||||||
+ formsemestre_id
|
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
@ -1299,9 +1297,7 @@ def formsemestre_delete2(
|
|||||||
)
|
)
|
||||||
# Bon, s'il le faut...
|
# Bon, s'il le faut...
|
||||||
do_formsemestre_delete(context, formsemestre_id, REQUEST)
|
do_formsemestre_delete(context, formsemestre_id, REQUEST)
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(scu.ScoURL() + "?head_message=Semestre%20supprimé")
|
||||||
context.ScoURL() + "?head_message=Semestre%20supprimé"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def formsemestre_has_decisions_or_compensations(context, formsemestre_id):
|
def formsemestre_has_decisions_or_compensations(context, formsemestre_id):
|
||||||
|
@ -192,13 +192,13 @@ def formsemestre_ext_create_form(context, etudid, formsemestre_id, REQUEST=None)
|
|||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
"%s/formsemestre_bulletinetud?formsemestre_id==%s&etudid=%s"
|
"%s/formsemestre_bulletinetud?formsemestre_id==%s&etudid=%s"
|
||||||
% (context.ScoURL(), formsemestre_id, etudid)
|
% (scu.ScoURL(), formsemestre_id, etudid)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
tf[2]["formation_id"] = orig_sem["formation_id"]
|
tf[2]["formation_id"] = orig_sem["formation_id"]
|
||||||
formsemestre_ext_create(context, etudid, tf[2], REQUEST=REQUEST)
|
formsemestre_ext_create(context, etudid, tf[2], REQUEST=REQUEST)
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
"%s/ficheEtud?etudid=%s" % (context.ScoURL(), etudid)
|
"%s/ficheEtud?etudid=%s" % (scu.ScoURL(), etudid)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ def formsemestre_inscription_with_modules_form(
|
|||||||
H.append("<p>aucune session de formation !</p>")
|
H.append("<p>aucune session de formation !</p>")
|
||||||
H.append(
|
H.append(
|
||||||
'<h3>ou</h3> <a class="stdlink" href="%s/ficheEtud?etudid=%s">retour à la fiche de %s</a>'
|
'<h3>ou</h3> <a class="stdlink" href="%s/ficheEtud?etudid=%s">retour à la fiche de %s</a>'
|
||||||
% (context.ScoURL(), etudid, etud["nomprenom"])
|
% (scu.ScoURL(), etudid, etud["nomprenom"])
|
||||||
)
|
)
|
||||||
return "\n".join(H) + F
|
return "\n".join(H) + F
|
||||||
|
|
||||||
@ -244,9 +244,7 @@ def formsemestre_inscription_with_modules(
|
|||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
method="formsemestre_inscription_with_modules",
|
method="formsemestre_inscription_with_modules",
|
||||||
)
|
)
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(scu.ScoURL() + "/ficheEtud?etudid=" + etudid)
|
||||||
context.ScoURL() + "/ficheEtud?etudid=" + etudid
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
# formulaire choix groupe
|
# formulaire choix groupe
|
||||||
H.append(
|
H.append(
|
||||||
@ -400,7 +398,7 @@ function chkbx_select(field_id, state) {
|
|||||||
return "\n".join(H) + "\n" + tf[1] + F
|
return "\n".join(H) + "\n" + tf[1] + F
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
"%s/ficheEtud?etudid=%s" % (context.ScoURL(), etudid)
|
"%s/ficheEtud?etudid=%s" % (scu.ScoURL(), etudid)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# Inscriptions aux modules choisis
|
# Inscriptions aux modules choisis
|
||||||
@ -437,7 +435,7 @@ function chkbx_select(field_id, state) {
|
|||||||
H.append(
|
H.append(
|
||||||
"""<h3>Aucune modification à effectuer</h3>
|
"""<h3>Aucune modification à effectuer</h3>
|
||||||
<p><a class="stdlink" href="%s/ficheEtud?etudid=%s">retour à la fiche étudiant</a></p>"""
|
<p><a class="stdlink" href="%s/ficheEtud?etudid=%s">retour à la fiche étudiant</a></p>"""
|
||||||
% (context.ScoURL(), etudid)
|
% (scu.ScoURL(), etudid)
|
||||||
)
|
)
|
||||||
return "\n".join(H) + F
|
return "\n".join(H) + F
|
||||||
|
|
||||||
@ -495,7 +493,7 @@ function chkbx_select(field_id, state) {
|
|||||||
etudid,
|
etudid,
|
||||||
modulesimpls_ainscrire,
|
modulesimpls_ainscrire,
|
||||||
modulesimpls_adesinscrire,
|
modulesimpls_adesinscrire,
|
||||||
context.ScoURL(),
|
scu.ScoURL(),
|
||||||
etudid,
|
etudid,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -560,7 +558,7 @@ def do_moduleimpl_incription_options(
|
|||||||
<p><a class="stdlink" href="%s/ficheEtud?etudid=%s">
|
<p><a class="stdlink" href="%s/ficheEtud?etudid=%s">
|
||||||
Retour à la fiche étudiant</a></p>
|
Retour à la fiche étudiant</a></p>
|
||||||
"""
|
"""
|
||||||
% (context.ScoURL(), etudid),
|
% (scu.ScoURL(), etudid),
|
||||||
html_sco_header.sco_footer(context, REQUEST),
|
html_sco_header.sco_footer(context, REQUEST),
|
||||||
]
|
]
|
||||||
return "\n".join(H)
|
return "\n".join(H)
|
||||||
|
@ -418,13 +418,15 @@ def formsemestre_status_menubar(context, sem, REQUEST):
|
|||||||
"hidebac": 1,
|
"hidebac": 1,
|
||||||
"pref_override": 0,
|
"pref_override": 0,
|
||||||
},
|
},
|
||||||
"enabled": context._can_validate_sem(REQUEST, formsemestre_id),
|
"enabled": sco_permissions.can_validate_sem(
|
||||||
|
context, REQUEST, formsemestre_id
|
||||||
|
),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Editer les PV et archiver les résultats",
|
"title": "Editer les PV et archiver les résultats",
|
||||||
"endpoint": "notes.formsemestre_archive",
|
"endpoint": "notes.formsemestre_archive",
|
||||||
"args": {"formsemestre_id": formsemestre_id},
|
"args": {"formsemestre_id": formsemestre_id},
|
||||||
"enabled": context._can_edit_pv(REQUEST, formsemestre_id),
|
"enabled": sco_permissions.can_edit_pv(context, REQUEST, formsemestre_id),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Documents archivés",
|
"title": "Documents archivés",
|
||||||
@ -534,7 +536,7 @@ def formsemestre_page_title(context, REQUEST):
|
|||||||
|
|
||||||
def fill_formsemestre(context, sem, REQUEST=None):
|
def fill_formsemestre(context, sem, REQUEST=None):
|
||||||
"""Add some useful fields to help display formsemestres"""
|
"""Add some useful fields to help display formsemestres"""
|
||||||
notes_url = context.NotesURL()
|
notes_url = scu.NotesURL()
|
||||||
sem["notes_url"] = notes_url
|
sem["notes_url"] = notes_url
|
||||||
formsemestre_id = sem["formsemestre_id"]
|
formsemestre_id = sem["formsemestre_id"]
|
||||||
if sem["etat"] != "1":
|
if sem["etat"] != "1":
|
||||||
@ -755,7 +757,7 @@ def formsemestre_description(
|
|||||||
def _make_listes_sem(context, sem, REQUEST=None, with_absences=True):
|
def _make_listes_sem(context, sem, REQUEST=None, with_absences=True):
|
||||||
context = context
|
context = context
|
||||||
authuser = REQUEST.AUTHENTICATED_USER
|
authuser = REQUEST.AUTHENTICATED_USER
|
||||||
r = context.ScoURL() # root url
|
r = scu.ScoURL() # root url
|
||||||
# construit l'URL "destination"
|
# construit l'URL "destination"
|
||||||
# (a laquelle on revient apres saisie absences)
|
# (a laquelle on revient apres saisie absences)
|
||||||
query_args = cgi.parse_qs(REQUEST.QUERY_STRING)
|
query_args = cgi.parse_qs(REQUEST.QUERY_STRING)
|
||||||
|
@ -142,7 +142,7 @@ def formsemestre_validation_etud_form(
|
|||||||
H.append(
|
H.append(
|
||||||
'</td><td style="text-align: right;"><a href="%s/ficheEtud?etudid=%s">%s</a></td></tr></table>'
|
'</td><td style="text-align: right;"><a href="%s/ficheEtud?etudid=%s">%s</a></td></tr></table>'
|
||||||
% (
|
% (
|
||||||
context.ScoURL(),
|
scu.ScoURL(),
|
||||||
etudid,
|
etudid,
|
||||||
sco_photos.etud_photo_html(
|
sco_photos.etud_photo_html(
|
||||||
context, etud, title="fiche de %s" % etud["nom"], REQUEST=REQUEST
|
context, etud, title="fiche de %s" % etud["nom"], REQUEST=REQUEST
|
||||||
@ -159,7 +159,7 @@ def formsemestre_validation_etud_form(
|
|||||||
H.append(
|
H.append(
|
||||||
tf_error_message(
|
tf_error_message(
|
||||||
"""Impossible de statuer sur cet étudiant: il est démissionnaire ou défaillant (voir <a href="%s/ficheEtud?etudid=%s">sa fiche</a>)"""
|
"""Impossible de statuer sur cet étudiant: il est démissionnaire ou défaillant (voir <a href="%s/ficheEtud?etudid=%s">sa fiche</a>)"""
|
||||||
% (context.ScoURL(), etudid)
|
% (scu.ScoURL(), etudid)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return "\n".join(H + Footer)
|
return "\n".join(H + Footer)
|
||||||
@ -1088,7 +1088,7 @@ def formsemestre_validate_previous_ue(context, formsemestre_id, etudid, REQUEST=
|
|||||||
(
|
(
|
||||||
'</td><td style="text-align: right;"><a href="%s/ficheEtud?etudid=%s">%s</a></td></tr></table>'
|
'</td><td style="text-align: right;"><a href="%s/ficheEtud?etudid=%s">%s</a></td></tr></table>'
|
||||||
% (
|
% (
|
||||||
context.ScoURL(),
|
scu.ScoURL(),
|
||||||
etudid,
|
etudid,
|
||||||
sco_photos.etud_photo_html(
|
sco_photos.etud_photo_html(
|
||||||
context, etud, title="fiche de %s" % etud["nom"], REQUEST=REQUEST
|
context, etud, title="fiche de %s" % etud["nom"], REQUEST=REQUEST
|
||||||
@ -1177,9 +1177,7 @@ def formsemestre_validate_previous_ue(context, formsemestre_id, etudid, REQUEST=
|
|||||||
)
|
)
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.NotesURL()
|
scu.NotesURL() + "/formsemestre_status?formsemestre_id=" + formsemestre_id
|
||||||
+ "/formsemestre_status?formsemestre_id="
|
|
||||||
+ formsemestre_id
|
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
if tf[2]["semestre_id"]:
|
if tf[2]["semestre_id"]:
|
||||||
@ -1197,7 +1195,7 @@ def formsemestre_validate_previous_ue(context, formsemestre_id, etudid, REQUEST=
|
|||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
)
|
)
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.ScoURL()
|
scu.ScoURL()
|
||||||
+ "/Notes/formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s&head_message=Validation%%20d'UE%%20enregistree"
|
+ "/Notes/formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s&head_message=Validation%%20d'UE%%20enregistree"
|
||||||
% (formsemestre_id, etudid)
|
% (formsemestre_id, etudid)
|
||||||
)
|
)
|
||||||
@ -1324,7 +1322,7 @@ def etud_ue_suppress_validation(context, etudid, formsemestre_id, ue_id, REQUEST
|
|||||||
_invalidate_etud_formation_caches(context, etudid, sem["formation_id"])
|
_invalidate_etud_formation_caches(context, etudid, sem["formation_id"])
|
||||||
|
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.NotesURL()
|
scu.NotesURL()
|
||||||
+ "/formsemestre_validate_previous_ue?etudid=%s&formsemestre_id=%s"
|
+ "/formsemestre_validate_previous_ue?etudid=%s&formsemestre_id=%s"
|
||||||
% (etudid, formsemestre_id)
|
% (etudid, formsemestre_id)
|
||||||
)
|
)
|
||||||
|
@ -175,7 +175,7 @@ def mail_password(u, context=None, reset=False):
|
|||||||
if not u["email"]:
|
if not u["email"]:
|
||||||
return
|
return
|
||||||
|
|
||||||
u["url"] = context.ScoURL()
|
u["url"] = scu.ScoURL()
|
||||||
|
|
||||||
txt = (
|
txt = (
|
||||||
"""
|
"""
|
||||||
|
@ -185,7 +185,7 @@ def do_evaluation_listenotes(context, REQUEST):
|
|||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
"%s/Notes/moduleimpl_status?moduleimpl_id=%s"
|
"%s/Notes/moduleimpl_status?moduleimpl_id=%s"
|
||||||
% (context.ScoURL(), E["moduleimpl_id"])
|
% (scu.ScoURL(), E["moduleimpl_id"])
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
anonymous_listing = tf[2]["anonymous_listing"]
|
anonymous_listing = tf[2]["anonymous_listing"]
|
||||||
|
@ -281,7 +281,7 @@ def _send_news_by_mail(context, n):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Transforme les URL en URL absolue
|
# Transforme les URL en URL absolue
|
||||||
base = context.ScoURL()
|
base = scu.ScoURL()
|
||||||
txt = re.sub('href=.*?"', 'href="' + base + "/", txt)
|
txt = re.sub('href=.*?"', 'href="' + base + "/", txt)
|
||||||
|
|
||||||
# Transforme les liens HTML en texte brut: '<a href="url">texte</a>' devient 'texte: url'
|
# Transforme les liens HTML en texte brut: '<a href="url">texte</a>' devient 'texte: url'
|
||||||
|
@ -157,7 +157,7 @@ def ficheEtud(context, etudid=None, REQUEST=None):
|
|||||||
scolars.fillEtudsInfo(context, [etud])
|
scolars.fillEtudsInfo(context, [etud])
|
||||||
#
|
#
|
||||||
info = etud
|
info = etud
|
||||||
info["ScoURL"] = context.ScoURL()
|
info["ScoURL"] = scu.ScoURL()
|
||||||
info["authuser"] = authuser
|
info["authuser"] = authuser
|
||||||
info["info_naissance"] = info["date_naissance"]
|
info["info_naissance"] = info["date_naissance"]
|
||||||
if info["lieu_naissance"]:
|
if info["lieu_naissance"]:
|
||||||
@ -265,7 +265,7 @@ def ficheEtud(context, etudid=None, REQUEST=None):
|
|||||||
if authuser.has_permission(Permission.ScoEtudInscrit, context):
|
if authuser.has_permission(Permission.ScoEtudInscrit, context):
|
||||||
l.append(
|
l.append(
|
||||||
'<a href="%s/Notes/formsemestre_inscription_with_modules_form?etudid=%s">inscrire</a></li>'
|
'<a href="%s/Notes/formsemestre_inscription_with_modules_form?etudid=%s">inscrire</a></li>'
|
||||||
% (context.ScoURL(), etudid)
|
% (scu.ScoURL(), etudid)
|
||||||
)
|
)
|
||||||
l.append("</b></b>")
|
l.append("</b></b>")
|
||||||
info["liste_inscriptions"] = "\n".join(l)
|
info["liste_inscriptions"] = "\n".join(l)
|
||||||
@ -275,7 +275,7 @@ def ficheEtud(context, etudid=None, REQUEST=None):
|
|||||||
alist = []
|
alist = []
|
||||||
annos = scolars.etud_annotations_list(cnx, args={"etudid": etudid})
|
annos = scolars.etud_annotations_list(cnx, args={"etudid": etudid})
|
||||||
for a in annos:
|
for a in annos:
|
||||||
if not context.canSuppressAnnotation(a["id"], REQUEST):
|
if not sco_permissions.can_suppress_annotation(context, a["id"], REQUEST):
|
||||||
a["dellink"] = ""
|
a["dellink"] = ""
|
||||||
else:
|
else:
|
||||||
a[
|
a[
|
||||||
@ -351,7 +351,7 @@ def ficheEtud(context, etudid=None, REQUEST=None):
|
|||||||
|
|
||||||
# Devenir de l'étudiant:
|
# Devenir de l'étudiant:
|
||||||
has_debouche = True # info['debouche']
|
has_debouche = True # info['debouche']
|
||||||
if context.can_edit_suivi(REQUEST):
|
if sco_permissions.can_edit_suivi(context, REQUEST):
|
||||||
suivi_readonly = "0"
|
suivi_readonly = "0"
|
||||||
link_add_suivi = """<li class="adddebouche">
|
link_add_suivi = """<li class="adddebouche">
|
||||||
<a id="adddebouchelink" class="stdlink" href="#">ajouter une ligne</a>
|
<a id="adddebouchelink" class="stdlink" href="#">ajouter une ligne</a>
|
||||||
|
@ -200,7 +200,7 @@ class ScolarsPageTemplate(PageTemplate):
|
|||||||
# XXX COPIED from sco_pvpdf, to be refactored (no time now)
|
# XXX COPIED from sco_pvpdf, to be refactored (no time now)
|
||||||
# Search background in dept specific dir, then in global config dir
|
# Search background in dept specific dir, then in global config dir
|
||||||
for image_dir in (
|
for image_dir in (
|
||||||
SCODOC_LOGOS_DIR + "/logos_" + sco_core.get_dept_id() + "/",
|
SCODOC_LOGOS_DIR + "/logos_" + scu.get_dept_id() + "/",
|
||||||
SCODOC_LOGOS_DIR + "/", # global logos
|
SCODOC_LOGOS_DIR + "/", # global logos
|
||||||
):
|
):
|
||||||
for suffix in LOGOS_IMAGES_ALLOWED_TYPES:
|
for suffix in LOGOS_IMAGES_ALLOWED_TYPES:
|
||||||
|
@ -56,3 +56,65 @@ class Permission:
|
|||||||
|
|
||||||
|
|
||||||
Permission.init_permissions()
|
Permission.init_permissions()
|
||||||
|
|
||||||
|
import scolars
|
||||||
|
import sco_formsemestre
|
||||||
|
|
||||||
|
|
||||||
|
def can_suppress_annotation(context, annotation_id, REQUEST):
|
||||||
|
"""True if current user can suppress this annotation
|
||||||
|
Seuls l'auteur de l'annotation et le chef de dept peuvent supprimer
|
||||||
|
une annotation.
|
||||||
|
"""
|
||||||
|
cnx = context.GetDBConnexion()
|
||||||
|
annos = scolars.etud_annotations_list(cnx, args={"id": annotation_id})
|
||||||
|
if len(annos) != 1:
|
||||||
|
raise ScoValueError("annotation inexistante !")
|
||||||
|
anno = annos[0]
|
||||||
|
authuser = REQUEST.AUTHENTICATED_USER
|
||||||
|
# note: les anciennes installations n'ont pas le role ScoEtudSupprAnnotations
|
||||||
|
# c'est pourquoi on teste aussi ScoEtudInscrit (normalement détenue par le chef)
|
||||||
|
return (
|
||||||
|
(str(authuser) == anno["zope_authenticated_user"])
|
||||||
|
or authuser.has_permission(Permission.ScoEtudSupprAnnotations, context)
|
||||||
|
or authuser.has_permission(Permission.ScoEtudInscrit, context)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def can_edit_suivi(context, REQUEST=None):
|
||||||
|
"""Vrai si l'utilisateur peut modifier les informations de suivi sur la page etud" """
|
||||||
|
authuser = REQUEST.AUTHENTICATED_USER
|
||||||
|
return authuser.has_permission(Permission.ScoEtudChangeAdr, context)
|
||||||
|
|
||||||
|
|
||||||
|
def can_validate_sem(context, REQUEST, formsemestre_id):
|
||||||
|
"Vrai si utilisateur peut saisir decision de jury dans ce semestre"
|
||||||
|
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
||||||
|
if sem["etat"] != "1":
|
||||||
|
return False # semestre verrouillé
|
||||||
|
|
||||||
|
return is_chef_or_diretud(context, REQUEST, sem)
|
||||||
|
|
||||||
|
|
||||||
|
def can_edit_pv(context, REQUEST, formsemestre_id):
|
||||||
|
"Vrai si utilisateur peut editer un PV de jury de ce semestre"
|
||||||
|
|
||||||
|
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
||||||
|
if is_chef_or_diretud(context, REQUEST, sem):
|
||||||
|
return True
|
||||||
|
# Autorise les secrétariats, repérés via la permission ScoEtudChangeAdr
|
||||||
|
# (ceci nous évite d'ajouter une permission Zope aux installations existantes)
|
||||||
|
authuser = REQUEST.AUTHENTICATED_USER
|
||||||
|
return authuser.has_permission(Permission.ScoEtudChangeAdr, context)
|
||||||
|
|
||||||
|
|
||||||
|
def is_chef_or_diretud(context, REQUEST, sem):
|
||||||
|
"Vrai si utilisateur est admin, chef dept ou responsable du semestre"
|
||||||
|
authuser = REQUEST.AUTHENTICATED_USER
|
||||||
|
if authuser.has_permission(Permission.ScoImplement, context):
|
||||||
|
return True # admin, chef dept
|
||||||
|
uid = str(authuser)
|
||||||
|
if uid in sem["responsables"]:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
@ -315,7 +315,7 @@ def get_new_filename(context, etudid):
|
|||||||
"""Constructs a random filename to store a new image.
|
"""Constructs a random filename to store a new image.
|
||||||
The path is constructed as: Fxx/etudid
|
The path is constructed as: Fxx/etudid
|
||||||
"""
|
"""
|
||||||
dept = sco_core.get_dept_id()
|
dept = scu.get_dept_id()
|
||||||
return find_new_dir() + dept + "_" + etudid
|
return find_new_dir() + dept + "_" + etudid
|
||||||
|
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ def do_placement_selectetuds(context, REQUEST):
|
|||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
"%s/Notes/moduleimpl_status?moduleimpl_id=%s"
|
"%s/Notes/moduleimpl_status?moduleimpl_id=%s"
|
||||||
% (context.ScoURL(), E["moduleimpl_id"])
|
% (scu.ScoURL(), E["moduleimpl_id"])
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
placement_method = tf[2]["placement_method"]
|
placement_method = tf[2]["placement_method"]
|
||||||
@ -217,9 +217,7 @@ def do_placement_selectetuds(context, REQUEST):
|
|||||||
)
|
)
|
||||||
+ "&".join(gs)
|
+ "&".join(gs)
|
||||||
)
|
)
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(scu.NotesURL() + "/do_placement?" + query)
|
||||||
context.NotesURL() + "/do_placement?" + query
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"invalid placement_method (%s)" % tf[2]["placement_method"]
|
"invalid placement_method (%s)" % tf[2]["placement_method"]
|
||||||
|
@ -1942,7 +1942,7 @@ class sco_base_preferences:
|
|||||||
"""HTML dialog: edit global preferences"""
|
"""HTML dialog: edit global preferences"""
|
||||||
H = [
|
H = [
|
||||||
self.html_sco_header.sco_header(context, REQUEST, page_title="Préférences"),
|
self.html_sco_header.sco_header(context, REQUEST, page_title="Préférences"),
|
||||||
"<h2>Préférences globales pour %s</h2>" % self.context.ScoURL(),
|
"<h2>Préférences globales pour %s</h2>" % self.scu.ScoURL(),
|
||||||
"""<p class="help">Ces paramètres s'appliquent par défaut à tous les semestres, sauf si ceux-ci définissent des valeurs spécifiques.</p>
|
"""<p class="help">Ces paramètres s'appliquent par défaut à tous les semestres, sauf si ceux-ci définissent des valeurs spécifiques.</p>
|
||||||
<p class="msg">Attention: cliquez sur "Enregistrer les modifications" en bas de page pour appliquer vos changements !</p>
|
<p class="msg">Attention: cliquez sur "Enregistrer les modifications" en bas de page pour appliquer vos changements !</p>
|
||||||
""",
|
""",
|
||||||
@ -1960,13 +1960,13 @@ class sco_base_preferences:
|
|||||||
"\n".join(H) + tf[1] + self.html_sco_header.sco_footer(context, REQUEST)
|
"\n".join(H) + tf[1] + self.html_sco_header.sco_footer(context, REQUEST)
|
||||||
)
|
)
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(self.context.ScoURL()) # cancel
|
return REQUEST.RESPONSE.redirect(scu.ScoURL()) # cancel
|
||||||
else:
|
else:
|
||||||
for pref in PREFS:
|
for pref in PREFS:
|
||||||
self.prefs[None][pref[0]] = tf[2][pref[0]]
|
self.prefs[None][pref[0]] = tf[2][pref[0]]
|
||||||
self.save()
|
self.save()
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
self.context.ScoURL() + "?head_message=Préférences modifiées"
|
scu.ScoURL() + "?head_message=Préférences modifiées"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -1975,7 +1975,7 @@ _SCO_BASE_PREFERENCES = {} # { URL: sco_base_preferences instance }
|
|||||||
|
|
||||||
def get_base_preferences(context):
|
def get_base_preferences(context):
|
||||||
"""Return global preferences for this context"""
|
"""Return global preferences for this context"""
|
||||||
u = context.ScoURL()
|
u = scu.ScoURL()
|
||||||
if not u in _SCO_BASE_PREFERENCES:
|
if not u in _SCO_BASE_PREFERENCES:
|
||||||
_SCO_BASE_PREFERENCES[u] = sco_base_preferences(context)
|
_SCO_BASE_PREFERENCES[u] = sco_base_preferences(context)
|
||||||
return _SCO_BASE_PREFERENCES[u]
|
return _SCO_BASE_PREFERENCES[u]
|
||||||
@ -2063,7 +2063,7 @@ function set_global_pref(el, pref_name) {
|
|||||||
submitlabel="Enregistrer les modifications",
|
submitlabel="Enregistrer les modifications",
|
||||||
)
|
)
|
||||||
dest_url = (
|
dest_url = (
|
||||||
self.context.NotesURL()
|
self.scu.NotesURL()
|
||||||
+ "/formsemestre_status?formsemestre_id=%s" % self.formsemestre_id
|
+ "/formsemestre_status?formsemestre_id=%s" % self.formsemestre_id
|
||||||
)
|
)
|
||||||
if tf[0] == 0:
|
if tf[0] == 0:
|
||||||
@ -2116,7 +2116,7 @@ function set_global_pref(el, pref_name) {
|
|||||||
)
|
)
|
||||||
elif destination == "global":
|
elif destination == "global":
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
self.context.ScoURL() + "/edit_preferences"
|
self.scu.ScoURL() + "/edit_preferences"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -433,7 +433,7 @@ def pvjury_table(
|
|||||||
"code_nip": e["identite"]["code_nip"],
|
"code_nip": e["identite"]["code_nip"],
|
||||||
"nomprenom": e["identite"]["nomprenom"],
|
"nomprenom": e["identite"]["nomprenom"],
|
||||||
"_nomprenom_target": "%s/ficheEtud?etudid=%s"
|
"_nomprenom_target": "%s/ficheEtud?etudid=%s"
|
||||||
% (context.ScoURL(), e["identite"]["etudid"]),
|
% (scu.ScoURL(), e["identite"]["etudid"]),
|
||||||
"_nomprenom_td_attrs": 'id="%s" class="etudinfo"' % e["identite"]["etudid"],
|
"_nomprenom_td_attrs": 'id="%s" class="etudinfo"' % e["identite"]["etudid"],
|
||||||
"parcours": e["parcours"],
|
"parcours": e["parcours"],
|
||||||
"decision": _descr_decision_sem_abbrev(
|
"decision": _descr_decision_sem_abbrev(
|
||||||
|
@ -201,7 +201,7 @@ class CourrierIndividuelTemplate(PageTemplate):
|
|||||||
self.logo_header = None
|
self.logo_header = None
|
||||||
# Search logos in dept specific dir, then in global scu.CONFIG dir
|
# Search logos in dept specific dir, then in global scu.CONFIG dir
|
||||||
for image_dir in (
|
for image_dir in (
|
||||||
scu.SCODOC_LOGOS_DIR + "/logos_" + sco_core.get_dept_id() + "/",
|
scu.SCODOC_LOGOS_DIR + "/logos_" + scu.get_dept_id() + "/",
|
||||||
scu.SCODOC_LOGOS_DIR + "/", # global logos
|
scu.SCODOC_LOGOS_DIR + "/", # global logos
|
||||||
):
|
):
|
||||||
for suffix in scu.LOGOS_IMAGES_ALLOWED_TYPES:
|
for suffix in scu.LOGOS_IMAGES_ALLOWED_TYPES:
|
||||||
|
@ -126,7 +126,7 @@ def formsemestre_recapcomplet(
|
|||||||
|
|
||||||
H.append(
|
H.append(
|
||||||
"""(cliquer sur un nom pour afficher son bulletin ou <a class="stdlink" href="%s/Notes/formsemestre_bulletins_pdf?formsemestre_id=%s">ici avoir le classeur papier</a>)"""
|
"""(cliquer sur un nom pour afficher son bulletin ou <a class="stdlink" href="%s/Notes/formsemestre_bulletins_pdf?formsemestre_id=%s">ici avoir le classeur papier</a>)"""
|
||||||
% (context.ScoURL(), formsemestre_id)
|
% (scu.ScoURL(), formsemestre_id)
|
||||||
)
|
)
|
||||||
if not parcours.UE_IS_MODULE:
|
if not parcours.UE_IS_MODULE:
|
||||||
H.append(
|
H.append(
|
||||||
@ -165,7 +165,7 @@ def formsemestre_recapcomplet(
|
|||||||
"""<p><a class="stdlink" href="formsemestre_pvjury?formsemestre_id=%s">Voir les décisions du jury</a></p>"""
|
"""<p><a class="stdlink" href="formsemestre_pvjury?formsemestre_id=%s">Voir les décisions du jury</a></p>"""
|
||||||
% formsemestre_id
|
% formsemestre_id
|
||||||
)
|
)
|
||||||
if context._can_validate_sem(REQUEST, formsemestre_id):
|
if sco_permcan_validate_semdate_sem(context, REQUEST, formsemestre_id):
|
||||||
H.append("<p>")
|
H.append("<p>")
|
||||||
if modejury:
|
if modejury:
|
||||||
H.append(
|
H.append(
|
||||||
|
@ -965,7 +965,7 @@ def saisie_notes(context, evaluation_id, group_ids=[], REQUEST=None):
|
|||||||
|
|
||||||
# Le formulaire de saisie des notes:
|
# Le formulaire de saisie des notes:
|
||||||
destination = "%s/Notes/moduleimpl_status?moduleimpl_id=%s" % (
|
destination = "%s/Notes/moduleimpl_status?moduleimpl_id=%s" % (
|
||||||
context.ScoURL(),
|
scu.ScoURL(),
|
||||||
E["moduleimpl_id"],
|
E["moduleimpl_id"],
|
||||||
)
|
)
|
||||||
form = _form_saisie_notes(
|
form = _form_saisie_notes(
|
||||||
|
@ -55,6 +55,8 @@ except ImportError:
|
|||||||
|
|
||||||
from PIL import Image as PILImage
|
from PIL import Image as PILImage
|
||||||
|
|
||||||
|
from flask import g, url_for
|
||||||
|
|
||||||
from VERSION import SCOVERSION
|
from VERSION import SCOVERSION
|
||||||
import VERSION
|
import VERSION
|
||||||
|
|
||||||
@ -319,6 +321,63 @@ LOGOS_IMAGES_ALLOWED_TYPES = ("jpg", "png") # remind that PIL does not read pdf
|
|||||||
TYPE_ADMISSION_DEFAULT = "Inconnue"
|
TYPE_ADMISSION_DEFAULT = "Inconnue"
|
||||||
TYPES_ADMISSION = (TYPE_ADMISSION_DEFAULT, "APB", "APB-PC", "CEF", "Direct")
|
TYPES_ADMISSION = (TYPE_ADMISSION_DEFAULT, "APB", "APB-PC", "CEF", "Direct")
|
||||||
|
|
||||||
|
|
||||||
|
# Support for ScoDoc7 compatibility
|
||||||
|
def get_dept_id():
|
||||||
|
if g.scodoc_dept in sco_mgr.get_dept_ids():
|
||||||
|
return g.scodoc_dept
|
||||||
|
raise ScoInvalidDept("département invalide: %s" % g.scodoc_dept)
|
||||||
|
|
||||||
|
|
||||||
|
def ScoURL():
|
||||||
|
"""base URL for this sco instance.
|
||||||
|
e.g. https://scodoc.xxx.fr/ScoDoc/DEPT/Scolarite
|
||||||
|
= page accueil département
|
||||||
|
"""
|
||||||
|
return url_for("scolar.index_html", scodoc_dept=g.scodoc_dept)[
|
||||||
|
: -len("/index_html")
|
||||||
|
].encode(SCO_ENCODING)
|
||||||
|
|
||||||
|
|
||||||
|
def NotesURL():
|
||||||
|
"""URL of Notes
|
||||||
|
e.g. https://scodoc.xxx.fr/ScoDoc/DEPT/Scolarite/Notes
|
||||||
|
= url de base des méthodes de notes
|
||||||
|
(page accueil programmes).
|
||||||
|
"""
|
||||||
|
return url_for("notes.index_html", scodoc_dept=g.scodoc_dept)[
|
||||||
|
: -len("/index_html")
|
||||||
|
].encode(SCO_ENCODING)
|
||||||
|
|
||||||
|
|
||||||
|
def EntreprisesURL():
|
||||||
|
"""URL of Enterprises
|
||||||
|
e.g. https://scodoc.xxx.fr/ScoDoc/DEPT/Scolarite/Entreprises
|
||||||
|
= url de base des requêtes de ZEntreprises
|
||||||
|
et page accueil Entreprises
|
||||||
|
"""
|
||||||
|
return "NotImplemented".encode(SCO_ENCODING)
|
||||||
|
# url_for("entreprises.index_html", scodoc_dept=g.scodoc_dept)[
|
||||||
|
# : -len("/index_html")
|
||||||
|
# ]
|
||||||
|
|
||||||
|
|
||||||
|
def AbsencesURL():
|
||||||
|
"""URL of Absences"""
|
||||||
|
return url_for("absences.index_html", scodoc_dept=g.scodoc_dept)[
|
||||||
|
: -len("/index_html")
|
||||||
|
].encode(SCO_ENCODING)
|
||||||
|
|
||||||
|
|
||||||
|
def UsersURL():
|
||||||
|
"""URL of Users
|
||||||
|
e.g. https://scodoc.xxx.fr/ScoDoc/DEPT/Scolarite/Users
|
||||||
|
= url de base des requêtes ZScoUsers
|
||||||
|
et page accueil users
|
||||||
|
"""
|
||||||
|
return "NotImplemented"
|
||||||
|
|
||||||
|
|
||||||
# ---- Simple python utilities
|
# ---- Simple python utilities
|
||||||
|
|
||||||
|
|
||||||
|
@ -911,7 +911,7 @@ def fillEtudsInfo(context, etuds):
|
|||||||
# open('/tmp/t','w').write( str(etuds) )
|
# open('/tmp/t','w').write( str(etuds) )
|
||||||
for etud in etuds:
|
for etud in etuds:
|
||||||
etudid = etud["etudid"]
|
etudid = etud["etudid"]
|
||||||
etud["dept"] = sco_core.get_dept_id()
|
etud["dept"] = scu.get_dept_id()
|
||||||
adrs = adresse_list(cnx, {"etudid": etudid})
|
adrs = adresse_list(cnx, {"etudid": etudid})
|
||||||
if not adrs:
|
if not adrs:
|
||||||
# certains "vieux" etudiants n'ont pas d'adresse
|
# certains "vieux" etudiants n'ont pas d'adresse
|
||||||
|
@ -121,9 +121,7 @@ def _toboolean(x):
|
|||||||
#
|
#
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
|
|
||||||
sco_publish(
|
sco_publish("/index_html", sco_abs_views.index_html, Permission.ScoView)
|
||||||
"/absences_index_html", sco_abs_views.absences_index_html, Permission.ScoView
|
|
||||||
)
|
|
||||||
sco_publish("/EtatAbsences", sco_abs_views.EtatAbsences, Permission.ScoView)
|
sco_publish("/EtatAbsences", sco_abs_views.EtatAbsences, Permission.ScoView)
|
||||||
sco_publish("/CalAbs", sco_abs_views.CalAbs, Permission.ScoView)
|
sco_publish("/CalAbs", sco_abs_views.CalAbs, Permission.ScoView)
|
||||||
sco_publish(
|
sco_publish(
|
||||||
@ -1677,7 +1675,7 @@ def AddBilletAbsenceForm(context, etudid, REQUEST=None):
|
|||||||
if tf[0] == 0:
|
if tf[0] == 0:
|
||||||
return "\n".join(H) + tf[1] + context.sco_footer(REQUEST)
|
return "\n".join(H) + tf[1] + context.sco_footer(REQUEST)
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(context.ScoURL())
|
return REQUEST.RESPONSE.redirect(scu.ScoURL())
|
||||||
else:
|
else:
|
||||||
e = tf[2]["begin"].split("/")
|
e = tf[2]["begin"].split("/")
|
||||||
begin = e[2] + "-" + e[1] + "-" + e[0] + " 00:00:00"
|
begin = e[2] + "-" + e[1] + "-" + e[0] + " 00:00:00"
|
||||||
@ -1955,7 +1953,7 @@ def ProcessBilletAbsenceForm(context, billet_id, REQUEST=None):
|
|||||||
|
|
||||||
return "\n".join(H) + "<br/>" + tf[1] + F + context.sco_footer(REQUEST)
|
return "\n".join(H) + "<br/>" + tf[1] + F + context.sco_footer(REQUEST)
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(context.ScoURL())
|
return REQUEST.RESPONSE.redirect(scu.ScoURL())
|
||||||
else:
|
else:
|
||||||
n = context._ProcessBilletAbsence(
|
n = context._ProcessBilletAbsence(
|
||||||
billet, tf[2]["estjust"], tf[2]["description"], REQUEST
|
billet, tf[2]["estjust"], tf[2]["description"], REQUEST
|
||||||
|
1304
app/views/entreprises.py
Normal file
1304
app/views/entreprises.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -75,6 +75,7 @@ from app.scodoc.sco_permissions import Permission, ScoImplement
|
|||||||
from app.scodoc.TrivialFormulator import TrivialFormulator
|
from app.scodoc.TrivialFormulator import TrivialFormulator
|
||||||
from app.scodoc import sco_core
|
from app.scodoc import sco_core
|
||||||
from app.scodoc import htmlutils
|
from app.scodoc import htmlutils
|
||||||
|
from app.scodoc import html_sco_header
|
||||||
from app.scodoc import notes_table
|
from app.scodoc import notes_table
|
||||||
from app.scodoc import pe_view
|
from app.scodoc import pe_view
|
||||||
from app.scodoc import sco_apogee_compare
|
from app.scodoc import sco_apogee_compare
|
||||||
@ -501,7 +502,7 @@ def formation_import_xml_form(context, REQUEST):
|
|||||||
if tf[0] == 0:
|
if tf[0] == 0:
|
||||||
return "\n".join(H) + tf[1] + footer
|
return "\n".join(H) + tf[1] + footer
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(context.NotesURL())
|
return REQUEST.RESPONSE.redirect(scu.NotesURL())
|
||||||
else:
|
else:
|
||||||
formation_id, _, _ = context.formation_import_xml(tf[2]["xmlfile"], REQUEST)
|
formation_id, _, _ = context.formation_import_xml(tf[2]["xmlfile"], REQUEST)
|
||||||
|
|
||||||
@ -660,7 +661,7 @@ def _do_ue_delete(context, ue_id, delete_validations=False, REQUEST=None, force=
|
|||||||
#
|
#
|
||||||
if not force:
|
if not force:
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.NotesURL() + "/ue_list?formation_id=" + str(ue["formation_id"])
|
scu.NotesURL() + "/ue_list?formation_id=" + str(ue["formation_id"])
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
@ -1897,7 +1898,7 @@ def formsemestre_desinscription(
|
|||||||
return (
|
return (
|
||||||
html_sco_header.sco_header(context, REQUEST)
|
html_sco_header.sco_header(context, REQUEST)
|
||||||
+ '<p>Etudiant désinscrit !</p><p><a class="stdlink" href="%s/ficheEtud?etudid=%s">retour à la fiche</a>'
|
+ '<p>Etudiant désinscrit !</p><p><a class="stdlink" href="%s/ficheEtud?etudid=%s">retour à la fiche</a>'
|
||||||
% (context.ScoURL(), etudid)
|
% (scu.ScoURL(), etudid)
|
||||||
+ context.sco_footer(REQUEST)
|
+ context.sco_footer(REQUEST)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1979,7 +1980,7 @@ def etud_desinscrit_ue(context, etudid, formsemestre_id, ue_id, REQUEST=None):
|
|||||||
context, etudid, formsemestre_id, ue_id, REQUEST=REQUEST
|
context, etudid, formsemestre_id, ue_id, REQUEST=REQUEST
|
||||||
)
|
)
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.ScoURL()
|
scu.ScoURL()
|
||||||
+ "/Notes/moduleimpl_inscriptions_stats?formsemestre_id="
|
+ "/Notes/moduleimpl_inscriptions_stats?formsemestre_id="
|
||||||
+ formsemestre_id
|
+ formsemestre_id
|
||||||
)
|
)
|
||||||
@ -1994,7 +1995,7 @@ def etud_inscrit_ue(context, etudid, formsemestre_id, ue_id, REQUEST=None):
|
|||||||
context, etudid, formsemestre_id, ue_id, REQUEST=REQUEST
|
context, etudid, formsemestre_id, ue_id, REQUEST=REQUEST
|
||||||
)
|
)
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.ScoURL()
|
scu.ScoURL()
|
||||||
+ "/Notes/moduleimpl_inscriptions_stats?formsemestre_id="
|
+ "/Notes/moduleimpl_inscriptions_stats?formsemestre_id="
|
||||||
+ formsemestre_id
|
+ formsemestre_id
|
||||||
)
|
)
|
||||||
@ -2298,7 +2299,7 @@ def evaluation_delete(context, REQUEST, evaluation_id):
|
|||||||
return "\n".join(H) + tf[1] + context.sco_footer(REQUEST)
|
return "\n".join(H) + tf[1] + context.sco_footer(REQUEST)
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.ScoURL()
|
scu.ScoURL()
|
||||||
+ "/Notes/moduleimpl_status?moduleimpl_id="
|
+ "/Notes/moduleimpl_status?moduleimpl_id="
|
||||||
+ E["moduleimpl_id"]
|
+ E["moduleimpl_id"]
|
||||||
)
|
)
|
||||||
@ -2309,7 +2310,7 @@ def evaluation_delete(context, REQUEST, evaluation_id):
|
|||||||
+ """<p>OK, évaluation supprimée.</p>
|
+ """<p>OK, évaluation supprimée.</p>
|
||||||
<p><a class="stdlink" href="%s">Continuer</a></p>"""
|
<p><a class="stdlink" href="%s">Continuer</a></p>"""
|
||||||
% (
|
% (
|
||||||
context.ScoURL()
|
scu.ScoURL()
|
||||||
+ "/Notes/moduleimpl_status?moduleimpl_id="
|
+ "/Notes/moduleimpl_status?moduleimpl_id="
|
||||||
+ E["moduleimpl_id"]
|
+ E["moduleimpl_id"]
|
||||||
)
|
)
|
||||||
@ -2822,38 +2823,7 @@ def appreciation_add_form(
|
|||||||
return REQUEST.RESPONSE.redirect(bull_url)
|
return REQUEST.RESPONSE.redirect(bull_url)
|
||||||
|
|
||||||
|
|
||||||
def _can_edit_pv(context, REQUEST, formsemestre_id):
|
|
||||||
"Vrai si utilisateur peut editer un PV de jury de ce semestre"
|
|
||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
|
||||||
if context._is_chef_or_diretud(REQUEST, sem):
|
|
||||||
return True
|
|
||||||
# Autorise les secrétariats, repérés via la permission ScoEtudChangeAdr
|
|
||||||
# (ceci nous évite d'ajouter une permission Zope aux installations existantes)
|
|
||||||
authuser = REQUEST.AUTHENTICATED_USER
|
|
||||||
return authuser.has_permission(Permission.ScoEtudChangeAdr, context)
|
|
||||||
|
|
||||||
|
|
||||||
# --- FORMULAIRE POUR VALIDATION DES UE ET SEMESTRES
|
# --- FORMULAIRE POUR VALIDATION DES UE ET SEMESTRES
|
||||||
def _can_validate_sem(context, REQUEST, formsemestre_id):
|
|
||||||
"Vrai si utilisateur peut saisir decision de jury dans ce semestre"
|
|
||||||
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
|
|
||||||
if sem["etat"] != "1":
|
|
||||||
return False # semestre verrouillé
|
|
||||||
|
|
||||||
return context._is_chef_or_diretud(REQUEST, sem)
|
|
||||||
|
|
||||||
|
|
||||||
def _is_chef_or_diretud(context, REQUEST, sem):
|
|
||||||
"Vrai si utilisateur est admin, chef dept ou responsable du semestre"
|
|
||||||
authuser = REQUEST.AUTHENTICATED_USER
|
|
||||||
if authuser.has_permission(Permission.ScoImplement, context):
|
|
||||||
return True # admin, chef dept
|
|
||||||
uid = str(authuser)
|
|
||||||
if uid in sem["responsables"]:
|
|
||||||
return True
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/formsemestre_validation_etud_form")
|
@bp.route("/formsemestre_validation_etud_form")
|
||||||
@ -2870,7 +2840,7 @@ def formsemestre_validation_etud_form(
|
|||||||
REQUEST=None,
|
REQUEST=None,
|
||||||
):
|
):
|
||||||
"Formulaire choix jury pour un étudiant"
|
"Formulaire choix jury pour un étudiant"
|
||||||
readonly = not context._can_validate_sem(REQUEST, formsemestre_id)
|
readonly = not sco_permissions.can_validate_sem(context, REQUEST, formsemestre_id)
|
||||||
return sco_formsemestre_validation.formsemestre_validation_etud_form(
|
return sco_formsemestre_validation.formsemestre_validation_etud_form(
|
||||||
context,
|
context,
|
||||||
formsemestre_id,
|
formsemestre_id,
|
||||||
@ -2897,12 +2867,12 @@ def formsemestre_validation_etud(
|
|||||||
REQUEST=None,
|
REQUEST=None,
|
||||||
):
|
):
|
||||||
"Enregistre choix jury pour un étudiant"
|
"Enregistre choix jury pour un étudiant"
|
||||||
if not context._can_validate_sem(REQUEST, formsemestre_id):
|
if not sco_permissions.can_validate_sem(context, REQUEST, formsemestre_id):
|
||||||
return scu.confirm_dialog(
|
return scu.confirm_dialog(
|
||||||
context,
|
context,
|
||||||
message="<p>Opération non autorisée pour %s</h2>"
|
message="<p>Opération non autorisée pour %s</h2>"
|
||||||
% REQUEST.AUTHENTICATED_USER,
|
% REQUEST.AUTHENTICATED_USER,
|
||||||
dest_url=context.ScoURL(),
|
dest_url=scu.ScoURL(),
|
||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -2933,12 +2903,12 @@ def formsemestre_validation_etud_manu(
|
|||||||
REQUEST=None,
|
REQUEST=None,
|
||||||
):
|
):
|
||||||
"Enregistre choix jury pour un étudiant"
|
"Enregistre choix jury pour un étudiant"
|
||||||
if not context._can_validate_sem(REQUEST, formsemestre_id):
|
if not sco_permissions.can_validate_sem(context, REQUEST, formsemestre_id):
|
||||||
return scu.confirm_dialog(
|
return scu.confirm_dialog(
|
||||||
context,
|
context,
|
||||||
message="<p>Opération non autorisée pour %s</h2>"
|
message="<p>Opération non autorisée pour %s</h2>"
|
||||||
% REQUEST.AUTHENTICATED_USER,
|
% REQUEST.AUTHENTICATED_USER,
|
||||||
dest_url=context.ScoURL(),
|
dest_url=scu.ScoURL(),
|
||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -2963,12 +2933,12 @@ def formsemestre_validate_previous_ue(
|
|||||||
context, formsemestre_id, etudid=None, REQUEST=None
|
context, formsemestre_id, etudid=None, REQUEST=None
|
||||||
):
|
):
|
||||||
"Form. saisie UE validée hors ScoDoc "
|
"Form. saisie UE validée hors ScoDoc "
|
||||||
if not context._can_validate_sem(REQUEST, formsemestre_id):
|
if not sco_permissions.can_validate_sem(context, REQUEST, formsemestre_id):
|
||||||
return scu.confirm_dialog(
|
return scu.confirm_dialog(
|
||||||
context,
|
context,
|
||||||
message="<p>Opération non autorisée pour %s</h2>"
|
message="<p>Opération non autorisée pour %s</h2>"
|
||||||
% REQUEST.AUTHENTICATED_USER,
|
% REQUEST.AUTHENTICATED_USER,
|
||||||
dest_url=context.ScoURL(),
|
dest_url=scu.ScoURL(),
|
||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
)
|
)
|
||||||
return sco_formsemestre_validation.formsemestre_validate_previous_ue(
|
return sco_formsemestre_validation.formsemestre_validate_previous_ue(
|
||||||
@ -2990,12 +2960,12 @@ def formsemestre_ext_edit_ue_validations(
|
|||||||
context, formsemestre_id, etudid=None, REQUEST=None
|
context, formsemestre_id, etudid=None, REQUEST=None
|
||||||
):
|
):
|
||||||
"Form. edition UE semestre extérieur"
|
"Form. edition UE semestre extérieur"
|
||||||
if not context._can_validate_sem(REQUEST, formsemestre_id):
|
if not sco_permissions.can_validate_sem(context, REQUEST, formsemestre_id):
|
||||||
return scu.confirm_dialog(
|
return scu.confirm_dialog(
|
||||||
context,
|
context,
|
||||||
message="<p>Opération non autorisée pour %s</h2>"
|
message="<p>Opération non autorisée pour %s</h2>"
|
||||||
% REQUEST.AUTHENTICATED_USER,
|
% REQUEST.AUTHENTICATED_USER,
|
||||||
dest_url=context.ScoURL(),
|
dest_url=scu.ScoURL(),
|
||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
)
|
)
|
||||||
return sco_formsemestre_exterieurs.formsemestre_ext_edit_ue_validations(
|
return sco_formsemestre_exterieurs.formsemestre_ext_edit_ue_validations(
|
||||||
@ -3015,12 +2985,12 @@ sco_publish(
|
|||||||
@scodoc7func(context)
|
@scodoc7func(context)
|
||||||
def etud_ue_suppress_validation(context, etudid, formsemestre_id, ue_id, REQUEST=None):
|
def etud_ue_suppress_validation(context, etudid, formsemestre_id, ue_id, REQUEST=None):
|
||||||
"""Suppress a validation (ue_id, etudid) and redirect to formsemestre"""
|
"""Suppress a validation (ue_id, etudid) and redirect to formsemestre"""
|
||||||
if not context._can_validate_sem(REQUEST, formsemestre_id):
|
if not sco_permissions.can_validate_sem(context, REQUEST, formsemestre_id):
|
||||||
return scu.confirm_dialog(
|
return scu.confirm_dialog(
|
||||||
context,
|
context,
|
||||||
message="<p>Opération non autorisée pour %s</h2>"
|
message="<p>Opération non autorisée pour %s</h2>"
|
||||||
% REQUEST.AUTHENTICATED_USER,
|
% REQUEST.AUTHENTICATED_USER,
|
||||||
dest_url=context.ScoURL(),
|
dest_url=scu.ScoURL(),
|
||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
)
|
)
|
||||||
return sco_formsemestre_validation.etud_ue_suppress_validation(
|
return sco_formsemestre_validation.etud_ue_suppress_validation(
|
||||||
@ -3033,12 +3003,12 @@ def etud_ue_suppress_validation(context, etudid, formsemestre_id, ue_id, REQUEST
|
|||||||
@scodoc7func(context)
|
@scodoc7func(context)
|
||||||
def formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
def formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
||||||
"Formulaire saisie automatisee des decisions d'un semestre"
|
"Formulaire saisie automatisee des decisions d'un semestre"
|
||||||
if not context._can_validate_sem(REQUEST, formsemestre_id):
|
if not sco_permissions.can_validate_sem(context, REQUEST, formsemestre_id):
|
||||||
return scu.confirm_dialog(
|
return scu.confirm_dialog(
|
||||||
context,
|
context,
|
||||||
message="<p>Opération non autorisée pour %s</h2>"
|
message="<p>Opération non autorisée pour %s</h2>"
|
||||||
% REQUEST.AUTHENTICATED_USER,
|
% REQUEST.AUTHENTICATED_USER,
|
||||||
dest_url=context.ScoURL(),
|
dest_url=scu.ScoURL(),
|
||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -3052,12 +3022,12 @@ def formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
|||||||
@scodoc7func(context)
|
@scodoc7func(context)
|
||||||
def do_formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
def do_formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
||||||
"Formulaire saisie automatisee des decisions d'un semestre"
|
"Formulaire saisie automatisee des decisions d'un semestre"
|
||||||
if not context._can_validate_sem(REQUEST, formsemestre_id):
|
if not sco_permissions.can_validate_sem(context, REQUEST, formsemestre_id):
|
||||||
return scu.confirm_dialog(
|
return scu.confirm_dialog(
|
||||||
context,
|
context,
|
||||||
message="<p>Opération non autorisée pour %s</h2>"
|
message="<p>Opération non autorisée pour %s</h2>"
|
||||||
% REQUEST.AUTHENTICATED_USER,
|
% REQUEST.AUTHENTICATED_USER,
|
||||||
dest_url=context.ScoURL(),
|
dest_url=scu.ScoURL(),
|
||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -3071,12 +3041,12 @@ def do_formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
|||||||
@scodoc7func(context)
|
@scodoc7func(context)
|
||||||
def formsemestre_fix_validation_ues(context, formsemestre_id, REQUEST=None):
|
def formsemestre_fix_validation_ues(context, formsemestre_id, REQUEST=None):
|
||||||
"Verif/reparation codes UE"
|
"Verif/reparation codes UE"
|
||||||
if not context._can_validate_sem(REQUEST, formsemestre_id):
|
if not sco_permissions.can_validate_sem(context, REQUEST, formsemestre_id):
|
||||||
return scu.confirm_dialog(
|
return scu.confirm_dialog(
|
||||||
context,
|
context,
|
||||||
message="<p>Opération non autorisée pour %s</h2>"
|
message="<p>Opération non autorisée pour %s</h2>"
|
||||||
% REQUEST.AUTHENTICATED_USER,
|
% REQUEST.AUTHENTICATED_USER,
|
||||||
dest_url=context.ScoURL(),
|
dest_url=scu.ScoURL(),
|
||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -3092,12 +3062,12 @@ def formsemestre_validation_suppress_etud(
|
|||||||
context, formsemestre_id, etudid, REQUEST=None, dialog_confirmed=False
|
context, formsemestre_id, etudid, REQUEST=None, dialog_confirmed=False
|
||||||
):
|
):
|
||||||
"""Suppression des decisions de jury pour un etudiant."""
|
"""Suppression des decisions de jury pour un etudiant."""
|
||||||
if not context._can_validate_sem(REQUEST, formsemestre_id):
|
if not sco_permissions.can_validate_sem(context, REQUEST, formsemestre_id):
|
||||||
return scu.confirm_dialog(
|
return scu.confirm_dialog(
|
||||||
context,
|
context,
|
||||||
message="<p>Opération non autorisée pour %s</h2>"
|
message="<p>Opération non autorisée pour %s</h2>"
|
||||||
% REQUEST.AUTHENTICATED_USER,
|
% REQUEST.AUTHENTICATED_USER,
|
||||||
dest_url=context.ScoURL(),
|
dest_url=scu.ScoURL(),
|
||||||
REQUEST=REQUEST,
|
REQUEST=REQUEST,
|
||||||
)
|
)
|
||||||
if not dialog_confirmed:
|
if not dialog_confirmed:
|
||||||
@ -3138,7 +3108,7 @@ def formsemestre_validation_suppress_etud(
|
|||||||
context, formsemestre_id, etudid
|
context, formsemestre_id, etudid
|
||||||
)
|
)
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.ScoURL()
|
scu.ScoURL()
|
||||||
+ "/Notes/formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&head_message=Décision%%20supprimée"
|
+ "/Notes/formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&head_message=Décision%%20supprimée"
|
||||||
% (formsemestre_id, etudid)
|
% (formsemestre_id, etudid)
|
||||||
)
|
)
|
||||||
|
@ -299,7 +299,7 @@ def rssnews(context, REQUEST=None):
|
|||||||
return sco_news.scolar_news_summary_rss(
|
return sco_news.scolar_news_summary_rss(
|
||||||
context,
|
context,
|
||||||
"Nouvelles de " + sco_preferences.get_preference(context, "DeptName"),
|
"Nouvelles de " + sco_preferences.get_preference(context, "DeptName"),
|
||||||
context.ScoURL(),
|
scu.ScoURL(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -489,13 +489,6 @@ sco_publish(
|
|||||||
|
|
||||||
|
|
||||||
# Debouche / devenir etudiant
|
# Debouche / devenir etudiant
|
||||||
|
|
||||||
# vrai si l'utilisateur peut modifier les informations de suivi sur la page etud"
|
|
||||||
def can_edit_suivi(context, REQUEST=None):
|
|
||||||
authuser = REQUEST.AUTHENTICATED_USER
|
|
||||||
return authuser.has_permission(Permission.ScoEtudChangeAdr, context)
|
|
||||||
|
|
||||||
|
|
||||||
sco_publish(
|
sco_publish(
|
||||||
"/itemsuivi_suppress", sco_debouche.itemsuivi_suppress, Permission.ScoEtudChangeAdr
|
"/itemsuivi_suppress", sco_debouche.itemsuivi_suppress, Permission.ScoEtudChangeAdr
|
||||||
)
|
)
|
||||||
@ -542,35 +535,12 @@ def doAddAnnotation(context, etudid, comment, REQUEST):
|
|||||||
return REQUEST.RESPONSE.redirect("ficheEtud?etudid=" + etudid)
|
return REQUEST.RESPONSE.redirect("ficheEtud?etudid=" + etudid)
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/canSuppressAnnotation")
|
|
||||||
@permission_required(Permission.ScoView)
|
|
||||||
@scodoc7func(context)
|
|
||||||
def canSuppressAnnotation(context, annotation_id, REQUEST):
|
|
||||||
"""True if current user can suppress this annotation
|
|
||||||
Seuls l'auteur de l'annotation et le chef de dept peuvent supprimer
|
|
||||||
une annotation.
|
|
||||||
"""
|
|
||||||
cnx = context.GetDBConnexion()
|
|
||||||
annos = scolars.etud_annotations_list(cnx, args={"id": annotation_id})
|
|
||||||
if len(annos) != 1:
|
|
||||||
raise ScoValueError("annotation inexistante !")
|
|
||||||
anno = annos[0]
|
|
||||||
authuser = REQUEST.AUTHENTICATED_USER
|
|
||||||
# note: les anciennes installations n'ont pas le role ScoEtudSupprAnnotations
|
|
||||||
# c'est pourquoi on teste aussi ScoEtudInscrit (normalement détenue par le chef)
|
|
||||||
return (
|
|
||||||
(str(authuser) == anno["zope_authenticated_user"])
|
|
||||||
or authuser.has_permission(Permission.ScoEtudSupprAnnotations, context)
|
|
||||||
or authuser.has_permission(Permission.ScoEtudInscrit, context)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/doSuppressAnnotation")
|
@bp.route("/doSuppressAnnotation")
|
||||||
@permission_required(Permission.ScoView)
|
@permission_required(Permission.ScoView)
|
||||||
@scodoc7func(context)
|
@scodoc7func(context)
|
||||||
def doSuppressAnnotation(context, etudid, annotation_id, REQUEST):
|
def doSuppressAnnotation(context, etudid, annotation_id, REQUEST):
|
||||||
"""Suppression annotation."""
|
"""Suppression annotation."""
|
||||||
if not context.canSuppressAnnotation(annotation_id, REQUEST):
|
if not sco_permissions.can_suppress_annotation(context, annotation_id, REQUEST):
|
||||||
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
||||||
|
|
||||||
cnx = context.GetDBConnexion()
|
cnx = context.GetDBConnexion()
|
||||||
@ -643,7 +613,7 @@ def formChangeCoordonnees(context, etudid, REQUEST):
|
|||||||
initvalues=adr,
|
initvalues=adr,
|
||||||
submitlabel="Valider le formulaire",
|
submitlabel="Valider le formulaire",
|
||||||
)
|
)
|
||||||
dest_url = context.ScoURL() + "/ficheEtud?etudid=" + etudid
|
dest_url = scu.ScoURL() + "/ficheEtud?etudid=" + etudid
|
||||||
if tf[0] == 0:
|
if tf[0] == 0:
|
||||||
return header + "\n".join(H) + tf[1] + context.sco_footer(REQUEST)
|
return header + "\n".join(H) + tf[1] + context.sco_footer(REQUEST)
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
@ -759,7 +729,7 @@ def formChangePhoto(context, etudid=None, REQUEST=None):
|
|||||||
submitlabel="Valider",
|
submitlabel="Valider",
|
||||||
cancelbutton="Annuler",
|
cancelbutton="Annuler",
|
||||||
)
|
)
|
||||||
dest_url = context.ScoURL() + "/ficheEtud?etudid=" + etud["etudid"]
|
dest_url = scu.ScoURL() + "/ficheEtud?etudid=" + etud["etudid"]
|
||||||
if tf[0] == 0:
|
if tf[0] == 0:
|
||||||
return (
|
return (
|
||||||
"\n".join(H)
|
"\n".join(H)
|
||||||
@ -799,7 +769,7 @@ def formSuppressPhoto(context, etudid=None, REQUEST=None, dialog_confirmed=False
|
|||||||
sco_photos.suppress_photo(context, etud, REQUEST=REQUEST)
|
sco_photos.suppress_photo(context, etud, REQUEST=REQUEST)
|
||||||
|
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.ScoURL() + "/ficheEtud?etudid=" + etud["etudid"]
|
scu.ScoURL() + "/ficheEtud?etudid=" + etud["etudid"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -1531,7 +1501,7 @@ def etudident_delete(context, etudid, dialog_confirmed=False, REQUEST=None):
|
|||||||
if to_inval:
|
if to_inval:
|
||||||
context.Notes._inval_cache(formsemestre_id_list=to_inval) # >
|
context.Notes._inval_cache(formsemestre_id_list=to_inval) # >
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.ScoURL() + r"?head_message=Etudiant%20supprimé"
|
scu.ScoURL() + r"?head_message=Etudiant%20supprimé"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -1683,12 +1653,11 @@ def form_students_import_excel(context, REQUEST, formsemestre_id=None):
|
|||||||
if formsemestre_id:
|
if formsemestre_id:
|
||||||
sem = sco_formsemestre.get_formsemestre(context.Notes, formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(context.Notes, formsemestre_id)
|
||||||
dest_url = (
|
dest_url = (
|
||||||
context.ScoURL()
|
scu.ScoURL() + "/formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
||||||
+ "/formsemestre_status?formsemestre_id=%s" % formsemestre_id
|
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
sem = None
|
sem = None
|
||||||
dest_url = context.ScoURL()
|
dest_url = scu.ScoURL()
|
||||||
if sem and sem["etat"] != "1":
|
if sem and sem["etat"] != "1":
|
||||||
raise ScoValueError("Modification impossible: semestre verrouille")
|
raise ScoValueError("Modification impossible: semestre verrouille")
|
||||||
H = [
|
H = [
|
||||||
@ -1729,7 +1698,7 @@ def form_students_import_excel(context, REQUEST, formsemestre_id=None):
|
|||||||
(qui doit avoir été créé au préalable). <a class="stdlink" href="%s?showcodes=1">Cliquez ici pour afficher les codes</a>
|
(qui doit avoir été créé au préalable). <a class="stdlink" href="%s?showcodes=1">Cliquez ici pour afficher les codes</a>
|
||||||
</p>
|
</p>
|
||||||
"""
|
"""
|
||||||
% (context.ScoURL())
|
% (scu.ScoURL())
|
||||||
)
|
)
|
||||||
|
|
||||||
H.append("""<ol><li>""")
|
H.append("""<ol><li>""")
|
||||||
@ -1951,7 +1920,7 @@ def form_students_import_infos_admissions(context, REQUEST, formsemestre_id=None
|
|||||||
return "\n".join(H) + tf[1] + help_text + F
|
return "\n".join(H) + tf[1] + help_text + F
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return REQUEST.RESPONSE.redirect(
|
return REQUEST.RESPONSE.redirect(
|
||||||
context.ScoURL() + "/formsemestre_status?formsemestre_id=" + formsemestre_id
|
scu.ScoURL() + "/formsemestre_status?formsemestre_id=" + formsemestre_id
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return context._students_import_admission(
|
return context._students_import_admission(
|
||||||
|
Loading…
Reference in New Issue
Block a user