Exemplo n.º 1
0
Arquivo: views.py Projeto: kamni/zorna
def admin_edit_folder(request, folder):
    if request.user.is_superuser:
        c = ZornaFolder.objects.get(pk=folder)
        if request.method == 'POST':
            form = ZornaFolderForm(request.POST, instance=c)
            if request.POST.has_key('bdelete'):
                fullpath = u"%s/%s" % (get_upload_library(), u"F%s" % c.pk)
                bexist = os.path.isdir(fullpath)
                if not bexist or not os.listdir(fullpath):
                    if bexist:
                        os.rmdir(fullpath)
                    c.delete()
                    return HttpResponseRedirect(reverse('admin_list_folders'))

            if form.is_valid():
                form.save()
                return HttpResponseRedirect(reverse('admin_list_folders'))
        else:
            form = ZornaFolderForm(instance=c)

        fullpath = u"%s/%s" % (get_upload_library(), u"F%s" % c.pk)
        if not os.path.isdir(fullpath) or not os.listdir(fullpath):
            bdelete = True
        else:
            bdelete = False

        context = RequestContext(request)
        extra_context = {'form': form, 'curfolder': c, 'bdelete': bdelete}
        return render_to_response('fileman/edit_folder.html', extra_context, context_instance=context)
    else:
        return HttpResponseRedirect('/')
Exemplo n.º 2
0
def admin_edit_folder(request, folder):
    if request.user.is_superuser:
        c = ZornaFolder.objects.get(pk=folder)
        if request.method == 'POST':
            form = ZornaFolderForm(request.POST, instance=c)
            if request.POST.has_key('bdelete'):
                fullpath = u"%s/%s" % (get_upload_library(), u"F%s" % c.pk)
                bexist = os.path.isdir(fullpath)
                if not bexist or not os.listdir(fullpath):
                    if bexist:
                        os.rmdir(fullpath)
                    c.delete()
                    return HttpResponseRedirect(reverse('admin_list_folders'))

            if form.is_valid():
                form.save()
                return HttpResponseRedirect(reverse('admin_list_folders'))
        else:
            form = ZornaFolderForm(instance=c)

        fullpath = u"%s/%s" % (get_upload_library(), u"F%s" % c.pk)
        if not os.path.isdir(fullpath) or not os.listdir(fullpath):
            bdelete = True
        else:
            bdelete = False

        context = RequestContext(request)
        extra_context = {'form': form, 'curfolder': c, 'bdelete': bdelete}
        return render_to_response('fileman/edit_folder.html', extra_context, context_instance=context)
    else:
        return HttpResponseRedirect('/')
Exemplo n.º 3
0
Arquivo: views.py Projeto: 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
Exemplo n.º 4
0
Arquivo: views.py Projeto: kamni/zorna
def fm_manage_folder(request):
    ret = {'data': ''}
    if request.method == 'POST':
        what = request.POST.get('what', '')
        ppath = request.POST.get('path_rel', '')
        ppath = urllib.unquote(ppath.rstrip('/'))
        folder_dest = clean_path(ppath)
        buser, bmanager = get_user_access_to_path(request.user, folder_dest)
        if folder_dest and bmanager:
            root_path = get_upload_library()
            path_dest = clean_path(folder_dest)
            parts = path_dest.split('/')
            if what == 'rename' and len(parts) > 1:
                new_folder = request.POST.get('new_folder', '').strip()
                n_folder = clean_path(new_folder)
                if new_folder == n_folder:
                    try:
                        n_folder = urllib.unquote(n_folder)
                        path_src = u"%s/%s" % (
                            root_path, urllib.unquote(path_dest))
                        dest = parts[:-1]
                        dest = '/'.join(dest)
                        path_dest = u"%s/%s/%s" % (
                            root_path, urllib.unquote(dest), n_folder)
                        os.rename(path_src, path_dest)
                        ret['status'] = 'success'
                        ret['message'] = gettext(
                            u'Folder renamed successfully')
                        ret['data'] = u"%s/%s/" % (
                            urllib.unquote(dest), n_folder)
                    except Exception as e:
                        ret['status'] = 'error'
                        ret['message'] = e
                else:
                    ret['status'] = 'error'
                    ret['message'] = gettext(u'Invalid folder name')
            elif what == 'create':
                new_folder = request.POST.get('new_folder', '').strip()
                n_folder = clean_path(new_folder)
                if new_folder == n_folder:
                    try:
                        n_folder = urllib.unquote(n_folder)
                        rel = '%s/%s' % (urllib.unquote(path_dest), n_folder)
                        path = u"%s/%s" % (root_path, rel)
                        os.mkdir(path)
                        ret['status'] = 'success'
                        ret['message'] = gettext(
                            u'Folder created successfully')
                        ret['data'] = '<li class="directory collapsed"><a href="#" rel="%s/">%s</a></li>' % (
                            rel, n_folder)
                    except Exception as e:
                        ret['status'] = 'error'
                        ret['message'] = e
                else:
                    ret['status'] = 'error'
                    ret['message'] = gettext(u'Invalid folder name')
        else:
            ret['status'] = 'error'
            ret['message'] = gettext(u'Access denied')
    return HttpResponse(simplejson.dumps(ret))
Exemplo n.º 5
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)
Exemplo n.º 6
0
Arquivo: views.py Projeto: 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)
Exemplo n.º 7
0
def fm_manage_folder(request):
    ret = {'data': ''}
    if request.method == 'POST':
        what = request.POST.get('what', '')
        ppath = request.POST.get('path_rel', '')
        ppath = urllib.unquote(ppath.rstrip('/'))
        folder_dest = clean_path(ppath)
        buser, bmanager = get_user_access_to_path(request.user, folder_dest)
        if folder_dest and bmanager:
            root_path = get_upload_library()
            path_dest = clean_path(folder_dest)
            parts = path_dest.split('/')
            if what == 'rename' and len(parts) > 1:
                new_folder = request.POST.get('new_folder', '').strip()
                n_folder = clean_path(new_folder)
                if new_folder == n_folder:
                    try:
                        n_folder = urllib.unquote(n_folder)
                        path_src = u"%s/%s" % (
                            root_path, urllib.unquote(path_dest))
                        dest = parts[:-1]
                        dest = '/'.join(dest)
                        path_dest = u"%s/%s/%s" % (
                            root_path, urllib.unquote(dest), n_folder)
                        os.rename(path_src, path_dest)
                        ret['status'] = 'success'
                        ret['message'] = gettext(
                            u'Folder renamed successfully')
                        ret['data'] = u"%s/%s/" % (
                            urllib.unquote(dest), n_folder)
                    except Exception as e:
                        ret['status'] = 'error'
                        ret['message'] = e
                else:
                    ret['status'] = 'error'
                    ret['message'] = gettext(u'Invalid folder name')
            elif what == 'create':
                new_folder = request.POST.get('new_folder', '').strip()
                n_folder = clean_path(new_folder)
                if new_folder == n_folder:
                    try:
                        n_folder = urllib.unquote(n_folder)
                        rel = '%s/%s' % (urllib.unquote(path_dest), n_folder)
                        path = u"%s/%s" % (root_path, rel)
                        os.mkdir(path)
                        ret['status'] = 'success'
                        ret['message'] = gettext(
                            u'Folder created successfully')
                        ret['data'] = '<li class="directory collapsed"><a href="#" rel="%s/">%s</a></li>' % (
                            rel, n_folder)
                    except Exception as e:
                        ret['status'] = 'error'
                        ret['message'] = e
                else:
                    ret['status'] = 'error'
                    ret['message'] = gettext(u'Invalid folder name')
        else:
            ret['status'] = 'error'
            ret['message'] = gettext(u'Access denied')
    return HttpResponse(simplejson.dumps(ret))
