def main(): # Håndter upper- og lowercasing av strenger som inneholder norske # tegn. locale.setlocale(locale.LC_CTYPE, ('en_US', 'iso88591')) init_globals() fxml.start_xml_head() # Finn `account_id` -> account-data for alle brukere. acc2names = load_acc2name() # Spytt ut PERSON-elementene. for user in acc2names.itervalues(): fxml.user_to_XML(user['NAME'], # Som påpekt av HiA i en e-post til cerebrum-hia # (<messsage-id:[email protected]), skal # vi bruke STATUS_ADD (autentiseringsrutinene har # endret seg og nå *skal* man levere dumpen med # recstatus=1). fronter_lib.Fronter.STATUS_ADD, user) # Registrer en del semi-statiske strukturnoder. root_node_id = "STRUCTURE:ClassFronter structure root node" register_group('Universitetet i Agder', root_node_id, root_node_id) manuell_node_id = 'STRUCTURE:%s:manuell' % \ cereconf.INSTITUTION_DOMAIN_NAME_LMS register_group('Manuell', manuell_node_id, root_node_id, allow_room=True) auto_node_id = "STRUCTURE:%s:automatisk" % \ cereconf.INSTITUTION_DOMAIN_NAME_LMS register_group("Automatisk", auto_node_id, root_node_id) emner_id = 'STRUCTURE:%s:fs:emner' % cereconf.INSTITUTION_DOMAIN_NAME_LMS register_group('Emner', emner_id, auto_node_id) this_sem, next_sem = get_semester() emner_this_sem_id = emner_id + ':%s:%s' % tuple(this_sem) emner_next_sem_id = emner_id + ':%s:%s' % tuple(next_sem) register_group('Emner %s %s' % (this_sem[1].upper(), this_sem[0]), emner_this_sem_id, emner_id) register_group('Emner %s %s' % (next_sem[1].upper(), next_sem[0]), emner_next_sem_id, emner_id) emnerom_this_sem_id = emner_this_sem_id + ':emnerom' emnerom_next_sem_id = emner_next_sem_id + ':emnerom' register_group('Emnerom %s %s' % (this_sem[1].upper(), this_sem[0]), emnerom_this_sem_id, emner_this_sem_id) register_group('Emnerom %s %s' % (next_sem[1].upper(), next_sem[0]), emnerom_next_sem_id, emner_next_sem_id) for sem, sem_node_id in ((this_sem, emner_this_sem_id), (next_sem, emner_next_sem_id)): for suffix, title in ( ('student', 'Studenter %s %s' % (sem[1].upper(), sem[0])), ('foreleser', 'Forelesere %s %s' % (sem[1].upper(), sem[0])), ('studieleder', 'Studieledere %s %s' % (sem[1].upper(), sem[0]))): node_id = sem_node_id + ':' + suffix register_group(title, node_id, sem_node_id) brukere_id= 'STRUCTURE:%s:fs:brukere' % cereconf.INSTITUTION_DOMAIN_NAME_LMS register_group('Brukere', brukere_id, auto_node_id) fellesrom_id = 'STRUCTURE:%s:fs:fellesrom' % \ cereconf.INSTITUTION_DOMAIN_NAME_LMS register_group('Fellesrom', fellesrom_id, auto_node_id) # Registrer statiske EVU-strukturnoder. # Ting blir litt enklere, hvis vi drar med oss institusjonsnummeret evu_node_id = 'STRUCTURE:%s:fs:%s:evu' % (cereconf.INSTITUTION_DOMAIN_NAME_LMS, cereconf.DEFAULT_INSTITUSJONSNR) register_group('EVU', evu_node_id, auto_node_id) for (suffix, title, allow_room) in (("kursrom", "EVU kursrom", True), ("kursdeltaker", "EVU kursdeltaker", False), ("foreleser", "EVU foreleser", False)): node_id = evu_node_id + ":" + suffix register_group(title, node_id, evu_node_id, allow_room) # od # Populer dicter for "emnekode -> emnenavn", "fakultet -> # [emnekode ...]" og "<evukurs> -> evukursnavn". emne_info = {} fakulteter = [] def finn_emne_info(element, attrs): if element != 'undenhet': return emnekode = attrs['emnekode'].lower() faknr = int(attrs['faknr_kontroll']) emne_info[emnekode] = {'navn': attrs['emnenavn_bokmal'], 'fak': faknr} if faknr not in fakulteter: fakulteter.append(faknr) access_FS.underv_enhet_xml_parser(os.path.join(fs_dir, 'underv_enhet.xml'), finn_emne_info) stprog_info = {} def finn_stprog_info(element, attrs): if element != 'studprog': return stprog = attrs['studieprogramkode'].lower() faknr = int(attrs['faknr_studieansv']) stprog_info[stprog] = {'fak': faknr} if faknr not in fakulteter: fakulteter.append(faknr) access_FS.studieprog_xml_parser(os.path.join(fs_dir, 'studieprog.xml'), finn_stprog_info) evukurs_info = {} def finn_evukurs_info(element, attrs): if element != "evukurs": return name = "%s (%s)" % (attrs.get("etterutdkursnavnkort", ""), ", ".join(filter(None, (attrs.get("etterutdkurskode"), attrs.get("kurstidsangivelsekode"), attrs.get("emnekode"))))) eukk, ktak = (attrs["etterutdkurskode"].lower(), attrs["kurstidsangivelsekode"].lower()) evukurs_info[eukk, ktak] = name # end finn_evukurs_info access_FS.evukurs_xml_parser(os.path.join(fs_dir, 'evu_kursinfo.xml'), finn_evukurs_info) # Henter ut ansatte per fakultet ans_dict = get_ans_fak(fakulteter, acc2names) # Opprett de forskjellige stedkode-korridorene. ou = Stedkode.Stedkode(db) for faknr in fakulteter: fak_sko = "%02d0000" % faknr ou.clear() try: ou.find_stedkode(faknr, 0, 0, institusjon = cereconf.DEFAULT_INSTITUSJONSNR) except Errors.NotFoundError: logger.error("Finner ikke stedkode for fakultet %d", faknr) faknavn = '*Ikke registrert som fakultet i FS*' else: acronym = ou.get_name_with_language(name_variant=const.ou_name_acronym, name_language=const.language_nb, default="") short_name = ou.get_name_with_language(name_variant=const.ou_name_short, name_language=const.language_nb, default="") if acronym: faknavn = acronym else: faknavn = short_name fak_ans_id = "%s:sap:gruppe:%s:%s:ansatte" % \ (cereconf.INSTITUTION_DOMAIN_NAME_LMS, cereconf.DEFAULT_INSTITUSJONSNR, fak_sko) ans_title = "Ansatte ved %s" % faknavn register_group(ans_title, fak_ans_id, brukere_id, allow_contact=True) ans_memb = ans_dict[int(faknr)] register_members(fak_ans_id, ans_memb, const.entity_account) for id_prefix, parent_id in ((emner_this_sem_id, emnerom_this_sem_id), (emner_next_sem_id, emnerom_next_sem_id)): fak_node_id = id_prefix + \ ":%s:%s" % (cereconf.DEFAULT_INSTITUSJONSNR, fak_sko) register_group(faknavn, fak_node_id, parent_id, allow_room=True) brukere_sted_id = brukere_id + \ ":%s:%s" % (cereconf.DEFAULT_INSTITUSJONSNR, fak_sko) register_group(faknavn, brukere_sted_id, brukere_id) brukere_studenter_id = brukere_sted_id + ':student' register_group('Studenter ved %s' % faknavn, brukere_studenter_id, brukere_sted_id) fellesrom_sted_id = fellesrom_id + ":%s:%s" % ( cereconf.DEFAULT_INSTITUSJONSNR, fak_sko) register_group(faknavn, fellesrom_sted_id, fellesrom_id, allow_room=True) register_spread_groups(emne_info, stprog_info, evukurs_info) output_group_xml() for room, data in new_rooms.iteritems(): fxml.room_to_XML(data['CFid'], fronter_lib.Fronter.STATUS_ADD, data) for node, data in new_acl.iteritems(): fxml.acl_to_XML(node, fronter_lib.Fronter.STATUS_ADD, data) for gname, members in new_groupmembers.iteritems(): person_members = members.get(int(const.entity_account), ()) group_members = members.get(int(const.entity_group), ()) fxml.personmembers_to_XML(gname, fronter_lib.Fronter.STATUS_ADD, person_members) if group_members: # IVR 2008-01-29 Just to be sure... assert gname.split(':')[-1] == "student" fxml.groupmembers_to_XML(gname, fronter_lib.Fronter.STATUS_ADD, group_members) fxml.end()
def main(): init_globals() # Opprett objekt for "internal:hia.no:fs:{supergroup}" fs_super = fs_supergroup() # Gå igjennom alle kjente undervisningsenheter; opprett # gruppe-objekter for disse. # # La fs-supergruppe-objektet ta seg av all logikk rundt hvor mange # nivåer gruppestrukturen skal ha for undervisningsenhet-grupper, # etc. def create_UE_helper(el_name, attrs): if el_name == 'undenhet': fs_super.add('undenh', attrs) logger.info("Leser XML-fil: underv_enhet.xml") access_FS.underv_enhet_xml_parser( os.path.join(dump_dir, 'underv_enhet.xml'), create_UE_helper) # Gå igjennom alle kjente EVU-kurs; opprett gruppeobjekter for disse. def create_evukurs_helper(el_name, attrs): if (el_name == "evukurs" and attrs.get("status_aktiv") == 'J' and attrs.get("status_nettbasert_und") == 'J'): if (immediate_evu_expire and mx.DateTime.strptime(attrs.get("dato_til"), "%Y-%m-%d") < mx.DateTime.now()): logger.debug("Kurs %s-%s ekspirerte", attrs["etterutdkurskode"], attrs["kurstidsangivelsekode"]) else: fs_super.add("evu", attrs) # fi # fi # end create_evukurs_helper xmlfile = "evu_kursinfo.xml" logger.info("Leser XML-fil: %s", xmlfile) access_FS.evukurs_xml_parser(os.path.join(dump_dir, xmlfile), create_evukurs_helper) logger.info("Ferdig med %s", xmlfile) # Meld studenter inn i undervisningsenhet-gruppene def student_UE_helper(el_name, attrs): if el_name == 'student': for undenh in fs_super.list_matches_1('undenh', attrs, 'student'): undenh.add(attrs) logger.info("Leser XML-fil: student_undenh.xml") access_FS.student_undenh_xml_parser( os.path.join(dump_dir, 'student_undenh.xml'), student_UE_helper) # Meld EVU-kursdeltakere i de respektive EVU-kursgruppene. def EVU_deltaker_helper(el_name, attrs): if el_name == "person" and len(attrs.get("evu")) > 0: # Dette blir ikke fult så pent -- i merged_persons plasserer man # informasjonen om EVU-tilknytning i form av underelementer av # <person>. Dermed må ethvert EVU-underelement (de er samlet i en # liste av dict'er under nøkkelen "evu" under) "suppleres" med # fdato/pnr på eieren til det EVU-underelementet. tmp = { "fodselsdato" : attrs["fodselsdato"], "personnr" : attrs["personnr"], } for evuattrs in attrs["evu"]: evuattrs.update(tmp) for evukurs in fs_super.list_matches_1("evu", evuattrs, "kursdeltaker"): evukurs.add(evuattrs) # od # od # fi # end create_EVU_participant_helper xmlfile = "merged_persons.xml" logger.info("Leser XML-fil: %s", xmlfile) access_FS.deltaker_xml_parser(os.path.join(dump_dir, xmlfile), EVU_deltaker_helper) logger.info("Ferdig med %s", xmlfile) # Gå igjennom alle kjente studieprogrammer; opprett gruppeobjekter # for disse. def create_studieprog_helper(el_name, attrs): if el_name == 'studprog' and attrs.get('status_utgatt') != 'J': fs_super.add('studieprogram', attrs) logger.info("Leser XML-fil: studieprog.xml") access_FS.studieprog_xml_parser( os.path.join(dump_dir, 'studieprog.xml'), create_studieprog_helper) # Meld forelesere og studieledere inn i passende # undervisningsenhet/EVU-kurs -gruppene def rolle_helper(el_name, attrs): if el_name != 'rolle': return rolle = attrs['rollekode'] target = attrs[access_FS.roles_xml_parser.target_key] if len(target) != 1: return target = target[0] if target in ('undenh', 'stprog'): if rolle == 'FORELESER': for ue_foreleser in fs_super.list_matches('undenh', attrs, 'foreleser'): ue_foreleser.add(attrs) elif rolle in ('STUDILEDER', 'STUDKOORD'): for ue_studieleder in fs_super.list_matches('undenh', attrs, 'studieleder'): ue_studieleder.add(attrs) for stpr_studieleder in fs_super.list_matches('studieprogram', attrs, 'studieleder'): stpr_studieleder.add(attrs) # fi elif target in ('evu',): if rolle == 'FORELESER': # Kan ett element tilhøre flere evukurs? for evu_foreleser in fs_super.list_matches('evu', attrs, "foreleser"): evu_foreleser.add(attrs) # od # fi # fi # end rolle_helper xmlfile = "roles.xml" logger.info("Leser XML-fil: %s", xmlfile) access_FS.roles_xml_parser(os.path.join(dump_dir, xmlfile), rolle_helper) logger.info("Ferdig med %s", xmlfile) # Finn alle studenter def student_studieprog_helper(el_name, attrs): if el_name == 'aktiv': for stpr in fs_super.list_matches_1('studieprogram', attrs, 'student'): stpr.add(attrs) logger.info("Leser XML-fil: person.xml") access_FS.person_xml_parser( os.path.join(dump_dir, 'person.xml'), student_studieprog_helper) logger.info("Ferdig med XML-fil: person.xml") # Write back all changes to the database fs_super.sync() if dryrun: logger.info("rolling back all changes") db.rollback() else: logger.info("committing all changes") db.commit()
def main(): init_globals() # Opprett objekt for "internal:hia.no:fs:{supergroup}" fs_super = fs_supergroup() # Gå igjennom alle kjente undervisningsenheter; opprett # gruppe-objekter for disse. # # La fs-supergruppe-objektet ta seg av all logikk rundt hvor mange # nivåer gruppestrukturen skal ha for undervisningsenhet-grupper, # etc. def create_UE_helper(el_name, attrs): if el_name == 'undenhet': fs_super.add('undenh', attrs) logger.info("Leser XML-fil: underv_enhet.xml") access_FS.underv_enhet_xml_parser( os.path.join(dump_dir, 'underv_enhet.xml'), create_UE_helper) # Gå igjennom alle kjente EVU-kurs; opprett gruppeobjekter for disse. def create_evukurs_helper(el_name, attrs): if (el_name == "evukurs" and attrs.get("status_aktiv") == 'J' and attrs.get("status_nettbasert_und") == 'J'): if (immediate_evu_expire and mx.DateTime.strptime( attrs.get("dato_til"), "%Y-%m-%d") < mx.DateTime.now()): logger.debug("Kurs %s-%s ekspirerte", attrs["etterutdkurskode"], attrs["kurstidsangivelsekode"]) else: fs_super.add("evu", attrs) # fi # fi # end create_evukurs_helper xmlfile = "evu_kursinfo.xml" logger.info("Leser XML-fil: %s", xmlfile) access_FS.evukurs_xml_parser(os.path.join(dump_dir, xmlfile), create_evukurs_helper) logger.info("Ferdig med %s", xmlfile) # Meld studenter inn i undervisningsenhet-gruppene def student_UE_helper(el_name, attrs): if el_name == 'student': for undenh in fs_super.list_matches_1('undenh', attrs, 'student'): undenh.add(attrs) logger.info("Leser XML-fil: student_undenh.xml") access_FS.student_undenh_xml_parser( os.path.join(dump_dir, 'student_undenh.xml'), student_UE_helper) # Meld EVU-kursdeltakere i de respektive EVU-kursgruppene. def EVU_deltaker_helper(el_name, attrs): if el_name == "person" and len(attrs.get("evu")) > 0: # Dette blir ikke fult så pent -- i merged_persons plasserer man # informasjonen om EVU-tilknytning i form av underelementer av # <person>. Dermed må ethvert EVU-underelement (de er samlet i en # liste av dict'er under nøkkelen "evu" under) "suppleres" med # fdato/pnr på eieren til det EVU-underelementet. tmp = { "fodselsdato": attrs["fodselsdato"], "personnr": attrs["personnr"], } for evuattrs in attrs["evu"]: evuattrs.update(tmp) for evukurs in fs_super.list_matches_1("evu", evuattrs, "kursdeltaker"): evukurs.add(evuattrs) # od # od # fi # end create_EVU_participant_helper xmlfile = "merged_persons.xml" logger.info("Leser XML-fil: %s", xmlfile) access_FS.deltaker_xml_parser(os.path.join(dump_dir, xmlfile), EVU_deltaker_helper) logger.info("Ferdig med %s", xmlfile) # Gå igjennom alle kjente studieprogrammer; opprett gruppeobjekter # for disse. def create_studieprog_helper(el_name, attrs): if el_name == 'studprog' and attrs.get('status_utgatt') != 'J': fs_super.add('studieprogram', attrs) logger.info("Leser XML-fil: studieprog.xml") access_FS.studieprog_xml_parser(os.path.join(dump_dir, 'studieprog.xml'), create_studieprog_helper) # Meld forelesere og studieledere inn i passende # undervisningsenhet/EVU-kurs -gruppene def rolle_helper(el_name, attrs): if el_name != 'rolle': return rolle = attrs['rollekode'] target = attrs[access_FS.roles_xml_parser.target_key] if len(target) != 1: return target = target[0] if target in ('undenh', 'stprog'): if rolle == 'FORELESER': for ue_foreleser in fs_super.list_matches( 'undenh', attrs, 'foreleser'): ue_foreleser.add(attrs) elif rolle in ('STUDILEDER', 'STUDKOORD'): for ue_studieleder in fs_super.list_matches( 'undenh', attrs, 'studieleder'): ue_studieleder.add(attrs) for stpr_studieleder in fs_super.list_matches( 'studieprogram', attrs, 'studieleder'): stpr_studieleder.add(attrs) # fi elif target in ('evu', ): if rolle == 'FORELESER': # Kan ett element tilhøre flere evukurs? for evu_foreleser in fs_super.list_matches( 'evu', attrs, "foreleser"): evu_foreleser.add(attrs) # od # fi # fi # end rolle_helper xmlfile = "roles.xml" logger.info("Leser XML-fil: %s", xmlfile) access_FS.roles_xml_parser(os.path.join(dump_dir, xmlfile), rolle_helper) logger.info("Ferdig med %s", xmlfile) # Finn alle studenter def student_studieprog_helper(el_name, attrs): if el_name == 'aktiv': for stpr in fs_super.list_matches_1('studieprogram', attrs, 'student'): stpr.add(attrs) logger.info("Leser XML-fil: person.xml") access_FS.person_xml_parser(os.path.join(dump_dir, 'person.xml'), student_studieprog_helper) logger.info("Ferdig med XML-fil: person.xml") # Write back all changes to the database fs_super.sync() if dryrun: logger.info("rolling back all changes") db.rollback() else: logger.info("committing all changes") db.commit()
def main(): # Håndter upper- og lowercasing av strenger som inneholder norske # tegn. locale.setlocale(locale.LC_CTYPE, ('en_US', 'iso88591')) init_globals() fxml.start_xml_head() # Finn `account_id` -> account-data for alle brukere. acc2names = load_acc2name() # Spytt ut PERSON-elementene. for user in acc2names.itervalues(): fxml.user_to_XML( user['NAME'], # Som påpekt av HiA i en e-post til cerebrum-hia # (<messsage-id:[email protected]), skal # vi bruke STATUS_ADD (autentiseringsrutinene har # endret seg og nå *skal* man levere dumpen med # recstatus=1). fronter_lib.Fronter.STATUS_ADD, user) # Registrer en del semi-statiske strukturnoder. root_node_id = "STRUCTURE:ClassFronter structure root node" register_group('Universitetet i Agder', root_node_id, root_node_id) manuell_node_id = 'STRUCTURE:%s:manuell' % \ cereconf.INSTITUTION_DOMAIN_NAME_LMS register_group('Manuell', manuell_node_id, root_node_id, allow_room=True) auto_node_id = "STRUCTURE:%s:automatisk" % \ cereconf.INSTITUTION_DOMAIN_NAME_LMS register_group("Automatisk", auto_node_id, root_node_id) emner_id = 'STRUCTURE:%s:fs:emner' % cereconf.INSTITUTION_DOMAIN_NAME_LMS register_group('Emner', emner_id, auto_node_id) this_sem, next_sem = get_semester() emner_this_sem_id = emner_id + ':%s:%s' % tuple(this_sem) emner_next_sem_id = emner_id + ':%s:%s' % tuple(next_sem) register_group('Emner %s %s' % (this_sem[1].upper(), this_sem[0]), emner_this_sem_id, emner_id) register_group('Emner %s %s' % (next_sem[1].upper(), next_sem[0]), emner_next_sem_id, emner_id) emnerom_this_sem_id = emner_this_sem_id + ':emnerom' emnerom_next_sem_id = emner_next_sem_id + ':emnerom' register_group('Emnerom %s %s' % (this_sem[1].upper(), this_sem[0]), emnerom_this_sem_id, emner_this_sem_id) register_group('Emnerom %s %s' % (next_sem[1].upper(), next_sem[0]), emnerom_next_sem_id, emner_next_sem_id) for sem, sem_node_id in ((this_sem, emner_this_sem_id), (next_sem, emner_next_sem_id)): for suffix, title in (('student', 'Studenter %s %s' % (sem[1].upper(), sem[0])), ('foreleser', 'Forelesere %s %s' % (sem[1].upper(), sem[0])), ('studieleder', 'Studieledere %s %s' % (sem[1].upper(), sem[0]))): node_id = sem_node_id + ':' + suffix register_group(title, node_id, sem_node_id) brukere_id = 'STRUCTURE:%s:fs:brukere' % cereconf.INSTITUTION_DOMAIN_NAME_LMS register_group('Brukere', brukere_id, auto_node_id) fellesrom_id = 'STRUCTURE:%s:fs:fellesrom' % \ cereconf.INSTITUTION_DOMAIN_NAME_LMS register_group('Fellesrom', fellesrom_id, auto_node_id) # Registrer statiske EVU-strukturnoder. # Ting blir litt enklere, hvis vi drar med oss institusjonsnummeret evu_node_id = 'STRUCTURE:%s:fs:%s:evu' % ( cereconf.INSTITUTION_DOMAIN_NAME_LMS, cereconf.DEFAULT_INSTITUSJONSNR) register_group('EVU', evu_node_id, auto_node_id) for (suffix, title, allow_room) in (("kursrom", "EVU kursrom", True), ("kursdeltaker", "EVU kursdeltaker", False), ("foreleser", "EVU foreleser", False)): node_id = evu_node_id + ":" + suffix register_group(title, node_id, evu_node_id, allow_room) # od # Populer dicter for "emnekode -> emnenavn", "fakultet -> # [emnekode ...]" og "<evukurs> -> evukursnavn". emne_info = {} fakulteter = [] def finn_emne_info(element, attrs): if element != 'undenhet': return emnekode = attrs['emnekode'].lower() faknr = int(attrs['faknr_kontroll']) emne_info[emnekode] = {'navn': attrs['emnenavn_bokmal'], 'fak': faknr} if faknr not in fakulteter: fakulteter.append(faknr) access_FS.underv_enhet_xml_parser(os.path.join(fs_dir, 'underv_enhet.xml'), finn_emne_info) stprog_info = {} def finn_stprog_info(element, attrs): if element != 'studprog': return stprog = attrs['studieprogramkode'].lower() faknr = int(attrs['faknr_studieansv']) stprog_info[stprog] = {'fak': faknr} if faknr not in fakulteter: fakulteter.append(faknr) access_FS.studieprog_xml_parser(os.path.join(fs_dir, 'studieprog.xml'), finn_stprog_info) evukurs_info = {} def finn_evukurs_info(element, attrs): if element != "evukurs": return name = "%s (%s)" % (attrs.get("etterutdkursnavnkort", ""), ", ".join( filter( None, (attrs.get("etterutdkurskode"), attrs.get("kurstidsangivelsekode"), attrs.get("emnekode"))))) eukk, ktak = (attrs["etterutdkurskode"].lower(), attrs["kurstidsangivelsekode"].lower()) evukurs_info[eukk, ktak] = name # end finn_evukurs_info access_FS.evukurs_xml_parser(os.path.join(fs_dir, 'evu_kursinfo.xml'), finn_evukurs_info) # Henter ut ansatte per fakultet ans_dict = get_ans_fak(fakulteter, acc2names) # Opprett de forskjellige stedkode-korridorene. ou = Stedkode.Stedkode(db) for faknr in fakulteter: fak_sko = "%02d0000" % faknr ou.clear() try: ou.find_stedkode(faknr, 0, 0, institusjon=cereconf.DEFAULT_INSTITUSJONSNR) except Errors.NotFoundError: logger.error("Finner ikke stedkode for fakultet %d", faknr) faknavn = '*Ikke registrert som fakultet i FS*' else: acronym = ou.get_name_with_language( name_variant=const.ou_name_acronym, name_language=const.language_nb, default="") short_name = ou.get_name_with_language( name_variant=const.ou_name_short, name_language=const.language_nb, default="") if acronym: faknavn = acronym else: faknavn = short_name fak_ans_id = "%s:sap:gruppe:%s:%s:ansatte" % \ (cereconf.INSTITUTION_DOMAIN_NAME_LMS, cereconf.DEFAULT_INSTITUSJONSNR, fak_sko) ans_title = "Ansatte ved %s" % faknavn register_group(ans_title, fak_ans_id, brukere_id, allow_contact=True) ans_memb = ans_dict[int(faknr)] register_members(fak_ans_id, ans_memb, const.entity_account) for id_prefix, parent_id in ((emner_this_sem_id, emnerom_this_sem_id), (emner_next_sem_id, emnerom_next_sem_id)): fak_node_id = id_prefix + \ ":%s:%s" % (cereconf.DEFAULT_INSTITUSJONSNR, fak_sko) register_group(faknavn, fak_node_id, parent_id, allow_room=True) brukere_sted_id = brukere_id + \ ":%s:%s" % (cereconf.DEFAULT_INSTITUSJONSNR, fak_sko) register_group(faknavn, brukere_sted_id, brukere_id) brukere_studenter_id = brukere_sted_id + ':student' register_group('Studenter ved %s' % faknavn, brukere_studenter_id, brukere_sted_id) fellesrom_sted_id = fellesrom_id + ":%s:%s" % ( cereconf.DEFAULT_INSTITUSJONSNR, fak_sko) register_group(faknavn, fellesrom_sted_id, fellesrom_id, allow_room=True) register_spread_groups(emne_info, stprog_info, evukurs_info) output_group_xml() for room, data in new_rooms.iteritems(): fxml.room_to_XML(data['CFid'], fronter_lib.Fronter.STATUS_ADD, data) for node, data in new_acl.iteritems(): fxml.acl_to_XML(node, fronter_lib.Fronter.STATUS_ADD, data) for gname, members in new_groupmembers.iteritems(): person_members = members.get(int(const.entity_account), ()) group_members = members.get(int(const.entity_group), ()) fxml.personmembers_to_XML(gname, fronter_lib.Fronter.STATUS_ADD, person_members) if group_members: # IVR 2008-01-29 Just to be sure... assert gname.split(':')[-1] == "student" fxml.groupmembers_to_XML(gname, fronter_lib.Fronter.STATUS_ADD, group_members) fxml.end()