Files
CD73/patches.d/scribe-backend.patch

140 lines
6.5 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff --git usr/bin/importation_scribe usr/bin/importation_scribe
index 0db4982..bb6ff94 100755
--- usr/bin/importation_scribe
+++ usr/bin/importation_scribe
@@ -49,7 +49,7 @@ from os.path import isfile, dirname
from pyeole.process import system_out, system_code
from scribe.storage import init_store
from scribe.eoleldap import Ldap
-from scribe.ldapconf import SUPPORT_ETAB
+from scribe.ldapconf import SUPPORT_ETAB, BRANCHE_ETAB, PROF_FILTER
from scribe.eoletools import nscd_start, nscd_stop
from scribe.parsing import sconet, aaf, be1d, scribecsv2
from scribe.importation import preferences, writer, config
@@ -465,6 +465,9 @@ class Console:
prefs = preferences.get_enseignants_prefs()
etab = prefs.get_default('etab')
etab_prefix = prefs.get_default('etab_prefix')
+ branche_etab = BRANCHE_ETAB % {'etab': etab}
+ purge_option = 'keep'
+ old_logins = connexion._search(PROF_FILTER, 'uid', suffix=branche_etab)
else:
etab = None
etab_prefix = ''
@@ -476,8 +479,13 @@ class Console:
etab=etab, etab_prefix=etab_prefix)
writer.verify_option(store=self.store, connexion=connexion,
etab_prefix=etab_prefix)
- writer.write_enseignant(store=self.store, connexion=connexion,
+ logins = writer.write_enseignant(store=self.store, connexion=connexion,
etab=etab)
+ if SUPPORT_ETAB:
+ print(logins)
+ print(old_logins)
+ print(set(old_logins).difference(set(logins)))
+
if self.data_type in ['sconet', 'aaf']:
writer.write_service(store=self.store, connexion=connexion,
etab=etab, etab_prefix=etab_prefix)
diff --git usr/lib/python3/dist-packages/scribe/importation/writer.py usr/lib/python3/dist-packages/scribe/importation/writer.py
index 34ce0fb..40865d5 100644
--- usr/lib/python3/dist-packages/scribe/importation/writer.py
+++ usr/lib/python3/dist-packages/scribe/importation/writer.py
@@ -841,9 +841,6 @@ def _maj_enseignant(enseignant, user, login, etab, administratif=False):
groups = []
# attention : des administratifs peuvent avoir un compte enseignant
if isinstance(enseignant, Enseignant):
- old_etab = user.get_etab(login)
- if old_etab != etab:
- user._change_etab(login, old_etab, etab)
for joint in enseignant.get_classes():
groups.append('profs-%s' % str(joint.classe.nom))
if joint.profprincipal:
@@ -881,6 +878,7 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL
insertion des enseignants
"""
num = 0
+ logins = []
log.infolog("Intégration des enseignants...", title=True)
log.write_header(config.ENS_HEADER, config.ENS_INFO)
user = LdapEnseignant()
@@ -900,10 +898,10 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL
else:
login = ''
else:
- login = _enseignant_exists(enseignant, user)
+ login = _enseignant_exists(enseignant, user, etab=etab)
if login != '':
# enseignant existant
- _maj_enseignant(enseignant, user, login, etab)
+ _maj_enseignant(enseignant, user, login, etab=etab)
else:
# nouvel enseignant
if str(enseignant.nom) == '' or str(enseignant.prenom) == '':
@@ -916,6 +914,7 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL
continue
# enregistrement du login attribué
enseignant.login = str(login)
+ logins.append(enseignant.login)
num += 1
if num % config.DEBUG_NUM == 0:
log.debuglog("%d enseignants traités..." % num)
@@ -923,8 +922,12 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL
_sync_passwords(user, new_passwords, change_pwd=change_pwd)
_create_dirs(user, quota, new_passwords)
log.infolog("TOTAL : %d enseignants" % num)
+ # write unmodified users list
+ # filtrer les enseignants avec LastUpdate plus vieux que le début de limport et vérifier quils ne sont pas dans store.query(Enseignant) ?
+ #user.ldap_admin._search(PROF_FILTER, attrlist=['uid'], suffix=branche_etab % {'etab': etab})
if num != 0:
log.copy_info(config.ENS_INFO, user=current_ead_user)
+ return logins
# -------------------- administratifs -------------------- #
@@ -1027,7 +1030,7 @@ def write_administratif(store, connexion, etab=None, current_ead_user=config.DEF
# personnel existe
_maj_administratif(administratif, user, login)
else:
- login = _enseignant_exists(administratif, user)
+ login = _enseignant_exists(administratif, user, etab)
if login != '':
# le personnel a été crée comme un professeur...
log.infolog("(%s a un compte enseignant)" % login)
diff --git usr/lib/python3/dist-packages/scribe/linker.py usr/lib/python3/dist-packages/scribe/linker.py
index 4cc6082..94099e9 100644
--- usr/lib/python3/dist-packages/scribe/linker.py
+++ usr/lib/python3/dist-packages/scribe/linker.py
@@ -10,7 +10,7 @@
et l'annuaire ldap
"""
from scribe.ldapconf import ELEVE_FILTER, PROF_FILTER, ADMINISTRATIF_FILTER, \
-RESPONSABLE_FILTER, USER_FILTER, AUTRE_FILTER, LDAP_MODE
+RESPONSABLE_FILTER, USER_FILTER, AUTRE_FILTER, LDAP_MODE, BRANCHE_ETAB
from scribe.eoletools import deformate_date, strip_adresse
from scribe.eoleldap import Ldap
@@ -103,7 +103,7 @@ def _responsable_exists(responsable, user):
return res['uid'][0]
return ''
-def _enseignant_exists(enseignant, user):
+def _enseignant_exists(enseignant, user, etab=None):
"""
recherche si un enseignant existe déjà dans l'annuaire
enseignant : storage.Enseignant()
@@ -133,8 +133,12 @@ def _enseignant_exists(enseignant, user):
# beurk (homonymes) -> à améliorer
#filtres.append("(&%s(cn=%s %s)(objectClass=enseignant))" % (USER_FILTER,
# str(enseignant.prenom), str(enseignant.nom)))
+ if etab:
+ branche_etab = BRANCHE_ETAB % {'etab': etab}
+ else:
+ branche_etab = None
for filtre in filtres:
- res = user.ldap_admin._search_one(filtre, 'uid')
+ res = user.ldap_admin._search_one(filtre, 'uid', suffix=branche_etab)
if res != {}:
return res['uid'][0]
return ''