def createdir(request, repository_name, path='', base_template=FILEBROWSER_BASE_TEMPLATE, url_prefix=None): repository = get_object_or_404(Repository, name=repository_name) if request.POST: dirname = request.POST.get('dirname', None) dirname = dirname.strip() errornote = None if not dirname: errornote = _('You must introduce the name of the new folder') elif repository.check_dir(join(path, dirname)): errornote = _(u'Folder %(dirname)s already exists') % {'dirname': dirname} if errornote: # si hay algun tipo de error return render_to_response('filebrowser/createdir.html', {'repository': repository, 'base_template': base_template, 'path': path, 'errornote': errornote, 'url_prefix': url_prefix}, context_instance=RequestContext(request)) repository.create_dir(join(path, dirname)) message = _('Folder created successfully') send_info(request, message) return HttpResponseRedirect(filebrowser_reverse(request, "filebrowser_dir_listing", kwargs={'repository_name': repository.name, 'path': path}, url_prefix=url_prefix)) else: dirs, files, parents, dirname = repository.list_directory(path) return render_to_response('filebrowser/createdir.html', {'repository': repository, 'base_template': base_template, 'path': path, 'parents': parents, 'url_prefix': url_prefix}, context_instance=RequestContext(request))
def next_url(self, instance): return filebrowser_reverse(self.request, 'filebrowser_viewdoc', kwargs={ 'repository_name': instance.repository.name, 'doc_slug': instance.slug }, url_prefix=self.url_prefix)
def upload(request, repository_name, path='', base_template=FILEBROWSER_BASE_TEMPLATE, url_prefix=None): repository = get_object_or_404(Repository, name=repository_name) if request.method == 'POST': for k, f in request.FILES.items(): if k.startswith('file_'): idx = k[5:] title = request.POST.get('title_' + idx).encode('utf8') description = request.POST.get('description_' + idx).encode('utf8') file_name = unicodedata.normalize('NFKD', force_unicode( f.name)).encode('ascii', 'ignore') fout = repository.create_file(join(path, file_name)) for chunk in f.chunks(): fout.write(chunk) fout.close() metadata_name = join(path, file_name + '.metadata') metadata_path = repository.encode_path( repository.get_absolute_path(metadata_name)) mout = open(metadata_path, 'w') mout.write(title) mout.write('\n\n') mout.write(description) mout.write('\n') mout.close() send_info(request, _('Files uploaded successfully')) return HttpResponseRedirect( filebrowser_reverse(request, "filebrowser_dir_listing", kwargs={ 'repository_name': repository.name, 'path': path }, url_prefix=url_prefix)) else: dirs, files, parents, dirname = repository.list_directory(path) return render_to_response('filebrowser/upload.html', { 'repository': repository, 'base_template': base_template, 'path': path, 'parents': parents, 'url_prefix': url_prefix }, context_instance=RequestContext(request))
def createdir(request, repository_name, path='', base_template=FILEBROWSER_BASE_TEMPLATE, url_prefix=None): repository = get_object_or_404(Repository, name=repository_name) if request.POST: dirname = request.POST.get('dirname', None) dirname = dirname.strip() errornote = None if not dirname: errornote = _('You must introduce the name of the new folder') elif repository.check_dir(join(path, dirname)): errornote = _(u'Folder %(dirname)s already exists') % { 'dirname': dirname } if errornote: # si hay algun tipo de error return render_to_response('filebrowser/createdir.html', { 'repository': repository, 'base_template': base_template, 'path': path, 'errornote': errornote, 'url_prefix': url_prefix }, context_instance=RequestContext(request)) repository.create_dir(join(path, dirname)) message = _('Folder created successfully') send_info(request, message) return HttpResponseRedirect( filebrowser_reverse(request, "filebrowser_dir_listing", kwargs={ 'repository_name': repository.name, 'path': path }, url_prefix=url_prefix)) else: dirs, files, parents, dirname = repository.list_directory(path) return render_to_response('filebrowser/createdir.html', { 'repository': repository, 'base_template': base_template, 'path': path, 'parents': parents, 'url_prefix': url_prefix }, context_instance=RequestContext(request))
def upload(request, repository_name, path='', base_template=FILEBROWSER_BASE_TEMPLATE, url_prefix=None): repository = get_object_or_404(Repository, name=repository_name) if request.method == 'POST': for k, f in request.FILES.items(): if k.startswith('file_'): idx = k[5:] title = request.POST.get('title_' + idx).encode('utf8') description = request.POST.get('description_' + idx).encode('utf8') file_name = unicodedata.normalize('NFKD', force_unicode(f.name)).encode('ascii', 'ignore') fout = repository.create_file(join(path, file_name)) for chunk in f.chunks(): fout.write(chunk) fout.close() metadata_name = join(path, file_name + '.metadata') metadata_path = repository.encode_path(repository.get_absolute_path(metadata_name)) mout = open(metadata_path, 'w') mout.write(title) mout.write('\n\n') mout.write(description) mout.write('\n') mout.close() send_info(request, _('Files uploaded successfully')) return HttpResponseRedirect(filebrowser_reverse(request, "filebrowser_dir_listing", kwargs={'repository_name': repository.name, 'path': path}, url_prefix=url_prefix)) else: dirs, files, parents, dirname = repository.list_directory(path) return render_to_response('filebrowser/upload.html', {'repository': repository, 'base_template': base_template, 'path': path, 'parents': parents, 'url_prefix': url_prefix}, context_instance=RequestContext(request))
def upload(request, repository_name, path='', base_template=FILEBROWSER_BASE_TEMPLATE, url_prefix=None): repository = get_object_or_404(Repository, name=repository_name) if request.method == 'POST': for k, f in request.FILES.items(): if k.startswith('file_'): fout = repository.create_file(join(path, f.name)) for chunk in f.chunks(): fout.write(chunk) fout.close() send_info(request, _('Files uploaded successfully')) return HttpResponseRedirect(filebrowser_reverse(request, "filebrowser_dir_listing", kwargs={'repository_name': repository.name, 'path': path}, url_prefix=url_prefix)) else: dirs, files, parents, dirname = repository.list_directory(path) return render_to_response('filebrowser/upload.html', {'repository': repository, 'base_template': base_template, 'path': path, 'parents': parents, 'url_prefix': url_prefix}, context_instance=RequestContext(request))
def next_url(self, instance): return filebrowser_reverse(self.request, 'filebrowser_viewdoc', kwargs={'repository_name': instance.repository.name, 'doc_slug': instance.slug}, url_prefix=self.url_prefix)
def action(request, repository_name, path, base_template=FILEBROWSER_BASE_TEMPLATE, url_prefix=None): """ process rename, delete, etc. actions in files and directories """ repository = get_object_or_404(Repository, name=repository_name) if 'renameform' in request.POST: action = 'confirmrename' elif 'deleteform' in request.POST: action = 'confirmdelete' elif 'rename' in request.POST: action = 'rename' old_elems = [] else: action = 'delete' elems = [] for k, v in request.POST.items(): if (k.startswith('dir_') or k.startswith('file_') or k.startswith('elem_') or k.startswith('doc_')): if k.startswith('doc_'): try: title = Document.objects.get(slug=v).title except: title = v elems.append({'id': v, 'title': title}) elif k.startswith('file_'): post_id = k[len('file_'):] new_file = {} new_file['id'] = v new_file['name'] = v new_file['title'] = request.POST.get('title_%s' % post_id, '').encode('utf8') new_file['description'] = request.POST.get( 'description_%s' % post_id, '').encode('utf8') elems.append(new_file) else: elems.append({'id': v, 'title': v}) if action == 'rename': if k.startswith('dir_'): old_elems.append(request.POST['olddir_%s' % k[len('dir_'):]]) elif k.startswith('file_'): old_elems.append(request.POST['oldfile_%s' % k[len('file_'):]]) else: old_elems.append(request.POST['olddoc_%s' % k[len('doc_'):]]) if not elems: send_error(request, _("You didn't selected any element")) return HttpResponseRedirect( filebrowser_reverse(request, "filebrowser_dir_listing", kwargs={ 'repository_name': repository.name, 'path': path }, url_prefix=url_prefix)) if action in ['confirmrename', 'confirmdelete']: if action == 'confirmrename': template = 'filebrowser/rename.html' else: template = 'filebrowser/delete.html' basepath = repository.get_absolute_path(path) basepath = basepath.encode('utf-8').decode('utf-8') files = [] dirs = [] docs = [] for e in elems: file = join(basepath, e['id']) if isdir(file): dirs.append(e) elif isfile(file): mfile = file + '.metadata' if exists(mfile): mf = open(mfile, 'r') mdata = mf.read() mf.close() mdata = mdata.split('\n\n') e['title'] = mdata[0] e['description'] = '\n\n'.join(mdata[1:]) files.append(e) else: docs.append(e) pathdirs, pathfiles, parents, dirname = repository.list_directory(path) return render_to_response(template, { 'repository': repository, 'base_template': base_template, 'path': path, 'files': files, 'parents': parents, 'dirs': dirs, 'docs': docs, 'url_prefix': url_prefix, }, context_instance=RequestContext(request)) elif action == 'rename': repository.rename_elems(path, elems, old_elems) send_info(request, _('Elements renamed successfully')) return HttpResponseRedirect( filebrowser_reverse(request, "filebrowser_dir_listing", kwargs={ 'repository_name': repository.name, 'path': path }, url_prefix=url_prefix)) elif action == 'delete': repository.delete_elems(path, elems) send_info(request, _('Elements deleted successfully')) return HttpResponseRedirect( filebrowser_reverse(request, "filebrowser_dir_listing", kwargs={ 'repository_name': repository.name, 'path': path }, url_prefix=url_prefix)) else: return Http404
def action(request, repository_name, path, base_template=FILEBROWSER_BASE_TEMPLATE, url_prefix=None): """ process rename, delete, etc. actions in files and directories """ repository = get_object_or_404(Repository, name=repository_name) if 'renameform' in request.POST: action = 'confirmrename' elif 'deleteform' in request.POST: action = 'confirmdelete' elif 'rename' in request.POST: action = 'rename' old_elems = [] else: action = 'delete' elems = [] for k, v in request.POST.items(): if (k.startswith('dir_') or k.startswith('file_') or k.startswith('elem_') or k.startswith('doc_')): if k.startswith('doc_'): try: title = Document.objects.get(slug=v).title except: title = v elems.append({'id': v, 'title': title}) elif k.startswith('file_'): post_id = k[len('file_'):] new_file = {} new_file['id'] = v new_file['name'] = v new_file['title'] = request.POST.get('title_%s' % post_id, '').encode('utf8') new_file['description'] = request.POST.get('description_%s' % post_id, '').encode('utf8') elems.append(new_file) else: elems.append({'id': v, 'title': v}) if action == 'rename': if k.startswith('dir_'): old_elems.append(request.POST['olddir_%s' % k[len('dir_'):]]) elif k.startswith('file_'): old_elems.append(request.POST['oldfile_%s' % k[len('file_'):]]) else: old_elems.append(request.POST['olddoc_%s' % k[len('doc_'):]]) if not elems: send_error(request, _("You didn't selected any element")) return HttpResponseRedirect(filebrowser_reverse(request, "filebrowser_dir_listing", kwargs={'repository_name': repository.name, 'path': path}, url_prefix=url_prefix)) if action in ['confirmrename', 'confirmdelete']: if action == 'confirmrename': template = 'filebrowser/rename.html' else: template = 'filebrowser/delete.html' basepath = repository.get_absolute_path(path) basepath = basepath.encode('utf-8').decode('utf-8') files = [] dirs = [] docs = [] for e in elems: file = join(basepath, e['id']) if isdir(file): dirs.append(e) elif isfile(file): mfile = file + '.metadata' if exists(mfile): mf = open(mfile, 'r') mdata = mf.read() mf.close() mdata = mdata.split('\n\n') e['title'] = mdata[0] e['description'] = '\n\n'.join(mdata[1:]) files.append(e) else: docs.append(e) pathdirs, pathfiles, parents, dirname = repository.list_directory(path) return render_to_response(template, {'repository': repository, 'base_template': base_template, 'path': path, 'files': files, 'parents': parents, 'dirs': dirs, 'docs': docs, 'url_prefix': url_prefix, }, context_instance=RequestContext(request)) elif action == 'rename': repository.rename_elems(path, elems, old_elems) send_info(request, _('Elements renamed successfully')) return HttpResponseRedirect(filebrowser_reverse(request, "filebrowser_dir_listing", kwargs={'repository_name': repository.name, 'path': path}, url_prefix=url_prefix)) elif action == 'delete': repository.delete_elems(path, elems) send_info(request, _('Elements deleted successfully')) return HttpResponseRedirect(filebrowser_reverse(request, "filebrowser_dir_listing", kwargs={'repository_name': repository.name, 'path': path}, url_prefix=url_prefix)) else: return Http404