Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
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))
Ejemplo n.º 4
0
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))
Ejemplo n.º 5
0
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))
Ejemplo n.º 6
0
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))
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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