Example #1
0
def upload_step1(request):
    if request.method == 'POST':
        form = UploadCourseStep1Form(request.POST, request.FILES)
        if form.is_valid():  # All validation rules pass
            extract_path = os.path.join(settings.COURSE_UPLOAD_DIR, 'temp',
                                        str(request.user.id))
            course, resp = handle_uploaded_file(request.FILES['course_file'],
                                                extract_path, request,
                                                request.user)
            if course:
                CoursePublishingLog(
                    course=course,
                    user=request.user,
                    action="file_uploaded",
                    data=request.FILES['course_file'].name).save()
                return HttpResponseRedirect(
                    reverse('oppia_upload2',
                            args=[course.id]))  # Redirect after POST
            else:
                os.remove(
                    os.path.join(settings.COURSE_UPLOAD_DIR,
                                 request.FILES['course_file'].name))
    else:
        form = UploadCourseStep1Form()  # An unbound form

    return render(request, 'course/form.html', {
        'form': form,
        'title': _(u'Upload Course - step 1')
    })
Example #2
0
def publish_view(request):

    # get the messages to clear possible previous unprocessed messages
    get_messages_array(request)

    if request.method != 'POST':
        return HttpResponse(status=405)

    validation_errors = []
    validation_errors = check_required_fields(request, validation_errors)
    validation_errors = check_upload_file_size_type(
        request.FILES[api.COURSE_FILE_FIELD], validation_errors)

    if validation_errors:
        return JsonResponse(
            {'errors': validation_errors},
            status=400,
        )

    # authenticate user
    authenticated, response_data, user = authenticate_user(
        request, request.POST['username'], request.POST['password'])
    if not authenticated:
        return JsonResponse(response_data, status=401)

    # check user has permissions to publish course
    if settings.OPPIA_STAFF_ONLY_UPLOAD is True \
            and not user.is_staff \
            and user.userprofile.can_upload is False:
        return HttpResponse(status=401)

    extract_path = os.path.join(settings.COURSE_UPLOAD_DIR, 'temp',
                                str(user.id))
    course, status_code = handle_uploaded_file(
        request.FILES[api.COURSE_FILE_FIELD], extract_path, request, user)

    if course is False:
        status = status_code if status_code is not None else 500
        response_data = {'messages': get_messages_array(request)}
        return JsonResponse(response_data, status=status)

    else:
        course.is_draft = (request.POST['is_draft'] == "True"
                           or request.POST['is_draft'] == "true")
        course.save()

        # remove any existing tags
        CourseTag.objects.filter(course=course).delete()

        # add tags
        tags = request.POST['tags'].strip().split(",")
        add_course_tags(user, course, tags)

        msgs = get_messages_array(request)
        if len(msgs) > 0:
            return JsonResponse({'messages': msgs}, status=201)
        else:
            return HttpResponse(status=201)
Example #3
0
 def form_valid(self, form):
     user = self.request.user
     extract_path = os.path.join(settings.COURSE_UPLOAD_DIR, 'temp',
                                 str(user.id))
     course, resp = handle_uploaded_file(self.request.FILES['course_file'],
                                         extract_path, self.request, user)
     if course:
         CoursePublishingLog(course=course,
                             user=user,
                             action="file_uploaded",
                             data=self.request.FILES['course_file'].name) \
                             .save()
         return HttpResponseRedirect(
             reverse('oppia:upload_step2', args=[course.id]))
     else:
         return super().form_invalid(form)
