Esempio n. 1
0
def create_news_url(request):
    user = get_object_or_404(Person, userid=request.user.username)
    configs = UserConfig.objects.filter(user=user, key="feed-token")
    if request.method == 'POST':
        form = FeedSetupForm(request.POST)
        if form.is_valid():
            token = new_feed_token()
            if configs:
                c = configs[0]
                c.value = {'token': token}
            else:
                c = UserConfig(user=user,
                               key="feed-token",
                               value={'token': token})
            c.save()
            messages.add_message(request, messages.SUCCESS,
                                 'Feed URL configured.')
            return HttpResponseRedirect(reverse('config:config'))
    else:
        if configs:
            # pre-check if we're changing the token
            form = FeedSetupForm({'agree': True})
        else:
            form = FeedSetupForm()

    context = {'form': form}
    return render(request, "dashboard/news_url.html", context)
Esempio n. 2
0
 def test_api(self):
     crs = CourseOffering.objects.get(slug=TEST_COURSE_SLUG)
     memb = Member.objects.get(offering=crs, person__userid="ggbaker")
     person = Person.objects.get(userid='ggbaker')
     p = Page(offering=crs, label="PageExists")
     p.save()
     v = PageVersion(page=p, title="Page Exists", wikitext="Original Contents", editor=memb, comment="original page")
     v.save()
     
     from dashboard.models import new_feed_token
     token = new_feed_token()
     
     updata = u"""{
         "userid": "ggbaker",
         "token": "%s",
         "pages": [
             {
                 "label": "Index",
                 "title": "The Coursé Page",
                 "can_read": "ALL",
                 "can_write": "INST",
                 "wikitext-base64": "VGhpcyBwYWdlIGlzIHNwZWNpYWwgaW4gKipzb21lKiogd2F5LiBcKHh+XjIrMSA9IFxmcmFjezF9ezJ9XCkuCgpHb29kYnllIHdvcmxkIQ==",
                 "comment": "page creation comment",
                 "use_math": true
             },
             {
                 "label": "PageExists",
                 "new_label": "PageChanged",
                 "title": "Another Page",
                 "can_read": "STUD",
                 "wikitext": "This is some **new** page\\n\\ncontent."
             }
         ]
     }""" % (token)
     
     # make a request with no auth token in place
     c = Client()
     url = reverse('pages.views.api_import', kwargs={'course_slug': crs.slug})
     response = c.post(url, data=updata.encode('utf8'), content_type="application/json")
     self.assertEquals(response.status_code, 403)
     
     # create token and try again
     person.config['pages-token'] = token
     person.save()
     response = c.post(url, data=updata.encode('utf8'), content_type="application/json")
     self.assertEquals(response.status_code, 200)
     
     # make sure the data arrived
     self.assertEquals(Page.objects.filter(offering=crs, label="PageExists").count(), 0)
     p = Page.objects.get(offering=crs, label="PageChanged")
     v = p.current_version()
     self.assertEqual(v.title, "Another Page")
     self.assertEqual(v.get_wikitext(), "This is some **new** page\n\ncontent.")
     
     p = Page.objects.get(offering=crs, label="Index")
     v = p.current_version()
     self.assertEqual(v.title, u"The Cours\u00e9 Page")
     self.assertEqual(v.get_wikitext(), 'This page is special in **some** way. \\(x~^2+1 = \\frac{1}{2}\\).\n\nGoodbye world!')
     self.assert_('math' in v.config)
     self.assertEqual(v.config['math'], True)
Esempio n. 3
0
def create_calendar_url(request):
    user = get_object_or_404(Person, userid=request.user.username)
    config = _get_calendar_config(user)
    if request.method == 'POST':
        form = FeedSetupForm(request.POST)
        if form.is_valid():
            token = new_feed_token()
            config['token'] = token
            uc = UserConfig.objects.filter(user=user, key="calendar-config")
            if uc:
                uc = uc[0]
                uc.value = config
            else:
                uc = UserConfig(user=user, key="calendar-config", value=config)
            uc.save()
            messages.add_message(request, messages.SUCCESS, 'Calendar URL configured.')
            return HttpResponseRedirect(reverse('config:config'))
    else:
        if 'token' in config:
            # pre-check if we're changing the token
            form = FeedSetupForm({'agree': True})
        else:
            form = FeedSetupForm()

    context = {'form': form}
    return render(request, "dashboard/calendar_url.html", context)
