Révision du changement d’établissement

This commit is contained in:
2025-09-02 13:45:40 +02:00
parent c19c1ded22
commit c2b65bdff9

View File

@@ -101,7 +101,7 @@ index 0db4982..889dc03 100755
nscd_start()
log.del_lock()
diff --git usr/lib/python3/dist-packages/scribe/enseignants.py usr/lib/python3/dist-packages/scribe/enseignants.py
index 69f3411..edfc210 100644
index 69f3411..97cd0df 100644
--- usr/lib/python3/dist-packages/scribe/enseignants.py
+++ usr/lib/python3/dist-packages/scribe/enseignants.py
@@ -12,21 +12,21 @@
@@ -127,7 +127,7 @@ index 69f3411..edfc210 100644
"""
_type = 'personnels'
profil = 'enseignant'
@@ -145,38 +145,35 @@ class Enseignant(User):
@@ -145,38 +145,31 @@ class Enseignant(User):
rep = join(AD_HOME_PATH, login)
# répertoire supérieur
clear_acl(rep)
@@ -142,28 +142,20 @@ index 69f3411..edfc210 100644
+ def _change_etab(self, user, new_etab):
old_dn = self.get_user_dn(user)
new_dn = self.get_user_dn(user, force_etab=new_etab)
- #copie de l'utilisateur + suppression
- uidfilter = "(&%s(uid=%s))" % (USER_FILTER, user)
- cur_ldif = self.ldap_admin._search_one(uidfilter)
#copie de l'utilisateur + suppression
uidfilter = "(&%s(uid=%s))" % (USER_FILTER, user)
cur_ldif = self.ldap_admin._search_one(uidfilter)
- self._desinscription(user, old_etab, sync=False)
- self._desinscription(user, 'profs-' + old_etab, sync=False)
- for grp in self._get_user_groups(user, old_etab):
- self._desinscription(user, grp, sync=False)
- self.ldap_admin._delete(old_dn)
- #Suppression du cache
- self.cache_etab['login'].pop(user)
- self.ldap_admin._add(new_dn, modlist.addModlist(cur_ldif))
+ if new_dn != old_dn:
+ #copie de l'utilisateur + suppression
+ uidfilter = "(&%s(uid=%s))" % (USER_FILTER, user)
+ cur_ldif = self.ldap_admin._search_one(uidfilter)
+ self.ldap_admin._delete(old_dn)
+ #Suppression du cache
+ self.cache_etab['login'].pop(user)
+ self.ldap_admin._add(new_dn, modlist.addModlist(cur_ldif))
#inscription dans le groupe du nouvel etablissement
self._inscription(user, new_etab, sync=False, etab=num_etab)
self._inscription(user, 'profs-' + new_etab, sync=False, etab=new_etab)
self.ldap_admin._delete(old_dn)
#Suppression du cache
self.cache_etab['login'].pop(user)
self.ldap_admin._add(new_dn, modlist.addModlist(cur_ldif))
- #inscription dans le groupe du nouvel etablissement
- self._inscription(user, new_etab, sync=False, etab=num_etab)
- self._inscription(user, 'profs-' + new_etab, sync=False, etab=new_etab)
-
+
@@ -176,7 +168,7 @@ index 69f3411..edfc210 100644
else:
user_dn = self.get_user_dn(login) #USER_DN % dict(uid=login, _type=self._type)
datas = []
@@ -196,21 +193,21 @@ class Enseignant(User):
@@ -196,21 +189,21 @@ class Enseignant(User):
datas.append((MOD_REPLACE, 'ENTAuxEnsCategoDiscipline', args['disciplines']))
datas.append((MOD_REPLACE, 'sn', args['nom']))
datas.append((MOD_REPLACE, 'givenName', args['prenom']))
@@ -200,7 +192,7 @@ index 69f3411..edfc210 100644
Mise à niveau d'un compte enseignant
"""
diff --git usr/lib/python3/dist-packages/scribe/eoleldap.py usr/lib/python3/dist-packages/scribe/eoleldap.py
index 45ec338..0ec3129 100644
index 45ec338..dac52b3 100644
--- usr/lib/python3/dist-packages/scribe/eoleldap.py
+++ usr/lib/python3/dist-packages/scribe/eoleldap.py
@@ -8,21 +8,21 @@
@@ -262,7 +254,7 @@ index 45ec338..0ec3129 100644
users = []
res = self.ldap_admin._search("(&%s%s)" % (USER_FILTER, filtre), attrs)
for user in res:
@@ -572,21 +570,29 @@ elif LDAP_MODE == 'openldap':
@@ -572,21 +570,31 @@ elif LDAP_MODE == 'openldap':
récupère le numéro d'etab du cache ou requète LDAP
"""
if not SUPPORT_ETAB:
@@ -280,6 +272,8 @@ index 45ec338..0ec3129 100644
+ result = self.ldap_admin._search(ldap_filter, [attr])[0]
+ if _type == 'login':
+ etab = [cn[1]['cn'][0] for cn in self.ldap_admin._search(f'(&(objectClass=eolegroupe)(type=Etablissement)(memberUid={name}))', ['cn'])]
+ if not etab:
+ return None
+ else:
+ etab = [result[0].split(',ou=')[-3]]
+ if not multi_etabs:
@@ -428,10 +422,34 @@ index 05569fd..f8b4ab3 100644
pass
diff --git usr/lib/python3/dist-packages/scribe/importation/writer.py usr/lib/python3/dist-packages/scribe/importation/writer.py
index 34ce0fb..c61f65b 100644
index 34ce0fb..972053d 100644
--- usr/lib/python3/dist-packages/scribe/importation/writer.py
+++ usr/lib/python3/dist-packages/scribe/importation/writer.py
@@ -835,22 +835,24 @@ def _maj_enseignant(enseignant, user, login, etab, administratif=False):
@@ -6,21 +6,21 @@
# eole@ac-dijon.fr
###########################################################################
"""
écriture dans le ldap des données relationnelles
"""
from os.path import join
from creole.eosfunc import gen_random
from scribe.storage import Niveau, Classe, Eleve, Responsable, Enseignant, \
Administratif, EnsClasse, Matiere, Groupe, JointureClasseEnseignant, \
Service, Invite, JointureGroupeEleve, JointureGroupeEnseignant
-from scribe.ldapconf import CIVILITES, EOLE_AD, MIN_PASSWORD_CLASS, GROUP_PATH, LDAP_MODE, FORCED_PASSWORD_MODIFICATION_ALLOWED
+from scribe.ldapconf import CIVILITES, EOLE_AD, MIN_PASSWORD_CLASS, GROUP_PATH, LDAP_MODE, FORCED_PASSWORD_MODIFICATION_ALLOWED, num_etab
from scribe.eoletools import ok_groupe, gen_login, clean_date, \
gen_strong_password, lsc_sync
from scribe.errors import BadLogin
from scribe.eolegroup import Group
from scribe.eoleshare import Share
from scribe.eleves import Eleve as LdapEleve
from scribe.responsables import Responsable as LdapResponsable
from scribe.enseignants import Enseignant as LdapEnseignant
from scribe.administratifs import Administratif as LdapAdministratif
from scribe.autres import Autre as LdapAutre
@@ -834,23 +834,28 @@ def _maj_enseignant(enseignant, user, login, etab, administratif=False):
enseignant : store.Enseignant()
user : eoleuser.Enseignant()
login : uid de l'utilisateur dans ldap
administratif : personnel administratif avec un compte enseignant
@@ -441,13 +459,17 @@ index 34ce0fb..c61f65b 100644
groups = []
# attention : des administratifs peuvent avoir un compte enseignant
if isinstance(enseignant, Enseignant):
old_etab = user.get_etab(login)
- old_etab = user.get_etab(login)
- if old_etab != etab:
- user._change_etab(login, old_etab, etab)
+ if old_etab is None: # lutilisateur à été retiré de son dernier établissement mais pas purgé
+ user._inscription(login, etab)
+ elif old_etab != etab:
+ current_dn = user.get_user_dn(login)
+ new_dn = user.get_user_dn(login, force_etab=etab)
+ if current_dn != new_dn:
+ user._change_etab(login, etab)
+ #inscription dans le groupe du nouvel etablissement si nécessaire
+ if etab not in user.get_etab(user, multi_etabs=True):
+ user._inscription(user, etab, sync=False, etab=num_etab)
+ user._inscription(user, 'profs-' + etab, sync=False, etab=etab)
for joint in enseignant.get_classes():
groups.append('profs-%s' % str(joint.classe.nom))
if joint.profprincipal:
@@ -458,7 +480,7 @@ index 34ce0fb..c61f65b 100644
groups.append('profs-%s' % str(option.nom))
disciplines = eval(enseignant.disciplines)
else:
@@ -885,20 +887,21 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL
@@ -885,20 +890,21 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL
log.write_header(config.ENS_HEADER, config.ENS_INFO)
user = LdapEnseignant()
user.ldap_admin = connexion
@@ -480,7 +502,7 @@ index 34ce0fb..c61f65b 100644
else:
login = _enseignant_exists(enseignant, user)
if login != '':
@@ -909,29 +912,31 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL
@@ -909,29 +915,31 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL
if str(enseignant.nom) == '' or str(enseignant.prenom) == '':
log.infolog("Enseignant n°%s invalide" % str(enseignant.int_id))
continue