def publish_view(request):

    # get the messages to clear possible previous unprocessed messages
    get_messages_array(request)

    if request.method != 'POST':
        return HttpResponse(status=405)

    course_file = request.FILES.get(api.COURSE_FILE_FIELD, None)

    validation_errors = []
    validation_errors = check_required_fields(request, validation_errors)
    validation_errors = check_upload_file_size(course_file, validation_errors)

    if validation_errors:
        return JsonResponse(
            {'errors': validation_errors},
            status=400,
        )

    username = request.POST.get('username', None)
    password = request.POST.get('password', None)
    # authenticate user
    authenticated, response_data, user = authenticate_user(
        request, username, password)
    if not authenticated:
        return JsonResponse(response_data, status=401)

    extract_path = os.path.join(settings.COURSE_UPLOAD_DIR, 'temp',
                                str(user.id))

    result, course_shortname = get_course_shortname(course_file, extract_path,
                                                    request, user)

    if result:
        course_manager = CoursePermissions.objects.filter(
            user=user,
            course__shortname=course_shortname,
            role=CoursePermissions.MANAGER).count()
    else:
        course_manager = 0

    # check user has permissions to publish course
    if not user.is_staff \
            and user.userprofile.can_upload is False \
            and course_manager == 0:
        msg_text = \
                _(u"Sorry, only the original owner may update this course")
        messages.info(request, msg_text)
        CoursePublishingLog(user=user if user else None,
                            action="permissions_error",
                            data=msg_text).save()
        return HttpResponse(status=401)

    course, status_code = handle_uploaded_file(course_file, extract_path,
                                               request, user)

    CoursePublishingLog(course=course if course else None,
                        new_version=course.version if course else None,
                        user=user,
                        action="api_file_uploaded",
                        data=course_file.name).save()
    if course is False:
        status = status_code if status_code is not None else 500
        response_data = {'messages': get_messages_array(request)}
        return JsonResponse(response_data, status=status)

    else:
        course.is_draft = (request.POST['is_draft'] == "True"
                           or request.POST['is_draft'] == "true")
        course.save()

        # remove any existing tags
        CourseTag.objects.filter(course=course).delete()

        # add tags
        tags = request.POST['tags'].strip().split(",")
        add_course_tags(user, course, tags)

        msgs = get_messages_array(request)
        CoursePublishingLog(course=course,
                            new_version=course.version,
                            user=user,
                            action="api_course_published",
                            data=_(u'Course published via API')).save()
        if len(msgs) > 0:
            return JsonResponse({'messages': msgs}, status=201)
        else:
            return HttpResponse(status=201)
Example #5
0
def publish_view(request):

    if request.method != 'POST':
        return HttpResponse(status=405)

    required = ['username', 'password', 'tags', 'is_draft']

    for r in required:
        if r not in request.POST:
            print r + " not found"
            return HttpResponse(status=201)

    if 'course_file' not in request.FILES:
        print "Course file not found"
        return HttpResponse(status=400)

    # authenticate user
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is None or not user.is_active:
        return HttpResponse(status=200)

    # check user has permissions to publish course
    if settings.OPPIA_STAFF_ONLY_UPLOAD is True and not user.is_staff and user.userprofile.can_upload is False:
        return HttpResponse(status=401)

    extract_path = os.path.join(settings.COURSE_UPLOAD_DIR, 'temp',
                                str(user.id))
    course = handle_uploaded_file(request.FILES['course_file'], extract_path,
                                  request, user)

    if course is False:
        return HttpResponse(status=500)
    else:
        if request.POST['is_draft'] == "False":
            course.is_draft = False
        else:
            course.is_draft = True
        course.save()

        # remove any existing tags
        CourseTag.objects.filter(course=course).delete()

        # add tags
        tags = request.POST['tags'].strip().split(",")
        for t in tags:
            try:
                tag = Tag.objects.get(name__iexact=t.strip())
            except Tag.DoesNotExist:
                tag = Tag()
                tag.name = t.strip()
                tag.created_by = user
                tag.save()
            # add tag to course
            try:
                ct = CourseTag.objects.get(course=course, tag=tag)
            except CourseTag.DoesNotExist:
                ct = CourseTag()
                ct.course = course
                ct.tag = tag
                ct.save()

        return HttpResponse(status=201)