Esempio n. 4
0
def create_calendar_url(request):
    user = get_object_or_404(Person, userid=request.user.username)
    config = _get_calendar_config(user)
    if request.method == 'POST':
        form = FeedSetupForm(request.POST)
        if form.is_valid():
            token = new_feed_token()
            config['token'] = token
            uc = UserConfig.objects.filter(user=user, key="calendar-config")
            if uc:
                uc = uc[0]
                uc.value = config
            else:
                uc = UserConfig(user=user, key="calendar-config", value=config)
            uc.save()
            messages.add_message(request, messages.SUCCESS,
                                 'Calendar URL configured.')
            return HttpResponseRedirect(reverse('config:config'))
    else:
        if 'token' in config:
            # pre-check if we're changing the token
            form = FeedSetupForm({'agree': True})
        else:
            form = FeedSetupForm()

    context = {'form': form}
    return render(request, "dashboard/calendar_url.html", context)
Esempio n. 5
0
 def test_api(self):
     crs = CourseOffering.objects.get(slug=TEST_COURSE_SLUG)
     memb = Member.objects.get(offering=crs, person__userid="ggbaker")
     person = Person.objects.get(userid='ggbaker')
     p = Page(offering=crs, label="PageExists")
     p.save()
     v = PageVersion(page=p, title="Page Exists", wikitext="Original Contents", editor=memb, comment="original page")
     v.save()
     
     from dashboard.models import new_feed_token
     token = new_feed_token()
     
     updata = u"""{
         "userid": "ggbaker",
         "token": "%s",
         "pages": [
             {
                 "label": "Index",
                 "title": "The Coursé Page",
                 "can_read": "ALL",
                 "can_write": "INST",
                 "wikitext-base64": "VGhpcyBwYWdlIGlzIHNwZWNpYWwgaW4gKipzb21lKiogd2F5LiBcKHh+XjIrMSA9IFxmcmFjezF9ezJ9XCkuCgpHb29kYnllIHdvcmxkIQ==",
                 "comment": "page creation comment",
                 "use_math": true
             },
             {
                 "label": "PageExists",
                 "new_label": "PageChanged",
                 "title": "Another Page",
                 "can_read": "STUD",
                 "wikitext": "This is some **new** page\\n\\ncontent."
             }
         ]
     }""" % (token)
     
     # make a request with no auth token in place
     c = Client()
     url = reverse('pages.views.api_import', kwargs={'course_slug': crs.slug})
     response = c.post(url, data=updata.encode('utf8'), content_type="application/json")
     self.assertEquals(response.status_code, 403)
     
     # create token and try again
     person.config['pages-token'] = token
     person.save()
     response = c.post(url, data=updata.encode('utf8'), content_type="application/json")
     self.assertEquals(response.status_code, 200)
     
     # make sure the data arrived
     self.assertEquals(Page.objects.filter(offering=crs, label="PageExists").count(), 0)
     p = Page.objects.get(offering=crs, label="PageChanged")
     v = p.current_version()
     self.assertEqual(v.title, "Another Page")
     self.assertEqual(v.get_wikitext(), "This is some **new** page\n\ncontent.")
     
     p = Page.objects.get(offering=crs, label="Index")
     v = p.current_version()
     self.assertEqual(v.title, u"The Cours\u00e9 Page")
     self.assertEqual(v.get_wikitext(), 'This page is special in **some** way. \\(x~^2+1 = \\frac{1}{2}\\).\n\nGoodbye world!')
     self.assert_('math' in v.config)
     self.assertEqual(v.config['math'], True)
