Révision du changement d’établissement
This commit is contained in:
@@ -101,7 +101,7 @@ index 0db4982..889dc03 100755
|
|||||||
nscd_start()
|
nscd_start()
|
||||||
log.del_lock()
|
log.del_lock()
|
||||||
diff --git usr/lib/python3/dist-packages/scribe/enseignants.py usr/lib/python3/dist-packages/scribe/enseignants.py
|
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
|
||||||
+++ usr/lib/python3/dist-packages/scribe/enseignants.py
|
+++ usr/lib/python3/dist-packages/scribe/enseignants.py
|
||||||
@@ -12,21 +12,21 @@
|
@@ -12,21 +12,21 @@
|
||||||
@@ -127,7 +127,7 @@ index 69f3411..edfc210 100644
|
|||||||
"""
|
"""
|
||||||
_type = 'personnels'
|
_type = 'personnels'
|
||||||
profil = 'enseignant'
|
profil = 'enseignant'
|
||||||
@@ -145,38 +145,35 @@ class Enseignant(User):
|
@@ -145,38 +145,31 @@ class Enseignant(User):
|
||||||
rep = join(AD_HOME_PATH, login)
|
rep = join(AD_HOME_PATH, login)
|
||||||
# répertoire supérieur
|
# répertoire supérieur
|
||||||
clear_acl(rep)
|
clear_acl(rep)
|
||||||
@@ -142,28 +142,20 @@ index 69f3411..edfc210 100644
|
|||||||
+ def _change_etab(self, user, new_etab):
|
+ def _change_etab(self, user, new_etab):
|
||||||
old_dn = self.get_user_dn(user)
|
old_dn = self.get_user_dn(user)
|
||||||
new_dn = self.get_user_dn(user, force_etab=new_etab)
|
new_dn = self.get_user_dn(user, force_etab=new_etab)
|
||||||
- #copie de l'utilisateur + suppression
|
#copie de l'utilisateur + suppression
|
||||||
- uidfilter = "(&%s(uid=%s))" % (USER_FILTER, user)
|
uidfilter = "(&%s(uid=%s))" % (USER_FILTER, user)
|
||||||
- cur_ldif = self.ldap_admin._search_one(uidfilter)
|
cur_ldif = self.ldap_admin._search_one(uidfilter)
|
||||||
- self._desinscription(user, old_etab, sync=False)
|
- self._desinscription(user, old_etab, sync=False)
|
||||||
- self._desinscription(user, 'profs-' + old_etab, sync=False)
|
- self._desinscription(user, 'profs-' + old_etab, sync=False)
|
||||||
- for grp in self._get_user_groups(user, old_etab):
|
- for grp in self._get_user_groups(user, old_etab):
|
||||||
- self._desinscription(user, grp, sync=False)
|
- self._desinscription(user, grp, sync=False)
|
||||||
- self.ldap_admin._delete(old_dn)
|
self.ldap_admin._delete(old_dn)
|
||||||
- #Suppression du cache
|
#Suppression du cache
|
||||||
- self.cache_etab['login'].pop(user)
|
self.cache_etab['login'].pop(user)
|
||||||
- self.ldap_admin._add(new_dn, modlist.addModlist(cur_ldif))
|
self.ldap_admin._add(new_dn, modlist.addModlist(cur_ldif))
|
||||||
+ if new_dn != old_dn:
|
- #inscription dans le groupe du nouvel etablissement
|
||||||
+ #copie de l'utilisateur + suppression
|
- self._inscription(user, new_etab, sync=False, etab=num_etab)
|
||||||
+ uidfilter = "(&%s(uid=%s))" % (USER_FILTER, user)
|
- self._inscription(user, 'profs-' + new_etab, sync=False, etab=new_etab)
|
||||||
+ 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)
|
|
||||||
-
|
-
|
||||||
+
|
+
|
||||||
|
|
||||||
@@ -176,7 +168,7 @@ index 69f3411..edfc210 100644
|
|||||||
else:
|
else:
|
||||||
user_dn = self.get_user_dn(login) #USER_DN % dict(uid=login, _type=self._type)
|
user_dn = self.get_user_dn(login) #USER_DN % dict(uid=login, _type=self._type)
|
||||||
datas = []
|
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, 'ENTAuxEnsCategoDiscipline', args['disciplines']))
|
||||||
datas.append((MOD_REPLACE, 'sn', args['nom']))
|
datas.append((MOD_REPLACE, 'sn', args['nom']))
|
||||||
datas.append((MOD_REPLACE, 'givenName', args['prenom']))
|
datas.append((MOD_REPLACE, 'givenName', args['prenom']))
|
||||||
@@ -200,7 +192,7 @@ index 69f3411..edfc210 100644
|
|||||||
Mise à niveau d'un compte enseignant
|
Mise à niveau d'un compte enseignant
|
||||||
"""
|
"""
|
||||||
diff --git usr/lib/python3/dist-packages/scribe/eoleldap.py usr/lib/python3/dist-packages/scribe/eoleldap.py
|
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
|
||||||
+++ usr/lib/python3/dist-packages/scribe/eoleldap.py
|
+++ usr/lib/python3/dist-packages/scribe/eoleldap.py
|
||||||
@@ -8,21 +8,21 @@
|
@@ -8,21 +8,21 @@
|
||||||
@@ -262,7 +254,7 @@ index 45ec338..0ec3129 100644
|
|||||||
users = []
|
users = []
|
||||||
res = self.ldap_admin._search("(&%s%s)" % (USER_FILTER, filtre), attrs)
|
res = self.ldap_admin._search("(&%s%s)" % (USER_FILTER, filtre), attrs)
|
||||||
for user in res:
|
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
|
récupère le numéro d'etab du cache ou requète LDAP
|
||||||
"""
|
"""
|
||||||
if not SUPPORT_ETAB:
|
if not SUPPORT_ETAB:
|
||||||
@@ -280,6 +272,8 @@ index 45ec338..0ec3129 100644
|
|||||||
+ result = self.ldap_admin._search(ldap_filter, [attr])[0]
|
+ result = self.ldap_admin._search(ldap_filter, [attr])[0]
|
||||||
+ if _type == 'login':
|
+ if _type == 'login':
|
||||||
+ etab = [cn[1]['cn'][0] for cn in self.ldap_admin._search(f'(&(objectClass=eolegroupe)(type=Etablissement)(memberUid={name}))', ['cn'])]
|
+ 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:
|
+ else:
|
||||||
+ etab = [result[0].split(',ou=')[-3]]
|
+ etab = [result[0].split(',ou=')[-3]]
|
||||||
+ if not multi_etabs:
|
+ if not multi_etabs:
|
||||||
@@ -428,10 +422,34 @@ index 05569fd..f8b4ab3 100644
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
diff --git usr/lib/python3/dist-packages/scribe/importation/writer.py usr/lib/python3/dist-packages/scribe/importation/writer.py
|
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
|
||||||
+++ 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()
|
user : eoleuser.Enseignant()
|
||||||
login : uid de l'utilisateur dans ldap
|
login : uid de l'utilisateur dans ldap
|
||||||
administratif : personnel administratif avec un compte enseignant
|
administratif : personnel administratif avec un compte enseignant
|
||||||
@@ -441,13 +459,17 @@ index 34ce0fb..c61f65b 100644
|
|||||||
groups = []
|
groups = []
|
||||||
# attention : des administratifs peuvent avoir un compte enseignant
|
# attention : des administratifs peuvent avoir un compte enseignant
|
||||||
if isinstance(enseignant, Enseignant):
|
if isinstance(enseignant, Enseignant):
|
||||||
old_etab = user.get_etab(login)
|
- old_etab = user.get_etab(login)
|
||||||
- if old_etab != etab:
|
- if old_etab != etab:
|
||||||
- user._change_etab(login, old_etab, etab)
|
- user._change_etab(login, old_etab, etab)
|
||||||
+ if old_etab is None: # l’utilisateur à été retiré de son dernier établissement mais pas purgé
|
+ current_dn = user.get_user_dn(login)
|
||||||
+ user._inscription(login, etab)
|
+ new_dn = user.get_user_dn(login, force_etab=etab)
|
||||||
+ elif old_etab != etab:
|
+ if current_dn != new_dn:
|
||||||
+ user._change_etab(login, etab)
|
+ 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():
|
for joint in enseignant.get_classes():
|
||||||
groups.append('profs-%s' % str(joint.classe.nom))
|
groups.append('profs-%s' % str(joint.classe.nom))
|
||||||
if joint.profprincipal:
|
if joint.profprincipal:
|
||||||
@@ -458,7 +480,7 @@ index 34ce0fb..c61f65b 100644
|
|||||||
groups.append('profs-%s' % str(option.nom))
|
groups.append('profs-%s' % str(option.nom))
|
||||||
disciplines = eval(enseignant.disciplines)
|
disciplines = eval(enseignant.disciplines)
|
||||||
else:
|
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)
|
log.write_header(config.ENS_HEADER, config.ENS_INFO)
|
||||||
user = LdapEnseignant()
|
user = LdapEnseignant()
|
||||||
user.ldap_admin = connexion
|
user.ldap_admin = connexion
|
||||||
@@ -480,7 +502,7 @@ index 34ce0fb..c61f65b 100644
|
|||||||
else:
|
else:
|
||||||
login = _enseignant_exists(enseignant, user)
|
login = _enseignant_exists(enseignant, user)
|
||||||
if login != '':
|
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) == '':
|
if str(enseignant.nom) == '' or str(enseignant.prenom) == '':
|
||||||
log.infolog("Enseignant n°%s invalide" % str(enseignant.int_id))
|
log.infolog("Enseignant n°%s invalide" % str(enseignant.int_id))
|
||||||
continue
|
continue
|
||||||
|
Reference in New Issue
Block a user