Пример #1
0
def add(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.view', course_prefix, course_suffix)
    
    menu_slug = None
    if request.POST.get("menu_slug") != "":
        menu_slug = request.POST.get("menu_slug")
        
    section = None
    if request.POST.get("section_id") != "":
        section = ContentSection.objects.get(id=request.POST.get("section_id"))
    
    if request.POST.get("menu_slug") != "":
        index = len(AdditionalPage.objects.filter(course=common_page_data['course'],menu_slug=request.POST.get("menu_slug")))
    else:
        index = section.getNextIndex()
        
    staging_page = AdditionalPage(course=common_page_data['staging_course'], menu_slug=menu_slug, section=section, title=request.POST.get("title"), slug=request.POST.get("slug"), index=index, mode='staging')
    staging_page.save()
    
    staging_page.create_production_instance()
    
    if request.POST.get("menu_slug") == "":
        return redirect('courses.views.course_materials', course_prefix, course_suffix)
    else:
        return redirect(request.META['HTTP_REFERER'])
Пример #2
0
def save_content_order(request):
    try:
        common_page_data = get_common_page_data(request, request.POST.get("course_prefix"), request.POST.get("course_suffix"))
    except:
        raise Http404
        
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main', request.POST.get("course_prefix"), request.POST.get("course_suffix"))
        
    SECTION = ContentSection.objects.get(pk=request.POST.get('section_id'))
    section_structures = get_course_materials(common_page_data=common_page_data, get_video_content=True, get_additional_page_content = True, get_file_content=True, get_exam_content=True, SECTION=SECTION)

    def set_index_from_POST(item):
        tag       = item['type']
        image     = item[tag].image
        new_index = request.POST.get("order_"+tag+"_"+str(item[tag].id))
        item[tag].index = new_index
        item[tag].save()
        image.index = new_index
        image.save()
    
    for section_structure in section_structures:

        for item in section_structure['items']:
            set_index_from_POST(item)

    return redirect(request.META['HTTP_REFERER'])
Пример #3
0
def upload(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix,
                                            course_suffix)

    if request.method == "POST":
        form = FileUploadForm(request.POST,
                              request.FILES,
                              course=common_page_data['course'])
        if form.is_valid():
            new_file = form.save(commit=False)
            new_file.course = common_page_data['course']
            new_file.index = new_file.section.getNextIndex()
            new_file.mode = 'draft'
            new_file.handle = course_prefix + "--" + course_suffix

            new_file.save()
            new_file.create_ready_instance()

            create_contentgroup_entries_from_post(
                request, 'parent', new_file.image, 'file',
                request.POST.get('display_style', 'list'))

            return redirect('courses.views.course_materials', course_prefix,
                            course_suffix)

    form = FileUploadForm(course=common_page_data['course'])
    reverseview = 'courses.files.actions.upload'
    return render(
        request, 'files/upload.html', {
            'reverseview': reverseview,
            'common_page_data': common_page_data,
            'form': form,
        })
Пример #4
0
def list(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404

    if "id" in request.GET:
        # process Video model instance with this youtube id
        # and other stuff
        try:
            video = Video.objects.get(pk=request.GET["vid"])
        except Video.DoesNotExist:
            raise Http404

        video.url = request.GET["id"]
        video.save()
        video.create_ready_instance()

    section_structures = get_course_materials(common_page_data=common_page_data, get_video_content=True)

    form = None
    if request.common_page_data["course_mode"] == "draft":
        form = LiveDateForm()

    return render_to_response(
        "videos/" + common_page_data["course_mode"] + "/list.html",
        {
            "common_page_data": common_page_data,
            "section_structures": section_structures,
            "context": "video_list",
            "form": form,
        },
        context_instance=RequestContext(request),
    )
Пример #5
0
def add_video(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)

    if not common_page_data['is_course_admin']:
        return redirect('courses.views.view', course_prefix, course_suffix)

    index = len(Video.objects.filter(topic_id=request.POST.get("topic_id")))

    draft_video = Video(
        course=common_page_data['draft_course'],
        topic_id=int(request.POST.get("topic_id")),
        title=request.POST.get("title"),
        #description=request.POST.get("description"),
        type='youtube',
        url=request.POST.get("yt_id"),
        slug=request.POST.get("slug"),
        mode='draft',
        index=index
    )
    draft_video.save()

    draft_video.create_ready_instance()

    return redirect(request.META['HTTP_REFERER'])
Пример #6
0
def upload(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)

    if request.method == "POST":
        form = FileUploadForm(request.POST, request.FILES, course=common_page_data['course'])
        if form.is_valid():
            new_file = form.save(commit=False)
            new_file.course = common_page_data['course']
            new_file.index = new_file.section.getNextIndex()
            new_file.mode = 'draft'
            new_file.handle = course_prefix + "--" + course_suffix

            new_file.save()
            new_file.create_ready_instance()

            parent_type = request.POST.get('parent')
            if parent_type and parent_type[:4] != 'none':
                parent_type, parent_id = parent_type.split(',')
            else:
                parent_type, parent_id = None, None
            if parent_type:
                parent_ref = ContentGroup.groupable_types[parent_type].objects.get(id=long(parent_id)).image
                content_group_groupid = ContentGroup.add_parent(new_file.image.course, parent_type, parent_ref.image)
                ContentGroup.add_child(content_group_groupid, 'file', new_file.image, display_style=request.POST.get('display_style'))

            return redirect('courses.views.course_materials', course_prefix, course_suffix)
    else:
        form = FileUploadForm(course=common_page_data['course'])

    return render(request, 'files/upload.html',
            {'common_page_data': common_page_data,
             'form': form,
             })
Пример #7
0
def create_action(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    data = {'common_page_data': common_page_data, 'course_prefix': course_prefix, 'course_suffix': course_suffix}
    
    if request.method == 'POST':
        pset = ProblemSet(course = common_page_data['course'])
        form = CreateProblemSet(request.POST, request.FILES, course=common_page_data['course'], instance=pset)
        if form.is_valid():
            new_pset = form.save(commit=False)
            new_pset.course = common_page_data['course']
            new_pset.mode = 'draft'
            new_pset.handle = course_prefix + "--" + course_suffix
            new_pset.path = "/"+request.POST['course_prefix']+"/"+request.POST['course_suffix']+"/problemsets/"+new_pset.slug+"/load_problem_set"

            new_pset.save()
            section = new_pset.section
            new_pset.index = section.getNextIndex()
            new_pset.save()
            new_pset.create_ready_instance()
            return HttpResponseRedirect(reverse('problemsets.views.manage_exercises', args=(request.POST['course_prefix'], request.POST['course_suffix'], new_pset.slug,)))

    else:
        form = CreateProblemSet(course=common_page_data['course'])
    data['form'] = form
    return render_to_response('problemsets/create.html', data, context_instance=RequestContext(request))
 def process_view (self, request, view_func, view_args, view_kwargs):
     if (('course_prefix' not in view_kwargs) or 
         ('course_suffix' not in view_kwargs)):
         #No course information in the URL.  There is a special case that has it as a POST parameter (Why?)
         #Handle those here
         if ((not request.POST.__contains__('course_prefix')) or
             (not request.POST.get('course_prefix')) or
             (not request.POST.__contains__('course_suffix')) or
             (not request.POST.get('course_suffix'))):
             return None
         else:
             #The course info is in the POST in this case
             cp = request.POST.get('course_prefix')
             cs = request.POST.get('course_suffix')
     else:
         cp = view_kwargs['course_prefix']
         cs = view_kwargs['course_suffix']
         
 
     try:
         request.common_page_data=get_common_page_data(request, cp, cs)
         #logger.info('Ran get_common_page_data course: ' + request.common_page_data['course_mode'])
         return None
     except Course.DoesNotExist:
         raise Http404
Пример #9
0
def upload(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)

    if request.method == "POST":
        form = FileUploadForm(request.POST, request.FILES, course=common_page_data["course"])
        if form.is_valid():
            new_file = form.save(commit=False)
            new_file.course = common_page_data["course"]
            new_file.index = new_file.section.getNextIndex()
            new_file.mode = "draft"
            new_file.handle = course_prefix + "--" + course_suffix

            new_file.save()
            new_file.create_ready_instance()

            create_contentgroup_entries_from_post(
                request, "parent", new_file.image, "file", request.POST.get("display_style", "list")
            )

            return redirect("courses.views.course_materials", course_prefix, course_suffix)
    else:
        form = FileUploadForm(course=common_page_data["course"])
    reverseview = "courses.files.actions.upload"

    return render(
        request, "files/upload.html", {"reverseview": reverseview, "common_page_data": common_page_data, "form": form}
    )
Пример #10
0
def add_announcement(request):
    try:
        common_page_data = get_common_page_data(request, request.POST.get("course_prefix"), request.POST.get("course_suffix"))
    except:
        raise Http404
        
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main', request.POST.get("course_prefix"), request.POST.get("course_suffix"))
        
    index = len(Announcement.objects.getByCourse(course=common_page_data['course']))
    announcement = Announcement(
        course=common_page_data['course'],
        title=request.POST.get("title"),
        description=request.POST.get("description"),
        index=index,
        mode='draft',
        owner=request.user,
    )
    announcement.save()
    
    announcement.create_ready_instance()
    
    if request.POST.get("commit") == '1':
        announcement.commit()
    
    return redirect(request.META['HTTP_REFERER'])
Пример #11
0
def save_exercises(request):
    # Function should only be accessed from submitting a form
    if request.method != "POST":
        return redirect(request.META["HTTP_REFERER"])

    course_prefix = request.POST["course_prefix"]
    course_suffix = request.POST["course_suffix"]
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    pset = ProblemSet.objects.get(id=request.POST["pset_id"])
    action = request.POST["action"]
    if action == "Reset to Ready":
        pset.revert()
        return HttpResponseRedirect(
            reverse(
                "problemsets.views.manage_exercises",
                args=(request.POST["course_prefix"], request.POST["course_suffix"], pset.slug),
            )
        )
    else:
        psetToExs = list(ProblemSetToExercise.objects.getByProblemset(pset))
        for n in range(0, len(psetToExs)):
            listName = "exercise_order[" + str(n) + "]"
            psetToExs[n].number = request.POST[listName]
            psetToExs[n].save()
        if action == "Save and Set as Ready":
            pset.commit()
        return HttpResponseRedirect(
            reverse("problemsets.views.listAll", args=(request.POST["course_prefix"], request.POST["course_suffix"]))
        )
Пример #12
0
def add_announcement(request):
    try:
        common_page_data = get_common_page_data(
            request, request.POST.get("course_prefix"),
            request.POST.get("course_suffix"))
    except:
        raise Http404

    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main',
                        request.POST.get("course_prefix"),
                        request.POST.get("course_suffix"))

    index = len(
        Announcement.objects.getByCourse(course=common_page_data['course']))
    announcement = Announcement(
        course=common_page_data['course'],
        title=request.POST.get("title"),
        description=request.POST.get("description"),
        index=index,
        mode='draft',
        owner=request.user,
    )
    announcement.save()

    announcement.create_ready_instance()

    if request.POST.get("commit") == '1':
        announcement.commit()

    return redirect(request.META['HTTP_REFERER'])
Пример #13
0
def create_form(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request, course_prefix,
                                                course_suffix)
    except:
        raise Http404

    data = {'common_page_data': common_page_data}
    form = CreateProblemSet(course=common_page_data['course'],
                            initial={
                                'late_penalty':
                                10,
                                'assessment_type':
                                'formative',
                                'submissions_permitted':
                                0,
                                'resubmission_penalty':
                                0,
                                'due_date': (datetime.today() + timedelta(7)),
                                'grace_period':
                                (datetime.today() + timedelta(14)),
                                'partial_credit_deadline':
                                (datetime.today() + timedelta(21))
                            })
    data['form'] = form
    data['course_prefix'] = course_prefix
    data['course_suffix'] = course_suffix
    return render_to_response('problemsets/create.html',
                              data,
                              context_instance=RequestContext(request))
Пример #14
0
def manage_nav_menu(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix, use_cache=False)
    except e, msg:
        # Remark to console exception characterization so we can make this clause more specific
        print "Error in manage_nav_menu getting common_page_data, exception caught: %s" % msg
        raise Http404
Пример #15
0
def save_announcement(request):
    try:
        common_page_data = get_common_page_data(
            request, request.POST.get("course_prefix"), request.POST.get("course_suffix")
        )
    except:
        raise Http404

    if not common_page_data["is_course_admin"]:
        return redirect("courses.views.main", request.POST.get("course_prefix"), request.POST.get("course_suffix"))

    announcement = Announcement.objects.get(id=request.POST.get("announcement_id"))
    announcement.title = request.POST.get("title")
    announcement.description = request.POST.get("description")
    announcement.save()

    if request.POST.get("commit") == "1":
        announcement.commit()

    if request.POST.get("revert") == "1":
        announcement.revert()

    return redirect(
        "courses.announcements.views.list", request.POST.get("course_prefix"), request.POST.get("course_suffix")
    )
Пример #16
0
def save_content_order(request):
    try:
        common_page_data = get_common_page_data(
            request, request.POST.get("course_prefix"), request.POST.get("course_suffix")
        )
    except:
        raise Http404

    if not common_page_data["is_course_admin"]:
        return redirect("courses.views.main", request.POST.get("course_prefix"), request.POST.get("course_suffix"))

    section_structures = get_course_materials(
        common_page_data=common_page_data,
        get_video_content=True,
        get_pset_content=True,
        get_additional_page_content=True,
        get_file_content=True,
        get_exam_content=True,
    )

    for section_structure in section_structures:
        if section_structure["section"].id == long(request.POST.get("section_id")):
            for item in section_structure["items"]:
                if item["type"] == "video":
                    item["video"].index = request.POST.get("order_video_" + str(item["video"].id))
                    item["video"].save()
                    video_image = item["video"].image
                    video_image.index = request.POST.get("order_video_" + str(item["video"].id))
                    video_image.save()
                elif item["type"] == "problem_set":
                    item["problem_set"].index = request.POST.get("order_problem_set_" + str(item["problem_set"].id))
                    item["problem_set"].save()
                    problem_set_image = item["problem_set"].image
                    problem_set_image.index = request.POST.get("order_problem_set_" + str(item["problem_set"].id))
                    problem_set_image.save()
                elif item["type"] == "additional_page":
                    item["additional_page"].index = request.POST.get(
                        "order_additional_page_" + str(item["additional_page"].id)
                    )
                    item["additional_page"].save()
                    additional_page_image = item["additional_page"].image
                    additional_page_image.index = request.POST.get(
                        "order_additional_page_" + str(item["additional_page"].id)
                    )
                    additional_page_image.save()
                elif item["type"] == "file":
                    item["file"].index = request.POST.get("order_file_" + str(item["file"].id))
                    item["file"].save()
                    file_image = item["file"].image
                    file_image.index = request.POST.get("order_file_" + str(item["file"].id))
                    file_image.save()
                elif item["type"] == "exam":
                    item["exam"].index = request.POST.get("order_exam_" + str(item["exam"].id))
                    item["exam"].save()
                    exam_image = item["exam"].image
                    exam_image.index = request.POST.get("order_exam_" + str(item["exam"].id))
                    exam_image.save()
            break

    return redirect(request.META["HTTP_REFERER"])
Пример #17
0
def save_exercises(request):
    #Function should only be accessed from submitting a form
    if request.method != 'POST':
        return redirect(request.META['HTTP_REFERER'])

    course_prefix = request.POST['course_prefix']
    course_suffix = request.POST['course_suffix']
    common_page_data = get_common_page_data(request, course_prefix,
                                            course_suffix)
    pset = ProblemSet.objects.get(id=request.POST['pset_id'])
    action = request.POST['action']
    if action == 'Reset to Ready':
        pset.revert()
        return HttpResponseRedirect(
            reverse('problemsets.views.manage_exercises',
                    args=(
                        request.POST['course_prefix'],
                        request.POST['course_suffix'],
                        pset.slug,
                    )))
    else:
        psetToExs = list(ProblemSetToExercise.objects.getByProblemset(pset))
        for n in range(0, len(psetToExs)):
            listName = "exercise_order[" + str(n) + "]"
            psetToExs[n].number = request.POST[listName]
            psetToExs[n].save()
        if action == 'Save and Set as Ready':
            pset.commit()
        return HttpResponseRedirect(
            reverse('problemsets.views.listAll',
                    args=(request.POST['course_prefix'],
                          request.POST['course_suffix'])))
Пример #18
0
def admin(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404

    return render_to_response('courses/admin.html', {'common_page_data':common_page_data}, context_instance=RequestContext(request))
Пример #19
0
def save_announcement(request):
    try:
        common_page_data = get_common_page_data(
            request, request.POST.get("course_prefix"),
            request.POST.get("course_suffix"))
    except:
        raise Http404

    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main',
                        request.POST.get("course_prefix"),
                        request.POST.get("course_suffix"))

    announcement = Announcement.objects.get(
        id=request.POST.get("announcement_id"))
    announcement.title = request.POST.get("title")
    announcement.description = request.POST.get("description")
    announcement.save()

    if request.POST.get("commit") == '1':
        announcement.commit()

    if request.POST.get("revert") == '1':
        announcement.revert()

    return redirect('courses.announcements.views.list',
                    request.POST.get("course_prefix"),
                    request.POST.get("course_suffix"))
Пример #20
0
def edit_action(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    data = {'common_page_data': common_page_data, 'course_prefix': course_prefix, 'course_suffix': course_suffix}
    pset_id = request.POST.get("pset_id")

    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main', course_prefix, course_suffix)

    if request.method == 'POST':
        pset = ProblemSet.objects.get(id=pset_id)

        action = request.POST['action']
        if action == "Reset to Ready":
            pset.revert()
            form = CreateProblemSet(course=common_page_data['course'], instance=pset)
        else:
            form = CreateProblemSet(request.POST, course=common_page_data['course'], instance=pset)
            if form.is_valid():
                form.save()
                pset.path = "/"+course_prefix+"/"+course_suffix+"/problemsets/"+pset.slug+"/load_problem_set"
                pset.save()
                if action == "Save and Set as Ready":
                    pset.commit()
                return HttpResponseRedirect(reverse('problemsets.views.list', args=(course_prefix, course_suffix)))

    data['form'] = form
    data['pset'] = pset
    return render(request, 'problemsets/edit.html', data)
Пример #21
0
def view(request, course_prefix, course_suffix, slug):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404

    try:
        video = Video.objects.get(course=common_page_data['course'], slug=slug)
    except Video.DoesNotExist:
        raise Http404
    
    if not common_page_data['is_course_admin']:
        visit_log = PageVisitLog(
            course = common_page_data['ready_course'],
            user = request.user,
            page_type= 'video',
            object_id = str(video.id),
        )
        visit_log.save()

    video_rec = request.user.videoactivity_set.filter(video=video)
    if video_rec:
        video_rec = video_rec[0]
    else:
        #note student field to be renamed to user, VideoActivity for all users now
        video_rec = VideoActivity(student=request.user, course=common_page_data['course'], video=video)
        video_rec.save()

    if video.mode == 'ready':
        draft_version = video.image
        video = draft_version

    return render_to_response('videos/view.html', {'common_page_data': common_page_data, 'video': video, 'video_rec':video_rec}, context_instance=RequestContext(request))
Пример #22
0
def upload(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix,
                                            course_suffix)

    if request.method == "POST":
        form = FileUploadForm(request.POST,
                              request.FILES,
                              course=common_page_data['course'])
        if form.is_valid():
            new_file = form.save(commit=False)
            new_file.course = common_page_data['course']
            new_file.index = new_file.section.getNextIndex()
            new_file.mode = 'draft'
            new_file.handle = course_prefix + "--" + course_suffix

            new_file.save()
            new_file.create_ready_instance()
            return redirect('courses.views.course_materials', course_prefix,
                            course_suffix)
    else:
        form = FileUploadForm(course=common_page_data['course'])

    return render(request, 'files/upload.html', {
        'common_page_data': common_page_data,
        'form': form,
    })
Пример #23
0
def edit_video(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    slug = request.POST.get("video_slug")

    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main', course_prefix, course_suffix)

    if request.method == 'POST':
        video = common_page_data['course'].video_set.all().get(slug=slug)

        action = request.POST['action']
        if action == "Reset to Ready":
            video.revert()
            form = S3UploadForm(course=common_page_data['course'], instance=video)
        else:
            form = S3UploadForm(request.POST, request.FILES, course=common_page_data['course'], instance=video)
            if form.is_valid():
                form.save()
                if action == "Save and Set as Ready":
                    video.commit()
                return redirect('courses.videos.views.list', course_prefix, course_suffix)

    return render(request, 'videos/edit.html',
                  {'common_page_data': common_page_data,
                   'slug': slug,
                   'form': form,
                   })
Пример #24
0
def create_action(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    data = {'common_page_data': common_page_data, 'course_prefix': course_prefix, 'course_suffix': course_suffix}
    
    if request.method == 'POST':
        pset = ProblemSet(course = common_page_data['course'])
        form = CreateProblemSet(request.POST, request.FILES, course=common_page_data['course'], instance=pset)
        if form.is_valid():
            new_pset = form.save(commit=False)
            new_pset.course = common_page_data['course']
            new_pset.mode = 'draft'
            new_pset.handle = course_prefix + "--" + course_suffix
            new_pset.path = "/"+request.POST['course_prefix']+"/"+request.POST['course_suffix']+"/problemsets/"+new_pset.slug+"/load_problem_set"

            new_pset.save()
            section = new_pset.section
            new_pset.index = section.getNextIndex()
            new_pset.save()
            new_pset.create_ready_instance()
            return HttpResponseRedirect(reverse('problemsets.views.manage_exercises', args=(request.POST['course_prefix'], request.POST['course_suffix'], new_pset.slug,)))

    else:
        form = CreateProblemSet(course=common_page_data['course'])
    data['form'] = form
    return render_to_response('problemsets/create.html', data, context_instance=RequestContext(request))
Пример #25
0
def upload(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    exam_id = request.POST.get("exam_id", "")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)

    data = {"common_page_data": common_page_data}

    if request.method == "POST":
        request.session["video_privacy"] = request.POST.get("video_privacy")

        # Need partial instance with course for form slug validation
        new_video = Video(course=common_page_data["course"])
        form = S3UploadForm(request.POST, request.FILES, course=common_page_data["course"], instance=new_video)
        if form.is_valid():
            new_video.index = new_video.section.getNextIndex()
            new_video.mode = "draft"
            new_video.handle = course_prefix + "--" + course_suffix

            if exam_id:
                try:
                    exam = Exam.objects.get(id=exam_id)
                except Exam.DoesNotExist:
                    return HttpResponseBadRequest("The exam you wanted to link to this video was not found!")
                new_video.exam = exam

                exam.live_datetime = new_video.live_datetime
                exam.save()
                if exam.image:
                    exam.image.live_datetime = new_video.live_datetime
                    exam.image.save()

            # Bit of jiggery pokery to so that the id is set when the upload_path function is called.
            # Now storing file with id appended to the file path so that thumbnail and associated manifest files
            # are easily associated with the video by putting them all in the same directory.
            new_video.file = None
            new_video.save()
            new_video.file = form.cleaned_data["file"]
            new_video.save()
            new_video.create_ready_instance()
            # print new_video.file.url

            # kick off remote jobs
            kelvinator.tasks.kelvinate.delay(new_video.file.name)
            kelvinator.tasks.resize.delay(new_video.file.name, "large")
            kelvinator.tasks.resize.delay(new_video.file.name, "small")

            if new_video.url:
                return redirect("courses.videos.views.list", course_prefix, course_suffix)

            authUrl = GetOAuth2Url(request, new_video)
            # eventually should store an access token, so they don't have to give permission everytime
            return redirect(authUrl)
        #    return redirect("http://" + request.META['HTTP_HOST'])

    else:
        form = S3UploadForm(course=common_page_data["course"])
    data["form"] = form

    return render_to_response("videos/s3upload.html", data, context_instance=RequestContext(request))
Пример #26
0
def prototype(request, course_prefix, course_suffix):
    """FIXME write a doc string"""
    user = request.user
    if not request.common_page_data:
        try:
            request.common_page_data = get_common_page_data(
                request, course_prefix, course_suffix)
        except:
            raise Http404
    jabber_base = getattr(settings, 'JABBER_DOMAIN', '')
    if not jabber_base:
        raise Http404
    if user.is_authenticated():
        environment = {
            'request': request,
            'course_prefix': course_prefix,
            'course_suffix': course_suffix,
            'jabber_base': jabber_base,
            'user': user,
            'nick': user.username + '@' + jabber_base,
            'course': request.common_page_data['course'],
        }
        return render_to_response('chat/prototype.html',
                                  environment,
                                  context_instance=RequestContext(request))
    else:
        return redirect('courses.views.main', course_prefix, course_suffix)
Пример #27
0
def show(request, course_prefix, course_suffix, pset_slug):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404
    try:
        ps = ProblemSet.objects.getByCourse(course=common_page_data['course']).get(slug=pset_slug)
    except:
        messages.add_message(request,messages.ERROR, 'This Problemset is not visible in the student view at this time. Please note that students will not see this message.')
        return HttpResponseRedirect(reverse('problemsets.views.list', args=(course_prefix, course_suffix)))

        
    problem_activities = ProblemActivity.objects.select_related('problemset_to_exercise').filter(student=request.user, problemset_to_exercise__problemSet=ps)
    psetToExs = ProblemSetToExercise.objects.getByProblemset(ps)
    activity_list = []
    for psetToEx in psetToExs:
        #attempts = problem_activities.filter(problemset_to_exercise=psetToEx).order_by('-time_created')
        attempts = problem_activities.filter(problemset_to_exercise=psetToEx).order_by('-complete', '-attempt_number')
        if len(attempts) > 0:
            activity_list.append(attempts[0])
    return render_to_response('problemsets/problemset.html',
                              {'common_page_data':common_page_data,
                               'pset': ps,
                               'pset_url':ps.path,
                               'pset_type':ps.assessment_type,
                               'pset_penalty':ps.resubmission_penalty,
                               'pset_attempts_allowed':ps.submissions_permitted,
                               'activity_list': activity_list,
                              },
                              context_instance=RequestContext(request))
Пример #28
0
def view(request, course_prefix, course_suffix, slug):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404

    try:
        video = Video.objects.get(course=common_page_data["course"], slug=slug)
    except Video.DoesNotExist:
        raise Http404

    if not common_page_data["is_course_admin"]:
        visit_log = PageVisitLog(
            course=common_page_data["ready_course"], user=request.user, page_type="video", object_id=str(video.id)
        )
        visit_log.save()

    video_rec = request.user.videoactivity_set.filter(video=video)
    if video_rec:
        video_rec = video_rec[0]
    else:
        # note student field to be renamed to user, VideoActivity for all users now
        video_rec = VideoActivity(student=request.user, course=common_page_data["course"], video=video)
        video_rec.save()

    return render(
        request, "videos/view.html", {"common_page_data": common_page_data, "video": video, "video_rec": video_rec}
    )
Пример #29
0
def save_exercises(request):
    #Function should only be accessed from submitting a form
    if request.method != 'POST':
        return redirect(request.META['HTTP_REFERER'])

    course_prefix = request.POST['course_prefix']
    course_suffix = request.POST['course_suffix']
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)
 
    #don't catch video DoesNotExist here because we want some tangible error action to happen if
    #the video id changes in form submission, like mailing us
    video = Video.objects.get(id=request.POST['video_id'])

    action = request.POST['action']
    if action == 'Reset to Ready':
        video.revert()
        return HttpResponseRedirect(reverse('courses.videos.views.manage_exercises', args=(request.POST['course_prefix'], request.POST['course_suffix'], video.slug,)))
    else:
        videoToExs = VideoToExercise.objects.getByVideo(video)
        for videoToEx in videoToExs:
            videoToEx.video_time = request.POST[videoToEx.exercise.fileName]
            videoToEx.save()
        if action == 'Save and Set as Ready':
            video.commit()
        return HttpResponseRedirect(reverse('courses.videos.views.list', args=(request.POST['course_prefix'], request.POST['course_suffix'],)))
Пример #30
0
def list(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404

    if 'id' in request.GET:
        #process Video model instance with this youtube id
        #and other stuff
        try:
            video = Video.objects.get(pk=request.GET['vid'])
        except Video.DoesNotExist:
            raise Http404

        video.url = request.GET['id']
        video.save()
        video.create_ready_instance()

    section_structures = get_course_materials(common_page_data=common_page_data, get_video_content=True)

    form = None
    if request.common_page_data['course_mode'] == "draft":
        form = LiveDateForm()

    return render_to_response('videos/'+common_page_data['course_mode']+'/list.html', {'common_page_data': common_page_data, 'section_structures':section_structures, 'context':'video_list', 'form': form}, context_instance=RequestContext(request))
Пример #31
0
def list(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404

    if 'id' in request.GET:
        #process Video model instance with this youtube id
        #and other stuff
        try:
            video = Video.objects.get(pk=request.GET['vid'])
        except Video.DoesNotExist:
            raise Http404

        video.url = request.GET['id']
        video.save()
        video.create_ready_instance()

    section_structures = get_course_materials(common_page_data=common_page_data, get_video_content=True)

    form = None
    if request.common_page_data['course_mode'] == "draft":
        form = LiveDateForm()

    return render_to_response('videos/'+common_page_data['course_mode']+'/list.html', {'common_page_data': common_page_data, 'section_structures':section_structures, 'context':'video_list', 'form': form}, context_instance=RequestContext(request))
Пример #32
0
def add_announcement(request):
    try:
        common_page_data = get_common_page_data(request, request.POST.get("course_prefix"), request.POST.get("course_suffix"))
    except:
        raise Http404
        
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main', request.POST.get("course_prefix"), request.POST.get("course_suffix"))
        
    index = len(Announcement.objects.getByCourse(course=common_page_data['course']))
    announcement = Announcement(
        course=common_page_data['course'],
        title=request.POST.get("title"),
        description=request.POST.get("description"),
        index=index,
        mode='draft',
        owner=request.user,
    )
    announcement.save()
    
    announcement.create_ready_instance()
    
    if request.POST.get("commit") == '1':
        announcement.commit()

    if request.POST.get("email"):
        request.session['email_subject'] = announcement.title
        request.session['email_message'] = announcement.description
        messages.add_message(request, messages.SUCCESS, 'Your announcement is published! Now send it to the students.')
        return redirect('courses.email_members.views.email_members', request.POST.get("course_prefix"), request.POST.get("course_suffix"))
    
    return redirect(request.META['HTTP_REFERER'])
Пример #33
0
def preview_login(request, course_prefix, course_suffix):
    """
    Login to c2g in preview mode
    """
    login_form = AuthenticationForm(data=request.POST)
    if login_form.is_valid():
        auth_login(request, login_form.get_user())
        if not request.common_page_data['course'].preview_only_mode and \
           date.today() >= request.common_page_data['course'].calendar_start :
            redirect_to = 'courses.views.main'
        else:
            redirect_to = 'courses.preview.views.preview'
        return redirect(reverse(redirect_to, args=[course_prefix, course_suffix]))
    else:
        form = form_class(initial={'course_prefix':course_prefix,'course_suffix':course_suffix})
        context = RequestContext(request)                
        class_template='previews/'+request.common_page_data['course'].handle+'.html'
        if os.path.isfile(settings.TEMPLATE_DIRS+'/'+class_template):
            return render_to_response(class_template,
                                      {'form': form,
                                       'login_form': login_form,
                                       'common_page_data': request.common_page_data,
                                       'display_login': True},
                                      context_instance=context)
        else:
            common_page_data = get_common_page_data(request, course_prefix, course_suffix)
            page = AdditionalPage.objects.get(course=common_page_data['course'], slug="overview")
            return render_to_response("previews/overview.html",
                                      {'common_page_data': common_page_data,
                                       'page': page,
                                       'form': form,
                                       'login_form': login_form,
                                       'common_page_data': request.common_page_data,
                                       'display_login': request.GET.__contains__('login'),
                                       }, context_instance=context)
Пример #34
0
def add_video(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix,
                                            course_suffix)

    if not common_page_data['is_course_admin']:
        return redirect('courses.views.view', course_prefix, course_suffix)

    index = len(Video.objects.filter(topic_id=request.POST.get("topic_id")))

    draft_video = Video(
        course=common_page_data['draft_course'],
        topic_id=int(request.POST.get("topic_id")),
        title=request.POST.get("title"),
        #description=request.POST.get("description"),
        type='youtube',
        url=request.POST.get("yt_id"),
        slug=request.POST.get("slug"),
        mode='draft',
        index=index)
    draft_video.save()

    draft_video.create_ready_instance()

    return redirect(request.META['HTTP_REFERER'])
Пример #35
0
def upload(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)

    if request.method == "POST":
        form = FileUploadForm(request.POST, request.FILES, course=common_page_data['course'])
        if form.is_valid():
            new_file = form.save(commit=False)
            new_file.course = common_page_data['course']
            new_file.index = new_file.section.getNextIndex()
            new_file.mode = 'draft'
            new_file.handle = course_prefix + "--" + course_suffix

            new_file.save()
            new_file.create_ready_instance()

            create_contentgroup_entries_from_post(request, 'parent', new_file.image, 'file', request.POST.get('display_style','list'))

            return redirect('courses.views.course_materials', course_prefix, course_suffix)
    else:
        form = FileUploadForm(course=common_page_data['course'])
        reverseview = 'courses.files.actions.upload'

    return render(request, 'files/upload.html',
            {'reverseview':reverseview,
             'common_page_data': common_page_data,
             'form': form,
             })
Пример #36
0
def view(request, course_prefix, course_suffix, slug):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404

    video = None
    video_rec = None
    if request.user.is_authenticated():
        #video = Video.objects.get(course=common_page_data['production_course'], slug=slug)
        video = Video.objects.get(course=common_page_data['course'], slug=slug)
        #video_rec = request.user.videoactivity_set.filter(video=video)
        video_rec = request.user.videoactivity_set.filter(video=video)
        if video_rec:
            video_rec = video_rec[0]
        else:
            #if student, needs to be an easy way to check if member of group
            user_groups = request.user.groups.all()
            for group in user_groups:
                if group == common_page_data['course'].student_group:
                    video_rec = VideoActivity(student=request.user, course=common_page_data['course'], video=video)
                    video_rec.save()
                    break

    return render_to_response('videos/view.html', {'common_page_data': common_page_data, 'video': video, 'video_rec':video_rec}, context_instance=RequestContext(request))
Пример #37
0
def save_exercises(request):
    #Function should only be accessed from submitting a form
    if request.method != 'POST':
        return redirect(request.META['HTTP_REFERER'])

    course_prefix = request.POST['course_prefix']
    course_suffix = request.POST['course_suffix']
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)
 
    #don't catch video DoesNotExist here because we want some tangible error action to happen if
    #the video id changes in form submission, like mailing us
    video = Video.objects.get(id=request.POST['video_id'])

    action = request.POST['action']
    if action == 'Reset to Ready':
        video.revert()
        return HttpResponseRedirect(reverse('courses.videos.views.manage_exercises', args=(request.POST['course_prefix'], request.POST['course_suffix'], video.slug,)))
    else:
        videoToExs = VideoToExercise.objects.getByVideo(video)
        for videoToEx in videoToExs:
            videoToEx.video_time = request.POST[videoToEx.exercise.fileName]
            videoToEx.save()
        if action == 'Save and Set as Ready':
            video.commit()
        return HttpResponseRedirect(reverse('courses.videos.views.list', args=(request.POST['course_prefix'], request.POST['course_suffix'],)))
Пример #38
0
def main(request, course_prefix, course_suffix, slug):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
        page = AdditionalPage.objects.get(course=common_page_data['course'], slug=slug)
    except:
        raise Http404
    
    if not common_page_data['is_course_admin']:
        visit_log = PageVisitLog(
            course = common_page_data['ready_course'],
            user = request.user,
            page_type = 'additional_page',
            object_id = str(page.id),
        )
        visit_log.save()

    contentgroup_info = None      # Empty for view mode
        
    if common_page_data['is_course_admin'] and common_page_data['course_mode'] == 'draft' and common_page_data['view_mode'] == 'edit':
        template = 'additional_pages/edit.html'

        grouppable_page = page.image
        parent_info = grouppable_page.contentgroup_set.all()
        if parent_info:           # fill contentgroup_info for edit mode
            parent_info = parent_info[0]    # not necessarily true, but gets us the group_id
            group_id    = parent_info.group_id
            parent_info = ContentGroup.objects.get(group_id=group_id, level=1) # this is the parent for real
            parent_type = parent_info.get_content_type()
            parent      = getattr(parent_info, parent_type)
            parent_id   = parent.id
            is_child    = False
            if parent_info.additional_page != grouppable_page.id:
                is_child  = True
            child_list  = ContentGroup.objects.filter(group_id=group_id, level=2)
            contentgroup_info = {
                                 'contentgroup_parent':   parent_info,
                                 'contentgroup_children': child_list,
                                 'parent_type':           parent_type,
                                 'parent_id':             parent_id,
                                 'parent':                parent,
                                 'is_child':              is_child,
                                }
    else:
        template = 'additional_pages/view.html'
        
    course = common_page_data['course']

    ready_section = page.section
    if ready_section and ready_section.mode == "draft":
        ready_section = ready_section.image

    return render_to_response(template,
                              {
                               'common_page_data': common_page_data,
                               'page': page,
                               'ready_section': ready_section,
                               'contentgroup_info': contentgroup_info,
                              },
                               context_instance=RequestContext(request))
Пример #39
0
def save(request):
    def redirectWithError(warn_msg):
        url = request.get_full_path()
        messages.add_message(request,messages.ERROR, warn_msg)
        return redirect(request.META['HTTP_REFERER'])
    
    common_page_data = get_common_page_data(request, request.POST.get("course_prefix"), request.POST.get("course_suffix"))
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main', common_page_data['course_prefix'],common_page_data['course_suffix'])
    
    page = AdditionalPage.objects.get(id=request.POST.get("page_id"))
    
    if request.POST.get("revert") == '1':
        page.revert()
    else:

        #Validate manually, b/c we didn't use django forms here since we missed it
        try:
            validate_slug(request.POST.get("slug"))
        except ValidationError:
            return redirectWithError("The url descriptor cannot be empty and can only contain numbers, letters, underscores, and hyphens")

        if (not page.slug==request.POST.get("slug")) and AdditionalPage.objects.filter(course=common_page_data['course'], slug=request.POST.get("slug")).exists():
            return redirectWithError("A page with this URL identifier already exists")

        if len(request.POST.get("title")) == 0:
            return redirectWithError("The title cannot be empty")

        if len(request.POST.get("title")) > AdditionalPage._meta.get_field("title").max_length:
            return redirectWithError("The title length was too long")

        new_section = request.POST.get("section")
        old_section = page.section
        if new_section == "null":                # Topbar pages
            page.section = None
            page.menu_slug = "course_info"       # normal pages
        else:
            page.section = ContentSection.objects.get(id=new_section)
            page.menu_slug = None

        page.title = request.POST.get("title")
        page.description = request.POST.get("description")
        page.slug = request.POST.get("slug")
        page.save()

        ##Also save the production slug per Issue #685, basically slugs are not stageable.
        page.image.slug = request.POST.get("slug")
        page.image.save()

        create_contentgroup_entries_from_post(request, 'parent', page.image, 'additional_page', display_style='list')

        if request.POST.get("commit") == '1':
            page.commit()
            
        # This has to happen last of all
        if old_section or new_section != "null":
            ContentGroup.reassign_parent_child_sections('additional_page', page.image.id, new_section)

    return redirect('courses.additional_pages.views.main', common_page_data['course_prefix'],common_page_data['course_suffix'], page.slug)
Пример #40
0
def save_announcement_order(request):
    try:
        common_page_data = get_common_page_data(request, request.POST.get("course_prefix"), request.POST.get("course_suffix"))
    except:
        raise Http404
        
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main', request.POST.get("course_prefix"), request.POST.get("course_suffix"))
Пример #41
0
def email_announcement(request):
    try:
        common_page_data = get_common_page_data(request, request.POST.get("course_prefix"), request.POST.get("course_suffix"))
    except:
        raise Http404
        
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main', course_prefix, course_suffix)
Пример #42
0
def edit(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    file_id = request.POST.get("file_id", "-1")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    try:
        file = File.objects.get(id=int(file_id), course=common_page_data["draft_course"])
    except File.DoesNotExist:
        raise Http404

    if request.method == "POST":
        form = FileEditForm(request.POST, course=common_page_data["draft_course"], instance=file)
        if form.is_valid():
            form.save()
            file.commit()

            parent_type = request.POST.get("parent")
            if parent_type and parent_type[:4] != "none":
                parent_type, parent_id = parent_type.split(",")
            else:
                parent_type, parent_id = None, None
            if parent_type:
                parent_ref = ContentGroup.groupable_types[parent_type].objects.get(id=long(parent_id))
                content_group_groupid = ContentGroup.add_parent(file.image.course, parent_type, parent_ref.image)
                ContentGroup.add_child(
                    content_group_groupid, "file", file.image, display_style=request.POST.get("display_style", "list")
                )
            else:  # file should have no parents, so delete its place in a contentgroup if it's a child
                try:
                    cgobj = file.image.contentgroup_set.get()
                    if cgobj.level != 1:
                        cgobj.delete()
                except ContentGroup.DoesNotExist:  # nothing to do if the file is not in a contentgroup
                    pass
            return redirect("courses.views.course_materials", course_prefix, course_suffix)
    else:
        form = FileEditForm(instance=file, course=common_page_data["course"])

    reverseview = "courses.files.actions.edit"
    cg_info = ContentGroup.groupinfo_by_id("file", file.image.id)
    parent = cg_info.get("__parent", None)
    if not parent:
        parent_val = "none,none"
    else:
        parent_val = "%s,%d" % (cg_info["__parent_tag"], parent.image.id)

    return render(
        request,
        "files/upload.html",
        {
            "file": file,
            "parent_val": parent_val,
            "reverseview": reverseview,
            "common_page_data": common_page_data,
            "form": form,
        },
    )
Пример #43
0
def save(request):
    def redirectWithError(warn_msg):
        url = request.get_full_path()
        messages.add_message(request, messages.ERROR, warn_msg)
        return redirect(request.META['HTTP_REFERER'])

    common_page_data = get_common_page_data(request,
                                            request.POST.get("course_prefix"),
                                            request.POST.get("course_suffix"))
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main',
                        common_page_data['course_prefix'],
                        common_page_data['course_suffix'])

    page = AdditionalPage.objects.get(id=request.POST.get("page_id"))
    if request.POST.get("revert") == '1':
        page.revert()
    else:

        #Validate manually, b/c we didn't use django forms here since we missed it
        try:
            validate_slug(request.POST.get("slug"))
        except ValidationError:
            return redirectWithError(
                "The url descriptor cannot be empty and can only contain numbers, letters, underscores, and hyphens"
            )

        if (not page.slug
                == request.POST.get("slug")) and AdditionalPage.objects.filter(
                    course=common_page_data['course'],
                    slug=request.POST.get("slug")).exists():
            return redirectWithError(
                "A page with this URL identifier already exists")

        if len(request.POST.get("title")) == 0:
            return redirectWithError("The title cannot be empty")

        if len(request.POST.get("title")) > AdditionalPage._meta.get_field(
                "title").max_length:
            return redirectWithError("The title length was too long")

        page.title = request.POST.get("title")
        page.description = request.POST.get("description")
        page.slug = request.POST.get("slug")
        page.save()

        ##Also save the production slug per Issue #685, basically slugs are not stageable.
        page.image.slug = request.POST.get("slug")
        page.image.save()

        if request.POST.get("commit") == '1':
            page.commit()

    return redirect('courses.additional_pages.views.main',
                    common_page_data['course_prefix'],
                    common_page_data['course_suffix'], page.slug)
Пример #44
0
def admin(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request, course_prefix,
                                                course_suffix)
    except:
        raise Http404

    return render_to_response('courses/admin.html',
                              {'common_page_data': common_page_data},
                              context_instance=RequestContext(request))
Пример #45
0
def manage_nav_menu(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404
        
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main', course_prefix, course_suffix)
    
    return render_to_response('additional_pages/manage_nav_menu.html', {'common_page_data':common_page_data, 'mode':'nav_menu'}, context_instance=RequestContext(request))
Пример #46
0
def manage_nav_menu(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request,
                                                course_prefix,
                                                course_suffix,
                                                use_cache=False)
    except e, msg:
        # Remark to console exception characterization so we can make this clause more specific
        print "Error in manage_nav_menu getting common_page_data, exception caught: %s" % msg
        raise Http404
Пример #47
0
def add_section_page(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404
        
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main', course_prefix, course_suffix)
    
    sections = ContentSection.objects.getByCourse(course=common_page_data['course'])
    return render_to_response('additional_pages/add_section_page.html', {'common_page_data':common_page_data, 'mode':'section', 'sections':sections}, context_instance=RequestContext(request))
Пример #48
0
def upload(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix,
                                            course_suffix)

    data = {'common_page_data': common_page_data}

    if request.method == 'POST':
        request.session['video_privacy'] = request.POST.get("video_privacy")

        # Need partial instance with course for form slug validation
        new_video = Video(course=common_page_data['course'])
        form = S3UploadForm(request.POST,
                            request.FILES,
                            course=common_page_data['course'],
                            instance=new_video)
        if form.is_valid():
            new_video.index = new_video.section.getNextIndex()
            new_video.mode = 'draft'
            new_video.handle = course_prefix + "--" + course_suffix

            # Bit of jiggery pokery to so that the id is set when the upload_path function is called.
            # Now storing file with id appended to the file path so that thumbnail and associated manifest files
            # are easily associated with the video by putting them all in the same directory.
            new_video.file = None
            new_video.save()
            new_video.file = form.cleaned_data['file']

            new_video.save()
            new_video.create_ready_instance()
            #print new_video.file.url

            # kick off remote jobs
            kelvinator.tasks.kelvinate.delay(new_video.file.name)
            kelvinator.tasks.resize.delay(new_video.file.name, "large")
            kelvinator.tasks.resize.delay(new_video.file.name, "small")

            if new_video.url:
                return redirect('courses.videos.views.list', course_prefix,
                                course_suffix)

            authUrl = GetOAuth2Url(request, new_video)
            #eventually should store an access token, so they don't have to give permission everytime
            return redirect(authUrl)
        #    return redirect("http://" + request.META['HTTP_HOST'])

    else:
        form = S3UploadForm(course=common_page_data['course'])
    data['form'] = form

    return render_to_response('videos/s3upload.html',
                              data,
                              context_instance=RequestContext(request))
Пример #49
0
def rename(request, course_prefix, course_suffix, section_id):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404
    
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.main',  course_prefix, course_suffix)
        
    section = ContentSection.objects.get(id=section_id)
    return render_to_response('content_sections/draft/rename.html', {'common_page_data': common_page_data, 'section':section}, context_instance=RequestContext(request))
Пример #50
0
def upload(request):
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix,
                                            course_suffix)

    data = {'common_page_data': common_page_data}

    if request.method == 'POST':
        # Need partial instance with course for form slug validation
        new_video = Video(course=common_page_data['course'])
        form = S3UploadForm(request.POST,
                            request.FILES,
                            course=common_page_data['course'],
                            instance=new_video)
        if form.is_valid():
            new_video.index = new_video.section.getNextIndex()
            new_video.mode = 'draft'
            new_video.handle = course_prefix + "--" + course_suffix

            # Bit of jiggery pokery to so that the id is set when the upload_path function is called.
            # Now storing file with id appended to the file path so that thumbnail and associated manifest files
            # are easily associated with the video by putting them all in the same directory.
            new_video.file = None
            new_video.save()
            new_video.file = form.cleaned_data['file']

            new_video.save()
            new_video.create_ready_instance()
            print new_video.file.url

            # TODO: don't hardcode the AWS location
            s3_path = "https://s3-us-west-2.amazonaws.com/" + common_page_data[
                'aws_storage_bucket_name'] + "/" + urllib.quote_plus(
                    new_video.file.name, "/")
            # TODO: make these parameters settable
            kelvinator.tasks.run.delay(s3_path, "1", "1000")

            if new_video.url:
                return redirect('courses.videos.views.list', course_prefix,
                                course_suffix)

            authUrl = GetOAuth2Url(request, new_video)
            #eventually should store an access token, so they don't have to give permission everytime
            return redirect(authUrl)
        #    return redirect("http://" + request.META['HTTP_HOST'])

    else:
        form = S3UploadForm(course=common_page_data['course'])
    data['form'] = form

    return render_to_response('videos/s3upload.html',
                              data,
                              context_instance=RequestContext(request))
Пример #51
0
def upload(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404

    form = FileUploadForm(course=common_page_data['course'])

    return render(request, 'files/upload.html',
            {'common_page_data': common_page_data,
             'form': form,
             })
Пример #52
0
def add(request):
    
    def redirectWithError(warn_msg):
        url = request.get_full_path()
        messages.add_message(request,messages.ERROR, warn_msg)
        return redirect(request.META['HTTP_REFERER'])
    
    course_prefix = request.POST.get("course_prefix")
    course_suffix = request.POST.get("course_suffix")
    common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    
    
    if not common_page_data['is_course_admin']:
        return redirect('courses.views.view', course_prefix, course_suffix)
    
    menu_slug = None
    if request.POST.get("menu_slug") != "":
        menu_slug = request.POST.get("menu_slug")
        
    section = None
    if request.POST.get("section_id") != "":
        section = ContentSection.objects.get(id=request.POST.get("section_id"))
    
    if request.POST.get("menu_slug") != "":
        index = len(AdditionalPage.objects.filter(course=common_page_data['course'],menu_slug=request.POST.get("menu_slug")))
    else:
        index = section.getNextIndex()
    
    #Validate manually, b/c we didn't use django forms here since we missed it
    try:
        validate_slug(request.POST.get("slug"))
    except ValidationError:
        return redirectWithError("The url descriptor cannot be empty and can only contain numbers, letters, underscores, and hyphens")

    if AdditionalPage.objects.filter(course=common_page_data['course'], slug=request.POST.get("slug")).exists():
        return redirectWithError("A page with this URL identifier already exists")

    if len(request.POST.get("title")) == 0:
        return redirectWithError("The title cannot be empty")


    if len(request.POST.get("title")) > AdditionalPage._meta.get_field("title").max_length:
        return redirectWithError("The title length was too long")

    draft_page = AdditionalPage(course=common_page_data['draft_course'], menu_slug=menu_slug, section=section, title=request.POST.get("title"), slug=request.POST.get("slug"), index=index, mode='draft')
    draft_page.save()
    
    draft_page.create_ready_instance()
    
    if request.POST.get("menu_slug") == "":
        return redirect('courses.views.course_materials', course_prefix, course_suffix)
    else:
        return redirect(request.META['HTTP_REFERER'])
Пример #53
0
def load_problem_set(request, course_prefix, course_suffix, pset_slug):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404
    pset = ProblemSet.objects.get(course=common_page_data['course'], slug=pset_slug)
    psetToExs = ProblemSetToExercise.objects.getByProblemset(pset).select_related('exercise', 'problemSet')
    file_names = []
    for psetToEx in psetToExs:
        #Remove the .html from the end of the file name
        file_names.append(psetToEx.exercise.fileName[:-5])
    return render_to_response('problemsets/load_problem_set.html',{'file_names': file_names, 'assessment_type': pset.assessment_type},context_instance=RequestContext(request))
Пример #54
0
 def request_and_search(self, viewname):
     # import pdb; pdb.set_trace();
     request = self.factory.get(self.course_url)
     # TODO - not working
     request.user = self.client.login(username="******", password="******")
     request.common_page_data=get_common_page_data(request, 
             self.course_prefix, self.course_suffix)
     request.session = {}
     response = viewname(request, self.course_prefix, self.course_suffix)
     self.assertRegexpMatches(response.content, 
             self.course_title_search_string,
             msg="Couldn't find course name in from view '%s'" % viewname.__name__)
Пример #55
0
def delete_exam(request):
    try:
        common_page_data = get_common_page_data(
            request, request.POST.get("course_prefix"),
            request.POST.get("course_suffix"))
    except:
        raise Http404

    exam = Exam.objects.get(id=request.POST.get("exam_id"))
    exam.delete()
    exam.image.delete()

    return redirect(request.META['HTTP_REFERER'])
Пример #56
0
def main(request, course_prefix, course_suffix, slug):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
        page = AdditionalPage.objects.get(course=common_page_data['course'], slug=slug)
    except:
        raise Http404
    
    if common_page_data['is_course_admin'] and common_page_data['course_mode'] == 'draft' and common_page_data['view_mode'] == 'edit':
        template = 'additional_pages/edit.html'
    else:
        template = 'additional_pages/view.html'
        
    return render_to_response(template,{'common_page_data': common_page_data, 'page':page},context_instance=RequestContext(request))
Пример #57
0
def edit_form(request, course_prefix, course_suffix, pset_slug):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404
    pset = ProblemSet.objects.get(course=common_page_data['course'], slug=pset_slug)
    data = {'common_page_data': common_page_data}
    form = CreateProblemSet(course=common_page_data['course'], instance=pset)
    data['form'] = form
    data['pset'] = pset
    data['course_prefix'] = course_prefix
    data['course_suffix'] = course_suffix
    return render_to_response('problemsets/edit.html', data, context_instance=RequestContext(request))
Пример #58
0
def delete_file(request):
    try:
        common_page_data = get_common_page_data(
            request, request.POST.get("course_prefix"),
            request.POST.get("course_suffix"))
    except:
        raise Http404

    file = File.objects.get(id=request.POST.get("file_id"))
    file.delete()
    file.image.delete()

    return redirect(request.META['HTTP_REFERER'])
Пример #59
0
def upload(request, course_prefix, course_suffix):
    try:
        common_page_data = get_common_page_data(request, course_prefix, course_suffix)
    except:
        raise Http404

    data = {'common_page_data': common_page_data}

    form = S3UploadForm(course=common_page_data['course'])
    data['form'] = form

    return render_to_response('videos/s3upload.html',
                              data,
                              context_instance=RequestContext(request))