Exemplo n.º 1
0
def main(request):
    """
    Launch the main page of the authoring app. Create a context that includes
    all available edX courses and the module structure of the Canvas course from
    which the tool was launched.
    """
    try:
        canvas_course_id = request.session['LTI_LAUNCH']['custom_canvas_course_id']
        canvas_user_id = request.session['LTI_LAUNCH']['user_id']
    except KeyError:
        return http.HttpResponseBadRequest()

    edx_courses = EdxCourse.objects.all()
    try:
        canvas_auth = CanvasApiAuthorization.objects.get(lti_user_id=canvas_user_id)
    except CanvasApiAuthorization.DoesNotExist:
        return canvas_api.start_oauth(request, canvas_user_id)

    try:
        canvas_courses = canvas_api.get_courses(canvas_auth)
        canvas_modules = canvas_api.get_module_list(canvas_auth, canvas_course_id)
    except CanvasAPIError as e:
        if e.status_code == 401:
            return canvas_api.start_oauth(request, canvas_user_id)
        raise
    return render(request, 'edx2canvas/index.html', {
        'edx_courses': edx_courses,
        'canvas_modules': json.dumps({'id': canvas_course_id, 'modules': canvas_modules})
    })
Exemplo n.º 2
0
def create_canvas_module(request):
    """
    Create a new module in a Canvas course.

    This method expects the following POST parameters:
    - 'canvas_course_id': The ID of the course in which to create the module.
      The currently-authenticated user must have write access to the course.
    - 'module_name': A name to give to the newly-created module.
    - 'position': A zero-based index into the module list, indicating where to
      insert the new module.
    """
    try:
        canvas_course_id = request.POST['canvas_course_id']
        name = request.POST['module_name']
        position = request.POST['position']
        canvas_user_id = request.session['LTI_LAUNCH']['user_id']
    except KeyError:
        return HttpResponseBadRequest()

    try:
        canvas_auth = CanvasApiAuthorization.objects.get(lti_user_id=canvas_user_id)
    except CanvasApiAuthorization.DoesNotExist:
        return HttpResponseForbidden()
    module = canvas_api.create_canvas_module(
        canvas_auth, canvas_course_id, name, position
    )
    module_list = canvas_api.get_module_list(canvas_auth, canvas_course_id)
    return JsonResponse({'module_id': module['id'], 'modules': module_list}, safe=False)
Exemplo n.º 3
0
def get_canvas_modules(request):
    """
    Fetch the list of modules available in the Canvas course that launched the
    tool.

    Returns a JSON object with:
    - id: the Canvas course ID.
    - modules: a list of Canvas module objects.
    """
    try:
        canvas_course_id = request.GET['course_id']
        canvas_user_id = request.session['LTI_LAUNCH']['user_id']
    except KeyError:
        return http.HttpResponseBadRequest()
    try:
        canvas_auth = CanvasApiAuthorization.objects.get(
            lti_user_id=canvas_user_id)
    except CanvasApiAuthorization.DoesNotExist:
        return http.HttpResponseForbidden()
    module_list = canvas_api.get_module_list(canvas_auth, canvas_course_id)
    return http.JsonResponse(
        {
            'id': request.GET['course_id'],
            'modules': module_list
        }, safe=False)
Exemplo n.º 4
0
def get_canvas_modules(request):
    """
    Fetch the list of modules available in the Canvas course that launched the
    tool.

    Returns a JSON object with:
    - id: the Canvas course ID.
    - modules: a list of Canvas module objects.
    """
    try:
        canvas_course_id = request.GET['course_id']
        canvas_user_id = request.session['LTI_LAUNCH']['user_id']
    except KeyError:
        return http.HttpResponseBadRequest()
    try:
        canvas_auth = CanvasApiAuthorization.objects.get(lti_user_id=canvas_user_id)
    except CanvasApiAuthorization.DoesNotExist:
        return http.HttpResponseForbidden()
    module_list = canvas_api.get_module_list(canvas_auth, canvas_course_id)
    return http.JsonResponse(
        {'id': request.GET['course_id'], 'modules': module_list}, safe=False
    )
