def view_course_result(resource_id):

    course = lr_service.get_resource(resource_id)

    record = json.loads(request.cookies.get(COOKIE_COMPLETED_COURSE))

    source_course = lr_service.get_resource(request.args.get('source'))

    if source_course and course['completionSuggestions']:
        ecourses = next(resource
                        for resource in course['completionSuggestions']
                        if resource['type'] == 'Online learning')
        ecourses['resources'].insert(
            0, {
                'title':
                source_course['title'],
                'url':
                url_for('learningresource.view_resource',
                        resource_id=source_course['id'])
            })

    current_app.logger.info(record)

    back_to_source = source_course and source_course.get(
        'preRequisites', None) == course['id']

    return render_template('/learningresource/course_result.html',
                           course=course,
                           record=record,
                           source_course=source_course,
                           back_to_source=back_to_source)
def view_course_complete(resource_id):
    course = lr_service.get_resource(resource_id)

    cookie_answers = json.loads(request.cookies.get(COOKIE_ANSWERS))
    source_course_id = request.args.get('source')
    source_course = lr_service.get_resource(source_course_id)

    score_sum = 0
    for key in cookie_answers:
        answer = json.loads(cookie_answers.get(key, '{}'))
        if answer:
            score_sum += answer.get('score', 0)

    final_score = score_sum / len(cookie_answers)

    record = Statement(actor=current_user.email,
                       verb='complete',
                       statement_obj=Statement.create_activity_obj(
                           uri=url_for('.view_resource',
                                       resource_id=resource_id,
                                       _external=True),
                           name=course['title'],
                           resource_type=course['type'])).to_json()

    record['result'] = {'score': {'min': 0, 'max': 5, 'raw': final_score}}

    lrs_result = lrs_service.save_statement(record)

    if type(lrs_result) is dict:
        message = 'Error updating learning record: ' + json.dumps(
            lrs_result.get('messages') or lrs_result)
        status_code = lrs_result.get('status') or 500
        resp = make_response(
            render_template('error.html',
                            title='oops - %s' % status_code,
                            status_code=status_code,
                            message=message), status_code)
    else:
        resp = make_response(
            redirect(
                url_for('.view_course_result',
                        resource_id=resource_id,
                        source=source_course_id)))
        resp.set_cookie(COOKIE_COMPLETED_COURSE,
                        json.dumps(record),
                        max_age=600)

    resp.set_cookie(COOKIE_ANSWERS, '', expires=0)
    return resp
def start(resource_id):
    source_course_id = request.args.get('source')
    course = lr_service.get_resource(resource_id)

    resp = make_response(
        redirect(
            url_for('.view_course_page',
                    resource_id=resource_id,
                    res_type=TYPE_PAGE,
                    number=0,
                    source=source_course_id)))

    if course.get('preRequisites', None):
        pre_req_records = lrs_service.load_course_learning_records(
            email=current_user.email,
            course_uri=url_for('.view_resource',
                               resource_id=course.get('preRequisites', None),
                               _external=True))
        print(pre_req_records)

        if not pre_req_records:
            flash(
                'You must complete all pre learning before doing this course')
            resp = make_response(
                redirect(
                    url_for('.view_resource',
                            resource_id=course['id'],
                            source=source_course_id)))

    resp.set_cookie(COOKIE_ANSWERS, '', expires=0)
    resp.set_cookie(COOKIE_COMPLETED_COURSE, '', expires=0)
    return resp
def view_resource(resource_id):
    source_course = request.args.get('source')

    course = lr_service.get_resource(resource_id)
    pre_requisite = lr_service.get_course_prerequisites(resource_id)
    pre_learning = lr_service.get_course_prelearning(resource_id)

    if current_user.is_authenticated:
        learning_records = lrs_service.load_course_learning_records(
            email=current_user.email,
            course_uri=url_for('.view_resource',
                               resource_id=course['id'],
                               _external=True))
        course['learningRecord'] = learning_records[
            0] if learning_records else None

        if pre_requisite:
            pre_learning_records = lrs_service.load_course_learning_records(
                email=current_user.email,
                course_uri=url_for('.view_resource',
                                   resource_id=pre_requisite['id'],
                                   _external=True))
            pre_requisite['learningRecord'] = pre_learning_records[
                0] if pre_learning_records else None

    return render_template('learningresource/view_resource.html',
                           course=course,
                           pre_requisite=pre_requisite,
                           pre_learning=pre_learning,
                           user_logged_in=current_user.is_authenticated,
                           source_course=source_course)
