diff --git usr/share/ead2/backend/actions/scribe/usermodify.py usr/share/ead2/backend/actions/scribe/usermodify.py
index 073fe7ff..b3b845ad 100644
--- usr/share/ead2/backend/actions/scribe/usermodify.py
+++ usr/share/ead2/backend/actions/scribe/usermodify.py
@@ -161,26 +161,28 @@ class UserModify(Action):
shell = formencode.make_shellinput(datas)
if SUPPORT_ETAB:
etab = formencode.make_etabinput(self.user)
# administration de classe
if datas['typeadmin'][0] == '2':
prof_classes = Enseignant().get_attr(self.user, 'Divcod')
else:
prof_classes = []
if SUPPORT_ETAB:
- etab_user = eoleuser.User().get_etab(self.user)
+ etabs_user = eoleuser.User().get_etab(self.user, multi_etabs=True)
else:
- etab_user = None
+ etabs_user = [None]
ldapgroup = Group()
ldapgroup.ldap_admin.connect()
- all_classes = ldapgroup._get_classes(etab=etab_user)
+ all_classes = {}
+ for etab_user in etabs_user:
+ all_classes.update(ldapgroup._get_classes(etab=etab_user))
# classes affectées
_liste = {'title':'Classes à administrer', 'formid':'admin_class_form',
'id':'admin_class_table', 'datas':prof_classes}
_select = F.Select(name='admin_class_select',
libelle="Classes disponibles",
_id='admin_class_select',
multi=True, size=10)
@@ -198,21 +200,23 @@ class UserModify(Action):
'liste':_liste,
'title':"Administration de classes"}
user_all_groups = set(ldapgroup._get_user_groups(self.user))
# administration de groupes
if 'ManagedGroup' in datas:
_groups = datas['ManagedGroup']
else:
_groups = []
- all_groups = ldapgroup._get_groups('Groupe', etab=etab_user)
+ all_groups = []
+ for etab_user in etabs_user:
+ all_groups.extend(ldapgroup._get_groups('Groupe', etab=etab_user))
all_groups.sort()
_liste = {'title':"Groupes à administrer", 'formid':'managed_group_form',
'id':'managed_group_table', 'datas':_groups}
_select = F.Select(name='managed_group_select',
libelle="Groupes disponibles",
_id='managed_group_select',
multi=True, size=10)
for _gr in all_groups:
if _gr not in _groups:
_select.add_option(_gr)
@@ -232,38 +236,44 @@ class UserModify(Action):
'id':'groupe_table', 'datas':user_groups}
_select = F.Select(name='groupe_select', libelle="Groupes disponibles",
_id='groupe_select',
multi=True, size=10)
for _gr in available_groups:
_select.add_option(_gr)
groupe = {'name':"groupe", 'btns':formencode.get_transf_btns('groupe'),
'select':_select, 'liste':_liste, 'title':"Groupes"}
## attachement à une matière
- all_groups = set(ldapgroup._get_groups('Matiere', etab=etab_user))
+ all_groups = []
+ for etab_user in etabs_user:
+ all_groups.extend(ldapgroup._get_groups('Matiere', etab=etab_user))
+ all_groups = set(all_groups)
user_groups = scribe_tools.sort_list(all_groups.intersection(user_all_groups))
available_groups = scribe_tools.sort_list(all_groups.difference(user_all_groups))
_liste = {'title':"Matières de l'enseignant", 'formid':'matiere_form',
'id':'matiere_table', 'datas':user_groups}
_select = F.Select(name='matiere_select',
libelle="Matières disponibles",
_id='matiere_select',
multi=True, size=10)
for _mat in available_groups:
_select.add_option(_mat)
matiere = {'name':"matiere",
'btns':formencode.get_transf_btns('matiere'),
'select':_select, 'liste':_liste,
'title':"Matières dispensées"}
## attachement à une équipe pédagogique
- all_groups = set(ldapgroup._get_groups('Equipe', etab=etab_user))
+ all_groups = []
+ for etab_user in etabs_user:
+ all_groups.extend(ldapgroup._get_groups('Equipe', etab=etab_user))
+ all_groups = set(all_groups)
user_groups = scribe_tools.sort_list(all_groups.intersection(user_all_groups))
available_groups = scribe_tools.sort_list(all_groups.difference(user_all_groups))
_liste = {'title':"Equipes pédagogiques de l'enseignant",
'formid':'equipe_form',
'id':'equipe_table',
'datas':user_groups}
_select = F.Select(name='equipe_select', libelle="Equipes disponibles",
_id='equipe_select',
multi=True, size=10)
for _gr in available_groups:
@@ -329,25 +339,26 @@ class UserModify(Action):
jeSuisUnProf = 'professeurs' in user_all_groups
attrprof = formencode.make_attrprofinput(jeSuisUnProf)
if jeSuisUnProf:
# administration de classe
if datas['typeadmin'][0] == '2':
prof_classes = Enseignant().get_attr(self.user, 'Divcod')
else:
prof_classes = []
if SUPPORT_ETAB:
- etab_user = eoleuser.User().get_etab(self.user)
+ etabs_user = eoleuser.User().get_etab(self.user)
else:
- etab_user = None
-
- all_classes = ldapgroup._get_classes(etab=etab_user)
+ etabs_user = [None]
+ all_classes = {}
+ for etab_user in etabs_user:
+ all_classes.update(ldapgroup._get_classes(etab=etab_user))
# classes affectées
_liste = {'title':'Classes à administrer', 'formid':'admin_class_form',
'id':'admin_class_table', 'datas':prof_classes}
_select = F.Select(name='admin_class_select',
libelle="Classes disponibles",
_id='admin_class_select',
multi=True, size=10)
@@ -360,25 +371,28 @@ class UserModify(Action):
if _cl not in prof_classes:
_select.add_option(_cl, group=_level)
classadmin = {'name':'classadmin',
'btns':formencode.get_transf_btns('admin_class'),
'select':_select,
'liste':_liste,
'title':"Administration de classes"}
## attachement à une équipe pédagogique
if SUPPORT_ETAB:
- etab_user = eoleuser.User().get_etab(self.user)
+ etabs_user = eoleuser.User().get_etab(self.user)
else:
- etab_user = None
+ etabs_user = [None]
- all_groups = set(ldapgroup._get_groups('Equipe', etab=etab_user))
+ all_groups = []
+ for etab_user in etabs_user:
+ all_groups.extend(ldapgroup._get_groups('Equipe', etab=etab_user))
+ all_groups = set(all_groups)
user_groups = scribe_tools.sort_list(all_groups.intersection(user_all_groups))
available_groups = scribe_tools.sort_list(all_groups.difference(user_all_groups))
_liste = {'title':"Equipes pédagogiques de l'enseignant",
'formid':'equipe_form',
'id':'equipe_table',
'datas':user_groups}
_select = F.Select(name='equipe_select', libelle="Equipes disponibles",
_id='equipe_select',
multi=True, size=10)
for _gr in available_groups:
diff --git usr/share/ead2/backend/bin/importation.py usr/share/ead2/backend/bin/importation.py
index d18ad86d..306fe780 100755
--- usr/share/ead2/backend/bin/importation.py
+++ usr/share/ead2/backend/bin/importation.py
@@ -22,21 +22,22 @@ Ex :
2) importation.py --import -t maj enseignant
- Lance l'importation
"""
import getopt, sys
import json
import csv
from os.path import isfile
from scribe.eoleldap import Ldap
-from scribe.ldapconf import SUPPORT_ETAB
+from scribe.eoleuser import User
+from scribe.ldapconf import SUPPORT_ETAB, BRANCHE_ETAB, PROF_FILTER
from scribe.eoletools import nscd_start, nscd_stop
from scribe.storage import init_store
from scribe.parsing import sconet, aaf, be1d, scribecsv, scribecsv2
from scribe.importation import writer, config, log as importlog
from scribe.importation.config import CSV_PREFIX, WRITE_OPTS
if SUPPORT_ETAB:
from scribe.importation import preferences
sys.path.append('/usr/share')
from ead2.backend.actions.lib.importation.config import (PARSE_LOG_FILE,
@@ -456,20 +457,22 @@ class Importer(Logger):
importlog.debuglog("Arrêt de LSC...", title=True)
nscd_stop()
self.log_ok()
connexion = Ldap()
connexion.connect()
if SUPPORT_ETAB:
prefs = preferences.get_enseignants_prefs()
etab = prefs.get_default('etab')
etab_prefix = prefs.get_default('etab_prefix')
self.do_add_prefix_to_csv(etab,etab_prefix)
+ suffix=BRANCHE_ETAB % {'etab': etab}
+ old_logins = connexion._search('(&{})'.format(PROF_FILTER), 'uid', suffix=suffix)
else:
etab = None
etab_prefix = ''
if enseignants:
if self.import_type != 'maj':
self.log("Nettoyage des équipes pédagogiques
")
try:
writer.purge_equipes(connexion=connexion, etab=etab)
self.log_ok()
except Exception as error:
@@ -490,22 +493,30 @@ class Importer(Logger):
self.log_err(error=error)
try:
self.log("\nIntégration des options...
")
writer.verify_option(store=self.store, connexion=connexion,
etab_prefix=etab_prefix)
self.log_ok()
except Exception as error:
self.log_err(error=error)
try:
self.log("Intégration des enseignants...
")
- writer.write_enseignant(store=self.store, connexion=connexion,
+ logins = writer.write_enseignant(store=self.store, connexion=connexion,
etab=etab, current_ead_user=self.user)
+ if SUPPORT_ETAB and self.import_type == 'annu':
+ user = User()
+ user.has_ftp = True
+ user.ldap_admin = connexion
+ obsolete_logins = [login[1]['uid'][0] for login in old_logins if login[1]['uid'] not in logins]
+ for obsolete_login in obsolete_logins:
+ # eoleusers from dns and eoleuser._quit_etab
+ user._quit_etab(obsolete_login, etab=etab)
self.log_ok()
except Exception as error:
self.log_err(error=error)
try:
self.log("Intégration des services administratifs...
")
writer.write_service(store=self.store, connexion=connexion,
etab=etab, etab_prefix=etab_prefix)
self.log_ok()
except Exception as error:
self.log_err(error=error)