Exemplo n.º 8
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
Exemplo n.º 9
0
def get_files_from_query(request, query_result):
    results = {}
    roots_folder = []
    id_files = []
    for f in query_result:
        if f.folder not in roots_folder:
            roots_folder.append(f.folder)
        id_files.append(f.pk)
    path = get_upload_library()
    for p in roots_folder:
        buser, bmanager = get_user_access_to_path(request.user, p)
        ret = get_path_components(p)
        human_path = '/'.join([c['text'] for c in ret])
        for dirname, dirs, filenames in os.walk(os.path.join(path, p)):
            for f in filenames:
                pk, fname = split_file_name(f)
                pk = int(pk)
                if pk and pk in id_files:
                    url_component = dirname[len(path) + 1:].replace('\\', '/')
                    file_path = human_path + url_component[len(p):]
                    statinfo = os.stat(os.path.join(dirname, f))
                    fileinfo = {
                        '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':
                        url_component,
                        'manager':
                        bmanager,
                    }
                    results[pk] = (fname, url_component, file_path, fileinfo)
                    id_files.remove(pk)
                    if not len(id_files):
                        break
            if not len(id_files):
                break
        if not len(id_files):
            break
    for f in query_result:
        try:
            f.file_name = results[f.pk][0]
            f.file_url = reverse('get_file') + '?file=' + results[
                f.pk][1] + '/%s,%s' % (f.pk, f.file_name)
            f.file_path = results[f.pk][2]
            f.file_info = results[f.pk][3]
        except:
            pass
    return query_result
Exemplo n.º 10
0
Arquivo: views.py Projeto: kamni/zorna
def fm_rename_file(request):
    pathfile = request.POST.get('dir', None)
    newfile = request.POST.get('new_name', None)
    ret = {}
    if pathfile and newfile:
        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:
                    oldfile = os.path.basename(path)
                    tab = oldfile.split(',')
                    path = os.path.dirname(path)
                    s = os.path.splitext(newfile)
                    fname = slugify(s[0])
                    fext = s[1]
                    dest = u"%s/%s/%s" % (
                        get_upload_library(), path, u"%s,%s%s" % (tab[0], fname, fext))
                    src = u"%s/%s/%s" % (get_upload_library(), path, oldfile)
                    os.rename(src, dest)
                    file = ZornaFile.objects.get(pk=int(tab[0]))
                    file.modifier = request.user
                    file.save()
                    ret['message'] = gettext(u"File renamed successfully")
                    ret['status'] = 'success'
                except Exception as e:
                    ret['message'] = gettext(u"Invalid file path")
                    ret['status'] = 'error'
    if ret['status'] == 'error':
        ret['new_name'] = os.path.basename(pathfile)
    else:
        ret['new_name'] = u"%s%s" % (fname, fext)

    json_data = simplejson.dumps(ret)
    return HttpResponse(json_data)
Exemplo n.º 11
0
def fm_rename_file(request):
    pathfile = request.POST.get('dir', None)
    newfile = request.POST.get('new_name', None)
    ret = {}
    if pathfile and newfile:
        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:
                    oldfile = os.path.basename(path)
                    tab = oldfile.split(',')
                    path = os.path.dirname(path)
                    s = os.path.splitext(newfile)
                    fname = slugify(s[0])
                    fext = s[1]
                    dest = u"%s/%s/%s" % (
                        get_upload_library(), path, u"%s,%s%s" % (tab[0], fname, fext))
                    src = u"%s/%s/%s" % (get_upload_library(), path, oldfile)
                    os.rename(src, dest)
                    file = ZornaFile.objects.get(pk=int(tab[0]))
                    file.modifier = request.user
                    file.save()
                    ret['message'] = gettext(u"File renamed successfully")
                    ret['status'] = 'success'
                except Exception as e:
                    ret['message'] = gettext(u"Invalid file path")
                    ret['status'] = 'error'
    if ret['status'] == 'error':
        ret['new_name'] = os.path.basename(pathfile)
    else:
        ret['new_name'] = u"%s%s" % (fname, fext)

    json_data = simplejson.dumps(ret)
    return HttpResponse(json_data)
Exemplo n.º 12
0
Arquivo: api.py Projeto: kamni/zorna
def recent_files_folders(request, roots, limit):
    results = {}
    if roots:
        files = ZornaFile.objects.filter(folder__in=roots).order_by("-time_updated")[: int(limit)]
        roots_folder = []
        id_files = []
        for f in files:
            if f.folder not in roots_folder:
                roots_folder.append(f.folder)
            id_files.append(f.pk)
        path = get_upload_library()
        for p in roots_folder:
            buser, bmanager = get_user_access_to_path(request.user, p)
            ret = get_path_components(p)
            human_path = "/".join([c["text"] for c in ret])
            for dirname, dirs, filenames in os.walk(os.path.join(path, p)):
                for f in filenames:
                    pk, fname = split_file_name(f)
                    pk = int(pk)
                    if pk and pk in id_files:
                        url_component = dirname[len(path) + 1 :].replace("\\", "/")
                        file_path = human_path + url_component[len(p) :]
                        statinfo = os.stat(os.path.join(dirname, f))
                        fileinfo = {
                            "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": url_component,
                            "manager": bmanager,
                        }
                        results[pk] = (fname, url_component, file_path, fileinfo)
                        id_files.remove(pk)
                        if not len(id_files):
                            break
                if not len(id_files):
                    break
            if not len(id_files):
                break
        for f in files:
            try:
                f.file_name = results[f.pk][0]
                f.file_url = reverse("get_file") + "?file=" + results[f.pk][1] + "/%s,%s" % (f.pk, f.file_name)
                f.file_path = results[f.pk][2]
                f.file_info = results[f.pk][3]
            except:
                pass
        return files
    else:
        return []
