diff --git a/app/scodoc/notesdb.py b/app/scodoc/notesdb.py index a3156a5a2f..7c1ff399d0 100644 --- a/app/scodoc/notesdb.py +++ b/app/scodoc/notesdb.py @@ -33,10 +33,11 @@ def unquote(s): return s.replace("&", "&") -def open_dept_connection(): - """Open a connection to the current dept db""" - # log("open_dept_connection to " + scu.get_db_cnx_string()) - return psycopg2.connect(scu.get_db_cnx_string()) +def open_dept_connection(scodoc_dept=None): + """Open a connection to the current dept db (g.scodoc_dept) + or to the argument scodoc_dept + """ + return psycopg2.connect(scu.get_db_cnx_string(scodoc_dept)) def close_dept_connection(): @@ -46,7 +47,16 @@ def close_dept_connection(): g.db_conn.close() -# Essai bien plus simple pour Flask: +def set_sco_dept(scodoc_dept): + """Set "context" to given dept + open db connection + """ + g.scodoc_dept = scodoc_dept + if hasattr(g, "db_conn"): + close_dept_connection() + g.db_conn = open_dept_connection() + + def GetDBConnexion(autocommit=True): # on n'utilise plus autocommit return g.db_conn diff --git a/app/scodoc/sco_find_etud.py b/app/scodoc/sco_find_etud.py index 539c861a18..69bde973be 100644 --- a/app/scodoc/sco_find_etud.py +++ b/app/scodoc/sco_find_etud.py @@ -28,6 +28,7 @@ """Recherche d'étudiants """ from flask import url_for, g +from flask_login import current_user from scodoc_manager import sco_mgr import app.scodoc.sco_utils as scu @@ -98,8 +99,8 @@ def form_search_etud( def search_etud_in_dept(context, expnom="", REQUEST=None): """Page recherche d'un etudiant. - Affiche la fiche de l'étudiant, ou, si la recherche donne plusieurs résultats, la liste des étudianst - correspondants. + Affiche la fiche de l'étudiant, ou, si la recherche donne plusieurs résultats, + la liste des étudiants correspondants. Appelée par boite de recherche barre latérale gauche. Args: @@ -109,9 +110,9 @@ def search_etud_in_dept(context, expnom="", REQUEST=None): etuds = sco_etud.get_etud_info(filled=1, etudid=expnom, REQUEST=REQUEST) if len(etuds) != 1: if scu.is_valid_code_nip(expnom): - etuds = search_etuds_infos(context, code_nip=expnom, REQUEST=REQUEST) + etuds = search_etuds_infos(code_nip=expnom) else: - etuds = search_etuds_infos(context, expnom=expnom, REQUEST=REQUEST) + etuds = search_etuds_infos(expnom=expnom) else: etuds = [] # si expnom est trop court, n'affiche rien @@ -188,7 +189,7 @@ def search_etud_in_dept(context, expnom="", REQUEST=None): # Was chercheEtudsInfo() -def search_etuds_infos(context, expnom=None, code_nip=None, REQUEST=None): +def search_etuds_infos(expnom=None, code_nip=None): """recherche les étudiants correspondants à expnom ou au code_nip et ramene liste de mappings utilisables en DTML. """ @@ -270,36 +271,31 @@ def form_search_etud_in_accessible_depts(context, REQUEST): """ -def search_etud_in_accessible_depts(context, expnom=None, code_nip=None, REQUEST=None): +def search_etud_in_accessible_depts(expnom=None, code_nip=None): """ - context est le ZScoDoc result is a list of (sorted) etuds, one list per dept. """ result = [] accessible_depts = [] depts = sco_mgr.get_dept_ids() for dept in depts: - # log('%s searching %s' % (str(REQUEST.AUTHENTICATED_USER),dept)) - if REQUEST.AUTHENTICATED_USER.has_permission(Permission.ScoView, dept=dept): + if current_user.has_permission(Permission.ScoView, dept=dept): if expnom or code_nip: - accessible_depts.append(dept.Scolarite.DeptId()) - etuds = search_etuds_infos( - dept.Scolarite, expnom=expnom, code_nip=code_nip, REQUEST=REQUEST - ) + accessible_depts.append(dept) + ndb.set_sco_dept(dept) + etuds = search_etuds_infos(expnom=expnom, code_nip=code_nip) else: etuds = [] result.append(etuds) return result, accessible_depts -def table_etud_in_accessible_depts(context, expnom=None, REQUEST=None): +def table_etud_in_accessible_depts(expnom=None): """ Page avec table étudiants trouvés, dans tous les departements. Attention: nous sommes ici au niveau de ScoDoc, pas dans un département """ - result, accessible_depts = search_etud_in_accessible_depts( - context, expnom=expnom, REQUEST=REQUEST - ) + result, accessible_depts = search_etud_in_accessible_depts(expnom=expnom) H = [ """
""", """

Recherche multi-département de "%s"

""" % expnom, @@ -330,15 +326,18 @@ def table_etud_in_accessible_depts(context, expnom=None, REQUEST=None): else: ss = "" H.append( - """

(recherche menée dans le%s département%s: %s)

- Retour à l'accueil

""" - % (ss, ss, ", ".join(accessible_depts)) + f"""

(recherche menée dans le{ss} département{ss}: + {", ".join(accessible_depts)}) +

+

+ Retour à l'accueil +

+
+ """ ) - H.append("") - return ( html_sco_header.scodoc_top_html_header( - context, REQUEST, page_title="Choix d'un étudiant" + None, None, page_title="Choix d'un étudiant" ) + "\n".join(H) + html_sco_header.standard_html_footer() diff --git a/app/scodoc/sco_utils.py b/app/scodoc/sco_utils.py index f738252bd8..859dece169 100644 --- a/app/scodoc/sco_utils.py +++ b/app/scodoc/sco_utils.py @@ -322,8 +322,8 @@ def get_dept_id(): raise sco_exceptions.ScoInvalidDept("département invalide: %s" % g.scodoc_dept) -def get_db_cnx_string(): - return "dbname=SCO" + g.scodoc_dept +def get_db_cnx_string(scodoc_dept=None): + return "dbname=SCO" + (scodoc_dept or g.scodoc_dept) def ScoURL(): diff --git a/app/templates/scodoc.html b/app/templates/scodoc.html index 47ccd535b0..8325544f95 100644 --- a/app/templates/scodoc.html +++ b/app/templates/scodoc.html @@ -20,12 +20,14 @@ {% endfor %} +{% if current_user.is_authenticated %}
Chercher étudiant:
(entrer une partie du nom ou le code NIP, cherche dans tous les départements autorisés)
+{% endif %}

Version mobile (expérimentale, à vos risques et périls)

diff --git a/app/views/scodoc.py b/app/views/scodoc.py index c32f12dda9..54ddc8c79d 100644 --- a/app/views/scodoc.py +++ b/app/views/scodoc.py @@ -32,11 +32,14 @@ Emmanuel Viennet, 2021 """ import flask from flask import render_template +from flask import request +from flask_login.utils import login_required from scodoc_manager import sco_mgr from app.views import scodoc_bp as bp from app.scodoc import VERSION +from app.scodoc import sco_find_etud from app.scodoc.sco_permissions import Permission @@ -51,3 +54,10 @@ def index(): dept_ids=dept_ids, Permission=Permission, ) + + +@bp.route("/ScoDoc/table_etud_in_accessible_depts", methods=["POST"]) +@login_required +def table_etud_in_accessible_depts(): + """recherche étudiants sur plusieurs départements""" + return sco_find_etud.table_etud_in_accessible_depts(expnom=request.form["expnom"])