Esempio n. 1
0
File: views.py Progetto: kamni/zorna
def get_files(request, path, search_tag, search_text):
    root_path = get_upload_library()
    buser, bmanager = get_user_access_to_path(request.user, path)
    fullpath = u"%s/%s" % (root_path, urllib.unquote(path))
    fileList = {}
    files_id = []
    search_text_files = []
    dirs = []
    import re
    for f in os.listdir(fullpath):
        ff = os.path.join(fullpath, f)
        if os.path.isdir(ff):
            dirs.append(f)
            continue
        pk, fname = split_file_name(f)
        if pk is False:
            continue
        else:
            files_id.append(int(pk))

        statinfo = os.stat(ff)
        fileList[pk] = {'name': fname,
                        'realname': f,
                        'size': statinfo[stat.ST_SIZE],
                        'creation': datetime.fromtimestamp(statinfo[stat.ST_CTIME]),
                        'modification': datetime.fromtimestamp(statinfo[stat.ST_MTIME]),
                        'ext': os.path.splitext(f)[1][1:],
                        'path': path,
                        }

        if search_text and re.search(search_text, fname, re.IGNORECASE):
            search_text_files.append(pk)

    filterreq = None
    if search_tag:
        filterreq = Q(tags__icontains=search_tag)
    if search_text:
        if filterreq:
            filterreq = filterreq & Q(description__icontains=search_text)
        else:
            filterreq = Q(description__icontains=search_text) | Q(
                tags__icontains=search_text)

    if search_text_files:
        if filterreq:
            filterreq = filterreq | Q(pk__in=search_text_files)
        else:
            filterreq = Q(pk__in=search_text_files)

    files = ZornaFile.objects.filter(pk__in=files_id)
    if filterreq:
        files = files.filter(filterreq)
    for f in files:
        f.file_name = fileList[str(f.pk)]['name']
        f.file_info = fileList[str(f.pk)]

    import operator
    files = list(files)
    files.sort(key=operator.attrgetter('file_name'))
    return files, dirs
Esempio n. 2
0
File: views.py Progetto: kamni/zorna
def fm_delete_file(request):
    pathfile = request.POST.get('dir', None)
    ret = {}
    if pathfile:
        path = clean_path(pathfile)
        if path != pathfile:
            ret['message'] = gettext(u"Incorrect path")
            ret['status'] = 'error'
        else:
            buser, bmanager = get_user_access_to_path(request.user, path)
            if bmanager is False:
                ret['message'] = gettext(u"Access denied")
                ret['status'] = 'error'
            else:
                try:
                    fname = os.path.basename(pathfile)
                    pk, filename = split_file_name(fname)
                    os.remove(get_upload_library() + '/' + path)
                    ZornaFile.objects.get(pk=int(pk)).delete()
                    ret['message'] = gettext(u"File deleted successfully")
                    ret['status'] = 'success'
                except:
                    ret['message'] = gettext(u"Invalid file name")
                    ret['status'] = 'error'
    else:
        ret['message'] = gettext(u"Invalid file path")
        ret['status'] = 'error'

    json_data = simplejson.dumps(ret)
    return HttpResponse(json_data)
Esempio n. 3
0
def fm_delete_file(request):
    pathfile = request.POST.get('dir', None)
    ret = {}
    if pathfile:
        path = clean_path(pathfile)
        if path != pathfile:
            ret['message'] = gettext(u"Incorrect path")
            ret['status'] = 'error'
        else:
            buser, bmanager = get_user_access_to_path(request.user, path)
            if bmanager is False:
                ret['message'] = gettext(u"Access denied")
                ret['status'] = 'error'
            else:
                try:
                    fname = os.path.basename(pathfile)
                    pk, filename = split_file_name(fname)
                    os.remove(get_upload_library() + '/' + path)
                    ZornaFile.objects.get(pk=int(pk)).delete()
                    ret['message'] = gettext(u"File deleted successfully")
                    ret['status'] = 'success'
                except:
                    ret['message'] = gettext(u"Invalid file name")
                    ret['status'] = 'error'
    else:
        ret['message'] = gettext(u"Invalid file path")
        ret['status'] = 'error'

    json_data = simplejson.dumps(ret)
    return HttpResponse(json_data)
