コード例 #1
0
ファイル: views.py プロジェクト: nailor/asteriski-www
def delete(request):
    """
    Delete existing File/Directory.
    
    When trying to delete a Directory, the Directory has to be empty.
    """
    
    # QUERY / PATH CHECK
    query = request.GET
    path = _get_path(query.get('dir', ''))
    filename = _get_file(query.get('dir', ''), query.get('filename', ''))
    if path is None or filename is None:
        msg = _('Directory/File does not exist.')
        request.user.message_set.create(message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(settings.MEDIA_ROOT, DIRECTORY, path)
    
    msg = ""
    if request.GET:
        if request.GET.get('filetype') != "Folder":
            relative_server_path = os.path.join(DIRECTORY, path, filename)
            try:
                # DELETE IMAGE VERSIONS/THUMBNAILS
                for version in VERSIONS:
                    try:
                        os.unlink(os.path.join(MEDIA_ROOT, _get_version_path(relative_server_path, version)))
                    except:
                        pass
                # DELETE FILE
                os.unlink(os.path.join(abs_path, filename))
                msg = _('The file %s was successfully deleted.') % (filename.lower())
                request.user.message_set.create(message=msg)
                redirect_url = reverse("fb_browse") + query_helper(query, "", "filename,filetype")
                return HttpResponseRedirect(redirect_url)
            except OSError:
                # todo: define error message
                msg = OSError
        else:
            try:
                os.rmdir(os.path.join(abs_path, filename))
                msg = _('The directory %s was successfully deleted.') % (filename.lower())
                request.user.message_set.create(message=msg)
                redirect_url = reverse("fb_browse") + query_helper(query, "", "filename,filetype")
                return HttpResponseRedirect(redirect_url)
            except OSError:
                # todo: define error message
                msg = OSError
    
    if msg:
        request.user.message_set.create(message=msg)
    
    return render_to_response('filebrowser/index.html', {
        'dir': dir_name,
        'file': request.GET.get('filename', ''),
        'query': query,
        'settings_var': _get_settings_var(),
        'breadcrumbs': _get_breadcrumbs(query, dir_name, ''),
    }, context_instance=Context(request))
コード例 #2
0
def detail(request):
    """
    Show detail page for a file.
    
    Rename existing File/Directory (deletes existing Image Versions/Thumbnails).
    """
    from filebrowser.forms import ChangeForm
    query = request.GET
    abs_path = u'%s' % os.path.join(MEDIA_ROOT, DIRECTORY, query.get(
        'dir', ''))
    fileobject = FileObject(os.path.join(abs_path, query.get('filename', '')))

    if request.method == 'POST':
        form = ChangeForm(request.POST, path=abs_path, fileobject=fileobject)
        if form.is_valid():
            new_name = form.cleaned_data['name']
            transpose = form.cleaned_data['transpose']
            try:
                if new_name != fileobject.filename:
                    filebrowser_pre_rename.send(sender=request,
                                                path=fileobject.path,
                                                name=fileobject.filename,
                                                new_name=new_name)
                    fileobject.delete_versions()
                    os.rename(fileobject.path,
                              os.path.join(fileobject.head, new_name))
                    filebrowser_post_rename.send(sender=request,
                                                 path=fileobject.path,
                                                 name=fileobject.filename,
                                                 new_name=new_name)
                    messages.add_message(request, messages.SUCCESS,
                                         _('Renaming was successful.'))
                if transpose:
                    im = Image.open(fileobject.path)
                    new_image = im.transpose(int(transpose))
                    try:
                        new_image.save(
                            fileobject.path,
                            quality=VERSION_QUALITY,
                            optimize=(os.path.splitext(
                                fileobject.path)[1].lower() != '.gif'))
                    except IOError:
                        new_image.save(fileobject.path,
                                       quality=VERSION_QUALITY)
                    fileobject.delete_versions()
                    messages.add_message(request, messages.SUCCESS,
                                         _('Transposing was successful.'))
                if "_continue" in request.POST:
                    redirect_url = reverse("fb_detail") + query_helper(
                        query, "filename=" + new_name, "filename")
                else:
                    redirect_url = reverse("fb_browse") + query_helper(
                        query, "", "filename")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                form.errors['name'] = forms.util.ErrorList([_('Error.')])
コード例 #3
0
 def decorator(request, *args, **kwargs):
     file_path = get_file(request.GET.get('dir', ''), request.GET.get('filename', ''))
     if file_path == None:
         msg = _('The requested File does not exist.')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("fb_browse") + query_helper(request.GET, "", "dir")
         return HttpResponseRedirect(redirect_url)
     elif file_path.startswith('/') or file_path.startswith('..'):
         # prevent path traversal
         msg = _('You do not have permission to access this file!')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("fb_browse") + query_helper(request.GET, "", "dir")
         return HttpResponseRedirect(redirect_url)
     return function(request, *args, **kwargs)
コード例 #4
0
 def decorator(request, *args, **kwargs):
     file_path = get_file(request.GET.get('dir', ''), request.GET.get('filename', ''), site=site)
     if file_path is None:
         msg = _('The requested File does not exist.')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("filebrowser:fb_browse", current_app=site.name) + query_helper(request.GET, u"", "dir")
         return HttpResponseRedirect(redirect_url)
     elif file_path.startswith('/') or file_path.startswith('..'):
         # prevent path traversal
         msg = _('You do not have permission to access this file!')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("filebrowser:fb_browse", current_app=site.name) + query_helper(request.GET, u"", "dir")
         return HttpResponseRedirect(redirect_url)
     return function(request, *args, **kwargs)
コード例 #5
0
def mkdir(request, dir_name=None):
    """
    Make directory
    """

    path = _get_path(dir_name)
    query = request.GET

    if request.method == 'POST':
        form = MakeDirForm(PATH_SERVER, path, request.POST)
        if form.is_valid():
            server_path = os.path.join(PATH_SERVER, path,
                                       form.cleaned_data['dir_name'].lower())
            try:
                os.mkdir(server_path)
                os.chmod(server_path, 0775)
                # MESSAGE & REDIRECT
                msg = _('The Folder %s was successfully created.') % (
                    form.cleaned_data['dir_name'].lower())
                request.user.message_set.create(message=msg)
                # on redirect, sort by date desc to see the new directory on top of the list
                # remove filter in order to actually _see_ the new folder
                return HttpResponseRedirect(URL_ADMIN + path + query_helper(
                    query, "ot=desc,o=date", "ot,o,filter_type,filter_data"))
            except OSError, (errno, strerror):
                if errno == 13:
                    form.errors['dir_name'] = forms.util.ErrorList(
                        [_('Permission denied.')])
                else:
                    form.errors['dir_name'] = forms.util.ErrorList(
                        [_('Error creating directory.')])
コード例 #6
0
def edit(request):
    """
    Edit existing File.
    """

    from filebrowser.forms import EditForm

    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get("dir", ""))
    filename = get_file(query.get("dir", ""), query.get("filename", ""))
    if path is None or filename is None:
        if path is None:
            msg = _("The requested Folder does not exist.")
        else:
            msg = _("The requested File does not exist.")
        messages.error(request, msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path)
    file_extension = os.path.splitext(filename)[1].lower()

    if request.method == "POST":
        form = EditForm(abs_path, filename, file_extension, request.POST)
        if form.is_valid():
            try:
                form.save()
                # MESSAGE & REDIRECT
                msg = _("Edit action was successful.")
                messages.success(request, msg)
                redirect_url = reverse("fb_browse") + query_helper(query, "", "filename")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                form.errors["name"] = forms.util.ErrorList([_("Error.")])
コード例 #7
0
def edit(request):
    """
    Edit existing File.
    """

    from filebrowser.forms import EditForm
    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))
    filename = get_file(query.get('dir', ''), query.get('filename', ''))
    if path is None or filename is None:
        if path is None:
            msg = _('The requested Folder does not exist.')
        else:
            msg = _('The requested File does not exist.')
        request.user.message_set.create(message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path)
    file_extension = os.path.splitext(filename)[1].lower()

    if request.method == 'POST':
        form = EditForm(abs_path, filename, file_extension, request.POST)
        if form.is_valid():
            try:
                form.save()
                # MESSAGE & REDIRECT
                msg = _('Edit action was successful.')
                request.user.message_set.create(message=msg)
                redirect_url = reverse("fb_browse") + query_helper(query, "", "filename")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                form.errors['name'] = forms.util.ErrorList([_('Error.')])
コード例 #8
0
def rename(request, dir_name=None, file_name=None):
    """
    Rename existing File/Directory.
    """

    path = _get_path(dir_name)
    query = request.GET

    if os.path.isfile(os.path.join(PATH_SERVER, path, file_name)):  # file
        file_type = _get_file_type(file_name)
        file_extension = os.path.splitext(file_name)[1].lower()
    else:
        file_extension = ""
        file_type = ""

    if request.method == 'POST':
        form = RenameForm(PATH_SERVER, path, file_extension, request.POST)
        if form.is_valid():
            old_path = os.path.join(PATH_SERVER, path, file_name)
            new_path = os.path.join(
                PATH_SERVER, path,
                request.POST.get('name').lower() + file_extension)
            try:
                os.rename(old_path, new_path)
                # RENAME IMAGE VERSIONS? TOO MUCH MAGIC?

                # MESSAGE & REDIRECT
                msg = _('Renaming was successful.')
                request.user.message_set.create(message=msg)
                return HttpResponseRedirect(URL_ADMIN + path +
                                            query_helper(query, "", ""))
            except OSError, (errno, strerror):
                form.errors['name'] = forms.util.ErrorList([_('Error.')])
コード例 #9
0
 def decorator(request, *args, **kwargs):
     if get_file(request.GET.get('dir', ''), request.GET.get('filename', '')) == None:
         msg = _('The requested File does not exist.')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("fb_browse") + query_helper(request.GET, "", "dir")
         return HttpResponseRedirect(redirect_url)
     return function(request, *args, **kwargs)
コード例 #10
0
ファイル: views.py プロジェクト: dblundell/django-filebrowser
def createdir(request):
    """
    Create Directory.
    """
    from filebrowser.forms import CreateDirForm
    query = request.GET
    abs_path = u'%s' % os.path.join(MEDIA_ROOT, DIRECTORY, query.get('dir', ''))
    
    if request.method == 'POST':
        form = CreateDirForm(abs_path, request.POST)
        if form.is_valid():
            abs_server_path = os.path.join(abs_path, form.cleaned_data['name'])
            try:
                filebrowser_pre_createdir.send(sender=request, path=abs_server_path, name=form.cleaned_data['name'])
                os.mkdir(abs_server_path)
                os.chmod(abs_server_path, 0775) # ??? PERMISSIONS
                filebrowser_post_createdir.send(sender=request, path=abs_server_path, name=form.cleaned_data['name'])
                messages.add_message(request, messages.SUCCESS, _('The Folder %s was successfully created.') % form.cleaned_data['name'])
                redirect_url = reverse("fb_browse") + query_helper(query, "ot=desc,o=date", "ot,o,filter_type,filter_date,q,p")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                if errno == 13:
                    form.errors['name'] = forms.util.ErrorList([_('Permission denied.')])
                else:
                    form.errors['name'] = forms.util.ErrorList([_('Error creating folder.')])