def view_course_result(resource_id):

    course = lr_service.get_resource(resource_id)
    record = lrs_service.load_course_learning_records(
        email=current_user.email,
        course_uri=url_for('.view_resource', resource_id=resource_id, _external=True))[0]

    source_course = lr_service.get_resource(request.args.get('source'))

    if source_course and course['completionSuggestions']:
        ecourses = next(resource for resource in course['completionSuggestions'] if resource['type'] == "Online learning")
        ecourses['resources'].insert(0, {
            'title': source_course['title'],
            'url': url_for('learningresource.view_resource', resource_id=source_course['id'])
        })
    
    current_app.logger.info(record)

    back_to_source = source_course and source_course.get('preRequisites', None) == course['id']

    return render_template('/learningresource/course_result.html',
        course=course, record=record, source_course=source_course, back_to_source=back_to_source)
def view_course_complete(resource_id):
    course = lr_service.get_resource(resource_id)
    
    cookie_answers = json.loads(request.cookies.get(COOKIE_ANSWERS))
    source_course_id = request.args.get('source')
    source_course = lr_service.get_resource(source_course_id)

    score_sum = 0
    for key in cookie_answers:
        answer = json.loads(cookie_answers.get(key, "{}"))
        if answer:
            score_sum += answer.get('score', 0)

    final_score = score_sum / len(cookie_answers)

    record = Statement(
        actor=current_user.email,
        verb='complete',
        statement_obj=Statement.create_activity_obj(
            uri=url_for('.view_resource', resource_id=resource_id, _external=True),
            name=course['title'],
            resource_type=course['type'])).to_json()

    record['result'] = {
        "score": {
            "min": 0,
            "max": 5,
            "raw": final_score
        }
    }

    lrs_result = lrs_service.save_statement(record)

    resp = make_response(redirect(url_for('.view_course_result', resource_id=resource_id, source=source_course_id)))
    resp.set_cookie(COOKIE_ANSWERS, '', expires=0)
    return resp
def start(resource_id):
    source_course_id = request.args.get('source')
    course = lr_service.get_resource(resource_id)

    resp = make_response(redirect(url_for('.view_course_page',
        resource_id=resource_id, res_type=TYPE_PAGE, number=0, source=source_course_id)))

    if course.get('preRequisites', None):
        pre_req_records = lrs_service.load_course_learning_records(
            email=current_user.email,
            course_uri=url_for('.view_resource', resource_id=course.get('preRequisites', None), _external=True))
        print(pre_req_records)

        if not pre_req_records:
            flash('You must complete all pre learning before doing this course')
            resp = make_response(redirect(url_for('.view_resource', resource_id=course['id'], source=source_course_id)))
    
    resp.set_cookie(COOKIE_ANSWERS, '', expires=0)
    return resp
def view_resource(resource_id):
    source_course = request.args.get('source')

    course = lr_service.get_resource(resource_id)
    pre_requisite = lr_service.get_course_prerequisites(resource_id)
    pre_learning = lr_service.get_course_prelearning(resource_id)

    if current_user.is_authenticated:
        learning_records = lrs_service.load_course_learning_records(
            email=current_user.email,
            course_uri=url_for('.view_resource', resource_id=course['id'], _external=True))
        course['learningRecord'] = learning_records[0] if learning_records else None
        
        if pre_requisite:
            pre_learning_records = lrs_service.load_course_learning_records(
                email=current_user.email,
                course_uri=url_for('.view_resource', resource_id=pre_requisite['id'], _external=True))
            pre_requisite['learningRecord'] = pre_learning_records[0] if pre_learning_records else None


    return render_template('learningresource/view_resource.html',
        course=course, pre_requisite=pre_requisite, pre_learning=pre_learning,
        user_logged_in=current_user.is_authenticated, source_course=source_course)
def api_view_resource(resource_id):
    course = lr_service.get_resource(resource_id)
    return jsonify(course)
