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))
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.')])
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)
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)
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.')])
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.")])
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.')])
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.')])
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)
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.')])
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.')])
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))
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")
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)
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), )
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))
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))
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)
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.')])
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)
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.')])
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)
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)
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)
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))
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)
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.')])
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 })
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.')])
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.")])
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.')])
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.')])
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), )
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))
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.')])
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)
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.')])
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.')])
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.")])
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)
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.')])
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 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))
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 })
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.
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)
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':
"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():
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))
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))
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)
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))
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))
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))