コード例 #11
0
ファイル: views.py プロジェクト: nailor/asteriski-www
def mkdir(request):
    """
    Make Directory.
    """
    
    from filebrowser.forms import MakeDirForm
    
    # QUERY / PATH CHECK
    query = request.GET
    path = _get_path(query.get('dir', ''))
    if path is None:
        msg = _('Directory/File does not exist.')
        request.user.message_set.create(message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(settings.MEDIA_ROOT, DIRECTORY, path)
    
    if request.method == 'POST':
        form = MakeDirForm(abs_path, request.POST)
        if form.is_valid():
            server_path = os.path.join(abs_path, form.cleaned_data['dir_name'])
            try:
                os.mkdir(server_path)
                os.chmod(server_path, 0775)
                msg = _('The Folder %s was successfully created.') % (form.cleaned_data['dir_name'])
                request.user.message_set.create(message=msg)
                # on redirect, sort by date desc to see the new directory on top of the list
                # remove filter in order to actually _see_ the new folder
                redirect_url = reverse("fb_browse") + query_helper(query, "ot=desc,o=date", "ot,o,filter_type,filter_date,q")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                if errno == 13:
                    form.errors['dir_name'] = forms.util.ErrorList([_('Permission denied.')])
                else:
                    form.errors['dir_name'] = forms.util.ErrorList([_('Error creating directory.')])
コード例 #12
0
def upload(request):
    """
    Multiple File Upload.
    """

    from django.forms.formsets import formset_factory
    
    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))
    if path is None:
        msg = _('The requested Folder does not exist.')
        messages.add_message(request, messages.ERROR, msg)

        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path)

    if STRICT_PIL:
        from PIL import ImageFile
    else:
        try:
            from PIL import ImageFile
        except ImportError:
            import ImageFile

    ImageFile.MAXBLOCK = IMAGE_MAXBLOCK # default is 64k

    from filebrowser.forms import UploadForm, BaseUploadFormSet
    
    UploadFormSet = formset_factory(UploadForm, formset=BaseUploadFormSet, extra=5)
    if request.method == 'POST':
        formset = UploadFormSet(data=request.POST, files=request.FILES, path=abs_path)
        if formset.is_valid():
            for cleaned_data in formset.cleaned_data:
                if cleaned_data:
                    f = cleaned_data['file']
                    f.name = convert_filename(f.name)
                    # PRE UPLOAD SIGNAL
                    filebrowser_pre_upload.send(sender=request, path=abs_path, file=f)
                    # HANDLE UPLOAD
                    uploadedfile = handle_file_upload(abs_path, f)
                    # POST UPLOAD SIGNAL
                    filebrowser_post_upload.send(sender=request, path=abs_path, file=uploadedfile)
            # MESSAGE & REDIRECT
            msg = _('Upload successful.')
            messages.add_message(request, messages.INFO, msg)
            # on redirect, sort by date desc to see the uploaded files on top of the list
            redirect_url = reverse("fb_browse") + query_helper(query, "ot=desc,o=date", "ot,o")
            return HttpResponseRedirect(redirect_url)
    else:
        formset = UploadFormSet(path=abs_path)

    return render_to_response('filebrowser/upload.html', {
        'formset': formset,
        'dir': path,
        'query': query,
        'settings_var': get_settings_var(),
        'breadcrumbs_title': _(u'Upload'),
        'title': _(u'Select files to upload'),
    }, context_instance=Context(request))
コード例 #13
0
ファイル: views.py プロジェクト: sureshmariadass/exedjango
def createdir(request):
    """
    Create Directory.
    """
    from filebrowser.forms import CreateDirForm
    query = request.GET
    abs_path = u'%s' % os.path.join(MEDIA_ROOT, DIRECTORY, query.get('dir', ''))
    
    if request.method == 'POST':
        form = CreateDirForm(abs_path, request.POST)
        if form.is_valid():
            abs_server_path = os.path.join(abs_path, form.cleaned_data['name'])
            try:
                filebrowser_pre_createdir.send(sender=request, path=abs_server_path, name=form.cleaned_data['name'])
                os.mkdir(abs_server_path)
                os.chmod(abs_server_path, 0775) # ??? PERMISSIONS
                filebrowser_post_createdir.send(sender=request, path=abs_server_path, name=form.cleaned_data['name'])
                messages.add_message(request, messages.SUCCESS, _('The Folder %s was successfully created.') % form.cleaned_data['name'])
                redirect_url = reverse("fb_browse") + query_helper(query, "ot=desc,o=date", "ot,o,filter_type,filter_date,q,p")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                if errno == 13:
                    form.errors['name'] = forms.util.ErrorList([_('Permission denied.')])
                else:
                    form.errors['name'] = forms.util.ErrorList([_('Error creating folder.')])
コード例 #14
0
def _upload_file(request):
    """
    Upload file to the server.
    """
    
    from django.core.files.move import file_move_safe 
    from django.http import QueryDict

    if request.method == 'POST':
        query = QueryDict(request.POST.get('get_query'))
        folder = request.POST.get('folder')
        fb_uploadurl_re = re.compile(r'^(%s)' % reverse("fb_upload"))
        folder = fb_uploadurl_re.sub('', folder)
        abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, folder)
        if request.FILES:
            filedata = request.FILES['Filedata']
            filedata.name = convert_filename(filedata.name)
            # PRE UPLOAD SIGNAL
            filebrowser_pre_upload.send(sender=request, path=request.POST.get('folder'), file=filedata)
            # HANDLE UPLOAD
            uploadedfile = handle_file_upload(abs_path, filedata)
            # MOVE UPLOADED FILE
            # if file already exists
            if os.path.isfile(os.path.join(MEDIA_ROOT, DIRECTORY, folder, filedata.name)):
                old_file = os.path.join(abs_path, filedata.name)
                new_file = os.path.join(abs_path, uploadedfile)
                file_move_safe(new_file, old_file)
            # POST UPLOAD SIGNAL
            filebrowser_post_upload.send(sender=request, path=request.POST.get('folder'), file=FileObject(os.path.join(DIRECTORY, folder, filedata.name)))
            return HttpResponseRedirect(reverse("fb_browse") + query_helper(query, "", "filename,filetype"))
        else:
            return HttpResponse("Error: No files were posted")
    else:
        return HttpResponse("Error: No POST data")
コード例 #15
0
    def delete(self, request):
        "Delete existing File/Directory."
        query = request.GET
        path = u'%s' % os.path.join(self.directory, query.get('dir', ''))
        fileobject = FileObject(os.path.join(path, query.get('filename', '')),
                                site=self)

        if request.GET:
            try:
                signals.filebrowser_pre_delete.send(sender=request,
                                                    path=fileobject.path,
                                                    name=fileobject.filename,
                                                    site=self)
                fileobject.delete_versions()
                fileobject.delete()
                signals.filebrowser_post_delete.send(sender=request,
                                                     path=fileobject.path,
                                                     name=fileobject.filename,
                                                     site=self)
                messages.add_message(
                    request, messages.SUCCESS,
                    _('Successfully deleted %s') % fileobject.filename)
            except OSError:
                # TODO: define error-message
                pass
        redirect_url = reverse("filebrowser:fb_browse",
                               current_app=self.name) + query_helper(
                                   query, "", "filename,filetype")
        return HttpResponseRedirect(redirect_url)
コード例 #16
0
    def createdir(self, request):
        "Create Directory"
        from filebrowser.forms import CreateDirForm
        query = request.GET
        path = u'%s' % os.path.join(self.directory, query.get('dir', ''))

        if request.method == 'POST':
            form = CreateDirForm(path, request.POST, filebrowser_site=self)
            if form.is_valid():
                server_path = os.path.join(path, form.cleaned_data['name'])
                try:
                    signals.filebrowser_pre_createdir.send(
                        sender=request,
                        path=server_path,
                        name=form.cleaned_data['name'],
                        site=self)
                    self.storage.makedirs(server_path)
                    signals.filebrowser_post_createdir.send(
                        sender=request,
                        path=server_path,
                        name=form.cleaned_data['name'],
                        site=self)
                    messages.add_message(
                        request, messages.SUCCESS,
                        _('The Folder %s was successfully created.') %
                        form.cleaned_data['name'])
                    redirect_url = reverse(
                        "filebrowser:fb_browse",
                        current_app=self.name) + query_helper(
                            query, "ot=desc,o=date",
                            "ot,o,filter_type,filter_date,q,p")
                    return HttpResponseRedirect(redirect_url)
                except OSError as e:
                    errno = e.args[0]
                    if errno == 13:
                        form.errors['name'] = forms.util.ErrorList(
                            [_('Permission denied.')])
                    else:
                        form.errors['name'] = forms.util.ErrorList(
                            [_('Error creating folder.')])
        else:
            form = CreateDirForm(path, filebrowser_site=self)

        return render(
            admin_request(request, self.name),
            'filebrowser/createdir.html',
            admin_context(
                {
                    'form': form,
                    'query': query,
                    'title': _(u'New Folder'),
                    'is_popup': "pop" in request.GET,
                    'settings_var': get_settings_var(directory=self.directory),
                    'breadcrumbs': get_breadcrumbs(query, query.get('dir',
                                                                    '')),
                    'breadcrumbs_title': _(u'New Folder'),
                    'filebrowser_site': self
                }, request),
        )
コード例 #17
0
def edit(request):
    """
    simple edit a file content.
    TODO:
        - Ask the user for file encoding?
        - catch read/write errors
        - merge coded parts and template parts
    """
    # QUERY / PATH CHECK
    result = _get_path_and_filename(request)
    if isinstance(result, HttpResponse):
        # path or filename doesn't exist
        return result
    path, filename, abs_path = result

    relative_server_path = os.path.join(DIRECTORY, path, filename)
    abs_filepath = os.path.join(MEDIA_ROOT, relative_server_path)

    if request.method == 'POST':
        encoding_form = SelectEncodingForm(request.POST)
        edit_form = EditForm(request.POST)
        if "reopen" in request.POST:
            # Reopen the file with other encoding
            if encoding_form.is_valid():
                encoding = encoding_form.cleaned_data["encoding"]
                edit_form = _get_editfile_forms(request, abs_filepath, encoding)
                msg = _("File was reopend with '%s' encoding." % encoding)
                request.user.message_set.create(message=msg)
        else:
            if edit_form.is_valid() and encoding_form.is_valid():
                new_content = edit_form.cleaned_data["content"]
                encoding = encoding_form.cleaned_data["encoding"]

                f = codecs.open(abs_filepath, "w", encoding)
                f.write(new_content)
                f.close()

                msg = _(
                    "Editing was successful."
                    " (Content was written with '%s' encoding.)"
                ) % (encoding)
                request.user.message_set.create(message=msg)
                redirect_url = reverse("fb_browse") + query_helper(request.GET, "", "filename")
                return HttpResponseRedirect(redirect_url)
    else:
        default_encoding = CodecChoiceField().choices[0][0] #FIXME
        encoding_form = SelectEncodingForm()
        edit_form = _get_editfile_forms(request, abs_filepath, default_encoding)


    return render_to_response('filebrowser/edit.html', {
        'encoding_form': encoding_form,
        'edit_form': edit_form,
        'query': request.GET,
        'title': _(u'edit "%s"') % filename,
        'settings_var': get_settings_var(),
        'breadcrumbs': get_breadcrumbs(request.GET, path),
        'breadcrumbs_title': _(u'edit')
    }, context_instance=Context(request))