Esempio n. 6
0
def convert_grades(request, grade_source_slug):
    grade_source = get_object_or_404(GradeSource, slug=grade_source_slug)
    RuleForm = (grade_source.scale == 'DISC') and DiscreteGradeForm or ContinuousGradeForm

    # XXX: This is required because our form class requires a GradeSource.
    RuleFormSet = formset_factory(RuleForm, extra=10)
    RuleFormSet.form = functools.partial(RuleForm, grade_source=grade_source)

    transfer_rules = []
    transfer_grade_points = decimal.Decimal('0.00')
    transfer_credits = decimal.Decimal('0.00')
    secondary_grade_points = decimal.Decimal('0.00')
    secondary_credits = decimal.Decimal('0.00')

    if request.POST:
        formset = RuleFormSet(request.POST)
        if not formset.is_valid():
            messages.error(request, "Please correct the error below")

        # Save the data for later
        if request.POST.get("save_grades"):
            key = new_feed_token()
            arch = UserArchive.objects.create(grade_source=grade_source, slug=key, data=formset.data)
            url = arch.get_absolute_url()

            # Log that a save happened
            LogEntry.objects.create(userid=request.user.username,
                                    description="saved GPA calculation from {} {}".format(grade_source, key),
                                    related_object=arch)

            message = ('Grade conversion saved. You can share this URL if you want others to see these grades: {}'
                       .format(request.build_absolute_uri(url)))
            messages.add_message(request, messages.SUCCESS, message)
            return HttpResponseRedirect(url)
        else:
            tmp = _get_transfer_rules(formset)
            transfer_rules, transfer_grade_points, transfer_credits, secondary_grade_points, secondary_credits = tmp
    else:
        formset = RuleFormSet()
        transfer_rules = [None for _ in formset]

    if transfer_credits > 0:
        transfer_gpa = transfer_grade_points / transfer_credits
    else:
        transfer_gpa = None

    if secondary_credits > 0:
        secondary_gpa = secondary_grade_points / secondary_credits
    else:
        secondary_gpa = None

    return {
        'grade_source': grade_source,
        'formset': formset,
        'transfer_rules': iter(transfer_rules),
        'transfer_gpa': transfer_gpa,
        'secondary_gpa': secondary_gpa,
    }
Esempio n. 7
0
def convert_grades(request, grade_source_slug):
    grade_source = get_object_or_404(GradeSource, slug=grade_source_slug)
    RuleForm = (grade_source.scale == 'DISC') and DiscreteGradeForm or ContinuousGradeForm

    # XXX: This is required because our form class requires a GradeSource.
    RuleFormSet = formset_factory(RuleForm, extra=10)
    RuleFormSet.form = functools.partial(RuleForm, grade_source=grade_source)

    transfer_rules = []
    transfer_grade_points = decimal.Decimal('0.00')
    transfer_credits = decimal.Decimal('0.00')
    secondary_grade_points = decimal.Decimal('0.00')
    secondary_credits = decimal.Decimal('0.00')

    if request.POST:
        formset = RuleFormSet(request.POST)
        if not formset.is_valid():
            messages.error(request, "Please correct the error below")

        # Save the data for later
        if request.POST.get("save_grades"):
            key = new_feed_token()
            arch = UserArchive.objects.create(grade_source=grade_source, slug=key, data=formset.data)
            url = arch.get_absolute_url()

            # Log that a save happened
            LogEntry.objects.create(userid=request.user.username,
                                    description="saved GPA calculation from {} {}".format(grade_source, key),
                                    related_object=arch)

            message = ('Grade conversion saved. You can share this URL if you want others to see these grades: {}'
                       .format(request.build_absolute_uri(url)))
            messages.add_message(request, messages.SUCCESS, message)
            return HttpResponseRedirect(url)
        else:
            tmp = _get_transfer_rules(formset)
            transfer_rules, transfer_grade_points, transfer_credits, secondary_grade_points, secondary_credits = tmp
    else:
        formset = RuleFormSet()
        transfer_rules = [None for _ in formset]

    if transfer_credits > 0:
        transfer_gpa = transfer_grade_points / transfer_credits
    else:
        transfer_gpa = None

    if secondary_credits > 0:
        secondary_gpa = secondary_grade_points / secondary_credits
    else:
        secondary_gpa = None

    return {
        'grade_source': grade_source,
        'formset': formset,
        'transfer_rules': iter(transfer_rules),
        'transfer_gpa': transfer_gpa,
        'secondary_gpa': secondary_gpa,
    }