Exemplo n.º 13
0
def get_files_from_query(request, query_result):
    results = {}
    roots_folder = []
    id_files = []
    for f in query_result:
        if f.folder not in roots_folder:
            roots_folder.append(f.folder)
        id_files.append(f.pk)
    path = get_upload_library()
    for p in roots_folder:
        buser, bmanager = get_user_access_to_path(request.user, p)
        ret = get_path_components(p)
        human_path = '/'.join([c['text'] for c in ret])
        for dirname, dirs, filenames in os.walk(os.path.join(path, p)):
            for f in filenames:
                pk, fname = split_file_name(f)
                pk = int(pk)
                if pk and pk in id_files:
                    url_component = dirname[len(
                        path) + 1:].replace('\\', '/')
                    file_path = human_path + url_component[len(p):]
                    statinfo = os.stat(os.path.join(dirname, f))
                    fileinfo = {'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': url_component,
                                'manager': bmanager,
                                }
                    results[pk] = (
                        fname, url_component, file_path, fileinfo)
                    id_files.remove(pk)
                    if not len(id_files):
                        break
            if not len(id_files):
                break
        if not len(id_files):
            break
    for f in query_result:
        try:
            f.file_name = results[f.pk][0]
            f.file_url = reverse('get_file') + '?file=' + results[
                f.pk][1] + '/%s,%s' % (f.pk, f.file_name)
            f.file_path = results[f.pk][2]
            f.file_info = results[f.pk][3]
        except:
            pass
    return query_result
Exemplo n.º 14
0
Arquivo: views.py Projeto: kamni/zorna
def dirlist_communities_folders(request):
    r = ['<ul class="jqueryFileTree" style="display: none;">']
    ppath = request.GET.get('dir', '')
    ppath = urllib.unquote(ppath.rstrip('/'))
    path = clean_path(ppath)
    if path != ppath:
        path = ''
    if path:
        buser, bmanager = get_user_access_to_path(request.user, path)
        if buser:
            ret = get_sub_folders(path)
        else:
            ret = []
    else:
        ppath = request.GET.get('path', None)
        if ppath:
            ppath = urllib.unquote(ppath.rstrip('/'))
            folder_dest = clean_path(ppath)
            buser, bmanager = get_user_access_to_path(
                request.user, folder_dest)
            if buser:
                ret = get_sub_folders(folder_dest, request.user)
            else:
                ret = []
        else:
            allowed_objects = set([])
            for perm in ['member', 'manage']:
                objects = get_allowed_objects(request.user, Community, perm)
                allowed_objects = allowed_objects.union(set(objects))
            root_path = get_upload_library()
            ret = []
            com = Community.objects.filter(
                pk__in=allowed_objects, enable_documents=True)
            for c in com:
                path = u"C%s" % c.pk
                fullpath = u"%s/%s" % (root_path, path)
                if not os.path.isdir(fullpath):
                    os.makedirs(fullpath)
                pathx = c.name
                ret.append({'name': pathx, 'rel': path})

    for d in ret:
        r.append(
            '<li class="directory collapsed"><a href="#" rel="%s/" title="%s/">%s</a></li>' %
            (d['rel'], d['rel'], d['name']))
    r.append('</ul>')
    return HttpResponse(''.join(r))
Exemplo n.º 15
0
def dirlist_communities_folders(request):
    r = ['<ul class="jqueryFileTree" style="display: none;">']
    ppath = request.GET.get('dir', '')
    ppath = urllib.unquote(ppath.rstrip('/'))
    path = clean_path(ppath)
    if path != ppath:
        path = ''
    if path:
        buser, bmanager = get_user_access_to_path(request.user, path)
        if buser:
            ret = get_sub_folders(path)
        else:
            ret = []
    else:
        ppath = request.GET.get('path', None)
        if ppath:
            ppath = urllib.unquote(ppath.rstrip('/'))
            folder_dest = clean_path(ppath)
            buser, bmanager = get_user_access_to_path(
                request.user, folder_dest)
            if buser:
                ret = get_sub_folders(folder_dest, request.user)
            else:
                ret = []
        else:
            allowed_objects = set([])
            for perm in ['member', 'manage']:
                objects = get_allowed_objects(request.user, Community, perm)
                allowed_objects = allowed_objects.union(set(objects))
            root_path = get_upload_library()
            ret = []
            com = Community.objects.filter(
                pk__in=allowed_objects, enable_documents=True)
            for c in com:
                path = u"C%s" % c.pk
                fullpath = u"%s/%s" % (root_path, path)
                if not os.path.isdir(fullpath):
                    os.makedirs(fullpath)
                pathx = c.name
                ret.append({'name': pathx, 'rel': path})

    for d in ret:
        r.append(
            '<li class="directory collapsed"><a href="#" rel="%s/" title="%s/">%s</a></li>' %
            (d['rel'], d['rel'], d['name']))
    r.append('</ul>')
    return HttpResponse(''.join(r))
Exemplo n.º 16
0
 def get_file_info(self):
     root_path = get_upload_library()
     info = {}
     fullpath = u"%s/%s" % (root_path, self.folder)
     for dirName, subdirList, fileList in os.walk(fullpath):
         for file_name in fileList:
             tab = file_name.split(',')
             if len(tab) > 1 and tab[0].isdigit():
                 pk, filename = tab[0], ','.join(tab[1:])
                 if int(pk) == self.pk:
                     info['filename'] = filename
                     url_component = dirName[len(
                             root_path) + 1:].replace('\\', '/')
                     info['url'] = reverse('get_file') + '?file=' + url_component + '/%s,%s' % (self.pk, filename)
                     info['path'] = url_component
                     return info
     return info
Exemplo n.º 17
0
Arquivo: views.py Projeto: kamni/zorna
def dirlist_shared_folders(request):
    r = ['<ul class="jqueryFileTree" style="display: none;">']
    pdir = request.GET.get('dir', '')
    pdir = urllib.unquote(pdir.rstrip('/'))
    path = clean_path(pdir)
    if path != pdir:
        path = ''

    if path:
        buser, bmanager = get_user_access_to_path(request.user, path)
        if buser:
            ret = get_sub_folders(path, request.user)
        else:
            ret = []
    else:
        ppath = request.GET.get('path', None)
        if ppath:
            ppath = urllib.unquote(ppath.rstrip('/'))
            folder_dest = clean_path(ppath)
            buser, bmanager = get_user_access_to_path(
                request.user, folder_dest)
            if buser:
                ret = get_sub_folders(folder_dest, request.user)
            else:
                ret = []
        else:
            allowed_objects = get_allowed_shared_folders(
                request.user, ['reader', 'manager', 'writer'])
            ret = []
            ob_list = ZornaFolder.objects.filter(
                pk__in=allowed_objects, parent__isnull=True)
            root_path = get_upload_library()
            for f in ob_list:
                path = u"F%s" % f.pk
                fullpath = u"%s/%s" % (root_path, path)
                if not os.path.isdir(fullpath):
                    os.makedirs(fullpath)
                ret.append({'name': f.name, 'rel': path})

    for d in ret:
        r.append(
            '<li class="directory collapsed"><a href="#" rel="%s/" title="%s/">%s</a></li>' %
            (d['rel'], d['rel'], d['name']))
    r.append('</ul>')
    return HttpResponse(''.join(r))