コード例 #18
0
def upload(request):
    """
    Multiple File Upload.
    """

    from django.forms.formsets import formset_factory
    
    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))
    if path is None:
        msg = _('The requested Folder does not exist.')
        request.user.message_set.create(message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path)

    if STRICT_PIL:
        from PIL import ImageFile
    else:
        try:
            from PIL import ImageFile
        except ImportError:
            import ImageFile

    ImageFile.MAXBLOCK = IMAGE_MAXBLOCK # default is 64k

    from filebrowser.forms import UploadForm, BaseUploadFormSet
    
    UploadFormSet = formset_factory(UploadForm, formset=BaseUploadFormSet, extra=5)
    if request.method == 'POST':
        formset = UploadFormSet(data=request.POST, files=request.FILES, path=abs_path)
        if formset.is_valid():
            for cleaned_data in formset.cleaned_data:
                if cleaned_data:
                    f = cleaned_data['file']
                    f.name = convert_filename(f.name)
                    # PRE UPLOAD SIGNAL
                    filebrowser_pre_upload.send(sender=request, path=abs_path, file=f)
                    # HANDLE UPLOAD
                    uploadedfile = handle_file_upload(abs_path, f)
                    # POST UPLOAD SIGNAL
                    filebrowser_post_upload.send(sender=request, path=abs_path, file=uploadedfile)
            # MESSAGE & REDIRECT
            msg = _('Upload successful.')
            request.user.message_set.create(message=msg)
            # on redirect, sort by date desc to see the uploaded files on top of the list
            redirect_url = reverse("fb_browse") + query_helper(query, "ot=desc,o=date", "ot,o")
            return HttpResponseRedirect(redirect_url)
    else:
        formset = UploadFormSet(path=abs_path)

    return render_to_response('filebrowser/upload.html', {
        'formset': formset,
        'dir': path,
        'query': query,
        'settings_var': get_settings_var(),
        'breadcrumbs_title': _(u'Upload'),
        'title': _(u'Select files to upload'),
    }, context_instance=Context(request))
コード例 #19
0
 def decorator(request, *args, **kwargs):
     file_path = get_file(request.GET.get('dir', ''), request.GET.get('filename', ''), site=site)
     if file_path is None:
         msg = _('The requested File does not exist.')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("filebrowser:fb_browse", current_app=site.name) + query_helper(request.GET, u"", "dir")
         return HttpResponseRedirect(redirect_url)
     return function(request, *args, **kwargs)
