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) 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 })
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(request, _template() + 'versions.html', { 'original': path_to_url( os.path.join(fb_settings.DIRECTORY, path, filename)), 'query': query, 'title': _(u'Versions for "{0}"').format(filename), 'settings_var': get_settings_var(), 'breadcrumbs': get_breadcrumbs(query, path), 'breadcrumbs_title': _(u'Versions for "{0}"').format(filename), 'is_popup': is_popup })
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 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 render(self, name, value, attrs=None): if value is None: value = "" final_attrs = self.build_attrs(attrs, type=self.input_type, name=name) final_attrs['search_icon'] = os.path.join( URL_FILEBROWSER_MEDIA, 'img/filebrowser_icon_show.gif' ) final_attrs['directory'] = self.directory final_attrs['extensions'] = self.extensions final_attrs['format'] = self.format final_attrs['ADMIN_THUMBNAIL'] = ADMIN_THUMBNAIL final_attrs['DEBUG'] = DEBUG if value != "": try: final_attrs['directory'] = \ os.path.split(value.path_relative_directory)[0] except: pass return render_to_string(_template() + "custom_field.html", locals())
def render(self, name, value, attrs=None): if value is None: value = "" final_attrs = self.build_attrs(self.attrs, attrs, type=self.input_type, name=name) final_attrs['search_icon'] = os.path.join( URL_FILEBROWSER_MEDIA, 'img/filebrowser_icon_show.gif' ) final_attrs['directory'] = self.directory final_attrs['extensions'] = self.extensions final_attrs['format'] = self.format final_attrs['ADMIN_THUMBNAIL'] = ADMIN_THUMBNAIL final_attrs['DEBUG'] = DEBUG if value != "": try: final_attrs['directory'] = \ os.path.split(value.path_relative_directory)[0] except: pass return render_to_string(_template() + "custom_field.html", locals())
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 in EXTENSIONS: 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: _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 = int(request.GET.get('p', '1')) except ValueError: page_nr = 1 try: page = p.page(page_nr) except (EmptyPage, InvalidPage): page = p.page(p.num_pages) return render(request, _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 })
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 })
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 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.items(): 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: _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 = int(request.GET.get('p', '1')) except ValueError: page_nr = 1 try: page = p.page(page_nr) except (EmptyPage, InvalidPage): page = p.page(p.num_pages) return render( request, _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 })
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 })
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 })