Example #1
0
def create_document_revision(thread, form_data, request):
    """
        helpers fx for edit document in thread edit form
    """

    file_data = form_data["file_data"]
    remove = form_data["remove"]

    document = thread.get_document(with_deleted=True)

    if document is None:
        document = Document.objects.create(author=request.user, thread=thread)

    if remove:
        document.is_deleted = True
        document.save()
        return

    if document.is_deleted:
        document.is_deleted = False
        document.save()

    # create document revision
    parsed_file_name = os.path.splitext(file_data.name)
    file_name = parsed_file_name[0].lower()
    suffix = parsed_file_name[1].replace(".", "").lower()

    return document.revisions.create(
        file_data=file_data,
        original_filename=file_name,
        suffix=suffix,
        filename_slug=sanitize_file_name(file_name),
        author=request.user,
    )
Example #2
0
    def save(self, *args, **kwargs):

        """
            TODO
        """

        user = self.request.user

        if not self.document:

            thread = Thread.objects.create_new(
                self.cleaned_data["title"],
                user,
                datetime.datetime.now(),
                "",  # text
                tagnames="",
                thread_type=THREAD_TYPE_DOCUMENT,
                node=self.cleaned_data["node"],
            )
            thread.category = self.cleaned_data["thread_category"]
            thread.save()

            self.document = Document.objects.create(
                author=user,
                thread=thread
            )
        else:
            thread = self.instance.document.thread

            if thread.title != self.cleaned_data["title"]:
                thread.title = self.cleaned_data["title"]
                thread.save()

        # save document revision

        file_data = self.cleaned_data["file_data"] or self.instance.file_data

        # TODO document revision
        parsed_file_name = os.path.splitext(file_data.name)
        file_name = parsed_file_name[0].lower()
        suffix = parsed_file_name[1].replace(".", "").lower()

        self.instance.pk = None
        self.instance.uuid = None
        self.instance.revision = None

        self.instance.original_filename = file_name
        self.instance.suffix = suffix
        self.instance.filename_slug = sanitize_file_name(file_name)
        self.instance.document = self.document
        self.instance.author = user
        return super(DocumentRevisionModelForm, self).save(*args, **kwargs)
Example #3
0
    def _create_doc(user, post, file_data):
        document = Document.objects.create(author=user, thread=post.thread)

        parsed_file_name = os.path.splitext(
            force_unicode(file_data.name, strings_only=True, errors="ignore"))
        file_name = parsed_file_name[0].lower()
        suffix = parsed_file_name[1].replace(".", "").lower()

        return document.revisions.create(
            file_data=file_data,
            original_filename=file_name,
            suffix=suffix,
            filename_slug=sanitize_file_name(file_name),
            author=user,
        )
Example #4
0
    def _create_doc(user, post, file_data):
        document = Document.objects.create(
            author=user,
            thread=post.thread
        )

        parsed_file_name = os.path.splitext(
            force_unicode(file_data.name, strings_only=True, errors="ignore")
        )
        file_name = parsed_file_name[0].lower()
        suffix = parsed_file_name[1].replace(".", "").lower()

        return document.revisions.create(
            file_data=file_data,
            original_filename=file_name,
            suffix=suffix,
            filename_slug=sanitize_file_name(file_name),
            author=user,
        )
Example #5
0
def create_document_revision(thread, form_data, request):
    """
        helpers fx for edit document in thread edit form
    """

    file_data = form_data["file_data"]
    remove = form_data["remove"]

    document = thread.get_document(with_deleted=True)

    if document is None:
        document = Document.objects.create(
            author=request.user,
            thread=thread
        )

    if remove:
        document.is_deleted = True
        document.save()
        return

    if document.is_deleted:
        document.is_deleted = False
        document.save()

    # create document revision
    parsed_file_name = os.path.splitext(file_data.name)
    file_name = parsed_file_name[0].lower()
    suffix = parsed_file_name[1].replace(".", "").lower()

    return document.revisions.create(
        file_data=file_data,
        original_filename=file_name,
        suffix=suffix,
        filename_slug=sanitize_file_name(file_name),
        author=request.user,
    )
Example #6
0
 def upload_to_fx(self, original_name):
     return "/".join([
         self.get_path(),
         sanitize_file_name(original_name),
     ])
Example #7
0
 def upload_to_fx(self, original_name):
     return os.path.join("organization_logos",
                         sanitize_file_name(original_name))
Example #8
0
 def upload_to_fx(self, original_name):
     return os.path.join(
         "organization_logos",
         sanitize_file_name(original_name)
         )
Example #9
0
def upload(request):  # ajax upload file to a question or answer
    """view that handles file upload via Ajax
    """

    # check upload permission
    result = ''
    error = ''
    new_file_name = ''

    try:
        #may raise exceptions.PermissionDenied
        if request.user.is_anonymous():
            msg = _('Sorry, anonymous users cannot upload files')
            raise exceptions.PermissionDenied(msg)

        request.user.assert_can_upload_file()

        #todo: build proper form validation
        file_name_prefix = request.POST.get('file_name_prefix', '')
        if file_name_prefix not in ('', 'organization_logo_'):
            raise exceptions.PermissionDenied('invalid upload file name prefix')

        #todo: check file type
        f = request.FILES['file-upload']  # take first file
        #todo: extension checking should be replaced with mimetype checking
        #and this must be part of the form validation

        file_extension = os.path.splitext(f.name)[1].lower()
        if not file_extension in settings.OPENODE_ALLOWED_UPLOAD_FILE_TYPES:
            file_types = "', '".join(settings.OPENODE_ALLOWED_UPLOAD_FILE_TYPES)
            msg = _("allowed file types are '%(file_types)s'") % \
                    {'file_types': file_types}
            raise exceptions.PermissionDenied(msg)

        # generate new file name and storage object
        file_storage, new_file_name, file_url = store_file(
            f, file_name_prefix
        )

        # create document to document storage
        document = Document.objects.create(
            author=request.user,
        )
        dr = document.revisions.create(
            author=request.user,
            file_data=f,
            original_filename=new_file_name.replace(file_extension, ""),
            suffix=file_extension.replace(".", ""),
            filename_slug=sanitize_file_name(new_file_name),
        )
        file_url = dr.file_data.url

        file_storage.delete(new_file_name)

        # # check file size
        # # byte
        # size = file_storage.size(new_file_name)
        # if size > settings.OPENODE_MAX_UPLOAD_FILE_SIZE:
        #     file_storage.delete(new_file_name)
        #     msg = _("maximum upload file size is %(file_size)sK") % \
        #             {'file_size': settings.OPENODE_MAX_UPLOAD_FILE_SIZE}
        #     raise exceptions.PermissionDenied(msg)

    except exceptions.PermissionDenied, e:
        error = unicode(e)