## Script (Python) "lecturer_course_edit"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=REQUEST, cpsdocument_edit_button=None, cpsdocument_edit_and_view_button=None, action=None
##title=
# $Id: course_edit.py 1071 2006-12-16 15:53:13Z joachim $
"""
"""
try:
    from Products.zdb import set_trace
except:
    def set_trace():
        pass
from urllib import urlencode
from Products.CPSDocument.utils import getFormUidUrlArg
from Products.AdvancedQuery import Eq, Between, Le,In
import DateTime
current = DateTime.DateTime()
import logging
logger = logging.getLogger('Skins.lecturer_course_edit')
wf = context.portal_workflow
request = REQUEST
edit = "edit" in request.form.keys()
mtool = context.portal_membership
member = mtool.getAuthenticatedMember()
groups = member.getGroups()

member_id = str(member)
requested_id = context.getStudentId()
if not 'Lecturers' in groups and not context.isSectionOfficer():
    logger.info('%s tried to access course result record of %s but is not a lecturer' % (member_id,requested_id))
    return REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())

student_id = requested_id
student_record = context.students_catalog.getRecordByKey(student_id)
if student_record.review_state != 'courses_validated':
    logger.info('%s tried to access non-validated course result record of %s' % (member_id,requested_id))
    return 'Subject/course lists must be validated before editing results!'


level_id = context.getId()
course_id = traverse_subpath[0]
query = Eq('student_id',student_id) &\
        Eq('level_id', level_id) &\
        Eq('code', course_id)

course_results = context.course_results.evalAdvancedQuery(query)
mode = 'edit'
object = {}
course_result = course_results[0]
course = context.courses_catalog(code=course_id)[0]
lecturer_id = getattr(course,'lecturer',None)
#set_trace()
if  member_id not in str(lecturer_id) and not context.isSectionOfficer():
    logger.info('%s tried to access course result record %s of %s but is not a lecturer of this course' % (member_id,course_id,requested_id))
    return REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())

for field in context.course_results.schema():
    object[field] = getattr(course_result,field,None)
    if repr(object[field]) == 'Missing.Value':
        object[field] = None
     
lt = context.portal_layouts
res,psm, ds = lt.renderLayout(schema_id = 'student_course_result',
                               layout_id = 'student_course_result',
                               layout_mode = mode,
                               context=context,
                               mapping=edit and REQUEST,
                               ob=object,
                               commit = False)

while True:
    if psm == 'invalid':
        psm = "Please correct your input"
        break
    elif psm == '':
        break
    if edit:
        data = {}
        dm = ds.getDataModel()
        for field in context.course_results.schema():
            if dm.has_key("%s" % field):
                data[field] = dm.get(field)
        data['key'] = object['key']
        context.course_results.modifyRecord(**data)
        logger.info('%s edited course result %s of %s' % (member_id,course_id,student_id))
        psm = 'psm_content_changed'
        break
return context.lecturer_course_edit_form(rendered = res,
                                psm = psm,
                                mode = mode,
                                ds = ds,
                               )