コード例 #20
0
def mkdir(request):
    """
    Make Directory.
    """

    from filebrowser.forms import MakeDirForm

    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))

    if 'pop' in query:
        is_popup = True
    else:
        is_popup = False

    if path is None:
        msg = _('The requested Folder does not exist.')
        messages.warning(request, message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = _check_access(request, path)

    if request.method == 'POST':
        form = MakeDirForm(abs_path, request.POST)
        if form.is_valid():
            _new_dir_name = form.cleaned_data['dir_name']
            server_path = _check_access(request, path, _new_dir_name)
            try:
                # PRE CREATE SIGNAL
                filebrowser_pre_createdir.send(sender=request,
                                               path=path,
                                               dirname=_new_dir_name)
                # CREATE FOLDER
                os.mkdir(server_path)
                os.chmod(server_path, 0775)
                # POST CREATE SIGNAL
                filebrowser_post_createdir.send(sender=request,
                                                path=path,
                                                dirname=_new_dir_name)
                # MESSAGE & REDIRECT
                msg = _('The Folder %s was successfully created.') % (
                    _new_dir_name)
                messages.success(request, message=msg)
                # on redirect, sort by date desc to see the new directory on top of the list
                # remove filter in order to actually _see_ the new folder
                # remove pagination
                redirect_url = reverse("fb_browse") + query_helper(
                    query, "ot=desc,o=date",
                    "ot,o,filter_type,filter_date,q,p")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                if errno == 13:
                    form.errors['dir_name'] = forms.util.ErrorList(
                        [_('Permission denied.')])
                else:
                    form.errors['dir_name'] = forms.util.ErrorList(
                        [_('Error creating folder.')])
コード例 #21
0
 def decorator(request, *args, **kwargs):
     file_path = get_file(request.GET.get("dir", ""), request.GET.get("filename", ""), site=site)
     if file_path is None:
         msg = _("The requested File does not exist.")
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("filebrowser:fb_browse", current_app=site.name) + query_helper(
             request.GET, u"", "dir"
         )
         return HttpResponseRedirect(redirect_url)
     elif file_path.startswith("/") or file_path.startswith(".."):
         # prevent path traversal
         msg = _("You do not have permission to access this file!")
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("filebrowser:fb_browse", current_app=site.name) + query_helper(
             request.GET, u"", "dir"
         )
         return HttpResponseRedirect(redirect_url)
     return function(request, *args, **kwargs)
コード例 #22
0
def rename(request):
	"""
	Rename existing File/Directory.

	Includes renaming existing Image Versions/Thumbnails.
	"""

	from filebrowser.forms import RenameForm

	# QUERY / PATH CHECK
	query = request.GET
	path = get_path(query.get('dir', ''))

	if 'pop' in query:
		is_popup = True
	else:
		is_popup = False

	filename = get_file(query.get('dir', ''), query.get('filename', ''))
	if path is None or filename is None:
		if path is None:
			msg = _('The requested Folder does not exist.')
		else:
			msg = _('The requested File does not exist.')
		messages.warning(request, message=msg)
		return HttpResponseRedirect(reverse("fb_browse"))
	abs_path = _check_access(request, path)
	file_extension = os.path.splitext(filename)[1].lower()

	if request.method == 'POST':
		form = RenameForm(abs_path, file_extension, request.POST)
		if form.is_valid():
			relative_server_path = os.path.join(fb_settings.DIRECTORY, path, filename)
			new_filename = form.cleaned_data['name'] + file_extension
			new_relative_server_path = os.path.join(fb_settings.DIRECTORY, path, new_filename)
			try:
				# PRE RENAME SIGNAL
				filebrowser_pre_rename.send(sender=request, path=path, filename=filename, new_filename=new_filename)
				# DELETE IMAGE VERSIONS/THUMBNAILS
				# regenerating versions/thumbs will be done automatically
				for version in VERSIONS:
					try:
						os.unlink(os.path.join(fb_settings.MEDIA_ROOT, get_version_path(relative_server_path, version)))
					except:
						pass
				# RENAME ORIGINAL
				os.rename(os.path.join(fb_settings.MEDIA_ROOT, relative_server_path),
				          os.path.join(fb_settings.MEDIA_ROOT, new_relative_server_path))
				# POST RENAME SIGNAL
				filebrowser_post_rename.send(sender=request, path=path, filename=filename, new_filename=new_filename)
				# MESSAGE & REDIRECT
				msg = _('Renaming was successful.')
				messages.success(request, message=msg)
				redirect_url = reverse("fb_browse") + query_helper(query, "", "filename")
				return HttpResponseRedirect(redirect_url)
			except OSError, (errno, strerror):
				form.errors['name'] = forms.util.ErrorList([_('Error.')])
コード例 #23
0
 def decorator(request, *args, **kwargs):
     if get_path('', site=site) == None:
         # The storage location does not exist, raise an error to prevent eternal redirecting.
         raise ImproperlyConfigured, _("Error finding Upload-Folder (site.storage.location + site.directory). Maybe it does not exist?")
     if get_path(request.GET.get('dir', ''), site=site) == None:
         msg = _('The requested Folder does not exist.')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("filebrowser:fb_browse", current_app=site.name) + query_helper(request.GET, "", "dir")
         return HttpResponseRedirect(redirect_url)
     return function(request, *args, **kwargs)
コード例 #24
0
 def decorator(request, *args, **kwargs):
     if get_path('') == None:
         # The DIRECTORY does not exist, raise an error to prevent eternal redirecting.
         raise ImproperlyConfigured, _("Error finding Upload-Folder (MEDIA_ROOT + DIRECTORY). Maybe it does not exist?")
     if get_path(request.GET.get('dir', '')) == None:
         msg = _('The requested Folder does not exist.')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("fb_browse") + query_helper(request.GET, "", "dir")
         return HttpResponseRedirect(redirect_url)
     return function(request, *args, **kwargs)
コード例 #25
0
 def decorator(request, *args, **kwargs):
     if get_path('') == None:
         # The DIRECTORY does not exist, raise an error to prevent eternal redirecting.
         raise ImproperlyConfigured, _("Error finding Upload-Folder (MEDIA_ROOT + DIRECTORY). Maybe it does not exist?")
     if get_path(request.GET.get('dir', '')) == None:
         msg = _('The requested Folder does not exist.')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("fb_browse") + query_helper(request.GET, "", "dir")
         return HttpResponseRedirect(redirect_url)
     return function(request, *args, **kwargs)
コード例 #26
0
 def decorator(request, *args, **kwargs):
     if get_path('', site=site) is None:
         # The storage location does not exist, raise an error to prevent eternal redirecting.
         raise ImproperlyConfigured(_("Error finding Upload-Folder (site.storage.location + site.directory). Maybe it does not exist?"))
     if get_path(request.GET.get('dir', ''), site=site) is None:
         msg = _('The requested Folder does not exist.')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("filebrowser:fb_browse", current_app=site.name) + query_helper(request.GET, u"", "dir")
         return HttpResponseRedirect(redirect_url)
     return function(request, *args, **kwargs)
コード例 #27
0
def mkdir(request):
    """
    Make Directory.
    """
    
    from filebrowser.forms import MakeDirForm
    
    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))
    if path is None:
        msg = _('The requested Folder does not exist.')
        messages.warning(request,message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = _check_access(request, path)
    
    if request.method == 'POST':
        form = MakeDirForm(abs_path, request.POST)
        if form.is_valid():
            _new_dir_name = form.cleaned_data['dir_name']
            server_path = _check_access(request, path, _new_dir_name)
            try:
                # PRE CREATE SIGNAL
                filebrowser_pre_createdir.send(sender=request, path=path, dirname=_new_dir_name)
                # CREATE FOLDER
                os.mkdir(server_path)
                os.chmod(server_path, 0o775)
                # POST CREATE SIGNAL
                filebrowser_post_createdir.send(sender=request, path=path, dirname=_new_dir_name)
                # MESSAGE & REDIRECT
                msg = _('The Folder %s was successfully created.') % (_new_dir_name)
                messages.success(request,message=msg)
                # on redirect, sort by date desc to see the new directory on top of the list
                # remove filter in order to actually _see_ the new folder
                # remove pagination
                redirect_url = reverse("fb_browse") + query_helper(query, "ot=desc,o=date", "ot,o,filter_type,filter_date,q,p")
                return HttpResponseRedirect(redirect_url)
            except OSError(errno, strerror):
                if errno == 13:
                    form.errors['dir_name'] = forms.util.ErrorList([_('Permission denied.')])
                else:
                    form.errors['dir_name'] = forms.util.ErrorList([_('Error creating folder.')])
    else:
        form = MakeDirForm(abs_path)
    
    return render_to_response('filebrowser/makedir.html', {
        'form': form,
        'query': query,
        'title': _(u'New Folder'),
        'settings_var': get_settings_var(),
        'breadcrumbs': get_breadcrumbs(query, path),
        'breadcrumbs_title': _(u'New Folder')
    }, context_instance=Context(request))
コード例 #28
0
 def decorator(request, *args, **kwargs):
     file_path = get_file(request.GET.get('dir', ''),
                          request.GET.get('filename', ''),
                          site=site)
     if file_path is None:
         msg = _('The requested File does not exist.')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("filebrowser:fb_browse",
                                current_app=site.name) + query_helper(
                                    request.GET, u"", "dir")
         return HttpResponseRedirect(redirect_url)
     return function(request, *args, **kwargs)
コード例 #29
0
 def detail(self, request):
     """
     Show detail page for a file.
     Rename existing File/Directory (deletes existing Image Versions/Thumbnails).
     """
     from filebrowser.forms import ChangeForm
     query = request.GET
     path = u'%s' % os.path.join(self.directory, query.get('dir', ''))
     fileobject = FileObject(os.path.join(path, query.get('filename', '')), site=self)
     
     if request.method == 'POST':
         form = ChangeForm(request.POST, path=path, fileobject=fileobject, filebrowser_site=self)
         if form.is_valid():
             new_name = form.cleaned_data['name']
             action_name = form.cleaned_data['custom_action']
             try:
                 action_response = None
                 if action_name:
                     action = self.get_action(action_name)
                     # Pre-action signal
                     signals.filebrowser_actions_pre_apply.send(sender=request, action_name=action_name, fileobject=[fileobject], site=self)
                     # Call the action to action
                     action_response = action(request=request, fileobjects=[fileobject])
                     # Post-action signal
                     signals.filebrowser_actions_post_apply.send(sender=request, action_name=action_name, fileobject=[fileobject], result=action_response, site=self)
                 if new_name != fileobject.filename:
                     signals.filebrowser_pre_rename.send(sender=request, path=fileobject.path, name=fileobject.filename, new_name=new_name, site=self)
                     fileobject.delete_versions()
                     self.storage.move(fileobject.path, os.path.join(fileobject.head, new_name))
                     signals.filebrowser_post_rename.send(sender=request, path=fileobject.path, name=fileobject.filename, new_name=new_name, site=self)
                     messages.add_message(request, messages.SUCCESS, _('Renaming was successful.'))
                 if isinstance(action_response, HttpResponse):
                     return action_response
                 if "_continue" in request.POST:
                     redirect_url = reverse("fb_detail", current_app=self.name) + query_helper(query, "filename="+new_name, "filename")
                 else:
                     redirect_url = reverse("fb_browse", current_app=self.name) + query_helper(query, "", "filename")
                 return HttpResponseRedirect(redirect_url)
             except OSError, (errno, strerror):
                 form.errors['name'] = forms.util.ErrorList([_('Error.')])
コード例 #30
0
    def crop(self, request):
        """
        Crop view.
        """
        from filebrowser.forms import ImageCropDataForm
        query = request.GET
        path = u'%s' % os.path.join(self.directory, query.get('dir', ''))
        fileobject = FileObject(os.path.join(path, query.get('filename', '')),
                                site=self)
        versions = self._get_editable_versions(fileobject)

        if not versions:
            raise Http404

        version = versions[0]
        if request.GET.get('version') and request.GET.get(
                'version') in versions:
            version = request.GET.get('version')

        if request.POST:
            version = request.POST.get('version')
            form = ImageCropDataForm(request.POST)
            if form.is_valid():
                if version in versions:
                    self._save_crop(fileobject, **form.cleaned_data)
                qs = request.GET.copy()
                qs['version'] = version
                path = '%s?%s' % (request.path, qs.urlencode())
                if "_continue" in request.POST:
                    redirect_url = path
                else:
                    redirect_url = reverse(
                        "filebrowser:fb_browse",
                        current_app=self.name) + query_helper(
                            query, "", "filename")
                return HttpResponseRedirect(redirect_url)
        else:
            form = ImageCropDataForm(initial={'version': version})

        request.current_app = self.name
        return render(
            request, 'filebrowser/crop.html', {
                'fileobject': fileobject,
                'query': query,
                'title': u'%s' % fileobject.filename,
                'breadcrumbs': get_breadcrumbs(query, query.get('dir', '')),
                'breadcrumbs_title': u'%s' % fileobject.filename,
                'filebrowser_site': self,
                'form': form,
                'editable_versions': versions,
                'version': version
            })
コード例 #31
0
ファイル: views.py プロジェクト: oppian/oppian
def rename(request):
    """
    Rename existing File/Directory.
    
    Includes renaming existing Image Versions/Thumbnails.
    """

    from filebrowser.forms import RenameForm

    # QUERY / PATH CHECK
    query = request.GET
    path = _get_path(query.get('dir', ''))
    filename = _get_file(query.get('dir', ''), query.get('filename', ''))
    if path is None or filename is None:
        msg = _('Directory/File does not exist.')
        request.user.message_set.create(message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path)
    file_extension = os.path.splitext(filename)[1].lower()

    if request.method == 'POST':
        form = RenameForm(abs_path, file_extension, request.POST)
        if form.is_valid():
            relative_server_path = os.path.join(DIRECTORY, path, filename)
            new_relative_server_path = os.path.join(DIRECTORY, path, form.cleaned_data['name'] + file_extension)
            try:
                # PRE RENAME SIGNAL
                filebrowser_pre_delete.send(sender=request, path=path, filename=filename)
                # DELETE IMAGE VERSIONS/THUMBNAILS
                # regenerating versions/thumbs will be done automatically
                for version in VERSIONS:
                    try:
                        _delete(MEDIA_ROOT, _get_version_path(relative_server_path, version))
                        #os.unlink(os.path.join(MEDIA_ROOT, _get_version_path(relative_server_path, version)))
                    except:
                        pass
                # RENAME ORIGINAL
                newfile = os.path.join(MEDIA_ROOT, new_relative_server_path)
                oldfile = os.path.join(MEDIA_ROOT, relative_server_path)
                # opening and saving might not be efficient, but it works with all storages
                default_storage.save(newfile, default_storage.open(oldfile))
                default_storage.delete(oldfile)
                
                # POST RENAME SIGNAL
                filebrowser_post_delete.send(sender=request, path=path, filename=filename)
                # MESSAGE & REDIRECT
                msg = _('Renaming was successful.')
                request.user.message_set.create(message=msg)
                redirect_url = reverse("fb_browse") + query_helper(query, "", "filename")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                form.errors['name'] = forms.util.ErrorList([_('Error.')])
コード例 #32
0
def rename(request, root_directory=DIRECTORY):
    """
    Rename existing File/Directory.
    
    Includes renaming existing Image Versions/Thumbnails.
    """

    from filebrowser.forms import RenameForm

    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get("dir", ""), root_directory)
    filename = get_file(query.get("dir", ""), query.get("filename", ""), root_directory)
    if path is None or filename is None:
        if path is None:
            msg = _("The requested Folder does not exist.")
        else:
            msg = _("The requested File does not exist.")
        _message(request, msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(MEDIA_ROOT, root_directory, path)
    file_extension = os.path.splitext(filename)[1].lower()

    if request.method == "POST":
        form = RenameForm(abs_path, file_extension, request.POST)
        if form.is_valid():
            relative_server_path = os.path.join(root_directory, path, filename)
            new_filename = form.cleaned_data["name"] + file_extension
            new_relative_server_path = os.path.join(root_directory, path, new_filename)
            try:
                # PRE RENAME SIGNAL
                filebrowser_pre_rename.send(sender=request, path=path, filename=filename, new_filename=new_filename)
                # DELETE IMAGE VERSIONS/THUMBNAILS
                # regenerating versions/thumbs will be done automatically
                for version in VERSIONS:
                    try:
                        os.unlink(os.path.join(MEDIA_ROOT, get_version_path(relative_server_path, version)))
                    except:
                        pass
                # RENAME ORIGINAL
                os.rename(
                    os.path.join(MEDIA_ROOT, relative_server_path), os.path.join(MEDIA_ROOT, new_relative_server_path)
                )
                # POST RENAME SIGNAL
                filebrowser_post_rename.send(sender=request, path=path, filename=filename, new_filename=new_filename)
                # MESSAGE & REDIRECT
                msg = _("Renaming was successful.")
                _message(request, msg)
                redirect_url = reverse("fb_browse") + query_helper(request.GET, "", "filename")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                form.errors["name"] = forms.util.ErrorList([_("Error.")])
コード例 #33
0
ファイル: views.py プロジェクト: dblundell/django-filebrowser
def detail(request):
    """
    Show detail page for a file.
    
    Rename existing File/Directory (deletes existing Image Versions/Thumbnails).
    """
    from filebrowser.forms import ChangeForm
    query = request.GET
    abs_path = u'%s' % os.path.join(MEDIA_ROOT, DIRECTORY, query.get('dir', ''))
    fileobject = FileObject(os.path.join(abs_path, query.get('filename', '')))
    
    if request.method == 'POST':
        form = ChangeForm(request.POST, path=abs_path, fileobject=fileobject)
        if form.is_valid():
            new_name = form.cleaned_data['name']
            transpose = form.cleaned_data['transpose']
            try:
                if transpose:
                    im = Image.open(fileobject.path)
                    new_image = im.transpose(int(transpose))
                    try:
                        new_image.save(fileobject.path, quality=VERSION_QUALITY, optimize=(os.path.splitext(fileobject.path)[1].lower() != '.gif'))
                    except IOError:
                        new_image.save(fileobject.path, quality=VERSION_QUALITY)
                    fileobject.delete_versions()
                    messages.add_message(request, messages.SUCCESS, _('Transposing was successful.'))
                if new_name != fileobject.filename:
                    filebrowser_pre_rename.send(sender=request, path=fileobject.path, name=fileobject.filename, new_name=new_name)
                    fileobject.delete_versions()
                    os.rename(fileobject.path, os.path.join(fileobject.head, new_name))
                    filebrowser_post_rename.send(sender=request, path=fileobject.path, name=fileobject.filename, new_name=new_name)
                    messages.add_message(request, messages.SUCCESS, _('Renaming was successful.'))
                if "_continue" in request.POST:
                    redirect_url = reverse("fb_detail") + query_helper(query, "filename="+new_name, "filename")
                else:
                    redirect_url = reverse("fb_browse") + query_helper(query, "", "filename")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                form.errors['name'] = forms.util.ErrorList([_('Error.')])
コード例 #34
0
def rename(request):
    """
    Rename existing File/Directory.
    
    Includes renaming existing Image Versions/Thumbnails.
    """
    
    from filebrowser.forms import RenameForm
    
    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))
    filename = get_file(query.get('dir', ''), query.get('filename', ''))
    if path is None or filename is None:
        if path is None:
            msg = _('The requested Folder does not exist.')
        else:
            msg = _('The requested File does not exist.')
        request.user.message_set.create(message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path)
    file_extension = os.path.splitext(filename)[1].lower()
    
    if request.method == 'POST':
        form = RenameForm(abs_path, file_extension, request.POST)
        if form.is_valid():
            relative_server_path = os.path.join(DIRECTORY, path, filename)
            new_filename = form.cleaned_data['name'] + file_extension
            new_relative_server_path = os.path.join(DIRECTORY, path, new_filename)
            try:
                # PRE RENAME SIGNAL
                filebrowser_pre_rename.send(sender=request, path=path, filename=filename, new_filename=new_filename)
                # DELETE IMAGE VERSIONS/THUMBNAILS
                # regenerating versions/thumbs will be done automatically
                for version in VERSIONS:
                    try:
                        os.unlink(os.path.join(MEDIA_ROOT, get_version_path(relative_server_path, version)))
                    except:
                        pass
                # RENAME ORIGINAL
                os.rename(os.path.join(MEDIA_ROOT, relative_server_path), os.path.join(MEDIA_ROOT, new_relative_server_path))
                # POST RENAME SIGNAL
                filebrowser_post_rename.send(sender=request, path=path, filename=filename, new_filename=new_filename)
                # MESSAGE & REDIRECT
                msg = _('Renaming was successful.')
                request.user.message_set.create(message=msg)
                redirect_url = reverse("fb_browse") + query_helper(query, "", "filename")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                form.errors['name'] = forms.util.ErrorList([_('Error.')])
