## Script (Python) "add_course_result"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=REQUEST=None, action_after_validate=''
##title=
##
# $Id: add_course_result.py 3061 2008-01-29 09:41:44Z henrik $
"""
add a StudentCourseResult object
"""

import logging
logger = logging.getLogger('Skins.add_course_result')

from urllib import urlencode
try:
    from Products.zdb import set_trace
except:
    def set_trace():
        pass
request = context.REQUEST
course_cat = context.courses_catalog
from Products.AdvancedQuery import Eq, Between, Le,In
try:
    aq_portal = context.portal_catalog.evalAdvancedQuery
except:
    aq_portal = context.portal_catalog_real.evalAdvancedQuery
course_id = request.get('course_id')
mtool = context.portal_membership
member = mtool.getAuthenticatedMember()

d = context.getCourseInfo(course_id)
args = {}
err = ''
d['core_or_elective'] = True
while True:
    if not course_id:
        err = "Empty course id!"
        break
    if d['title'] == 'unknown':
        err = "No such course!"
        break
    d['course_id'] = course_id
    d['student_id'] = student_id = context.getStudentId()
    d['level_id'] = level_id = context.getId()
    session_id = context.getLevelSession(context.getContent(),student_id,level_id)
    d['session_id'] = session_id
    d['key'] = "%s|%s|%s" % (student_id,level_id,course_id)
    try:
        context.course_results.addRecord(**d)
        break
    except ValueError:
        err = "Course already exists!"
        break
    break

if err:
    args['course_id'] = course_id
    args['portal_status_message'] = err
    url = context.absolute_url() + '/' + action_after_validate + '?' + urlencode(args)
    return request.RESPONSE.redirect(url)


logger.info('%s added course result record %s at level %s for %s' % (member,
                                                                           course_id,
                                                                           level_id,
                                                                           student_id))

psm = "You successfully added course %s!" % course_id
args['portal_status_message'] = psm
if action_after_validate:
    url = context.absolute_url() + '/' + action_after_validate + '?' + urlencode(args)
else:
    url = context.absolute_url() + '?' + urlencode(args)
return REQUEST.RESPONSE.redirect(url)