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('', media_root=site.media_root) == None: # The path does not exist, raise an error to prevent eternal redirecting. raise ImproperlyConfigured, _("Error finding Upload-Folder. Maybe it does not exist?") if get_path(request.GET.get('dir', ''), media_root=site.media_root) == 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 upload(request): """ Multipe File Upload. """ from django.http import parse_cookie # 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) # SESSION (used for flash-uploading) cookie_dict = parse_cookie(request.META.get("HTTP_COOKIE", "")) engine = __import__(settings.SESSION_ENGINE, {}, {}, [""]) session_key = cookie_dict.get(settings.SESSION_COOKIE_NAME, None) return render_to_response( "filebrowser/upload.html", { "query": query, "title": _(u"Select files to upload"), "settings_var": get_settings_var(), "session_key": session_key, "breadcrumbs": get_breadcrumbs(query, path), "breadcrumbs_title": _(u"Upload"), }, 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.') 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(request): """ Multipe File Upload. """ from django.http import parse_cookie # 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) # SESSION (used for flash-uploading) cookie_dict = parse_cookie(request.META.get('HTTP_COOKIE', '')) engine = __import__(settings.SESSION_ENGINE, {}, {}, ['']) session_key = cookie_dict.get(settings.SESSION_COOKIE_NAME, None) return render_to_response('filebrowser/upload.html', { 'query': query, 'title': _(u'Select files to upload'), 'settings_var': get_settings_var(), 'session_key': session_key, 'breadcrumbs': get_breadcrumbs(query, path), 'breadcrumbs_title': _(u'Upload') }, context_instance=Context(request))
def versions(request): """ Show all Versions for an Image according to ADMIN_VERSIONS. """ # 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) return render_to_response('filebrowser/versions.html', { 'original': path_to_url(os.path.join(DIRECTORY, path, filename)), 'query': query, 'title': _(u'Versions for "%s"') % filename, 'settings_var': get_settings_var(), 'breadcrumbs': get_breadcrumbs(query, path), 'breadcrumbs_title': _(u'Versions for "%s"') % filename }, context_instance=Context(request))
def upload(request): """ Multipe File Upload. """ from django.http import parse_cookie # 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) # SESSION (used for flash-uploading) session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None) return render_to_response(_template() + 'upload.html', { 'query': query, 'title': _(u'Select files to upload'), 'settings_var': get_settings_var(), 'session_key': session_key, 'breadcrumbs': get_breadcrumbs(query, path), 'breadcrumbs_title': _(u'Upload'), 'is_popup': is_popup }, context_instance=Context(request))
def versions(request): """ Show all Versions for an Image according to ADMIN_VERSIONS. """ # 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) return render_to_response(_template() + 'versions.html', { 'original': path_to_url(os.path.join(fb_settings.DIRECTORY, path, filename)), 'query': query, 'title': _(u'Versions for "%s"') % filename, 'settings_var': get_settings_var(), 'breadcrumbs': get_breadcrumbs(query, path), 'breadcrumbs_title': _(u'Versions for "%s"') % filename, 'is_popup': is_popup }, context_instance=Context(request))
def versions(request): """ Show all Versions for an Image according to ADMIN_VERSIONS. """ # 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 = os.path.join(fb_settings.MEDIA_ROOT, fb_settings.DIRECTORY, path) return render_to_response( "filebrowser/versions.html", { "original": path_to_url(os.path.join(fb_settings.DIRECTORY, path, filename)), "query": query, "title": _(u'Versions for "%s"') % filename, "settings_var": get_settings_var(), "breadcrumbs": get_breadcrumbs(query, path), "breadcrumbs_title": _(u'Versions for "%s"') % filename, }, context_instance=Context(request), )
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 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 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 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 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 _get_path_and_filename(request, root_directory): 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.') request.user.message_set.create(message=msg) return HttpResponseRedirect(reverse("fb_browse")) abs_path = os.path.join(MEDIA_ROOT, root_directory, path) return path, filename, abs_path
def _get_path_and_filename(request, root_directory): 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) return path, filename, abs_path
def versions(request): """ Show all Versions for an Image according to ADMIN_VERSIONS. """ # 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 = u'%s' % os.path.join(MEDIA_ROOT, DIRECTORY, path) path = os.path.join(DIRECTORY, path, filename) settings_var = get_settings_var() if request.POST: formset = ImageCropDataFormSet(request.POST, queryset=ImageCropData.objects.filter(path=path)) if formset.is_valid(): formset.save() for version in settings_var.get("ADMIN_VERSIONS", {}): # TODO: or at least, only do if needed version_generator(path, version) else: raise Exception("Somehow formset became invalid: %s" % formset.errors) return HttpResponseRedirect("") # We have to create all the versions first, so the crop data form has something to fill with #TODO: this could work better somehow for version in VERSIONS: version_for_image(path, version) formset = ImageCropDataFormSet(queryset=ImageCropData.objects.filter(path=path)) return render_to_response( "filebrowser/versions.html", { "original": path_to_url(path), "query": query, "title": _(u'Versions for "%s"') % filename, "settings_var": settings_var, "breadcrumbs": get_breadcrumbs(query, path), "breadcrumbs_title": _(u'Versions for "%s"') % filename, "formset": formset, }, context_instance=Context(request), )
def upload(request): """ Multipe File Upload. """ # 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) # SESSION (used for flash-uploading) session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None) # we need max. upload size in MB for dropzone library max_upload_size = fb_settings.MAX_UPLOAD_SIZE / 1048576.0 # we need accepted files mime-type for dropzone library accepted_files = set() for ext_list in fb_settings.EXTENSIONS.values(): for ext in ext_list: try: accepted_files.add(mimetypes.types_map[ext]) except KeyError: pass return render(request, _template() + 'upload.html', { 'query': query, 'title': _(u'Select files to upload'), 'settings_var': get_settings_var(), 'session_key': session_key, 'breadcrumbs': get_breadcrumbs(query, path), 'breadcrumbs_title': _(u'Upload'), 'is_popup': is_popup, 'max_upload_size': max_upload_size, 'accepted_files': ','.join(accepted_files) })
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 file_process(request): query = request.GET path = get_path(query.get('dir', '')) abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path) from filebrowser.forms import UploadForm form = UploadForm(data=request.POST, files=request.FILES, path=abs_path) if form.is_valid(): f = form.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) else: return form.errors
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): """ Multipe File Upload. """ from django.http import parse_cookie if USE_NATIVE_UPLOAD and request.method == 'POST': if 'file' in request.FILES: dir = request.GET.get('dir', '') _process_fileupload(request, request.FILES['file'], dir) return HttpResponseRedirect(reverse('admin:filebrowser:browse') + '?dir=%s' % dir) else: # Flash-upload submits to '_upload_file' view instead. pass # 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("admin:filebrowser:browse")) abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path) # SESSION (used for flash-uploading) cookie_dict = parse_cookie(request.META.get('HTTP_COOKIE', '')) engine = __import__(settings.SESSION_ENGINE, {}, {}, ['']) session_key = cookie_dict.get(settings.SESSION_COOKIE_NAME, None) return render_to_response('filebrowser/upload.html', { 'query': query, 'title': _(u'Select files to upload'), 'settings_var': get_settings_var(), 'breadcrumbs': get_breadcrumbs(query, path, _(u'Upload')), 'session_key': session_key, }, context_instance=Context(request))
def upload(request): """ Multipe 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.') messages.warning(request,message=msg) return HttpResponseRedirect(reverse("fb_browse")) # SESSION (used for flash-uploading) session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None) return render_to_response('filebrowser/upload.html', { 'query': query, 'title': _(u'Select files to upload'), 'settings_var': get_settings_var(), 'session_key': session_key, 'breadcrumbs': get_breadcrumbs(query, path), 'breadcrumbs_title': _(u'Upload') }, context_instance=Context(request))
def upload(request): """ Multipe File Upload. """ from django.http import parse_cookie # 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) return render_to_response('filebrowser/upload_frontends/simple/upload.html', { 'query': query, 'get_query': request.GET.urlencode(), 'title': _(u'Select files to upload'), 'settings_var': get_settings_var(), 'breadcrumbs': get_breadcrumbs(query, path), 'breadcrumbs_title': _(u'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. """ 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 as e: form.errors['name'] = forms.util.ErrorList([_('Error.')]) else: form = RenameForm(abs_path, file_extension) return render_to_response(_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 }, 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 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.info(request,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.info(request,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.info(request,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.info(request,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 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.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) 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.') request.user.message_set.create(message=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()) 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: # 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()) 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), 'breadcrumbs_title': "" }, context_instance=Context(request))
def mkdir(request): """ Make Directory. """ # 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, 0o775) # POST CREATE SIGNAL filebrowser_post_createdir.send(sender=request, path=path, dirname=_new_dir_name) # MESSAGE & REDIRECT msg = _('The Folder {0} was successfully created.').format( _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 as e: if e.errno == 13: form.errors['dir_name'] = forms.utils.ErrorList( [_('Permission denied.')]) else: form.errors['dir_name'] = forms.utils.ErrorList( [_('Error creating folder.')]) else: form = MakeDirForm(abs_path) return render( request, _template() + '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'), 'is_popup': is_popup })
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 {0} was successfully deleted.').format( filename.lower()) messages.success(request, message=msg) redirect_url = reverse("fb_browse") + query_helper( query, "", "filename,filetype") return HttpResponseRedirect(redirect_url) except OSError as e: # todo: define error message msg = str(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 {0} was successfully deleted.').format( filename.lower()) messages.success(request, message=msg) redirect_url = reverse("fb_browse") + query_helper( query, "", "filename,filetype") return HttpResponseRedirect(redirect_url) except OSError as e: # todo: define error message msg = str(e) if msg: messages.error(request, e) redirect_url = reverse("fb_browse") + query_helper(query, "", "filename,filetype") 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: 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 browse(request): """ Browse Files/Directories. """ # QUERY / PATH CHECK query = request.GET.copy() path = get_path(query.get('dir', '')) directory = get_path('') q = request.GET.get('q') if path is None: msg = _('The requested Folder does not exist.') request.user.message_set.create(message=msg) if directory is None: # The DIRECTORY does not exist, raise an error to prevent eternal redirecting. raise ImproperlyConfigured, _("Error finding Upload-Folder (MEDIA_ROOT + FILEBROWSER_DIRECTORY). Maybe it does not exist?") redirect_url = reverse("fb_browse") + query_helper(query, "", "dir") return HttpResponseRedirect(redirect_url) abs_path = u'%s' % 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 if q: m_root = os.path.normpath(MEDIA_ROOT) dirs = [] for root, _subdirs, filenames in os.walk(abs_path): dirs_2 = [] items = _subdirs + filenames for f in items: dirs_2.append((os.path.normpath(root)[len(m_root)+1:], f)) # append result of every iteration to dirs dirs.append(dirs_2) dir_list = itertools.chain(*dirs) else: root = os.path.join(DIRECTORY, path) dir_list = ((root, f) for f in os.listdir(abs_path)) files = [] for file_dir, 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(file_dir, 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 or 0): append = True if q and not re.compile(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, 'q': q, '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 browse(request): """ Browse Files/Directories. """ # QUERY / PATH CHECK query = request.GET.copy() path = get_path(query.get("dir", "")) directory = get_path("") if path is not None: abs_path = os.path.abspath(os.path.join(fb_settings.MEDIA_ROOT, fb_settings.DIRECTORY, path)) if not abs_path.startswith(os.path.abspath(os.path.join(fb_settings.MEDIA_ROOT, fb_settings.DIRECTORY))): # cause any attempt to leave media root directory to fail raise Http404 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, 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 browse(request): """ Browse Files/Directories. """ # QUERY / PATH CHECK query = request.GET path = get_path(query.get('dir', '')) directory = get_path('') if path is None: msg = _('The requested Folder does not exist.') request.user.message_set.create(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) 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: files.append(fileobject) results_var['results_current'] += 1 # 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 # COUNTER/RESULTS if fileobject.filetype: counter[fileobject.filetype] += 1 # SORTING files = sort_by_attr(files, request.GET.get('o', 'date')) if request.GET.get('ot') == "desc": files.reverse() return render_to_response('filebrowser/index.html', { 'dir': path, 'files': files, 'results_var': results_var, 'counter': counter, 'query': query, 'title': _(u'FileBrowser'), 'settings_var': get_settings_var(), 'breadcrumbs': get_breadcrumbs(query, path, ''), }, context_instance=Context(request))