## Script (Python) "fix_session" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## # $Id: fix_session_in_course_results.py 5695 2011-02-01 07:12:14Z henrik $ """ """ try: from Products.zdb import set_trace except: def set_trace(): pass mtool = context.portal_membership member = mtool.getAuthenticatedMember() if str(member) not in ('admin',): return import logging import DateTime logger = logging.getLogger('fix_session_in_course_results') from Products.AdvancedQuery import Eq, Between, Le,In course_results = context.course_results students = context.portal_url.getPortalObject().campus.students brains = course_results() total = len(brains) edited = 0 for brain in brains: if not students.hasObject(brain.student_id): logger.info("no student %s" % student_id) continue student = getattr(students, brain.student_id) if not student.hasObject("study_course"): logger.info("%s: no study_course" % brain.student_id) continue study_course = student.study_course if not study_course.hasObject(brain.level_id): logger.info("%s: no level %s" % (brain.student_id,brain.level_id)) continue level_obj = getattr(study_course, brain.level_id) level_doc = level_obj.getContent() session_id = level_doc.session if len(session_id) == 9: session_id = session_id[2:4] elif len(session_id) != 2: #logger.info("invalid session %s in level %s for student %s" % # (session_id,brain.level_id,brain.student_id)) continue if brain.session_id != session_id: data = {} old_session_id = brain.session_id data['key'] = brain.key data['session_id'] = session_id course_results.modifyRecord(**data) logger.info("%s: %s overwritten with %s" % (brain.key,old_session_id,session_id)) edited += 1 logger.info("edited %d course results of %s total" % (edited,total))