コード例 #35
0
def edit(request, root_directory=DIRECTORY):
    """
    simple edit a file content.
    TODO:
        - Ask the user for file encoding?
        - catch read/write errors
        - merge coded parts and template parts
    """
    # QUERY / PATH CHECK
    result = _get_path_and_filename(request, root_directory)
    if isinstance(result, HttpResponse):
        # path or filename doesn't exist
        return result
    path, filename, abs_path = result

    relative_server_path = os.path.join(root_directory, path, filename)
    abs_filepath = os.path.join(MEDIA_ROOT, relative_server_path)

    if request.method == "POST":
        form = EditForm(request.POST)
        if form.is_valid():
            new_content = form.cleaned_data["content"]
            f = codecs.open(abs_filepath, "w", encoding="UTF-8")
            f.write(new_content)
            f.close()
            msg = _("Editing was successful.")
            _message(request, msg)
            redirect_url = reverse("fb_browse") + query_helper(request.GET, "", "filename")
            return HttpResponseRedirect(redirect_url)
    else:
        f = file(abs_filepath, "r")
        file_content = f.read()
        f.close()

        form = EditForm(initial={"content": file_content})

    return render_to_response(
        "filebrowser/edit.html",
        {
            "form": form,
            "query": request.GET,
            "title": _(u'edit "%s"') % filename,
            "settings_var": get_settings_var(),
            "breadcrumbs": get_breadcrumbs(request.GET, path),
            "breadcrumbs_title": _(u"edit"),
        },
        context_instance=Context(request),
    )
コード例 #36
0
def generateimages(request, dir_name=None, file_name=None):
    """
    Generate Image Versions for existing singe Image or a whole Directory.
        This is useful if someone uploads images via FTP, not using the
        upload functionality of the FileBrowser.
    """

    path = _get_path(dir_name)
    query = request.GET

    if file_name:
        # GENERATE IMAGES
        if IMAGE_GENERATOR_LANDSCAPE != "" or IMAGE_GENERATOR_PORTRAIT != "":
            _image_generator(PATH_SERVER, path, file_name)
        # GENERATE CROPPED/RECTANGULAR IMAGE
        if IMAGE_CROP_GENERATOR != "":
            _image_crop_generator(PATH_SERVER, path, file_name)
    else:
        # GENERATE IMAGES FOR WHOLE DIRECTORY
        dir_path = os.path.join(PATH_SERVER, path)
        dir_list = os.listdir(dir_path)
        for file in dir_list:
            if os.path.isfile(
                    os.path.join(PATH_SERVER, path,
                                 file)) and _get_file_type(file) == "Image":
                # GENERATE IMAGES
                if IMAGE_GENERATOR_LANDSCAPE != "" or IMAGE_GENERATOR_PORTRAIT != "":
                    _image_generator(PATH_SERVER, path, file)
                # GENERATE CROPPED/RECTANGULAR IMAGE
                if IMAGE_CROP_GENERATOR != "":
                    _image_crop_generator(PATH_SERVER, path, file)

    # MESSAGE & REDIRECT
    msg = _('Successfully generated Images.')
    request.user.message_set.create(message=msg)
    return HttpResponseRedirect(URL_ADMIN + path + query_helper(query, "", ""))

    return render_to_response(
        'filebrowser/index.html', {
            'dir': dir_name,
            'query': query,
            'settings_var': _get_settings_var(),
            'breadcrumbs': _get_breadcrumbs(query, dir_name, ''),
            'root_path': URL_HOME,
        },
        context_instance=Context(request))
コード例 #37
0
def rename(request):
    """
    Rename existing File/Directory.
    
    Includes renaming existing Image Versions/Thumbnails.
    """

    from filebrowser.forms import RenameForm

    # QUERY / PATH CHECK
    result = _get_path_and_filename(request)
    if isinstance(result, HttpResponse):
        # path or filename doesn't exist
        return result
    path, filename, abs_path = result

    file_extension = os.path.splitext(filename)[1].lower()

    if request.method == 'POST':
        form = RenameForm(abs_path, file_extension, request.POST)
        if form.is_valid():
            relative_server_path = os.path.join(DIRECTORY, path, filename)
            new_filename = form.cleaned_data['name'] + file_extension
            new_relative_server_path = os.path.join(DIRECTORY, path, new_filename)
            try:
                # PRE RENAME SIGNAL
                filebrowser_pre_rename.send(sender=request, path=path, filename=filename, new_filename=new_filename)
                # DELETE IMAGE VERSIONS/THUMBNAILS
                # regenerating versions/thumbs will be done automatically
                for version in VERSIONS:
                    try:
                        os.unlink(os.path.join(MEDIA_ROOT, get_version_path(relative_server_path, version)))
                    except:
                        pass
                # RENAME ORIGINAL
                os.rename(os.path.join(MEDIA_ROOT, relative_server_path), os.path.join(MEDIA_ROOT, new_relative_server_path))
                # POST RENAME SIGNAL
                filebrowser_post_rename.send(sender=request, path=path, filename=filename, new_filename=new_filename)
                # MESSAGE & REDIRECT
                msg = _('Renaming was successful.')
                request.user.message_set.create(message=msg)
                redirect_url = reverse("fb_browse") + query_helper(request.GET, "", "filename")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                form.errors['name'] = forms.util.ErrorList([_('Error.')])
コード例 #38
0
    def delete(self, request):
        "Delete existing File/Directory."
        query = request.GET
        path = u'%s' % os.path.join(self.directory, query.get('dir', ''))
        fileobject = FileObject(os.path.join(path, query.get('filename', '')), site=self)

        if request.GET:
            try:
                signals.filebrowser_pre_delete.send(sender=request, path=fileobject.path, name=fileobject.filename, site=self)
                fileobject.delete_versions()
                fileobject.delete()
                signals.filebrowser_post_delete.send(sender=request, path=fileobject.path, name=fileobject.filename, site=self)
                messages.add_message(request, messages.SUCCESS, _('Successfully deleted %s') % fileobject.filename)
            except OSError:
                # TODO: define error-message
                pass
        redirect_url = reverse("filebrowser:fb_browse", current_app=self.name) + query_helper(query, "", "filename,filetype")
        return HttpResponseRedirect(redirect_url)
コード例 #39
0
ファイル: views.py プロジェクト: oppian/oppian
def mkdir(request):
    """
    Make Directory.
    """

    from filebrowser.forms import MakeDirForm

    # QUERY / PATH CHECK
    query = request.GET
    path = _get_path(query.get('dir', ''))
    if path is None:
        msg = _('Directory/File does not exist.')
        request.user.message_set.create(message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path)

    if request.method == 'POST':
        form = MakeDirForm(abs_path, request.POST)
        if form.is_valid():
            server_path = os.path.join(abs_path, form.cleaned_data['dir_name'])
            try:
                dirname = form.cleaned_data['dir_name']
                # PRE CREATE SIGNAL
                filebrowser_pre_createdir.send(sender=request, path=path, dirname=dirname)
                # CREATE FOLDER
                if _supports_os():
                    os.mkdir(server_path)
                    os.chmod(server_path, 0775)
                # POST CREATE SIGNAL
                filebrowser_post_createdir.send(sender=request, path=path, dirname=dirname)
                # MESSAGE & REDIRECT
                msg = _('The Folder %s was successfully created.') % (dirname)
                request.user.message_set.create(message=msg)
                # on redirect, sort by date desc to see the new directory on top of the list
                # remove filter in order to actually _see_ the new folder
                from urllib import quote
                new_path=quote(_normpath(os.path.join(path, dirname)))
                redirect_url = reverse("fb_browse") + query_helper(query, "ot=desc,o=date,dir=%s" %(new_path), "ot,o,filter_type,filter_date,q")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                if errno == 13:
                    form.errors['dir_name'] = forms.util.ErrorList([_('Permission denied.')])
                else:
                    form.errors['dir_name'] = forms.util.ErrorList([_('Error creating directory.')])
コード例 #40
0
    def createdir(self, request):
        """
        Create Directory.
        """
        from filebrowser.forms import CreateDirForm
        query = request.GET
        path = u'%s' % os.path.join(self.directory, query.get('dir', ''))

        if request.method == 'POST':
            form = CreateDirForm(path, request.POST, filebrowser_site=self)
            if form.is_valid():
                server_path = os.path.join(path, form.cleaned_data['name'])
                try:
                    signals.filebrowser_pre_createdir.send(
                        sender=request,
                        path=server_path,
                        name=form.cleaned_data['name'],
                        site=self)
                    self.storage.makedirs(server_path)
                    # os.mkdir(server_path)
                    # os.chmod(server_path, 0775) # ??? PERMISSIONS
                    signals.filebrowser_post_createdir.send(
                        sender=request,
                        path=server_path,
                        name=form.cleaned_data['name'],
                        site=self)
                    messages.add_message(
                        request, messages.SUCCESS,
                        _('The Folder %s was successfully created.') %
                        form.cleaned_data['name'])
                    redirect_url = reverse(
                        "filebrowser:fb_browse",
                        current_app=self.name) + query_helper(
                            query, "ot=desc,o=date",
                            "ot,o,filter_type,filter_date,q,p")
                    return HttpResponseRedirect(redirect_url)
                except OSError, (errno, strerror):
                    if errno == 13:
                        form.errors['name'] = forms.util.ErrorList(
                            [_('Permission denied.')])
                    else:
                        form.errors['name'] = forms.util.ErrorList(
                            [_('Error creating folder.')])
