Traiter le cas d’un ajout après suppression sans purge
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..19ba7a1 100644
|
index 69f3411..5e1c1cf 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..19ba7a1 100644
|
|||||||
"""
|
"""
|
||||||
_type = 'personnels'
|
_type = 'personnels'
|
||||||
profil = 'enseignant'
|
profil = 'enseignant'
|
||||||
@@ -145,44 +145,40 @@ class Enseignant(User):
|
@@ -145,44 +145,41 @@ 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,17 +142,25 @@ index 69f3411..19ba7a1 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:
|
||||||
|
+ #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
|
#inscription dans le groupe du nouvel etablissement
|
||||||
self._inscription(user, new_etab, sync=False, etab=num_etab)
|
self._inscription(user, new_etab, sync=False, etab=num_etab)
|
||||||
self._inscription(user, 'profs-' + new_etab, sync=False, etab=new_etab)
|
self._inscription(user, 'profs-' + new_etab, sync=False, etab=new_etab)
|
||||||
@@ -175,7 +183,7 @@ index 69f3411..19ba7a1 100644
|
|||||||
if not_empty(args, 'int_id'):
|
if not_empty(args, 'int_id'):
|
||||||
datas.append((MOD_REPLACE, 'intid', args['int_id'] ))
|
datas.append((MOD_REPLACE, 'intid', args['int_id'] ))
|
||||||
if not_empty(args, 'entpersonjointure'):
|
if not_empty(args, 'entpersonjointure'):
|
||||||
@@ -196,21 +192,21 @@ class Enseignant(User):
|
@@ -196,21 +193,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']))
|
||||||
@@ -297,10 +305,10 @@ index 45ec338..0ec3129 100644
|
|||||||
else:
|
else:
|
||||||
raise Exception('Unknown mode')
|
raise Exception('Unknown mode')
|
||||||
diff --git usr/lib/python3/dist-packages/scribe/eoleuser.py usr/lib/python3/dist-packages/scribe/eoleuser.py
|
diff --git usr/lib/python3/dist-packages/scribe/eoleuser.py usr/lib/python3/dist-packages/scribe/eoleuser.py
|
||||||
index 05569fd..102044a 100644
|
index 05569fd..b78c2e1 100644
|
||||||
--- usr/lib/python3/dist-packages/scribe/eoleuser.py
|
--- usr/lib/python3/dist-packages/scribe/eoleuser.py
|
||||||
+++ usr/lib/python3/dist-packages/scribe/eoleuser.py
|
+++ usr/lib/python3/dist-packages/scribe/eoleuser.py
|
||||||
@@ -361,23 +361,25 @@ class User(LdapEntry):
|
@@ -361,25 +361,27 @@ class User(LdapEntry):
|
||||||
def _inscription(self, login, groupe, sync=True, etab=None, check_etab=True, touch=True):
|
def _inscription(self, login, groupe, sync=True, etab=None, check_etab=True, touch=True):
|
||||||
"""
|
"""
|
||||||
Inscription d'un utilisateur à un groupe
|
Inscription d'un utilisateur à un groupe
|
||||||
@@ -318,7 +326,8 @@ index 05569fd..102044a 100644
|
|||||||
+ if not isinstance(etab, list):
|
+ if not isinstance(etab, list):
|
||||||
+ etab = [etab]
|
+ etab = [etab]
|
||||||
etabuser = etab
|
etabuser = etab
|
||||||
if etabgroup != etabuser:
|
- if etabgroup != etabuser:
|
||||||
|
+ if etabgroup not in etabuser:
|
||||||
raise Exception("L'utilisateur {0} ne fait pas partie du même établissement que le groupe {1} : {2} - {3}".format(login, groupe, etabuser, etabgroup))
|
raise Exception("L'utilisateur {0} ne fait pas partie du même établissement que le groupe {1} : {2} - {3}".format(login, groupe, etabuser, etabgroup))
|
||||||
if not self.has_ftp:
|
if not self.has_ftp:
|
||||||
return True
|
return True
|
||||||
@@ -327,6 +336,8 @@ index 05569fd..102044a 100644
|
|||||||
gtype = grp.c_get_group_type(groupe)
|
gtype = grp.c_get_group_type(groupe)
|
||||||
if self.profil != 'eleve' and gtype in ['Classe', 'Niveau', 'Option']:
|
if self.profil != 'eleve' and gtype in ['Classe', 'Niveau', 'Option']:
|
||||||
# groupes réservés élèves
|
# groupes réservés élèves
|
||||||
|
return True
|
||||||
|
if self.profil not in ['enseignant', 'administratif'] and gtype in ['Matiere', 'Equipe']:
|
||||||
@@ -410,20 +412,32 @@ class User(LdapEntry):
|
@@ -410,20 +412,32 @@ class User(LdapEntry):
|
||||||
grp = Group()
|
grp = Group()
|
||||||
grp.ldap_admin = self.ldap_admin
|
grp.ldap_admin = self.ldap_admin
|
||||||
@@ -390,11 +401,40 @@ index 05569fd..102044a 100644
|
|||||||
self._set_attr(login, 'LastUpdate', tool.format_current_date())
|
self._set_attr(login, 'LastUpdate', tool.format_current_date())
|
||||||
|
|
||||||
def _get_ead_type(self, login):
|
def _get_ead_type(self, login):
|
||||||
|
@@ -850,20 +864,27 @@ class User(LdapEntry):
|
||||||
|
return num_etab
|
||||||
|
|
||||||
|
def get_user_dn(self, login, force_etab=None):
|
||||||
|
if LDAP_MODE == 'ad':
|
||||||
|
if self.ldap_admin.connexion is None:
|
||||||
|
self.ldap_admin.connect()
|
||||||
|
data = self.ldap_admin.connexion.search_s(SUFFIX, SCOPE_SUBTREE,
|
||||||
|
"(&%s(uid=%s))" % (USER_FILTER, login), ['cn'])
|
||||||
|
if data[0][0]:
|
||||||
|
return data[0][0]
|
||||||
|
+ elif LDAP_MODE == 'openldap':
|
||||||
|
+ if self.ldap_admin.connexion is None:
|
||||||
|
+ self.ldap_admin.connect()
|
||||||
|
+ data = self.ldap_admin.connexion.search_s(SUFFIX, SCOPE_SUBTREE,
|
||||||
|
+ "(&%s(uid=%s))" % (USER_FILTER, login), ['cn'])
|
||||||
|
+ if data[0][0]:
|
||||||
|
+ return data[0][0]
|
||||||
|
if force_etab is None:
|
||||||
|
etab = self.get_etab(login)
|
||||||
|
else:
|
||||||
|
etab = force_etab
|
||||||
|
return USER_DN % dict(uid=login, _type=self._type, etab=etab)
|
||||||
|
|
||||||
|
class Machine(User):
|
||||||
|
"""
|
||||||
|
classe pour les comptes machine
|
||||||
|
"""
|
||||||
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..b1f1e31 100644
|
index 34ce0fb..c61f65b 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
|
||||||
@@ -836,21 +836,21 @@ def _maj_enseignant(enseignant, user, login, etab, administratif=False):
|
@@ -835,22 +835,24 @@ def _maj_enseignant(enseignant, user, login, etab, administratif=False):
|
||||||
|
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
|
||||||
"""
|
"""
|
||||||
@@ -404,8 +444,11 @@ index 34ce0fb..b1f1e31 100644
|
|||||||
# 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é
|
||||||
|
+ user._inscription(login, etab)
|
||||||
|
+ elif old_etab != etab:
|
||||||
+ user._change_etab(login, etab)
|
+ user._change_etab(login, 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))
|
||||||
@@ -417,7 +460,7 @@ index 34ce0fb..b1f1e31 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 +885,21 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL
|
@@ -885,20 +887,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
|
||||||
@@ -439,7 +482,7 @@ index 34ce0fb..b1f1e31 100644
|
|||||||
else:
|
else:
|
||||||
login = _enseignant_exists(enseignant, user)
|
login = _enseignant_exists(enseignant, user)
|
||||||
if login != '':
|
if login != '':
|
||||||
@@ -909,29 +910,31 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL
|
@@ -909,29 +912,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