Exemple #1
0
    def test_getCourseCollections(self):
        card_template = CardTemplate.objects.create(title='Test',
                                                    description='Test')
        collection = Collection.objects.create(title='Test',
                                               description='Test',
                                               card_template=card_template)
        collection2 = Collection.objects.create(title='Test2',
                                                description='Test2',
                                                card_template=card_template)
        collection3 = Collection.objects.create(title='Test3',
                                                description='Test3',
                                                card_template=card_template)

        canvas_course_id = 123
        request = self.createMockRequest(canvas_course_id, [const.INSTRUCTOR])
        lti_service = LTIService(request)
        course_id = lti_service.getCourseId()

        self.assertTrue(lti_service.associateCourse(collection.id))
        self.assertTrue(lti_service.associateCourse(collection3.id))

        self.assertTrue(
            lti_service.isCourseAssociated(course_id, collection.id))
        self.assertFalse(
            lti_service.isCourseAssociated(course_id, collection2.id))
        self.assertTrue(
            lti_service.isCourseAssociated(course_id, collection3.id))

        course_collections = lti_service.getCourseCollections()
        expected_collections = [c.id for c in (collection, collection3)]
        self.assertEqual(len(course_collections), len(expected_collections))
        self.assertEqual(course_collections, expected_collections)
def index(request, collection_id=None):
    """Displays a set of collections to the user depending on whether
    or not the collections are private or public and whether or not the
    user has permission."""

    if collection_id is not None:
        collection_id = int(collection_id)

    role_bucket = services.get_or_update_role_bucket(request)
    lti_req = LTIService(request)
    course_collections = lti_req.getCourseCollections()

    is_teacher = lti_req.isTeacher() or queries.is_superuser_or_staff(
        request.user)
    collection_admin_perms = []
    for r in (Users_Collections.ADMINISTRATOR, Users_Collections.INSTRUCTOR):
        role_name = Users_Collections.role_map[r]
        collection_admin_perms.extend(role_bucket[role_name])

    copy_collections = queries.getCopyCollectionList(request.user)
    collection_filters = dict(
        collection_ids=course_collections,
        can_filter=not queries.is_superuser_or_staff(request.user))
    collection_list = queries.getCollectionList(role_bucket,
                                                **collection_filters)
    display_collections = queries.groupCollectionsByList(collection_list)

    context = {
        "nav_collections": collection_list,
        "display_collections": display_collections,
        "copy_collections": copy_collections,
        "active_collection": None,
        "user_collection_role": role_bucket,
        "collection_admin_perms": collection_admin_perms,
        "is_teacher": is_teacher,
    }

    if collection_id:
        try:
            cur_collection = Collection.objects.get(id=collection_id)
        except Collection.DoesNotExist:
            raise Http404
        filtered_collection_list = [
            c for c in collection_list if c['id'] == cur_collection.id
        ]
        if len(filtered_collection_list) == 0:
            raise Http404
        context['active_collection'] = filtered_collection_list[0]

    analytics.track(actor=request.user,
                    verb=analytics.VERBS.viewed,
                    object=analytics.OBJECTS.collection,
                    context={"collection_id": collection_id})

    return render(request, 'collections/index.html', context)
def index(request, collection_id=None):
    """Displays a set of collections to the user depending on whether
    or not the collections are private or public and whether or not the
    user has permission."""

    if collection_id is not None:
        collection_id = int(collection_id)

    role_bucket = services.get_or_update_role_bucket(request)
    lti_req = LTIService(request)
    course_collections = lti_req.getCourseCollections()

    is_teacher = lti_req.isTeacher() or queries.is_superuser_or_staff(request.user)
    collection_admin_perms = []
    for r in (Users_Collections.ADMINISTRATOR, Users_Collections.INSTRUCTOR):
        role_name = Users_Collections.role_map[r]
        collection_admin_perms.extend(role_bucket[role_name])

    copy_collections = queries.getCopyCollectionList(request.user)
    collection_filters = dict(collection_ids=course_collections, can_filter=not queries.is_superuser_or_staff(request.user))
    collection_list = queries.getCollectionList(role_bucket, **collection_filters)
    display_collections = queries.groupCollectionsByList(collection_list)

    context = {
        "nav_collections": collection_list,
        "display_collections": display_collections,
        "copy_collections": copy_collections,
        "active_collection": None,
        "user_collection_role": role_bucket,
        "collection_admin_perms": collection_admin_perms,
        "is_teacher": is_teacher,
    }

    if collection_id:
        try:
            cur_collection = Collection.objects.get(id=collection_id)
        except Collection.DoesNotExist:
            raise Http404
        filtered_collection_list = [c for c in collection_list if c['id'] == cur_collection.id]
        if len(filtered_collection_list) == 0:
            raise Http404
        context['active_collection'] = filtered_collection_list[0]

    analytics.track(
        actor=request.user,
        verb=analytics.VERBS.viewed,
        object=analytics.OBJECTS.collection,
        context={"collection_id": collection_id}
    )

    return render(request, 'collections/index.html', context)
