from django.shortcuts import render, redirect from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView from django.contrib.auth.models import User from django.contrib.auth.decorators import login_required from django.views.generic import TemplateView from .models import Data from django.views.generic.edit import FormView from .forms import CloudAddFileForm from django.conf import settings from django.core.files.storage import default_storage from digitaleagentur.settings import BASE_DIR from django.http import JsonResponse import os from .models import DataDir, DataFile from datetime import datetime from users.models import AgencyGroup @login_required def CloudMain(request, pk): diragency = [] alldirs = [] context = {} breadcrump = [] files = [] if(pk == "first"): diragency = list(DataDir.objects.filter(is_root=True, agency=request.user.profile.agency))[0] alldirs = DataDir.objects.filter(is_root=False, agency=request.user.profile.agency, parent=diragency).order_by("name") context = { 'active_link' : 'cloud', 'dirs' : alldirs, 'parentid' : diragency.pk, 'files' : DataFile.objects.filter(parent=diragency, agency=request.user.profile.agency), 'agencygroups' : AgencyGroup.objects.filter(agency=request.user.profile.agency) } else: # CHECK IF USER HAS RIGHTS TO SEE THIS DIR groupsofdir = list(DataDir.objects.filter(pk=pk, agency=request.user.profile.agency))[0] userisingroup = False if len(groupsofdir.visibleby.all()) == 0: userisingroup = True else: for ag in groupsofdir.visibleby.all(): if ag.group in request.user.groups.all(): userisingroup = True if userisingroup: alldirs = DataDir.objects.filter(is_root=False, agency=request.user.profile.agency, parent=pk).order_by("name") vieweddir = list(DataDir.objects.filter(pk=pk, agency=request.user.profile.agency))[0] singleObj = DataDir.objects.get(pk=pk) while( singleObj.is_root != True): breadcrump.append(singleObj) singleObj = DataDir.objects.get(pk=singleObj.parent.pk) breadcrump = breadcrump[::-1] context = { 'active_link' : 'cloud', 'dirs' : alldirs, 'parentid' : pk, 'breadcrump' : breadcrump, 'files' : DataFile.objects.filter(parent=vieweddir, agency=request.user.profile.agency), 'agencygroups' : AgencyGroup.objects.filter(agency=request.user.profile.agency) } else: context = { 'active_link' : 'cloud', } return render(request, 'cloud/noentrie.html', context) return render(request, 'cloud/cloud_main.html', context) @login_required def adddirbyajax(request, parent): success = True data = {} if(request.method == "GET"): # NEW DIR if(request.GET.get("action") == "adddir"): parentid = request.GET.get("parent") newdirname = request.GET.get("newdirname") parent_obj = DataDir.objects.get(pk=parentid, agency=request.user.profile.agency) tempdir = DataDir(name=newdirname, parent=parent_obj, agency=request.user.profile.agency, owner=request.user) tempdir.save() parent_obj.dirs.add(tempdir) parent_obj.save() # RETURN DIRNAME elif(request.GET.get("action") == "getname_dir"): dirobj = DataDir.objects.get(pk=request.GET.get('id'), agency=request.user.profile.agency) data = {'dirname' : dirobj.name} # RETURN COMPLETE AGENCY DIR LIST elif(request.GET.get("action") == "getdirlist"): data = {'agencydirlist' : loadAgencyDirList(request)} # RETURN FILENAME elif(request.GET.get("action") == "getname_file"): fileobj = DataFile.objects.get(pk=request.GET.get('id'), agency=request.user.profile.agency) data = {'filename' : fileobj.name} # DELETE FILE elif(request.GET.get("action") == "del_file"): DataFile.objects.filter(pk=request.GET.get('id')).delete() # CHANGE DIR NAME elif(request.GET.get("action") == "change_dir_name"): dirobj = DataDir.objects.get(pk=request.GET.get('id'), agency=request.user.profile.agency) dirobj.name = request.GET.get("newdirname") dirobj.date_last_modified = datetime.now() dirobj.save() # DELETE DIR elif(request.GET.get("action") == "del_dir"): try: DataFile.objects.filter(parent=request.GET.get('id'), agency=request.user.profile.agency).delete() DataDir.objects.filter(parent=request.GET.get('id'), agency=request.user.profile.agency).delete() DataDir.objects.get(pk=request.GET.get('id'), agency=request.user.profile.agency).delete() except: success = False # MOVE DIR elif(request.GET.get("action") == "movefile"): tempdatafile = DataFile.objects.get(pk=request.GET.get('fileid')) tempdatafile.parent = DataDir.objects.get(pk=request.GET.get('newpar')) tempdatafile.date_last_modified = datetime.now() tempdatafile.save() # GROUPS # DIR elif(request.GET.get("action") == "changedirgroups"): dirid = request.GET.get('dirid') groupid = request.GET.get('groupid') value = request.GET.get('value') if(value == "true"): DataDir.objects.get(pk=dirid).visibleby.add(AgencyGroup.objects.get(pk=groupid)) else: DataDir.objects.get(pk=dirid).visibleby.remove(AgencyGroup.objects.get(pk=groupid)) # GET GROUPS elif(request.GET.get("action") == "getgroupsofdir"): dirid = request.GET.get('dirid') allgroupsofdir = DataDir.objects.get(pk=dirid).visibleby.all() grouopsid = [] for ag in allgroupsofdir: grouopsid.append({"id" : ag.pk}) data = {"gdir" : grouopsid} elif request.method == 'POST': tempdir = False tempdir = DataDir.objects.get(pk=parent) tempdatafile = DataFile(file=request.FILES['uploadedfile'], name=request.FILES['uploadedfile'].name, owner=request.user, parent=tempdir, agency=request.user.profile.agency) tempdatafile.save() return JsonResponse({"success" : success, "data" : data}) def loadAgencyDirList(request): alldirs = [] diragency = list(DataDir.objects.filter(is_root=True, agency=request.user.profile.agency))[0] alldirs_root = DataDir.objects.filter(is_root=False, agency=request.user.profile.agency, parent=diragency).order_by("name") for d in alldirs_root: alldirs.append({"id" : d.pk, "parent" : "", "name" : d.name, 'subdirs' : getsubdirs(request, d.pk)}) return alldirs def getsubdirs(request, dirid): subdirs = [] actid = False if(isinstance(dirid, DataDir)): actid = dirid.pk else: actid = dirid alldirs_sub = DataDir.objects.filter(is_root=False, agency=request.user.profile.agency, parent=dirid).order_by("name") for subdir in alldirs_sub: tempsubsubdir = DataDir.objects.filter(is_root=False, agency=request.user.profile.agency, parent=subdir).order_by("name") if(len(tempsubsubdir) > 0): subdirs.append({"id" : subdir.pk, "parent" : actid, "name" : subdir.name, 'subdirs' : getsubdirs(request, subdir)}) else: subdirs.append({"id" : subdir.pk, "parent" : actid, "name" : subdir.name, 'subdirs' : []}) return subdirs