def view_course_page(resource_id, res_type, number):
    course = lr_service.get_resource(resource_id)
    page_number = number or 0
    page_count = len(course['course'][res_type])
    current_page = course['course'][res_type][page_number]
    source_course = request.args.get('source')

    if res_type == TYPE_QUESTION:
        current_page = Question.from_dict(current_page)

        if COOKIE_ANSWERS in request.cookies:
            cookie_answers = request.cookies.get(COOKIE_ANSWERS)
            current_app.logger.info(cookie_answers)

            cookie_json = json.loads(cookie_answers)
            current_answer = cookie_json.get(current_page.tag)

            current_page.answer = json.loads(current_answer).get(
                'selected') if current_answer else None
        else:
            cookie_json = {}

    if request.method == 'POST':
        is_last = (page_number + 1) >= page_count
        if is_last:
            if res_type == TYPE_PAGE:
                res_type = TYPE_QUESTION
                page_number = 0
            elif res_type == TYPE_QUESTION:
                # clean this up !
                resp = make_response(
                    redirect(
                        url_for('.view_course_complete',
                                resource_id=resource_id,
                                source=source_course)))
                if type(current_page) is Question:
                    current_page.answer = request.form
                    # save cookies only if it's a question
                    cookie_json[current_page.tag] = json.dumps({
                        'selected':
                        request.form,
                        'score':
                        current_page.get_score()
                    })
                    resp.set_cookie(COOKIE_ANSWERS, json.dumps(cookie_json))
                return resp
        else:
            page_number += 1

        redirect_url = url_for('.view_course_page',
                               resource_id=resource_id,
                               res_type=res_type,
                               number=page_number,
                               source=source_course)
        resp = make_response(redirect(redirect_url))

        if type(current_page) is Question:
            current_page.answer = request.form
            # save cookies only if it's a question
            cookie_json[current_page.tag] = json.dumps({
                'selected':
                request.form,
                'score':
                current_page.get_score()
            })
            resp.set_cookie(COOKIE_ANSWERS, json.dumps(cookie_json))

        return resp

    return render_template('/learningresource/course_page.html',
                           res_type=res_type,
                           course=course,
                           page_number=page_number,
                           page=current_page,
                           page_count=page_count,
                           source_course=source_course)
def view_course_page(resource_id, res_type, number):
    course = lr_service.get_resource(resource_id)
    page_number = number or 0
    page_count = len(course['course'][res_type])
    current_page = course['course'][res_type][page_number]
    source_course = request.args.get('source')


    if res_type == TYPE_QUESTION:
        current_page = Question.from_dict(current_page)

        if COOKIE_ANSWERS in request.cookies:
            cookie_answers = request.cookies.get(COOKIE_ANSWERS)
            current_app.logger.info(cookie_answers)

            cookie_json = json.loads(cookie_answers)
            current_answer = cookie_json.get(current_page.tag)

            current_page.answer = json.loads(current_answer).get('selected') if current_answer else None
        else:
            cookie_json = {}

    if request.method == 'POST':
        is_last = (page_number + 1) >= page_count
        if is_last:
            if res_type == TYPE_PAGE:
                res_type = TYPE_QUESTION
                page_number = 0
            elif res_type == TYPE_QUESTION:
                # clean this up !
                resp = make_response(redirect(url_for('.view_course_complete', resource_id=resource_id, source=source_course)))
                if type(current_page) is Question:
                    current_page.answer = request.form
                    # save cookies only if it's a question
                    cookie_json[current_page.tag] = json.dumps({
                        'selected': request.form,
                        'score': current_page.get_score()
                    })
                    resp.set_cookie(COOKIE_ANSWERS, json.dumps(cookie_json))
                return resp
        else:
            page_number+=1


        redirect_url = url_for('.view_course_page', resource_id=resource_id, res_type=res_type, number=page_number, source=source_course)
        resp = make_response(redirect(redirect_url))

        if type(current_page) is Question:
            current_page.answer = request.form
            # save cookies only if it's a question
            cookie_json[current_page.tag] = json.dumps({
                'selected': request.form,
                'score': current_page.get_score()
            })
            resp.set_cookie(COOKIE_ANSWERS, json.dumps(cookie_json))

        return resp


    return render_template('/learningresource/course_page.html',
        res_type=res_type, course=course, page_number=page_number, page=current_page, page_count=page_count, source_course=source_course)
def api_view_resource(resource_id):
    course = lr_service.get_resource(resource_id)
    return jsonify(course)