コード例 #41
0
def mkdir(request):
    """
    Make Directory.
    """

    from filebrowser.forms import MakeDirForm

    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get("dir", ""))
    if path is None:
        msg = _("The requested Folder does not exist.")
        messages.warning(request, message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(fb_settings.MEDIA_ROOT, fb_settings.DIRECTORY, path)

    if request.method == "POST":
        form = MakeDirForm(abs_path, request.POST)
        if form.is_valid():
            server_path = os.path.join(abs_path, form.cleaned_data["dir_name"])
            try:
                # PRE CREATE SIGNAL
                filebrowser_pre_createdir.send(sender=request, path=path, dirname=form.cleaned_data["dir_name"])
                # CREATE FOLDER
                os.mkdir(server_path)
                os.chmod(server_path, 0775)
                # POST CREATE SIGNAL
                filebrowser_post_createdir.send(sender=request, path=path, dirname=form.cleaned_data["dir_name"])
                # MESSAGE & REDIRECT
                msg = _("The Folder %s was successfully created.") % (form.cleaned_data["dir_name"])
                messages.success(request, message=msg)
                # on redirect, sort by date desc to see the new directory on top of the list
                # remove filter in order to actually _see_ the new folder
                # remove pagination
                redirect_url = reverse("fb_browse") + query_helper(
                    query, "ot=desc,o=date", "ot,o,filter_type,filter_date,q,p"
                )
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                if errno == 13:
                    form.errors["dir_name"] = forms.util.ErrorList([_("Permission denied.")])
                else:
                    form.errors["dir_name"] = forms.util.ErrorList([_("Error creating folder.")])
コード例 #42
0
 def decorator(request, *args, **kwargs):
     if get_path('', site=site) == None:
         # The DIRECTORY does not exist, raise an error to prevent eternal redirecting.
         raise ImproperlyConfigured, _("Error finding Upload-Folder (MEDIA_ROOT + DIRECTORY). Maybe it does not exist?")
     path = request.GET.get('dir', '')
     if get_path(path, site=site) == None:
         subdir = request.GET.get('subdir', '')
         try:
             if subdir == "1":
                 path = convert_filename(path)
                 path = u'%s' % os.path.join(site.directory, path)
                 if not site.storage.isdir(path):
                     site.storage.makedirs(path)
                     return function(request, *args, **kwargs)
         except OSError, (errno, strerror):
             pass
         msg = _('The requested Folder does not exist.')
         messages.add_message(request, messages.ERROR, msg)
         redirect_url = reverse("filebrowser:fb_browse", current_app=site.name) + query_helper(request.GET, "", "dir")
         return HttpResponseRedirect(redirect_url)
コード例 #43
0
ファイル: views.py プロジェクト: nailor/asteriski-www
def rename(request):
    """
    Rename existing File/Directory.
    
    Includes renaming existing Image Versions/Thumbnails.
    """
    
    from filebrowser.forms import RenameForm
    
    # QUERY / PATH CHECK
    query = request.GET
    path = _get_path(query.get('dir', ''))
    filename = _get_file(query.get('dir', ''), query.get('filename', ''))
    if path is None or filename is None:
        msg = _('Directory/File does not exist.')
        request.user.message_set.create(message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(settings.MEDIA_ROOT, DIRECTORY, path)
    file_extension = os.path.splitext(filename)[1].lower()
    
    if request.method == 'POST':
        form = RenameForm(abs_path, file_extension, request.POST)
        if form.is_valid():
            relative_server_path = os.path.join(DIRECTORY, path, filename)
            new_relative_server_path = os.path.join(DIRECTORY, path, form.cleaned_data['name'] + file_extension)
            try:
                # DELETE IMAGE VERSIONS/THUMBNAILS
                # regenerating versions/thumbs will be done automatically
                for version in VERSIONS:
                    try:
                        os.unlink(os.path.join(MEDIA_ROOT, _get_version_path(relative_server_path, version)))
                    except:
                        pass
                # RENAME ORIGINAL
                os.rename(os.path.join(MEDIA_ROOT, relative_server_path), os.path.join(MEDIA_ROOT, new_relative_server_path))
                msg = _('Renaming was successful.')
                request.user.message_set.create(message=msg)
                redirect_url = reverse("fb_browse") + query_helper(query, "", "filename")
                return HttpResponseRedirect(redirect_url)
            except OSError, (errno, strerror):
                form.errors['name'] = forms.util.ErrorList([_('Error.')])
コード例 #44
0
 def createdir(self, request):
     "Create Directory"
     from filebrowser.forms import CreateDirForm
     query = request.GET
     path = u'%s' % os.path.join(self.directory, query.get('dir', ''))
     
     if request.method == 'POST':
         form = CreateDirForm(path, request.POST, filebrowser_site=self)
         if form.is_valid():
             server_path = os.path.join(path, form.cleaned_data['name'])
             try:
                 signals.filebrowser_pre_createdir.send(sender=request, path=server_path, name=form.cleaned_data['name'], site=self)
                 self.storage.makedirs(server_path)
                 signals.filebrowser_post_createdir.send(sender=request, path=server_path, name=form.cleaned_data['name'], site=self)
                 messages.add_message(request, messages.SUCCESS, _('The Folder %s was successfully created.') % form.cleaned_data['name'])
                 redirect_url = reverse("fb_browse", current_app=self.name) + query_helper(query, "ot=desc,o=date", "ot,o,filter_type,filter_date,q,p")
                 return HttpResponseRedirect(redirect_url)
             except OSError, (errno, strerror):
                 if errno == 13:
                     form.errors['name'] = forms.util.ErrorList([_('Permission denied.')])
                 else:
                     form.errors['name'] = forms.util.ErrorList([_('Error creating folder.')])
def upload(request):
    """
    Multiple File Upload.
    """

    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))
    if path is None:
        msg = _('The requested Folder does not exist.')
        request.user.message_set.create(message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))

    redirect_url = reverse("fb_browse") + query_helper(query, "ot=desc,o=date", "ot,o")

    return render_to_response('filebrowser/upload_uploadify.html', {
        'redirect_url': redirect_url,
        'query': query,
        'settings_var': get_settings_var(),
        'breadcrumbs_title': _(u'Upload'),
        'title': _(u'Select files to upload'),
    }, context_instance=Context(request))
def upload(request):
    """
    Multiple File Upload.
    """

    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))
    if path is None:
        msg = _('The requested Folder does not exist.')
        request.user.message_set.create(message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))

    redirect_url = reverse("fb_browse") + query_helper(query, "ot=desc,o=date", "ot,o")

    return render_to_response('filebrowser/upload_uploadify.html', {
        'redirect_url': redirect_url,
        'query': query,
        'settings_var': get_settings_var(),
        'breadcrumbs_title': _(u'Upload'),
        'title': _(u'Select files to upload'),
    }, context_instance=Context(request))
コード例 #47
0
ファイル: views.py プロジェクト: xfenix/django-media-manager
def browse(request):
    """
    Browse Files/Directories.
    """
    # QUERY / PATH CHECK
    query = request.GET.copy()
    path = get_path(query.get('dir', ''))
    directory = get_path('')

    if 'pop' in query:
        is_popup = True
    else:
        is_popup = False

    if path is not None:
        abs_path = _check_access(request, path)

    if path is None:
        msg = _('The requested Folder does not exist.')
        messages.warning(request,message=msg)
        if directory is None:
            # The DIRECTORY does not exist, raise an error to prevent eternal redirecting.
            raise ImproperlyConfigured, _("Error finding Upload-Folder. Maybe it does not exist?")
        redirect_url = reverse("fb_browse") + query_helper(query, "", "dir")
        return HttpResponseRedirect(redirect_url)
    
    # INITIAL VARIABLES
    results_var = {'results_total': 0, 'results_current': 0, 'delete_total': 0, 'images_total': 0, 'select_total': 0 }
    counter = {}
    for k,v in EXTENSIONS.iteritems():
        counter[k] = 0
    
    dir_list = os.listdir(abs_path)
    files = []
    for file in dir_list:
        
        # EXCLUDE FILES MATCHING VERSIONS_PREFIX OR ANY OF THE EXCLUDE PATTERNS
        filtered = file.startswith('.')
        for re_prefix in filter_re:
            if re_prefix.search(file):
                filtered = True
        if filtered:
            continue
        results_var['results_total'] += 1
        
        # CREATE FILEOBJECT
        fileobject = FileObject(os.path.join(fb_settings.DIRECTORY, path.decode('utf-8'), file.decode('utf-8')))
        
        # FILTER / SEARCH
        append = False
        if fileobject.filetype == request.GET.get('filter_type', fileobject.filetype) and get_filterdate(request.GET.get('filter_date', ''), fileobject.date):
            append = True
        if request.GET.get('q') and not re.compile(request.GET.get('q').lower(), re.M).search(file.lower()):
            append = False
        
        # APPEND FILE_LIST
        if append:
            _type = query.get('type')
            try:
                # COUNTER/RESULTS
                if fileobject.filetype == 'Image':
                    results_var['images_total'] += 1
                if fileobject.filetype != 'Folder':
                    results_var['delete_total'] += 1
                elif fileobject.filetype == 'Folder' and fileobject.is_empty:
                    results_var['delete_total'] += 1
                if _type and _type in SELECT_FORMATS and fileobject.filetype in SELECT_FORMATS[_type]:
                    results_var['select_total'] += 1
                elif not _type:
                    results_var['select_total'] += 1
            except OSError:
                # Ignore items that have problems
                continue
            else:
                files.append(fileobject)
                results_var['results_current'] += 1
        
        # COUNTER/RESULTS
        if fileobject.filetype:
            counter[fileobject.filetype] += 1
    
    # SORTING
    query['o'] = request.GET.get('o', DEFAULT_SORTING_BY)
    query['ot'] = request.GET.get('ot', DEFAULT_SORTING_ORDER)
    files = sort_by_attr(files, request.GET.get('o', DEFAULT_SORTING_BY))
    if not request.GET.get('ot') and DEFAULT_SORTING_ORDER == "desc" or request.GET.get('ot') == "desc":
        files.reverse()
    
    p = Paginator(files, LIST_PER_PAGE)
    try:
        page_nr = request.GET.get('p', '1')
    except:
        page_nr = 1
    try:
        page = p.page(page_nr)
    except (EmptyPage, InvalidPage):
        page = p.page(p.num_pages)
    
    return render_to_response(_template() + 'index.html', {
        'dir': path,
        'p': p,
        'page': page,
        'results_var': results_var,
        'counter': counter,
        'query': query,
        'title': _(u'FileBrowser'),
        'settings_var': get_settings_var(),
        'breadcrumbs': get_breadcrumbs(query, path),
        'breadcrumbs_title': "",
        'is_popup': is_popup
    }, context_instance=Context(request))
コード例 #48
0
def rename(request):
    """
    Rename existing File/Directory.

    Includes renaming existing Image Versions/Thumbnails.
    """
    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))

    if 'pop' in query:
        is_popup = True
    else:
        is_popup = False

    filename = get_file(query.get('dir', ''), query.get('filename', ''))
    if path is None or filename is None:
        if path is None:
            msg = _('The requested Folder does not exist.')
        else:
            msg = _('The requested File does not exist.')
        messages.warning(request, message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = _check_access(request, path)
    file_extension = os.path.splitext(filename)[1].lower()

    if request.method == 'POST':
        form = RenameForm(abs_path, file_extension, request.POST)
        if form.is_valid():
            relative_server_path = os.path.join(fb_settings.DIRECTORY, path,
                                                filename)
            new_filename = form.cleaned_data['name'] + file_extension
            new_relative_server_path = os.path.join(fb_settings.DIRECTORY,
                                                    path, new_filename)
            try:
                # PRE RENAME SIGNAL
                filebrowser_pre_rename.send(sender=request,
                                            path=path,
                                            filename=filename,
                                            new_filename=new_filename)
                # DELETE IMAGE VERSIONS/THUMBNAILS
                # regenerating versions/thumbs will be done automatically
                for version in VERSIONS:
                    try:
                        os.unlink(
                            os.path.join(
                                fb_settings.MEDIA_ROOT,
                                get_version_path(relative_server_path,
                                                 version)))
                    except:
                        pass
                # RENAME ORIGINAL
                os.rename(
                    os.path.join(fb_settings.MEDIA_ROOT, relative_server_path),
                    os.path.join(fb_settings.MEDIA_ROOT,
                                 new_relative_server_path))
                # POST RENAME SIGNAL
                filebrowser_post_rename.send(sender=request,
                                             path=path,
                                             filename=filename,
                                             new_filename=new_filename)
                # MESSAGE & REDIRECT
                msg = _('Renaming was successful.')
                messages.success(request, message=msg)
                redirect_url = reverse("fb_browse") + query_helper(
                    query, "", "filename")
                return HttpResponseRedirect(redirect_url)
            except OSError as e:
                form.errors['name'] = forms.utils.ErrorList([_('Error.')])
    else:
        form = RenameForm(abs_path, file_extension)

    return render(
        request,
        _template() + 'rename.html', {
            'form': form,
            'query': query,
            'file_extension': file_extension,
            'title': _(u'Rename "{0}"').format(filename),
            'settings_var': get_settings_var(),
            'breadcrumbs': get_breadcrumbs(query, path),
            'breadcrumbs_title': _(u'Rename'),
            'is_popup': is_popup
        })
コード例 #49
0
                                             filename=filename)
                # MESSAGE & REDIRECT
                msg = _('The folder %s was successfully deleted.') % (
                    filename.lower())
                messages.success(request, message=msg)
                redirect_url = reverse("fb_browse") + query_helper(
                    query, "", "filename,filetype")
                return HttpResponseRedirect(redirect_url)
            except OSError, e:
                # todo: define error message
                msg = unicode(e)

    if msg:
        messages.error(request, e)

    redirect_url = reverse("fb_browse") + query_helper(query, "",
                                                       "filename,filetype")
    return HttpResponseRedirect(redirect_url)


