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)