Exemplo n.º 18
0
def dirlist_shared_folders(request):
    r = ['<ul class="jqueryFileTree" style="display: none;">']
    pdir = request.GET.get('dir', '')
    pdir = urllib.unquote(pdir.rstrip('/'))
    path = clean_path(pdir)
    if path != pdir:
        path = ''

    if path:
        buser, bmanager = get_user_access_to_path(request.user, path)
        if buser:
            ret = get_sub_folders(path, request.user)
        else:
            ret = []
    else:
        ppath = request.GET.get('path', None)
        if ppath:
            ppath = urllib.unquote(ppath.rstrip('/'))
            folder_dest = clean_path(ppath)
            buser, bmanager = get_user_access_to_path(
                request.user, folder_dest)
            if buser:
                ret = get_sub_folders(folder_dest, request.user)
            else:
                ret = []
        else:
            allowed_objects = get_allowed_shared_folders(
                request.user, ['reader', 'manager', 'writer'])
            ret = []
            ob_list = ZornaFolder.objects.filter(
                pk__in=allowed_objects, parent__isnull=True)
            root_path = get_upload_library()
            for f in ob_list:
                path = u"F%s" % f.pk
                fullpath = u"%s/%s" % (root_path, path)
                if not os.path.isdir(fullpath):
                    os.makedirs(fullpath)
                ret.append({'name': f.name, 'rel': path})

    for d in ret:
        r.append(
            '<li class="directory collapsed"><a href="#" rel="%s/" title="%s/">%s</a></li>' %
            (d['rel'], d['rel'], d['name']))
    r.append('</ul>')
    return HttpResponse(''.join(r))
Exemplo n.º 19
0
    def forwards(self, orm):
        db.start_transaction()
        # Adding field 'ZornaFile.folder'
        db.add_column('zorna_files', 'folder', self.gf('django.db.models.fields.CharField')(default='', max_length=255), keep_default=False)

        if not db.dry_run:
            db.commit_transaction()
            db.start_transaction()
            root_path = get_upload_library()
            for d in os.listdir(root_path):
                fullpath=os.path.join(root_path, d)
                if os.path.isdir(fullpath) and d not in ['communities']:
                    for dirname, dirs, filenames in os.walk(fullpath):
                        for f in filenames:
                            pk, fname = split_file_name(f)
                            if pk:
                                entry_file = ZornaFile.objects.filter(pk=pk).update(folder=d)
        db.commit_transaction()
Exemplo n.º 20
0
Arquivo: views.py Projeto: kamni/zorna
def add_files_to_database(request):
    if request.user.is_superuser:
        ret = []
        root_path = get_upload_library()
        for f in os.listdir(root_path):
            path = os.path.join(root_path, f)
            user = request.user
            try:
                if f[0] in ['U', 'C', 'F'] and int(f[1:]) and os.path.isdir(path):
                    if f[0] == 'U':
                        try:
                            user = User.objects.get(pk=int(f[1:]))
                        except:
                            pass
                    ret.extend(add_files(f, user, path))
            except Exception as e:
                continue
        extra_context = {'files': ret, }
        context = RequestContext(request)
        return render_to_response('fileman/log_files.html', extra_context, context_instance=context)
    else:
        return HttpResponseForbidden()
Exemplo n.º 21
0
def add_files_to_database(request):
    if request.user.is_superuser:
        ret = []
        root_path = get_upload_library()
        for f in os.listdir(root_path):
            path = os.path.join(root_path, f)
            user = request.user
            try:
                if f[0] in ['U', 'C', 'F'] and int(f[1:]) and os.path.isdir(path):
                    if f[0] == 'U':
                        try:
                            user = User.objects.get(pk=int(f[1:]))
                        except:
                            pass
                    ret.extend(add_files(f, user, path))
            except Exception as e:
                continue
        extra_context = {'files': ret, }
        context = RequestContext(request)
        return render_to_response('fileman/log_files.html', extra_context, context_instance=context)
    else:
        return HttpResponseForbidden()
Exemplo n.º 22
0
def get_folder_files(folder, limit=None):
    fullpath = get_upload_library() + '/%s' % folder

    fileList = {}
    files_id = []
    if os.path.isdir(fullpath):
        for f in os.listdir(fullpath):
            ff = os.path.join(fullpath, f)
            if os.path.isdir(ff):
                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:],
            }

        files = ZornaFile.objects.filter(
            pk__in=files_id).order_by('-time_updated')
        if limit:
            files = files[:int(limit)]
        for f in files:
            f.file_name = fileList[str(f.pk)]['name']
            f.file_url = reverse('get_file') + '?file=' + folder + '/%s,%s' % (
                f.pk, f.file_name)
            f.file_info = fileList[str(f.pk)]
        return files
    else:
        return []
Exemplo n.º 23
0
Arquivo: views.py Projeto: kamni/zorna
def get_sub_folders(dir_path, user=None):
    ret = []
    root_path = get_upload_library()
    d = urllib.unquote(dir_path)
    dirs = d.split('/')
    if dirs[0][0] == 'F' and len(dirs) == 1:
        allowed_objects = get_allowed_shared_folders(
            user, ['reader', 'manager', 'writer'])
        ob_list = ZornaFolder.objects.filter(Q(pk__in=allowed_objects) | Q(
            inherit_permissions=True), parent__pk=dirs[0][1:])
        for f in ob_list:
            fullpath = u"%s/%s" % (root_path, u"F%s" % f.pk)
            if not os.path.isdir(fullpath):
                os.makedirs(fullpath)
            ret.append({'name': f.name, 'rel': 'F%s' % f.pk})

    path = u"%s/%s" % (root_path, d)
    for f in os.listdir(path):
        ff = os.path.join(path, f)
        if os.path.isdir(ff):
            relpath = u"%s/%s" % (d, f)
            ret.append({'name': f, 'rel': relpath})
    return ret
Exemplo n.º 24
0
def get_sub_folders(dir_path, user=None):
    ret = []
    root_path = get_upload_library()
    d = urllib.unquote(dir_path)
    dirs = d.split('/')
    if dirs[0][0] == 'F' and len(dirs) == 1:
        allowed_objects = get_allowed_shared_folders(
            user, ['reader', 'manager', 'writer'])
        ob_list = ZornaFolder.objects.filter(Q(pk__in=allowed_objects) | Q(
            inherit_permissions=True), parent__pk=dirs[0][1:])
        for f in ob_list:
            fullpath = u"%s/%s" % (root_path, u"F%s" % f.pk)
            if not os.path.isdir(fullpath):
                os.makedirs(fullpath)
            ret.append({'name': f.name, 'rel': 'F%s' % f.pk})

    path = u"%s/%s" % (root_path, d)
    for f in os.listdir(path):
        ff = os.path.join(path, f)
        if os.path.isdir(ff):
            relpath = u"%s/%s" % (d, f)
            ret.append({'name': f, 'rel': relpath})
    return ret