def publish_view(request):
    
    if request.method != 'POST':
        return HttpResponse(status=405)
    
    required = ['username','password','tags','is_draft']
   
    for r in required:
        if r not in request.POST:
            print r + " not found"
            return HttpResponse(status=201)
   
    
    if 'course_file' not in request.FILES:
        print "Course file not found"
        return HttpResponse(status=400)
        
    # authenticate user
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is None or not user.is_active:
        return HttpResponse(status=200)
     
    # check user has permissions to publish course
    if settings.OPPIA_STAFF_ONLY_UPLOAD is True and not user.is_staff and user.userprofile.can_upload is False:
        return HttpResponse(status=401)
            
    extract_path = os.path.join(settings.COURSE_UPLOAD_DIR,'temp',str(user.id))
    course = handle_uploaded_file(request.FILES['course_file'], extract_path, request, user)

    if course is False:
        return HttpResponse(status=500)
    else:
        if request.POST['is_draft'] == "False":
            course.is_draft = False
        else:
            course.is_draft = True
        course.save()
        
        # remove any existing tags
        CourseTag.objects.filter(course=course).delete()
        
        # add tags
        tags = request.POST['tags'].strip().split(",")
        for t in tags:
            try: 
                tag = Tag.objects.get(name__iexact=t.strip())
            except Tag.DoesNotExist:
                tag = Tag()
                tag.name = t.strip()
                tag.created_by = user
                tag.save()
            # add tag to course
            try:
                ct = CourseTag.objects.get(course=course,tag=tag)
            except CourseTag.DoesNotExist:
                ct = CourseTag()
                ct.course = course
                ct.tag = tag
                ct.save()
        
        return HttpResponse(status=201)
Example #7
0
def publish_view(request):

    # get the messages to clear possible previous unprocessed messages
    get_messages_array(request)

    if request.method != 'POST':
        return HttpResponse(status=405)

    required = ['username', 'password', 'tags', 'is_draft']

    validationErrors = []

    for field in required:
        if field not in request.POST:
            print field + " not found"
            validationErrors.append("field '{0}' missing".format(field))

    if COURSE_FILE_FIELD not in request.FILES:
        print "Course file not found"
        validationErrors.append("file '{0}' missing".format(COURSE_FILE_FIELD))
    else:
        # check the file size of the course doesnt exceed the max
        file = request.FILES[COURSE_FILE_FIELD]
        if file is not None and file._size > settings.OPPIA_MAX_UPLOAD_SIZE:
            size = int(math.floor(settings.OPPIA_MAX_UPLOAD_SIZE / 1024 /
                                  1024))
            validationErrors.append((_(
                "Your file is larger than the maximum allowed (%(size)d Mb). You may want to check your course for large includes, such as images etc."
            ) % {
                'size': size,
            }))

        if file is not None and file.content_type != 'application/zip' and file.content_type != 'application/x-zip-compressed':
            validationErrors.append(_("You may only upload a zip file"))

    if validationErrors:
        return JsonResponse(
            {'errors': validationErrors},
            status=400,
        )

    # authenticate user
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is None or not user.is_active:
        messages.error(request, "Invalid username/password")
        response_data = {
            'message': _('Authentication errors'),
            'messages': get_messages_array(request)
        }
        return JsonResponse(response_data, status=401)

    # check user has permissions to publish course
    if settings.OPPIA_STAFF_ONLY_UPLOAD is True \
            and not user.is_staff \
            and user.userprofile.can_upload is False:
        return HttpResponse(status=401)

    extract_path = os.path.join(settings.COURSE_UPLOAD_DIR, 'temp',
                                str(user.id))
    course, response = handle_uploaded_file(request.FILES['course_file'],
                                            extract_path, request, user)

    if course is False:
        resp_code = response if response is not None else 500
        response_data = {'messages': get_messages_array(request)}
        return JsonResponse(response_data, status=resp_code)

    else:
        course.is_draft = (request.POST['is_draft'] == "True"
                           or request.POST['is_draft'] == "true")
        course.save()

        # remove any existing tags
        CourseTag.objects.filter(course=course).delete()

        # add tags
        tags = request.POST['tags'].strip().split(",")
        for t in tags:
            try:
                tag = Tag.objects.get(name__iexact=t.strip())
            except Tag.DoesNotExist:
                tag = Tag()
                tag.name = t.strip()
                tag.created_by = user
                tag.save()
            # add tag to course
            try:
                ct = CourseTag.objects.get(course=course, tag=tag)
            except CourseTag.DoesNotExist:
                ct = CourseTag()
                ct.course = course
                ct.tag = tag
                ct.save()

        msgs = get_messages_array(request)
        if len(msgs) > 0:
            return JsonResponse({'messages': msgs}, status=201)
        else:
            return HttpResponse(status=201)