up to 7.24

This commit is contained in:
Emmanuel Viennet 2021-05-01 21:52:26 +02:00
commit d84102657f
7 changed files with 49 additions and 32 deletions

View File

@ -1313,7 +1313,7 @@ class ZAbsences(
if with_evals: if with_evals:
a["exams"] = descr_exams(a) a["exams"] = descr_exams(a)
a["datedmy"] = a["jour"].strftime("%d/%m/%Y") a["datedmy"] = a["jour"].strftime("%d/%m/%Y")
a["matin_o"] = int(a["matin"]) a["ampm"] = int(a["matin"])
a["matin"] = matin(a["matin"]) a["matin"] = matin(a["matin"])
index = a["description"].find(")") index = a["description"].find(")")
if index != -1: if index != -1:
@ -1328,7 +1328,7 @@ class ZAbsences(
a["justlink"] = "<em>justifier</em>" a["justlink"] = "<em>justifier</em>"
a["_justlink_target"] = ( a["_justlink_target"] = (
"doJustifAbsence?etudid=%s&amp;datedebut=%s&amp;datefin=%s&amp;demijournee=%s" "doJustifAbsence?etudid=%s&amp;datedebut=%s&amp;datefin=%s&amp;demijournee=%s"
% (etudid, a["datedmy"], a["datedmy"], a["matin_o"]) % (etudid, a["datedmy"], a["datedmy"], a["ampm"])
) )
# #
titles = { titles = {
@ -1340,6 +1340,8 @@ class ZAbsences(
"motif": "Motif", "motif": "Motif",
} }
columns_ids = ["datedmy", "matin"] columns_ids = ["datedmy", "matin"]
if format in ("json", "xml"):
columns_ids += ["jour", "ampm"]
if with_evals: if with_evals:
columns_ids.append("exams") columns_ids.append("exams")
@ -1433,7 +1435,7 @@ class ZAbsences(
gr_tit = p + h gr_tit = p + h
title = "Etat des absences %s" % gr_tit title = "Etat des absences %s" % gr_tit
if format == "xls" or format == "xml": if format == "xls" or format == "xml" or format == "json":
columns_ids = ["etudid"] + columns_ids columns_ids = ["etudid"] + columns_ids
tab = GenTable( tab = GenTable(
columns_ids=columns_ids, columns_ids=columns_ids,

View File

@ -191,15 +191,13 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
# Affecte aussi cache inscriptions # Affecte aussi cache inscriptions
self.get_formsemestre_inscription_cache().inval_cache( self.get_formsemestre_inscription_cache().inval_cache(
key=formsemestre_id key=formsemestre_id
) # > )
else: else:
self._getNotesCache().inval_cache( self._getNotesCache().inval_cache(
self, formsemestre_id=formsemestre_id, pdfonly=pdfonly self, formsemestre_id=formsemestre_id, pdfonly=pdfonly
) # > )
# Affecte aussi cache inscriptions # Affecte aussi cache inscriptions
self.get_formsemestre_inscription_cache().inval_cache( self.get_formsemestre_inscription_cache().inval_cache(key=formsemestre_id)
key=formsemestre_id
) # >
security.declareProtected(ScoView, "clearcache") security.declareProtected(ScoView, "clearcache")
@ -1816,18 +1814,19 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
security.declareProtected(ScoView, "do_formsemestre_inscription_listinscrits") security.declareProtected(ScoView, "do_formsemestre_inscription_listinscrits")
def do_formsemestre_inscription_listinscrits(self, formsemestre_id): def do_formsemestre_inscription_listinscrits(
self, formsemestre_id, format=None, REQUEST=None
):
"""Liste les inscrits (état I) à ce semestre et cache le résultat""" """Liste les inscrits (état I) à ce semestre et cache le résultat"""
cache = self.get_formsemestre_inscription_cache() cache = self.get_formsemestre_inscription_cache()
r = cache.get(formsemestre_id) r = cache.get(formsemestre_id)
if r != None: if r is None:
return r # retreive list
# retreive list r = self.do_formsemestre_inscription_list(
r = self.do_formsemestre_inscription_list( args={"formsemestre_id": formsemestre_id, "etat": "I"}
args={"formsemestre_id": formsemestre_id, "etat": "I"} )
) cache.set(formsemestre_id, r)
cache.set(formsemestre_id, r) return scu.sendResult(REQUEST, r, format=format, name="inscrits")
return r
security.declareProtected(ScoImplement, "do_formsemestre_inscription_edit") security.declareProtected(ScoImplement, "do_formsemestre_inscription_edit")
@ -1840,7 +1839,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
) # > modif inscription semestre (demission ?) ) # > modif inscription semestre (demission ?)
# Cache inscriptions semestres # Cache inscriptions semestres
def get_formsemestre_inscription_cache(self): def get_formsemestre_inscription_cache(self, format=None):
u = self.GetDBConnexionString() u = self.GetDBConnexionString()
if CACHE_formsemestre_inscription.has_key(u): if CACHE_formsemestre_inscription.has_key(u):
return CACHE_formsemestre_inscription[u] return CACHE_formsemestre_inscription[u]

View File

@ -283,10 +283,26 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
security.declareProtected("View", "list_depts") security.declareProtected("View", "list_depts")
def list_depts(self, REQUEST=None): def list_depts(self, viewable=True, format=None, REQUEST=None):
"""List departments folders """List departments
(returns a list of Zope folders containing a ZScolar instance) If viewable, list only depts viewable the current user.
""" """
authuser = REQUEST.AUTHENTICATED_USER
viewable = int(viewable)
return scu.sendResult(
REQUEST,
[
d.id
for d in self._list_depts()
if (not viewable) or authuser.has_permission(ScoView, d.Scolarite)
],
name="depts",
format=format,
)
def _list_depts(self, REQUEST=None): # not published
# List departments folders
# (returns a list of Zope folders containing a ZScolar instance)
folders = self.objectValues("Folder") folders = self.objectValues("Folder")
# select folders with Scolarite object: # select folders with Scolarite object:
r = [] r = []
@ -337,7 +353,7 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
if e: if e:
return e return e
if not force and DeptId not in [x.id for x in self.list_depts()]: if not force and DeptId not in [x.id for x in self._list_depts()]:
raise ValueError("nom de departement invalide") raise ValueError("nom de departement invalide")
self.manage_delObjects(ids=[DeptId]) self.manage_delObjects(ids=[DeptId])
@ -401,7 +417,7 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
def index_html(self, REQUEST=None, message=None): def index_html(self, REQUEST=None, message=None):
"""Top level page for ScoDoc""" """Top level page for ScoDoc"""
authuser = REQUEST.AUTHENTICATED_USER authuser = REQUEST.AUTHENTICATED_USER
deptList = self.list_depts() deptList = self._list_depts()
self._fix_users_folder() # fix our exUserFolder self._fix_users_folder() # fix our exUserFolder
isAdmin = not self._check_admin_perm(REQUEST) isAdmin = not self._check_admin_perm(REQUEST)
try: try:
@ -416,7 +432,7 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
# Si l'URL indique que l'on est dans un folder, affiche page login du departement # Si l'URL indique que l'on est dans un folder, affiche page login du departement
try: try:
deptfoldername = REQUEST.URL0.split("ScoDoc")[1].split("/")[1] deptfoldername = REQUEST.URL0.split("ScoDoc")[1].split("/")[1]
if deptfoldername in [x.id for x in self.list_depts()]: if deptfoldername in [x.id for x in self._list_depts()]:
return self.index_dept(deptfoldername=deptfoldername, REQUEST=REQUEST) return self.index_dept(deptfoldername=deptfoldername, REQUEST=REQUEST)
except: except:
pass pass
@ -463,7 +479,7 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
dest_folder = "/Scolarite" dest_folder = "/Scolarite"
else: else:
dest_folder = "" dest_folder = ""
for deptFolder in self.list_depts(): for deptFolder in self._list_depts():
if authuser.has_permission(ScoView, deptFolder.Scolarite): if authuser.has_permission(ScoView, deptFolder.Scolarite):
link_cls = "link_accessible" link_cls = "link_accessible"
else: else:
@ -875,7 +891,7 @@ Agent: %(HTTP_USER_AGENT)s
% self.absolute_url(), % self.absolute_url(),
] ]
deptList = [x.id for x in self.list_depts()] # definis dans Zope deptList = [x.id for x in self._list_depts()] # definis dans Zope
deptIds = set(self._list_depts_ids()) # definis sur le filesystem deptIds = set(self._list_depts_ids()) # definis sur le filesystem
existingDepts = set(deptList) existingDepts = set(deptList)
addableDepts = deptIds - existingDepts addableDepts = deptIds - existingDepts
@ -904,7 +920,7 @@ Agent: %(HTTP_USER_AGENT)s
<select name="DeptId"> <select name="DeptId">
""" """
) )
for deptFolder in self.list_depts(): for deptFolder in self._list_depts():
H.append( H.append(
'<option value="%s">%s</option>' % (deptFolder.id, deptFolder.id) '<option value="%s">%s</option>' % (deptFolder.id, deptFolder.id)
) )
@ -939,7 +955,7 @@ Agent: %(HTTP_USER_AGENT)s
"""Returns the dept id (eg "GEII") of an etud (identified by etudid, INE or NIP in REQUEST). """Returns the dept id (eg "GEII") of an etud (identified by etudid, INE or NIP in REQUEST).
Warning: This function is inefficient and its result should be cached. Warning: This function is inefficient and its result should be cached.
""" """
depts = self.list_depts() depts = self._list_depts()
depts_etud = [] # liste des depts où l'etud est defini depts_etud = [] # liste des depts où l'etud est defini
for dept in depts: for dept in depts:
etuds = dept.Scolarite.getEtudInfo(REQUEST=REQUEST) etuds = dept.Scolarite.getEtudInfo(REQUEST=REQUEST)

View File

@ -276,7 +276,7 @@ def search_etud_in_accessible_depts(context, expnom=None, code_nip=None, REQUEST
""" """
result = [] result = []
accessible_depts = [] accessible_depts = []
deptList = context.list_depts() # definis dans Zope deptList = context._list_depts() # definis dans Zope
for dept in deptList: for dept in deptList:
# log('%s searching %s' % (str(REQUEST.AUTHENTICATED_USER),dept)) # log('%s searching %s' % (str(REQUEST.AUTHENTICATED_USER),dept))
if can_view_dept(dept, REQUEST): if can_view_dept(dept, REQUEST):

View File

@ -495,7 +495,7 @@ def sem_est_courant(context, sem):
def scodoc_get_all_unlocked_sems(context): def scodoc_get_all_unlocked_sems(context):
"""Liste de tous les semestres non verrouillés de tous les départements""" """Liste de tous les semestres non verrouillés de tous les départements"""
depts = context.list_depts() depts = context._list_depts()
semdepts = [] semdepts = []
for dept in depts: for dept in depts:
semdepts += [ semdepts += [

View File

@ -569,7 +569,7 @@ def sendXML(REQUEST, data, tagname=None, force_outer_xml_tag=True):
def sendResult(REQUEST, data, name=None, format=None, force_outer_xml_tag=True): def sendResult(REQUEST, data, name=None, format=None, force_outer_xml_tag=True):
if format is None: if (format is None) or (format == "html"):
return data return data
elif format == "xml": # name is outer tagname elif format == "xml": # name is outer tagname
return sendXML( return sendXML(

View File

@ -43,5 +43,5 @@ function ajaxFunction(mod, etudid, dat) {
// ----- // -----
function change_moduleimpl(url) { function change_moduleimpl(url) {
document.location = url + '&amp;moduleimpl_id=' + document.getElementById('moduleimpl_id').value; document.location = url + '&moduleimpl_id=' + document.getElementById('moduleimpl_id').value;
} }