delete = staff_member_required(never_cache(delete))

# rename signals
filebrowser_pre_rename = Signal(
    providing_args=["path", "filename", "new_filename"])
filebrowser_post_rename = Signal(
    providing_args=["path", "filename", "new_filename"])


def rename(request):
    """
    Rename existing File/Directory.
コード例 #50
0
def delete(request):
    """
    Delete existing File/Directory.
    
    When trying to delete a Directory, the Directory has to be empty.
    """

    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))
    filename = get_file(query.get('dir', ''), query.get('filename', ''))
    if path is None or filename is None:
        if path is None:
            msg = _('The requested Folder does not exist.')
        else:
            msg = _('The requested File does not exist.')
        messages.warning(request, message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = _check_access(request, path)

    msg = ""
    if request.GET:
        if request.GET.get('filetype') != "Folder":
            relative_server_path = os.path.join(fb_settings.DIRECTORY, path,
                                                filename)
            try:
                # PRE DELETE SIGNAL
                filebrowser_pre_delete.send(sender=request,
                                            path=path,
                                            filename=filename)

                # DELETE FILE
                os.unlink(smart_str(_check_access(request, path, filename)))
                # DELETE IMAGE VERSIONS/THUMBNAILS
                for version in VERSIONS:
                    try:
                        os.unlink(
                            os.path.join(
                                fb_settings.MEDIA_ROOT,
                                get_version_path(relative_server_path,
                                                 version)))
                    except:
                        pass

                # POST DELETE SIGNAL
                filebrowser_post_delete.send(sender=request,
                                             path=path,
                                             filename=filename)
                # MESSAGE & REDIRECT
                msg = _('The file %s was successfully deleted.') % (
                    filename.lower())
                messages.success(request, message=msg)
                redirect_url = reverse("fb_browse") + query_helper(
                    query, "", "filename,filetype")
                return HttpResponseRedirect(redirect_url)
            except OSError, e:
                # todo: define error message
                msg = unicode(e)
        else:
            try:
                # PRE DELETE SIGNAL
                filebrowser_pre_delete.send(sender=request,
                                            path=path,
                                            filename=filename)
                # DELETE FOLDER
                os.rmdir(_check_access(request, path, filename))
                # POST DELETE SIGNAL
                filebrowser_post_delete.send(sender=request,
                                             path=path,
                                             filename=filename)
                # MESSAGE & REDIRECT
                msg = _('The folder %s was successfully deleted.') % (
                    filename.lower())
                messages.success(request, message=msg)
                redirect_url = reverse("fb_browse") + query_helper(
                    query, "", "filename,filetype")
                return HttpResponseRedirect(redirect_url)
            except OSError, e:
                # todo: define error message
                msg = unicode(e)
コード例 #51
0
                                                    name=fileobject.filename,
                                                    site=self)
                fileobject.delete_versions()
                fileobject.delete()
                signals.filebrowser_post_delete.send(sender=request,
                                                     path=fileobject.path,
                                                     name=fileobject.filename,
                                                     site=self)
                messages.add_message(
                    request, messages.SUCCESS,
                    _('Successfully deleted %s') % fileobject.filename)
            except OSError, (errno, strerror):
                # TODO: define error-message
                pass
        redirect_url = reverse("filebrowser:fb_browse",
                               current_app=self.name) + query_helper(
                                   query, "", "filename,filetype")
        return HttpResponseRedirect(redirect_url)

    def detail(self, request):
        """
        Show detail page for a file.
        
        Rename existing File/Directory (deletes existing Image Versions/Thumbnails).
        """
        from filebrowser.forms import ChangeForm
        query = request.GET
        path = u'%s' % os.path.join(self.directory, query.get('dir', ''))
        fileobject = FileObject(os.path.join(path, query.get('filename', '')),
                                site=self)

        if request.method == 'POST':
コード例 #52
0
        "Delete existing File/Directory."
        query = request.GET
        path = u'%s' % os.path.join(self.directory, query.get('dir', ''))
        fileobject = FileObject(os.path.join(path, query.get('filename', '')), site=self)

        if request.GET:
            try:
                signals.filebrowser_pre_delete.send(sender=request, path=fileobject.path, name=fileobject.filename, site=self)
                fileobject.delete_versions()
                fileobject.delete()
                signals.filebrowser_post_delete.send(sender=request, path=fileobject.path, name=fileobject.filename, site=self)
                messages.add_message(request, messages.SUCCESS, _('Successfully deleted %s') % fileobject.filename)
            except OSError, (errno, strerror):
                # TODO: define error-message
                pass
        redirect_url = reverse("filebrowser:fb_browse", current_app=self.name) + query_helper(query, "", "filename,filetype")
        return HttpResponseRedirect(redirect_url)

    def detail(self, request):
        """
        Show detail page for a file.
        Rename existing File/Directory (deletes existing Image Versions/Thumbnails).
        """
        from filebrowser.forms import ChangeForm
        query = request.GET
        path = u'%s' % os.path.join(self.directory, query.get('dir', ''))
        fileobject = FileObject(os.path.join(path, query.get('filename', '')), site=self)

        if request.method == 'POST':
            form = ChangeForm(request.POST, path=path, fileobject=fileobject, filebrowser_site=self)
            if form.is_valid():
コード例 #53
0
def browse(request):
    """
    Browse Files/Directories.
    """

    # QUERY / PATH CHECK
    query = request.GET.copy()
    path = get_path(query.get('dir', ''))
    directory = get_path('')
    if path is None:
        msg = _('The requested Folder does not exist.')
        messages.add_message(request, messages.SUCCESS, msg)
        if directory is None:
            # The DIRECTORY does not exist, raise an error to prevent eternal redirecting.
            raise ImproperlyConfigured, _(
                "Error finding Upload-Folder. Maybe it does not exist?")
        redirect_url = reverse("fb_browse") + query_helper(query, "", "dir")
        return HttpResponseRedirect(redirect_url)
    abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path)

    # INITIAL VARIABLES
    results_var = {
        'results_total': 0,
        'results_current': 0,
        'delete_total': 0,
        'images_total': 0,
        'select_total': 0
    }
    counter = {}
    for k, v in EXTENSIONS.iteritems():
        counter[k] = 0

    dir_list = os.listdir(abs_path)
    files = []
    for file in dir_list:

        # EXCLUDE FILES MATCHING VERSIONS_PREFIX OR ANY OF THE EXCLUDE PATTERNS
        filtered = file.startswith('.')
        for re_prefix in filter_re:
            if re_prefix.search(file):
                filtered = True
        if filtered:
            continue
        results_var['results_total'] += 1

        # CREATE FILEOBJECT
        fileobject = FileObject(os.path.join(DIRECTORY, path, file))

        # FILTER / SEARCH
        append = False
        if fileobject.filetype == request.GET.get(
                'filter_type', fileobject.filetype) and get_filterdate(
                    request.GET.get('filter_date', ''), fileobject.date):
            append = True
        if request.GET.get('q') and not re.compile(
                request.GET.get('q').lower(), re.M).search(file.lower()):
            append = False

        # APPEND FILE_LIST
        if append:
            try:
                # COUNTER/RESULTS
                if fileobject.filetype == 'Image':
                    results_var['images_total'] += 1
                if fileobject.filetype != 'Folder':
                    results_var['delete_total'] += 1
                elif fileobject.filetype == 'Folder' and fileobject.is_empty:
                    results_var['delete_total'] += 1
                if query.get('type') and query.get(
                        'type'
                ) in SELECT_FORMATS and fileobject.filetype in SELECT_FORMATS[
                        query.get('type')]:
                    results_var['select_total'] += 1
                elif not query.get('type'):
                    results_var['select_total'] += 1
            except OSError:
                # Ignore items that have problems
                continue
            else:
                files.append(fileobject)
                results_var['results_current'] += 1

        # COUNTER/RESULTS
        if fileobject.filetype:
            counter[fileobject.filetype] += 1

    # SORTING
    query['o'] = request.GET.get('o', DEFAULT_SORTING_BY)
    query['ot'] = request.GET.get('ot', DEFAULT_SORTING_ORDER)
    files = sort_by_attr(files, request.GET.get('o', DEFAULT_SORTING_BY))
    if not request.GET.get(
            'ot') and DEFAULT_SORTING_ORDER == "desc" or request.GET.get(
                'ot') == "desc":
        files.reverse()

    p = Paginator(files, LIST_PER_PAGE)
    try:
        page_nr = request.GET.get('p', '1')
    except:
        page_nr = 1
    try:
        page = p.page(page_nr)
    except (EmptyPage, InvalidPage):
        page = p.page(p.num_pages)

    return render_to_response('filebrowser/index.html', {
        'dir': path,
        'p': p,
        'page': page,
        'results_var': results_var,
        'counter': counter,
        'query': query,
        'title': _(u'FileBrowser'),
        'settings_var': get_settings_var(),
        'breadcrumbs': get_breadcrumbs(query, path),
        'breadcrumbs_title': ""
    },
                              context_instance=Context(request))
コード例 #54
0
def delete(request):
    """
    Delete existing File/Directory.

    When trying to delete a Directory, the Directory has to be empty.
    """

    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))
    filename = get_file(query.get('dir', ''), query.get('filename', ''))
    if path is None or filename is None:
        if path is None:
            msg = _('The requested Folder does not exist.')
        else:
            msg = _('The requested File does not exist.')
        messages.add_message(request, messages.SUCCESS, msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path)

    msg = ""
    if request.GET:
        if request.GET.get('filetype') != "Folder":
            relative_server_path = os.path.join(DIRECTORY, path, filename)
            try:
                # PRE DELETE SIGNAL
                filebrowser_pre_delete.send(sender=request,
                                            path=path,
                                            filename=filename)
                # DELETE IMAGE VERSIONS/THUMBNAILS
                for version in VERSIONS:
                    try:
                        os.unlink(
                            os.path.join(
                                MEDIA_ROOT,
                                get_version_path(relative_server_path,
                                                 version)))
                    except:
                        pass
                # DELETE FILE
                os.unlink(smart_str(os.path.join(abs_path, filename)))
                # POST DELETE SIGNAL
                filebrowser_post_delete.send(sender=request,
                                             path=path,
                                             filename=filename)
                # MESSAGE & REDIRECT
                msg = _('The file %s was successfully deleted.') % (
                    filename.lower())
                messages.add_message(request, messages.SUCCESS, msg)
                redirect_url = reverse("fb_browse") + query_helper(
                    query, "", "filename,filetype")
                return HttpResponseRedirect(redirect_url)
            except OSError:
                # todo: define error message
                msg = OSError
        else:
            try:
                # PRE DELETE SIGNAL
                filebrowser_pre_delete.send(sender=request,
                                            path=path,
                                            filename=filename)
                # DELETE FOLDER
                os.rmdir(os.path.join(abs_path, filename))
                # POST DELETE SIGNAL
                filebrowser_post_delete.send(sender=request,
                                             path=path,
                                             filename=filename)
                # MESSAGE & REDIRECT
                msg = _('The folder %s was successfully deleted.') % (
                    filename.lower())
                messages.add_message(request, messages.SUCCESS, msg)
                redirect_url = reverse("fb_browse") + query_helper(
                    query, "", "filename,filetype")
                return HttpResponseRedirect(redirect_url)
            except OSError:
                # todo: define error message
                msg = OSError

    if msg:
        messages.add_message(request, messages.SUCCESS, msg)

    return render_to_response('filebrowser/index.html', {
        'dir': dir_name,
        'file': request.GET.get('filename', ''),
        'query': query,
        'settings_var': get_settings_var(),
        'breadcrumbs': get_breadcrumbs(query, dir_name),
        'breadcrumbs_title': ""
    },
                              context_instance=Context(request))
コード例 #55
0
ファイル: views.py プロジェクト: xfenix/django-media-manager
def delete(request):
    """
    Delete existing File/Directory.
    
    When trying to delete a Directory, the Directory has to be empty.
    """
    
    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))
    filename = get_file(query.get('dir', ''), query.get('filename', ''))
    if path is None or filename is None:
        if path is None:
            msg = _('The requested Folder does not exist.')
        else:
            msg = _('The requested File does not exist.')
        messages.warning(request,message=msg)
        return HttpResponseRedirect(reverse("fb_browse"))
    abs_path = _check_access(request, path)
    
    msg = ""
    if request.GET:
        if request.GET.get('filetype') != "Folder":
            relative_server_path = os.path.join(fb_settings.DIRECTORY, path, filename)
            try:
                # PRE DELETE SIGNAL
                filebrowser_pre_delete.send(sender=request, path=path, filename=filename)

                # DELETE FILE
                os.unlink(smart_str(_check_access(request, path, filename)))
                # DELETE IMAGE VERSIONS/THUMBNAILS
                for version in VERSIONS:
                    try:
                        os.unlink(os.path.join(fb_settings.MEDIA_ROOT, get_version_path(relative_server_path, version)))
                    except:
                        pass

                # POST DELETE SIGNAL
                filebrowser_post_delete.send(sender=request, path=path, filename=filename)
                # MESSAGE & REDIRECT
                msg = _('The file %s was successfully deleted.') % (filename.lower())
                messages.success(request,message=msg)
                redirect_url = reverse("fb_browse") + query_helper(query, "", "filename,filetype")
                return HttpResponseRedirect(redirect_url)
            except OSError, e:
                # todo: define error message
                msg = unicode(e)
        else:
            try:
                # PRE DELETE SIGNAL
                filebrowser_pre_delete.send(sender=request, path=path, filename=filename)
                # DELETE FOLDER
                os.rmdir(_check_access(request, path, filename))
                # POST DELETE SIGNAL
                filebrowser_post_delete.send(sender=request, path=path, filename=filename)
                # MESSAGE & REDIRECT
                msg = _('The folder %s was successfully deleted.') % (filename.lower())
                messages.success(request,message=msg)
                redirect_url = reverse("fb_browse") + query_helper(query, "", "filename,filetype")
                return HttpResponseRedirect(redirect_url)
            except OSError, e:
                # todo: define error message
                msg = unicode(e)
コード例 #56
0
def upload(request, dir_name=None):
    """
    Multipe Upload.
    """

    from django.forms.formsets import formset_factory

    path = _get_path(dir_name)
    query = request.GET

    # PIL's Error "Suspension not allowed here" work around:
    # s. http://mail.python.org/pipermail/image-sig/1999-August/000816.html
    if STRICT_PIL:
        from PIL import ImageFile
    else:
        try:
            from PIL import ImageFile
        except ImportError:
            import ImageFile
    ImageFile.MAXBLOCK = IMAGE_MAXBLOCK  # default is 64k

    UploadFormSet = formset_factory(UploadForm,
                                    formset=BaseUploadFormSet,
                                    extra=5)
    if request.method == 'POST':
        formset = UploadFormSet(data=request.POST,
                                files=request.FILES,
                                path_server=PATH_SERVER,
                                path=path)
        if formset.is_valid():
            for cleaned_data in formset.cleaned_data:
                if cleaned_data:
                    # UPLOAD FILE
                    _handle_file_upload(PATH_SERVER, path,
                                        cleaned_data['file'])
                    if _get_file_type(cleaned_data['file'].name) == "Image":
                        # IMAGE GENERATOR
                        if FORCE_GENERATOR or (
                                cleaned_data['use_image_generator'] and
                            (IMAGE_GENERATOR_LANDSCAPE != ""
                             or IMAGE_GENERATOR_PORTRAIT != "")):
                            _image_generator(PATH_SERVER, path,
                                             cleaned_data['file'].name)
                        # GENERATE CROPPED/RECTANGULAR IMAGE
                        if FORCE_GENERATOR or (
                                cleaned_data['use_image_generator']
                                and IMAGE_CROP_GENERATOR != ""):
                            _image_crop_generator(PATH_SERVER, path,
                                                  cleaned_data['file'].name)
            # MESSAGE & REDIRECT
            msg = _('Upload successful.')
            request.user.message_set.create(message=msg)
            # on redirect, sort by date desc to see the uploaded files on top of the list
            # remove filter in order to actually _see_ the uploaded file(s)
            return HttpResponseRedirect(URL_ADMIN + path + query_helper(
                query, "ot=desc,o=date", "ot,o,filter_type,filter_data"))
    else:
        formset = UploadFormSet(path_server=PATH_SERVER, path=path)

    return render_to_response(
        'filebrowser/upload.html', {
            'formset': formset,
            'dir': dir_name,
            'query': query,
            'settings_var': _get_settings_var(),
            'breadcrumbs': _get_breadcrumbs(query, dir_name, _(u'Upload')),
            'title': _(u'Select files to upload'),
            'root_path': URL_HOME,
        },
        context_instance=Context(request))
コード例 #57
0
    def detail(self, request):
        """
        Show detail page for a file.
        Rename existing File/Directory (deletes existing Image Versions/Thumbnails).
        """
        from filebrowser.forms import ChangeForm
        query = request.GET
        path = u'%s' % os.path.join(self.directory, query.get('dir', ''))
        fileobject = FileObject(os.path.join(path, query.get('filename', '')), site=self)

        if request.method == 'POST':
            form = ChangeForm(request.POST, path=path, fileobject=fileobject, filebrowser_site=self)
            if form.is_valid():
                new_name = form.cleaned_data['name']
                action_name = form.cleaned_data['custom_action']
                try:
                    action_response = None
                    if action_name:
                        action = self.get_action(action_name)
                        # Pre-action signal
                        signals.filebrowser_actions_pre_apply.send(sender=request, action_name=action_name, fileobject=[fileobject], site=self)
                        # Call the action to action
                        action_response = action(request=request, fileobjects=[fileobject])
                        # Post-action signal
                        signals.filebrowser_actions_post_apply.send(sender=request, action_name=action_name, fileobject=[fileobject], result=action_response, site=self)
                    if new_name != fileobject.filename:
                        signals.filebrowser_pre_rename.send(sender=request, path=fileobject.path, name=fileobject.filename, new_name=new_name, site=self)
                        fileobject.delete_versions()
                        self.storage.move(fileobject.path, os.path.join(fileobject.head, new_name))
                        signals.filebrowser_post_rename.send(sender=request, path=fileobject.path, name=fileobject.filename, new_name=new_name, site=self)
                        messages.add_message(request, messages.SUCCESS, _('Renaming was successful.'))
                    if isinstance(action_response, HttpResponse):
                        return action_response
                    if "_continue" in request.POST:
                        redirect_url = reverse("filebrowser:fb_detail", current_app=self.name) + query_helper(query, "filename=" + new_name, "filename")
                    else:
                        redirect_url = reverse("filebrowser:fb_browse", current_app=self.name) + query_helper(query, "", "filename")
                    return HttpResponseRedirect(redirect_url)
                except OSError:
                    form.errors['name'] = forms.util.ErrorList([_('Error.')])
        else:
            form = ChangeForm(initial={"name": fileobject.filename}, path=path, fileobject=fileobject, filebrowser_site=self)

        return render(request, 'filebrowser/detail.html', admin_context({
            'form': form,
            'fileobject': fileobject,
            'query': query,
            'title': u'%s' % fileobject.filename,
            'is_popup': "pop" in request.GET,
            'settings_var': get_settings_var(directory=self.directory),
            'breadcrumbs': get_breadcrumbs(query, query.get('dir', '')),
            'breadcrumbs_title': u'%s' % fileobject.filename,
            'filebrowser_site': self
        }, request))
コード例 #58
0
def delete(request, dir_name=None):
    """
    Delete existing File/Directory.
        When trying to delete a directory, the directory has to be empty.
    """

    path = _get_path(dir_name)
    query = request.GET
    msg = ""

    if request.GET:
        if request.GET.get('filetype') != "Folder":
            server_path = os.path.join(PATH_SERVER, path,
                                       request.GET.get('filename'))
            try:
                # DELETE FILE
                os.unlink(server_path)
                # TRY DELETING IMAGE_VERSIONS
                versions_path = os.path.join(
                    PATH_SERVER, path,
                    request.GET.get('filename').replace(".", "_").lower() +
                    IMAGE_GENERATOR_DIRECTORY)
                try:
                    dir_list = os.listdir(versions_path)
                    for file in dir_list:
                        file_path = os.path.join(versions_path, file)
                        os.unlink(file_path)
                    os.rmdir(versions_path)
                except OSError:
                    pass

                # MESSAGE & REDIRECT
                msg = _('The file %s was successfully deleted.') % (
                    request.GET.get('filename').lower())
                request.user.message_set.create(message=msg)
                return HttpResponseRedirect(
                    URL_ADMIN + path +
                    query_helper(query, "", "filename,filetype"))
            except OSError:
                # todo: define error message
                msg = OSError
        else:
            server_path = os.path.join(PATH_SERVER, path,
                                       request.GET.get('filename'))
            try:
                os.rmdir(server_path)

                # MESSAGE & REDIRECT
                msg = _('The directory %s was successfully deleted.') % (
                    request.GET.get('filename').lower())
                request.user.message_set.create(message=msg)
                return HttpResponseRedirect(
                    URL_ADMIN + path +
                    query_helper(query, "", "filename,filetype"))
            except OSError:
                # todo: define error message
                msg = OSError

    if msg:
        request.user.message_set.create(message=msg)

    return render_to_response(
        'filebrowser/index.html', {
            'dir': dir_name,
            'file': request.GET.get('filename', ''),
            'query': query,
            'settings_var': _get_settings_var(),
            'breadcrumbs': _get_breadcrumbs(query, dir_name, ''),
            'root_path': URL_HOME,
        },
        context_instance=Context(request))