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('/')
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('/')
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
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))
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)
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)
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))
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
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
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)
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)
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 []
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
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))
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))
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
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))
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))
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()
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()
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()
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 []
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
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
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))
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()
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()
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))
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 []
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 []
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()
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
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)
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)
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)
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)
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)
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)