def custom_create(request):
    """
    Creates a collection with custom template.
    """
    upload_error = ''
    course_name = ''
    role_bucket = services.get_or_update_role_bucket(request)
    lti_req = LTIService(request)
    course_collections = lti_req.getCourseCollections()
    collection_filters = dict(
        collection_ids=course_collections,
        can_filter=not queries.is_superuser_or_staff(request.user))
    collection_list = queries.getCollectionList(role_bucket,
                                                **collection_filters)
    if request.method == 'POST':
        d = {'user': request.user}
        log.info('The user is uploading a custom deck.', extra=d)

        course_name = request.POST.get('course', '')
        if course_name == '' or 'file' not in request.FILES:
            if course_name == '' and 'file' not in request.FILES:
                upload_error = "Course name needed. No file selected."
            elif course_name != '' and 'file' not in request.FILES:
                upload_error = 'No file selected'
            else:
                upload_error = 'Course name needed.'
        else:
            try:
                is_teacher = lti_req.isTeacher()
                deck = services.handle_custom_file(request.FILES['file'],
                                                   course_name, request.user,
                                                   is_teacher)

                lti_req.associateCourse(deck.collection.id)
                log.info(
                    'Custom deck %(d)s successfully added to the new collection %(c)s.'
                    % {
                        'c': str(deck.collection.id),
                        'd': str(deck.id)
                    },
                    extra=d)
                return redirect(deck)
            except Exception, e:
                upload_error = str(e)
        msg = 'The following error occurred when the user tried uploading a deck: '
        log.error(msg + upload_error, extra=d)
Exemple #5
0
    def test_getCourseCollections(self):
        card_template = CardTemplate.objects.create(title='Test', description='Test')
        collection = Collection.objects.create(title='Test', description='Test', card_template=card_template)
        collection2 = Collection.objects.create(title='Test2', description='Test2', card_template=card_template)
        collection3 = Collection.objects.create(title='Test3', description='Test3', card_template=card_template)

        canvas_course_id = 123
        request = self.createMockRequest(canvas_course_id, [const.INSTRUCTOR]) 
        lti_service = LTIService(request)
        course_id = lti_service.getCourseId()

        self.assertTrue(lti_service.associateCourse(collection.id))
        self.assertTrue(lti_service.associateCourse(collection3.id))

        self.assertTrue(lti_service.isCourseAssociated(course_id, collection.id))
        self.assertFalse(lti_service.isCourseAssociated(course_id, collection2.id))
        self.assertTrue(lti_service.isCourseAssociated(course_id, collection3.id))

        course_collections = lti_service.getCourseCollections()
        expected_collections = [c.id for c in (collection, collection3)]
        self.assertEqual(len(course_collections), len(expected_collections))
        self.assertEqual(course_collections, expected_collections)
def custom_create(request):
    """
    Creates a collection with custom template.
    """
    upload_error = ''
    course_name = ''
    role_bucket = services.get_or_update_role_bucket(request)
    lti_req = LTIService(request)
    course_collections = lti_req.getCourseCollections()
    collection_filters = dict(collection_ids=course_collections, can_filter=not queries.is_superuser_or_staff(request.user))
    collection_list = queries.getCollectionList(role_bucket, **collection_filters)
    if request.method == 'POST':
        d = {'user': request.user}
        log.info('The user is uploading a custom deck.', extra=d)

        course_name = request.POST.get('course', '')
        if course_name == '' or 'file' not in request.FILES:
            if course_name == '' and 'file' not in request.FILES:
                upload_error = "Course name needed. No file selected."
            elif course_name != '' and 'file' not in request.FILES:
                upload_error = 'No file selected'
            else:
                upload_error = 'Course name needed.'
        else:
            try:
                is_teacher = lti_req.isTeacher()
                deck = services.handle_custom_file(request.FILES['file'], course_name, request.user, is_teacher)

                lti_req.associateCourse(deck.collection.id)
                log.info('Custom deck %(d)s successfully added to the new collection %(c)s.'
                         %{'c': str(deck.collection.id), 'd':str(deck.id)}, extra=d)
                return redirect(deck)
            except Exception, e:
                    upload_error = str(e)
        msg = 'The following error occurred when the user tried uploading a deck: '
        log.error(msg + upload_error , extra=d)