def test_course_creation(self): course = course_model.create_course( **{ "title": "A test course", "hashtag": "ATC-1", "description": "This course is all about ABC", "language": "en", "organizer_uri": '/uri/user/testuser' } ) self.assertTrue(not course == None) # test that about content was created about = content_model.get_content(course['about_uri']) self.assertTrue(not about == None) self.assertEqual(about['title'], "About") # test that a cohort was created cohort = course_model.get_course_cohort(course['uri']) self.assertTrue(not cohort == None) self.assertTrue( course_model.user_in_cohort('/uri/user/testuser', cohort['uri']) ) self.assertTrue( course_model.is_cohort_organizer('/uri/user/testuser', cohort['uri']) )
def test_course_creation(self): course = course_model.create_course( **{ "title": "A test course", "hashtag": "ATC-1", "description": "This course is all about ABC", "language": "en", "organizer_uri": '/uri/user/testuser' }) self.assertTrue(not course == None) # test that about content was created about = content_model.get_content(course['about_uri']) self.assertTrue(not about == None) self.assertEqual(about['title'], "About") # test that a cohort was created cohort = course_model.get_course_cohort(course['uri']) self.assertTrue(not cohort == None) self.assertTrue( course_model.user_in_cohort('/uri/user/testuser', cohort['uri'])) self.assertTrue( course_model.is_cohort_organizer('/uri/user/testuser', cohort['uri']))
def _populate_course_context( request, course_id, context ): course_uri = course_model.course_id2uri(course_id) course = _get_course_or_404(course_uri) context['course'] = course context['course_url'] = request.get_full_path() if 'image_uri' in course: context['course']['image'] = media_model.get_image(course['image_uri']) #NOTE if performance becomes a problem dont fetch cohort cohort = course_model.get_course_cohort(course_uri) context['cohort'] = cohort user_uri = "/uri/user/{0}".format(request.user.username) context['organizer'] = course_model.is_cohort_organizer( user_uri, cohort['uri'] ) context['organizer'] |= request.user.is_superuser context['can_edit'] = context['organizer'] and not course['status'] == 'archived' if course_model.user_in_cohort(user_uri, cohort['uri']): if not context['organizer']: context['show_leave_course'] = True context['learner'] = True elif cohort['signup'] == "OPEN": context['show_signup'] = True return context
def import_project( request, project_slug ): from projects.models import Project project = get_object_or_404(Project, slug=project_slug) from courses import utils course = utils.import_project(project, project.name[:3]) cohort = course_model.get_course_cohort(course['uri']) user_uri = u"/uri/user/{0}".format(request.user.username) course_model.add_user_to_cohort(cohort['uri'], user_uri, "ORGANIZER") return course_slug_redirect(request, course['id'])
def course_signup( request, course_id ): #NOTE: consider using cohort_id in URL to avoid cohort lookup cohort = course_model.get_course_cohort( course_id ) user_uri = u"/uri/user/{0}".format(request.user.username) if cohort['signup'] == "OPEN": course_model.add_user_to_cohort(cohort['uri'], user_uri, "LEARNER", True) messages.success(request, _("You are now signed up for this course.")) else: messages.error(request, _("This course isn't open for signup.")) return course_slug_redirect( request, course_id )
def check_organizer(*args, **kwargs): request = args[0] course_id = kwargs.get("course_id") course_uri = course_model.course_id2uri(course_id) user_uri = "/uri/user/{0}".format(request.user.username) cohort = course_model.get_course_cohort(course_uri) organizer = course_model.is_cohort_organizer(user_uri, cohort["uri"]) organizer |= request.user.is_superuser if not organizer: return http.HttpResponseForbidden(_("You need to be a course organizer.")) return function(*args, **kwargs)
def check_organizer(*args, **kwargs): request = args[0] course_id = kwargs.get('course_id') course_uri = course_model.course_id2uri(course_id) user_uri = "/uri/user/{0}".format(request.user.username) cohort = course_model.get_course_cohort(course_uri) organizer = course_model.is_cohort_organizer(user_uri, cohort['uri']) organizer |= request.user.is_superuser if not organizer: return http.HttpResponseForbidden( _("You need to be a course organizer.")) return function(*args, **kwargs)
def _populate_course_context( request, course_id, context ): course_uri = course_model.course_id2uri(course_id) course = _get_course_or_404(course_uri) course['author'] = course['author_uri'].strip('/').split('/')[-1] context['course'] = course context['course_url'] = reverse('courses_show', kwargs={'course_id': course['id'], 'slug': course['slug']} ) if 'image_uri' in course: context['course']['image'] = media_model.get_image(course['image_uri']) #NOTE if performance becomes a problem dont fetch cohort cohort = course_model.get_course_cohort(course_uri) context['cohort'] = cohort user_uri = u"/uri/user/{0}".format(request.user.username) context['organizer'] = course_model.is_cohort_organizer( user_uri, cohort['uri'] ) context['organizer'] |= request.user.is_superuser context['admin'] = request.user.is_superuser context['can_edit'] = context['organizer'] and not course['status'] == 'archived' context['trusted_user'] = request.user.has_perm('users.trusted_user') if course_model.user_in_cohort(user_uri, cohort['uri']): if not context['organizer']: context['show_leave_course'] = True context['learner'] = True elif cohort['signup'] == "OPEN": context['show_signup'] = True try: course_lists = learn_model.get_lists_for_course(reverse( 'courses_slug_redirect', kwargs={'course_id': course_id} )) f = lambda l: l['name'] not in ['drafts', 'listed', 'archived'] context['lists'] = filter(f, course_lists) except: log.error("Could not get lists for course!") if 'based_on_uri' in course: course['based_on'] = course_model.get_course(course['based_on_uri']) context['meta_data'] = lrmi_model.get_tags(course_uri) if 'educational_alignment' in context['meta_data']: context['educational_alignment'] = json.loads(context['meta_data']['educational_alignment']) del context['meta_data']['educational_alignment'] return context
def course_export_emails( request, course_id ): if not request.user.has_perm('users.trusted_user'): msg = _('You do not have permission to view this page') return http.HttpResponseForbidden(msg) course_uri = course_model.course_id2uri(course_id) cohort = course_model.get_course_cohort(course_uri) response = http.HttpResponse(mimetype='text/csv') response['Content-Disposition'] = 'attachment; ' response['Content-Disposition'] += 'filename=detailed_report.csv' writer = unicodecsv.writer(response) writer.writerow(["username", "email address", "signup date"]) for user in cohort['users'].values(): username = user['uri'].strip('/').split('/')[-1] user['email'] = UserProfile.objects.get(username=username).email writer.writerow([username, user['email'], user['signup_date']]) return response
def post_content_comment( request, course_id, content_id): #TODO use form with field that sanitizes the input! comment_content = request.POST.get('comment') user = request.user.get_profile() user_uri = u"/uri/user/{0}".format(user.username) comment = comment_model.create_comment(comment_content, user_uri) reference_uri = "/uri/content/{0}".format(content_id) course_uri = course_model.course_id2uri(course_id) cohort = course_model.get_course_cohort(course_uri) course_model.add_comment_to_cohort( comment['uri'], cohort['uri'], reference_uri ) if request.POST.get('next_url'): redirect_url = request.POST.get('next_url') else: redirect_url = reverse('courses_content_show', kwargs={'course_id': course_id, 'content_id': content_id} ) return http.HttpResponseRedirect(redirect_url)
def test_add_user(self): cohort = course_model.get_course_cohort(self.course['uri']) course_model.add_user_to_cohort( cohort['uri'], '/uri/user/bob', 'ORGANIZER') cohort2 = course_model.get_course_cohort(self.course['uri']) self.assertEqual(len(cohort['users']), len(cohort2['users'])-1)
def test_add_user(self): cohort = course_model.get_course_cohort(self.course["uri"]) course_model.add_user_to_cohort(cohort["uri"], "/uri/user/bob", "ORGANIZER") cohort2 = course_model.get_course_cohort(self.course["uri"]) self.assertEqual(len(cohort["users"]), len(cohort2["users"]) - 1)
def test_add_user(self): cohort = course_model.get_course_cohort(self.course['uri']) course_model.add_user_to_cohort(cohort['uri'], '/uri/user/bob', 'ORGANIZER') cohort2 = course_model.get_course_cohort(self.course['uri']) self.assertEqual(len(cohort['users']), len(cohort2['users']) - 1)