Exemplo n.º 5
0
def main(request):
    """
    Launch the main page of the authoring app. Create a context that includes
    all available edX courses and the module structure of the Canvas course from
    which the tool was launched.
    """
    try:
        canvas_course_id = request.session['LTI_LAUNCH'][
            'custom_canvas_course_id']
        canvas_user_id = request.session['LTI_LAUNCH']['user_id']
    except KeyError:
        return http.HttpResponseBadRequest()

    edx_courses = EdxCourse.objects.all()
    try:
        canvas_auth = CanvasApiAuthorization.objects.get(
            lti_user_id=canvas_user_id)
    except CanvasApiAuthorization.DoesNotExist:
        return canvas_api.start_oauth(request, canvas_user_id)

    try:
        canvas_courses = canvas_api.get_courses(canvas_auth)
        canvas_modules = canvas_api.get_module_list(canvas_auth,
                                                    canvas_course_id)
    except CanvasAPIError as e:
        if e.status_code == 401:
            return canvas_api.start_oauth(request, canvas_user_id)
        raise
    return render(
        request, 'edx2canvas/index.html', {
            'edx_courses':
            edx_courses,
            'canvas_modules':
            json.dumps({
                'id': canvas_course_id,
                'modules': canvas_modules
            })
        })
Exemplo n.º 6
0
def add_to_canvas(request):
    """
    Create a new module item in Canvas that launches one piece of edX content.
    There are two possibilities:
     - For a graded exercise (where 'graded' is 'true'), a new Canvas assignment
       is created (worth one point), and a module item is created that points to
       the new assignment.
     - For a non-graded piece of content (when 'graded' is 'false'), a new
       module item is created that launches the content directly.
    In both cases, if the Open edX LTI tool is not installed on the course, it
    is created. Any subsequently-created items will use that external tool (i.e.
    there will only be one instance of the Open edX LTI tool installed).

    The method expects the following POST parameters:
     - edx_course_id: an ID into the EdxCourse model.
     - canvas_course_id: a Canvas-defined course identifier.
     - module_id: a Canvas-defined module identifier.
     - title: the title for the new module item (and assignment, if necessary).
     - position: the zero-based index of the new item in the module list.
     - usage_id: an edX-defined identifier for the content to import.
     - graded: 'true' if an assignment should be created, 'false' if not.
    """
    try:
        edx_course_id = request.POST['edx_course_id']
        canvas_course_id = request.POST['canvas_course_id']
        module_id = request.POST['module_id']
        title = request.POST['title']
        position = request.POST['position']
        usage_id = request.POST['usage_id']
        graded = request.POST['graded'].lower() not in ('false', '0')
        if graded:
            points = request.POST['points']
        canvas_user_id = request.session['LTI_LAUNCH']['user_id']
    except KeyError as e:
        return HttpResponseBadRequest(e)

    try:
        edx_course = EdxCourse.objects.get(id=edx_course_id)
    except EdxCourse.DoesNotExist:
        return HttpResponseBadRequest()
    edx_course_key = edx_course.course_key()

    try:
        canvas_auth = CanvasApiAuthorization.objects.get(lti_user_id=canvas_user_id)
    except CanvasApiAuthorization.DoesNotExist:
        return HttpResponseForbidden()

    external_tool_id = canvas_api.get_external_tool_id(canvas_auth, canvas_course_id)

    if graded:
        canvas_api.create_assignment_with_module_item(
            canvas_auth, title, canvas_course_id, module_id, position,
            external_tool_id, get_lti_url_for_usage_id(edx_course_key, usage_id),
            points
        )
    else:
        canvas_api.create_canvas_module_item(
            canvas_auth, title, canvas_course_id, module_id, position,
            external_tool_id, get_lti_url_for_usage_id(edx_course_key, usage_id)
        )

    module_list = canvas_api.get_module_list(canvas_auth, canvas_course_id)
    return JsonResponse({'id': canvas_course_id, 'modules': module_list}, safe=False)