Exemplo n.º 25
0
Arquivo: views.py Projeto: kamni/zorna
def fm_delete_folder(request):
    ret = {'data': ''}
    if request.method == 'POST':
        ppath = request.POST.get('path_rel', '')
        ppath = urllib.unquote(ppath.rstrip('/'))
        folder_dest = clean_path(ppath)
        buser, bmanager = get_user_access_to_path(request.user, folder_dest)
        parts = folder_dest.split('/')
        if folder_dest and bmanager and len(parts) > 1:
            root_path = get_upload_library()
            try:
                path_src = u"%s/%s" % (root_path, urllib.unquote(folder_dest))
                os.rmdir(path_src)
                ret['status'] = 'success'
                ret['message'] = gettext(u'Folder deleted successfully')
                ret['data'] = u"%s/" % '/'.join(parts[0:-1])
            except Exception as e:
                ret['status'] = 'error'
                ret['message'] = 'Error: %s' % str(e)
        else:
            ret['status'] = 'error'
            ret['message'] = gettext(u'Access denied')
    return HttpResponse(simplejson.dumps(ret))
Exemplo n.º 26
0
Arquivo: views.py Projeto: 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()
Exemplo n.º 27
0
    def forwards(self, orm):
        db.start_transaction()
        # Adding field 'ZornaFile.folder'
        db.add_column('zorna_files',
                      'folder',
                      self.gf('django.db.models.fields.CharField')(
                          default='', max_length=255),
                      keep_default=False)

        if not db.dry_run:
            db.commit_transaction()
            db.start_transaction()
            root_path = get_upload_library()
            for d in os.listdir(root_path):
                fullpath = os.path.join(root_path, d)
                if os.path.isdir(fullpath) and d not in ['communities']:
                    for dirname, dirs, filenames in os.walk(fullpath):
                        for f in filenames:
                            pk, fname = split_file_name(f)
                            if pk:
                                entry_file = ZornaFile.objects.filter(
                                    pk=pk).update(folder=d)
        db.commit_transaction()
Exemplo n.º 28
0
def fm_delete_folder(request):
    ret = {'data': ''}
    if request.method == 'POST':
        ppath = request.POST.get('path_rel', '')
        ppath = urllib.unquote(ppath.rstrip('/'))
        folder_dest = clean_path(ppath)
        buser, bmanager = get_user_access_to_path(request.user, folder_dest)
        parts = folder_dest.split('/')
        if folder_dest and bmanager and len(parts) > 1:
            root_path = get_upload_library()
            try:
                path_src = u"%s/%s" % (root_path, urllib.unquote(folder_dest))
                os.rmdir(path_src)
                ret['status'] = 'success'
                ret['message'] = gettext(u'Folder deleted successfully')
                ret['data'] = u"%s/" % '/'.join(parts[0:-1])
            except Exception as e:
                ret['status'] = 'error'
                ret['message'] = 'Error: %s' % str(e)
        else:
            ret['status'] = 'error'
            ret['message'] = gettext(u'Access denied')
    return HttpResponse(simplejson.dumps(ret))
Exemplo n.º 29
0
def get_folder_files(folder, limit=None):
    fullpath = get_upload_library() + '/%s' % folder

    fileList = {}
    files_id = []
    if os.path.isdir(fullpath):
        for f in os.listdir(fullpath):
            ff = os.path.join(fullpath, f)
            if os.path.isdir(ff):
                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:],
                            }

        files = ZornaFile.objects.filter(
            pk__in=files_id).order_by('-time_updated')
        if limit:
            files = files[:int(limit)]
        for f in files:
            f.file_name = fileList[str(f.pk)]['name']
            f.file_url = reverse(
                'get_file') + '?file=' + folder + '/%s,%s' % (f.pk, f.file_name)
            f.file_info = fileList[str(f.pk)]
        return files
    else:
        return []
Exemplo n.º 30
0
Arquivo: api.py Projeto: kamni/zorna
def get_folder_files(folder, limit=None):
    fullpath = get_upload_library() + "/%s" % folder

    fileList = {}
    files_id = []
    if os.path.isdir(fullpath):
        for f in os.listdir(fullpath):
            ff = os.path.join(fullpath, f)
            if os.path.isdir(ff):
                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:],
            }

        files = ZornaFile.objects.filter(pk__in=files_id).order_by("-time_updated")
        if limit:
            files = files[: int(limit)]
        for f in files:
            f.file_name = fileList[str(f.pk)]["name"]
            f.file_url = reverse("get_file") + "?file=" + folder + "/%s,%s" % (f.pk, f.file_name)
            f.file_info = fileList[str(f.pk)]
        return files
    else:
        return []
Exemplo n.º 31
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()
Exemplo n.º 32
0
    def save(self, request):
        message = self.cleaned_data['message']
        send_to = self.cleaned_data['send_to']
        upload_to = []
        calendar_owners = []
        dest = []
        ao = get_allowed_objects(request.user, Community, ['manage', 'member'])
        if send_to:
            send_to = send_to.split(',')
            for item in send_to:
                item = item.split('-')
                if item[0] == 'u':  # user
                    user = User.objects.get(pk=item[1])
                    # if user recipient member of any current user communities
                    ao_member_user = get_allowed_objects(
                        user, Community, ['member', 'manage'])
                    inter = [k for k in ao if k in ao_member_user]
                    if len(inter):
                        dest.append(user)
                        calendar_owners.append(user)
                        upload_to.append(u"U%s" % user.pk)
                else:
                    community = Community.objects.get(pk=item[1])
                    if community.pk in ao:
                        dest.append(community)
                        calendar_owners.append(community)
                        upload_to.append(u"C%s" % community.pk)
            users_emails = []
            if len(dest):
                m = MessageCommunity(message=message)
                m.owner = m.modifier = request.user
                m.save()
                for k in dest:
                    if isinstance(k, User):
                        m.users.add(k)
                        users_emails.append(k.email)
                    else:
                        m.communities.add(k)
                        if k.email_notification:
                            users = list(chain(get_acl_by_object(
                                k, 'member'), get_acl_by_object(k, 'manage')))
                            users_emails.extend([u.email for u in users])
            else:
                return None

            files = request.FILES.getlist("attachments")
            if len(upload_to) and len(files):
                try:
                    path_library = get_upload_library()
                    path = os.path.join(get_upload_communities(), "%s" % m.pk)
                    if not os.path.isdir(path):
                        os.makedirs(path)
                    for f in request.FILES.getlist("attachments"):
                        s = os.path.splitext(f.name)
                        fname = slugify(s[0])
                        fext = s[1]
                        destination = open(u"%s/%s" % (
                            path, u"%s%s" % (fname, fext)), 'wb+')
                        for chunk in f.chunks():
                            destination.write(chunk)
                        destination.close()
                        for d in upload_to:
                            destpath = os.path.join(path_library, "%s" % d)
                            if not os.path.isdir(destpath):
                                os.makedirs(destpath)
                            try:
                                libfile = ZornaFile(
                                    owner=request.user, modifier=request.user)
                                libfile.save()
                                fsrc = u"%s/%s/%s,%s%s" % (
                                    path_library, d, str(libfile.pk), fname, fext)
                                shutil.copy2(u"%s/%s" % (
                                    path, u"%s%s" % (fname, fext)), fsrc)
                            except Exception as e:
                                print(e)
                except Exception as e:
                    pass
            # send email notification
            if len(users_emails):
                users_emails = list(set(users_emails))
                if users_emails:
                    email = ZornaEmail()
                    url = request.build_absolute_uri(reverse(
                        'communities_home_page', args=[])) + '?all_msg=message&message_id=%s' % m.pk
                    ec = {"message": m, 'url': url, 'user': request.user}
                    body_text = render_to_string(
                        'communities/email_notification_text.html', ec)
                    body_html = render_to_string(
                        'communities/email_notification_html.html', ec)
                    subject = _(
                        u'A new message has been posted in communities')
                    step = getattr(settings, "ZORNA_MAIL_MAXPERPACKET", 25)
                    for n in range(0, len(users_emails) / step + 1):
                        email.append(subject, body_text, body_html, settings.DEFAULT_FROM_EMAIL, bcc=users_emails[
                                     n * step:(n + 1) * step])
                    email.send()
            return m
        return None