Esempio n. 4
0
def get_files(request, path, search_tag, search_text):
    root_path = get_upload_library()
    buser, bmanager = get_user_access_to_path(request.user, path)
    fullpath = u"%s/%s" % (root_path, urllib.unquote(path))
    fileList = {}
    files_id = []
    search_text_files = []
    dirs = []
    import re
    for f in os.listdir(fullpath):
        ff = os.path.join(fullpath, f)
        if os.path.isdir(ff):
            dirs.append(f)
            continue
        pk, fname = split_file_name(f)
        if pk is False:
            continue
        else:
            files_id.append(int(pk))

        statinfo = os.stat(ff)
        fileList[pk] = {'name': fname,
                        'realname': f,
                        'size': statinfo[stat.ST_SIZE],
                        'creation': datetime.fromtimestamp(statinfo[stat.ST_CTIME]),
                        'modification': datetime.fromtimestamp(statinfo[stat.ST_MTIME]),
                        'ext': os.path.splitext(f)[1][1:],
                        'path': path,
                        }

        if search_text and re.search(search_text, fname, re.IGNORECASE):
            search_text_files.append(pk)

    filterreq = None
    if search_tag:
        filterreq = Q(tags__icontains=search_tag)
    if search_text:
        if filterreq:
            filterreq = filterreq & Q(description__icontains=search_text)
        else:
            filterreq = Q(description__icontains=search_text) | Q(
                tags__icontains=search_text)

    if search_text_files:
        if filterreq:
            filterreq = filterreq | Q(pk__in=search_text_files)
        else:
            filterreq = Q(pk__in=search_text_files)

    files = ZornaFile.objects.filter(pk__in=files_id)
    if filterreq:
        files = files.filter(filterreq)
    for f in files:
        f.file_name = fileList[str(f.pk)]['name']
        f.file_info = fileList[str(f.pk)]

    import operator
    files = list(files)
    files.sort(key=operator.attrgetter('file_name'))
    return files, dirs
Esempio n. 5
0
File: views.py Progetto: kamni/zorna
def add_files(root_folder, user, path):
    ret = []
    for f in os.listdir(path):
        p = os.path.join(path, f)
        if os.path.isdir(p):
            ret.extend(add_files(root_folder, user, p))
            continue

        pk, fname = split_file_name(f)
        if pk is False:
            try:
                file = ZornaFile(
                    description='', owner=user, modifier=user, folder=root_folder)
                file.save()
                dest = os.path.join(path, u"%s,%s" % (file.pk, f))
                os.rename(p, dest)
                ret.append(p)
            except:
                continue
    return ret
Esempio n. 6
0
def add_files(root_folder, user, path):
    ret = []
    for f in os.listdir(path):
        p = os.path.join(path, f)
        if os.path.isdir(p):
            ret.extend(add_files(root_folder, user, p))
            continue

        pk, fname = split_file_name(f)
        if pk is False:
            try:
                file = ZornaFile(
                    description='', owner=user, modifier=user, folder=root_folder)
                file.save()
                dest = os.path.join(path, u"%s,%s" % (file.pk, f))
                os.rename(p, dest)
                ret.append(p)
            except:
                continue
    return ret
Esempio n. 7
0
File: views.py Progetto: kamni/zorna
def get_file(request):

    pathfile = request.GET.get('file', None)

    if pathfile:
        path = clean_path(pathfile)
        if path != pathfile:
            return HttpResponseForbidden()
        buser, bmanager = get_user_access_to_path(request.user, path)
        if buser is False:
            return HttpResponseForbidden()

        f = os.path.basename(path)
        path = "%s/%s" % (get_upload_library(), path)
        fp = open(path, 'rb')
        content_type = mimetypes.guess_type(f)[0]
        response = HttpResponse(fp.read(), content_type=content_type)
        response['Content-Length'] = os.path.getsize(path)
        pk, filename = split_file_name(f)
        response['Content-Disposition'] = "attachment; filename=%s" % filename
        return response
    else:
        return HttpResponseForbidden()
Esempio n. 8
0
def get_file(request):

    pathfile = request.GET.get('file', None)
    inline = request.GET.get('inline', None)
    if pathfile:
        path = clean_path(pathfile)
        if path != pathfile:
            return HttpResponseForbidden()
        buser, bmanager = get_user_access_to_path(request.user, path)
        if buser is False:
            return HttpResponseForbidden()

        f = os.path.basename(path)
        path = "%s/%s" % (get_upload_library(), path)
        fp = open(path, 'rb')
        content_type = mimetypes.guess_type(f)[0]
        response = HttpResponse(fp.read(), content_type=content_type)
        response['Content-Length'] = os.path.getsize(path)
        pk, filename = split_file_name(f)
        disposition = 'inline' if inline else 'attachment'
        response['Content-Disposition'] = "%s; filename=%s" % (disposition, filename)
        return response
    else:
        return HttpResponseForbidden()