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)
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)