Esempio n. 8
0
def change_advisor_token(request):
    user = get_object_or_404(Person, userid=request.user.username)
    config = get_object_or_404(UserConfig, user=user, key='advisor-token')
    if request.method == 'POST':
        form = FeedSetupForm(request.POST)
        if form.is_valid():
            config.value['token'] = new_feed_token()
            config.save()
            messages.add_message(request, messages.SUCCESS, 'Advisor notes API token changed')
            return HttpResponseRedirect(reverse('config:config'))
    else:
        form = FeedSetupForm({'agree': True})
        
    return render(request, "dashboard/change_advisor_token.html", {"form": form})
Esempio n. 9
0
def change_advisor_token(request):
    user = get_object_or_404(Person, userid=request.user.username)
    config = get_object_or_404(UserConfig, user=user, key='advisor-token')
    if request.method == 'POST':
        form = FeedSetupForm(request.POST)
        if form.is_valid():
            config.value['token'] = new_feed_token()
            config.save()
            messages.add_message(request, messages.SUCCESS, 'Advisor notes API token changed')
            return HttpResponseRedirect(reverse('dashboard.views.config'))
    else:
        form = FeedSetupForm({'agree': True})
        
    return render(request, "dashboard/change_advisor_token.html", {"form": form})
Esempio n. 10
0
def enable_advisor_token(request):
    user = get_object_or_404(Person, userid=request.user.username)
    configs = UserConfig.objects.filter(user=user, key="advisor-token")
    if not len(configs) is 0:
        raise Http404
    if request.method == 'POST':
        form = FeedSetupForm(request.POST)
        if form.is_valid():
            config = {'token': new_feed_token()}
            uc = UserConfig(user=user, key="advisor-token", value=config)
            uc.save()
            messages.add_message(request, messages.SUCCESS, 'Advisor notes API enabled')
            return HttpResponseRedirect(reverse('config:config'))
    else:
        form = FeedSetupForm()
    return render(request, "dashboard/enable_advisor_token.html", {"form": form})
Esempio n. 11
0
def enable_advisor_token(request):
    user = get_object_or_404(Person, userid=request.user.username)
    configs = UserConfig.objects.filter(user=user, key="advisor-token")
    if not len(configs) is 0:
        raise Http404
    if request.method == 'POST':
        form = FeedSetupForm(request.POST)
        if form.is_valid():
            config = {'token': new_feed_token()}
            uc = UserConfig(user=user, key="advisor-token", value=config)
            uc.save()
            messages.add_message(request, messages.SUCCESS, 'Advisor notes API enabled')
            return HttpResponseRedirect(reverse('dashboard.views.config'))
    else:
        form = FeedSetupForm()
    return render(request, "dashboard/enable_advisor_token.html", {"form": form})
Esempio n. 12
0
def create_news_url(request):
    user = get_object_or_404(Person, userid=request.user.username)
    configs = UserConfig.objects.filter(user=user, key="feed-token")
    if request.method == 'POST':
        form = FeedSetupForm(request.POST)
        if form.is_valid():
            token = new_feed_token()
            if configs:
                c = configs[0]
                c.value = {'token':token}
            else:
                c = UserConfig(user=user, key="feed-token", value={'token':token})
            c.save()
            messages.add_message(request, messages.SUCCESS, 'Feed URL configured.')
            return HttpResponseRedirect(reverse('config:config'))
    else:
        if configs:
            # pre-check if we're changing the token
            form = FeedSetupForm({'agree': True})
        else:
            form = FeedSetupForm()

    context = {'form': form}
    return render(request, "dashboard/news_url.html", context)