Beispiel #1
0
    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'])
        )
Beispiel #2
0
    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']))
Beispiel #3
0
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
Beispiel #4
0
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'])
Beispiel #5
0
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'])
Beispiel #6
0
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 )
Beispiel #7
0
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 )
Beispiel #8
0
 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)
Beispiel #9
0
 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)
Beispiel #10
0
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
Beispiel #11
0
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
Beispiel #12
0
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
Beispiel #13
0
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)
Beispiel #14
0
 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)
Beispiel #15
0
 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)
Beispiel #16
0
 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)