Exemplo n.º 33
0
def fm_properties_view(request):
    pathfile = request.REQUEST.get('dir', None)
    file_name = request.REQUEST.get('file_name', None)
    file_id = request.REQUEST.get('file_id', 0)
    ret = {}
    if pathfile:
        ppath = urllib.unquote(pathfile.rstrip('/'))
        path_dest = clean_path(ppath)
        if path_dest != ppath:
            ret['message'] = gettext(u"Incorrect path")
            ret['status'] = 'error'
        else:
            buser, bmanager = get_user_access_to_path(request.user, path_dest)
            if bmanager is False:
                ret['message'] = gettext(u"Access denied")
                ret['status'] = 'error'
            else:
                folder = get_shared_folder(path_dest)
                try:
                    fo = ZornaFile.objects.get(pk=int(file_id))
                except:
                    ret['message'] = gettext(u"Access denied")
                    ret['status'] = 'error'
                else:
                    cdir_components = get_path_components(path_dest)
                    if request.method == 'POST':
                        root_path = get_upload_library()
                        form = ZornaFileForm(request.POST, instance=fo)
                        if form.is_valid():
                            fo = form.save(commit=False)
                            fo.modifier = request.user
                            fo.save()
                            if request.FILES:
                                f = request.FILES['file']
                                s = os.path.splitext(f.name)
                                fname = u"%s%s" % (slugify(s[0]), s[1])
                                os.remove(u"%s/%s/%s,%s" % (
                                    root_path, path_dest, file_id, file_name))
                                destination = open(u"%s/%s/%s,%s" % (
                                    root_path, path_dest, file_id, fname), 'wb+')
                                for chunk in f.chunks():
                                    destination.write(chunk)
                                destination.close()
                                # notify users
                                bnotify = request.POST.get('notify_users', 0)
                                if folder and folder.email_notification and (folder.email_notification == 1 or bnotify):
                                    notify_users(request, folder, [{
                                                 'name': fname, 'description': fo.description}], False)

                            ret['message'] = gettext(
                                u"File updated successfully")
                            ret['status'] = 'success'
                            json_data = simplejson.dumps(ret)
                            return HttpResponse('<textarea>' + json_data + '</textarea>')
                        else:
                            ret['message'] = gettext(u"Invalid form")
                            ret['status'] = 'error'
                    else:
                        form = ZornaFileForm(instance=fo)
                        ret['status'] = 'success'

                    t = loader.get_template('fileman/file_properties.html')
                    ec = {
                        'file': fo, 'form': form, 'file_path': pathfile, 'file_name': file_name,
                        'file_id': file_id, 'cdir_components': cdir_components,
                        'folder_content_url': get_url_folder_content(pathfile), 'folder': folder}
                    c = RequestContext(request, ec)
                    ret['data'] = t.render(c)
    else:
        ret['message'] = gettext(u"Invalid file path")
        ret['status'] = 'error'

    json_data = simplejson.dumps(ret)
    return HttpResponse(json_data)
Exemplo n.º 34
0
Arquivo: views.py Projeto: kamni/zorna
def fm_properties_view(request):
    pathfile = request.REQUEST.get('dir', None)
    file_name = request.REQUEST.get('file_name', None)
    file_id = request.REQUEST.get('file_id', 0)
    ret = {}
    if pathfile:
        ppath = urllib.unquote(pathfile.rstrip('/'))
        path_dest = clean_path(ppath)
        if path_dest != ppath:
            ret['message'] = gettext(u"Incorrect path")
            ret['status'] = 'error'
        else:
            buser, bmanager = get_user_access_to_path(request.user, path_dest)
            if bmanager is False:
                ret['message'] = gettext(u"Access denied")
                ret['status'] = 'error'
            else:
                folder = get_shared_folder(path_dest)
                try:
                    fo = ZornaFile.objects.get(pk=int(file_id))
                except:
                    ret['message'] = gettext(u"Access denied")
                    ret['status'] = 'error'
                else:
                    cdir_components = get_path_components(path_dest)
                    if request.method == 'POST':
                        root_path = get_upload_library()
                        form = ZornaFileForm(request.POST, instance=fo)
                        if form.is_valid():
                            fo = form.save(commit=False)
                            fo.modifier = request.user
                            fo.save()
                            if request.FILES:
                                f = request.FILES['file']
                                s = os.path.splitext(f.name)
                                fname = u"%s%s" % (slugify(s[0]), s[1])
                                os.remove(u"%s/%s/%s,%s" % (
                                    root_path, path_dest, file_id, file_name))
                                destination = open(u"%s/%s/%s,%s" % (
                                    root_path, path_dest, file_id, fname), 'wb+')
                                for chunk in f.chunks():
                                    destination.write(chunk)
                                destination.close()
                                # notify users
                                bnotify = request.POST.get('notify_users', 0)
                                if folder and folder.email_notification and (folder.email_notification == 1 or bnotify):
                                    notify_users(request, folder, [{
                                                 'name': fname, 'description': fo.description}], False)

                            ret['message'] = gettext(
                                u"File updated successfully")
                            ret['status'] = 'success'
                            json_data = simplejson.dumps(ret)
                            return HttpResponse('<textarea>' + json_data + '</textarea>')
                        else:
                            ret['message'] = gettext(u"Invalid form")
                            ret['status'] = 'error'
                    else:
                        form = ZornaFileForm(instance=fo)
                        ret['status'] = 'success'

                    t = loader.get_template('fileman/file_properties.html')
                    ec = {
                        'file': fo, 'form': form, 'file_path': pathfile, 'file_name': file_name,
                        'file_id': file_id, 'cdir_components': cdir_components,
                        'folder_content_url': get_url_folder_content(pathfile), 'folder': folder}
                    c = RequestContext(request, ec)
                    ret['data'] = t.render(c)
    else:
        ret['message'] = gettext(u"Invalid file path")
        ret['status'] = 'error'

    json_data = simplejson.dumps(ret)
    return HttpResponse(json_data)
Exemplo n.º 35
0
Arquivo: views.py Projeto: kamni/zorna
def fm_multiple_upload_view(request):
    pathfile = request.REQUEST.get('dir', None)
    ret = {}
    if pathfile:
        ppath = urllib.unquote(pathfile.rstrip('/'))
        path_dest = clean_path(ppath)
        if path_dest != ppath:
            ret['message'] = gettext(u"Incorrect path")
            ret['status'] = 'error'
        else:
            buser, bmanager = get_user_access_to_path(request.user, path_dest)
            folder = get_shared_folder(path_dest)
            if bmanager is False:
                ret['message'] = gettext(u"Access denied")
                ret['status'] = 'error'
            else:
                cdir_components = get_path_components(path_dest)
                form = ZornaFileUploadForm(request.POST, request.FILES)
                if request.method == 'POST':
                    root_path = get_upload_library()
                    if form.is_valid():
                        path = u"%s/%s" % (
                            root_path, urllib.unquote(path_dest))
                        uploaded_file = request.FILES['file']
                        chunk = request.REQUEST.get('chunk', '0')
                        chunks = request.REQUEST.get('chunks', '0')
                        name = uploaded_file.name

                        temp_file = '%s/%s.part' % (path, name)
                        with open(temp_file, ('wb' if chunk == '0' else 'ab')) as f:
                            for content in uploaded_file.chunks():
                                f.write(content)

                        if int(chunk) + 1 >= int(chunks):
                            s = os.path.splitext(name)
                            file = ZornaFile(
                                owner=request.user, modifier=request.user, description='', folder=path_dest.split('/')[0])
                            file.save()
                            destination = u"%s/%s,%s" % (path, file.pk, name)
                            shutil.move(temp_file, destination)
                        if request.is_ajax():
                            response = HttpResponse(
                                '{"jsonrpc" : "2.0", "result" : null, "id" : "id"}')
                            response[
                                'Expires'] = 'Mon, 1 Jan 2000 01:00:00 GMT'
                            response[
                                'Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0'
                            response['Pragma'] = 'no-cache'
                            return response
                        else:
                            ret['status'] = 'success'
                else:
                    ret['status'] = 'success'
                t = loader.get_template(
                    'fileman/upload_multiple_documents.html')
                c = RequestContext(request, {
                                   'form': form,
                                   'cdir_components': cdir_components,
                                   'folder_dest': pathfile,
                                   'folder_content_url': get_url_folder_content(pathfile),
                                   'folder': folder,
                                   'language': settings.LANGUAGE_CODE[0:2]})
                ret['data'] = t.render(c)
    else:
        ret['message'] = gettext(u"Invalid file path")
        ret['status'] = 'error'

    json_data = simplejson.dumps(ret)
    return HttpResponse(json_data)
Exemplo n.º 36
0
Arquivo: views.py Projeto: kamni/zorna
def fm_upload_view(request):
    pathfile = request.REQUEST.get('dir', None)
    ret = {}
    if pathfile:
        ppath = urllib.unquote(pathfile.rstrip('/'))
        path_dest = clean_path(ppath)
        if path_dest != ppath:
            ret['message'] = gettext(u"Incorrect path")
            ret['status'] = 'error'
        else:
            buser, bmanager = get_user_access_to_path(request.user, path_dest)
            folder = get_shared_folder(path_dest)
            if bmanager is False:
                ret['message'] = gettext(u"Access denied")
                ret['status'] = 'error'
            else:
                cdir_components = get_path_components(path_dest)
                if request.method == 'POST':
                    root_path = get_upload_library()
                    fa_set = formset_factory(ZornaFileAddForm, extra=2)
                    form_set = fa_set(request.POST, request.FILES)
                    if form_set.is_valid():
                        upload_files = {}
                        ifiles = []
                        for i in range(0, form_set.total_form_count()):
                            form = form_set.forms[i]
                            try:
                                f = request.FILES['form-' + str(i) + '-file']
                                s = os.path.splitext(f.name)
                                fname = u"%s%s" % (slugify(s[0]), s[1])
                                upload_files[fname] = {'pk': '', 'file': f, 'description':
                                                       form.cleaned_data['description'], 'tags': form.cleaned_data['tags']}
                            except:
                                continue
                        path = u"%s/%s" % (
                            root_path, urllib.unquote(path_dest))
                        bupload = False
                        for f, info in upload_files.iteritems():
                            file = ZornaFile(owner=request.user, modifier=request.user, description=info[
                                             'description'], tags=info['tags'], folder=path_dest.split('/')[0])
                            file.save()
                            destination = open(u"%s/%s,%s" % (
                                path, file.pk, f), 'wb+')
                            bupload = True
                            for chunk in info['file'].chunks():
                                destination.write(chunk)
                            destination.close()
                            ifiles.append({'name': f, 'description': info[
                                          'description']})
                        if bupload:
                            ret['message'] = gettext(
                                u"Files uploaded successfully")
                            # notify users
                            bnotify = request.POST.get('notify_users', 0)
                            if folder and folder.email_notification and (folder.email_notification == 1 or bnotify):
                                notify_users(request, folder, ifiles, True)
                        else:
                            ret['message'] = gettext(u"No file uploaded")
                        ret['status'] = 'success'
                        json_data = simplejson.dumps(ret)
                        return HttpResponse('<textarea>' + json_data + '</textarea>')
                    else:
                        ret['message'] = gettext(u"Invalid form")
                        ret['status'] = 'error'
                        t = loader.get_template(
                            'fileman/upload_documents.html')
                        c = RequestContext(request, {'form_set':
                                           form_set, 'cdir_components': cdir_components, 'folder_dest': pathfile, 'folder_content_url': get_url_folder_content(pathfile)})
                        ret['data'] = t.render(c)
                        json_data = simplejson.dumps(ret)
                        return HttpResponse('<textarea>' + json_data + '</textarea>')
                else:
                    fa_set = formset_factory(ZornaFileAddForm, extra=2)
                    form_set = fa_set()
                    ret['status'] = 'success'

                t = loader.get_template('fileman/upload_documents.html')
                c = RequestContext(request, {'form_set': form_set,
                                             'cdir_components': cdir_components,
                                             'folder_dest': pathfile,
                                             'folder_content_url': get_url_folder_content(pathfile),
                                             'folder': folder,
                                             'manager': bmanager, })
                ret['data'] = t.render(c)
    else:
        ret['message'] = gettext(u"Invalid file path")
        ret['status'] = 'error'

    json_data = simplejson.dumps(ret)
    return HttpResponse(json_data)
Exemplo n.º 37
0
def fm_upload_view(request):
    pathfile = request.REQUEST.get('dir', None)
    ret = {}
    if pathfile:
        ppath = urllib.unquote(pathfile.rstrip('/'))
        path_dest = clean_path(ppath)
        if path_dest != ppath:
            ret['message'] = gettext(u"Incorrect path")
            ret['status'] = 'error'
        else:
            buser, bmanager = get_user_access_to_path(request.user, path_dest)
            folder = get_shared_folder(path_dest)
            if bmanager is False:
                ret['message'] = gettext(u"Access denied")
                ret['status'] = 'error'
            else:
                cdir_components = get_path_components(path_dest)
                if request.method == 'POST':
                    root_path = get_upload_library()
                    fa_set = formset_factory(ZornaFileAddForm, extra=2)
                    form_set = fa_set(request.POST, request.FILES)
                    if form_set.is_valid():
                        upload_files = {}
                        ifiles = []
                        for i in range(0, form_set.total_form_count()):
                            form = form_set.forms[i]
                            try:
                                f = request.FILES['form-' + str(i) + '-file']
                                s = os.path.splitext(f.name)
                                fname = u"%s%s" % (slugify(s[0]), s[1])
                                upload_files[fname] = {'pk': '', 'file': f, 'description':
                                                       form.cleaned_data['description'], 'tags': form.cleaned_data['tags']}
                            except:
                                continue
                        path = u"%s/%s" % (
                            root_path, urllib.unquote(path_dest))
                        bupload = False
                        for f, info in upload_files.iteritems():
                            file = ZornaFile(owner=request.user, modifier=request.user, description=info[
                                             'description'], tags=info['tags'], folder=path_dest.split('/')[0])
                            file.save()
                            destination = open(u"%s/%s,%s" % (
                                path, file.pk, f), 'wb+')
                            bupload = True
                            for chunk in info['file'].chunks():
                                destination.write(chunk)
                            destination.close()
                            ifiles.append({'name': f, 'description': info[
                                          'description']})
                        if bupload:
                            ret['message'] = gettext(
                                u"Files uploaded successfully")
                            # notify users
                            bnotify = request.POST.get('notify_users', 0)
                            if folder and folder.email_notification and (folder.email_notification == 1 or bnotify):
                                notify_users(request, folder, ifiles, True)
                        else:
                            ret['message'] = gettext(u"No file uploaded")
                        ret['status'] = 'success'
                        json_data = simplejson.dumps(ret)
                        return HttpResponse('<textarea>' + json_data + '</textarea>')
                    else:
                        ret['message'] = gettext(u"Invalid form")
                        ret['status'] = 'error'
                        t = loader.get_template(
                            'fileman/upload_documents.html')
                        c = RequestContext(request, {'form_set':
                                           form_set, 'cdir_components': cdir_components, 'folder_dest': pathfile, 'folder_content_url': get_url_folder_content(pathfile)})
                        ret['data'] = t.render(c)
                        json_data = simplejson.dumps(ret)
                        return HttpResponse('<textarea>' + json_data + '</textarea>')
                else:
                    fa_set = formset_factory(ZornaFileAddForm, extra=2)
                    form_set = fa_set()
                    ret['status'] = 'success'

                t = loader.get_template('fileman/upload_documents.html')
                c = RequestContext(request, {'form_set': form_set,
                                             'cdir_components': cdir_components,
                                             'folder_dest': pathfile,
                                             'folder_content_url': get_url_folder_content(pathfile),
                                             'folder': folder,
                                             'manager': bmanager, })
                ret['data'] = t.render(c)
    else:
        ret['message'] = gettext(u"Invalid file path")
        ret['status'] = 'error'

    json_data = simplejson.dumps(ret)
    return HttpResponse(json_data)
Exemplo n.º 38
0
def fm_multiple_upload_view(request):
    pathfile = request.REQUEST.get('dir', None)
    ret = {}
    if pathfile:
        ppath = urllib.unquote(pathfile.rstrip('/'))
        path_dest = clean_path(ppath)
        if path_dest != ppath:
            ret['message'] = gettext(u"Incorrect path")
            ret['status'] = 'error'
        else:
            buser, bmanager = get_user_access_to_path(request.user, path_dest)
            folder = get_shared_folder(path_dest)
            if bmanager is False:
                ret['message'] = gettext(u"Access denied")
                ret['status'] = 'error'
            else:
                cdir_components = get_path_components(path_dest)
                form = ZornaFileUploadForm(request.POST, request.FILES)
                if request.method == 'POST':
                    root_path = get_upload_library()
                    if form.is_valid():
                        path = u"%s/%s" % (
                            root_path, urllib.unquote(path_dest))
                        uploaded_file = request.FILES['file']
                        chunk = request.REQUEST.get('chunk', '0')
                        chunks = request.REQUEST.get('chunks', '0')
                        name = uploaded_file.name

                        temp_file = '%s/%s.part' % (path, name)
                        with open(temp_file, ('wb' if chunk == '0' else 'ab')) as f:
                            for content in uploaded_file.chunks():
                                f.write(content)

                        if int(chunk) + 1 >= int(chunks):
                            s = os.path.splitext(name)
                            file = ZornaFile(
                                owner=request.user, modifier=request.user, description='', folder=path_dest.split('/')[0])
                            file.save()
                            destination = u"%s/%s,%s" % (path, file.pk, name)
                            shutil.move(temp_file, destination)
                        if request.is_ajax():
                            response = HttpResponse(
                                '{"jsonrpc" : "2.0", "result" : null, "id" : "id"}')
                            response[
                                'Expires'] = 'Mon, 1 Jan 2000 01:00:00 GMT'
                            response[
                                'Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0'
                            response['Pragma'] = 'no-cache'
                            return response
                        else:
                            ret['status'] = 'success'
                else:
                    ret['status'] = 'success'
                t = loader.get_template(
                    'fileman/upload_multiple_documents.html')
                c = RequestContext(request, {
                                   'form': form,
                                   'cdir_components': cdir_components,
                                   'folder_dest': pathfile,
                                   'folder_content_url': get_url_folder_content(pathfile),
                                   'folder': folder,
                                   'language': settings.LANGUAGE_CODE[0:2]})
                ret['data'] = t.render(c)
    else:
        ret['message'] = gettext(u"Invalid file path")
        ret['status'] = 'error'

    json_data = simplejson.dumps(ret)
    return HttpResponse(json_data)