diff --git a/adm/templates/adm/adm_import_flow.html b/adm/templates/adm/adm_import_flow.html index ee62c7d..1a856bc 100644 --- a/adm/templates/adm/adm_import_flow.html +++ b/adm/templates/adm/adm_import_flow.html @@ -10,7 +10,7 @@
- + @@ -19,8 +19,8 @@ var userids = [{% for us in users %} "{{us.pk}}" {% if forloop.counter < users|length %}, {% endif %} {% endfor %}]; var groupids = [{% for g in groups %} "{{g.name}}" {% if forloop.counter < groups|length %}, {% endif %} {% endfor %}]; - var filesid = [{% for f in files %} "{{f.pk}}" {% if forloop.counter < files|length %}, {% endif %} {% endfor %}]; - var dirsid = [{% for d in dirs %} "{{d.pk}}" {% if forloop.counter < dirs|length %}, {% endif %} {% endfor %}]; + var files = [{% for f in files %} "{{f.pk}}" {% if forloop.counter < files|length %}, {% endif %} {% endfor %}]; + var dirids = [{% for d in dirs %} "{{d.pk}}" {% if forloop.counter < dirs|length %}, {% endif %} {% endfor %}]; $(document).ready(function(){ // FIRST CALL GROUPS, When Groups finished User will call by Groups @@ -28,6 +28,7 @@ //DEV addGroupFolder(); + //addDirs(dirids[0]); }) var groupcounter = 0; @@ -113,8 +114,9 @@ success: function(data){ console.log(data); if(data['status'] == true){ - - //addCloud(); + if(files[0] != undefined){ + addFiles(files[0]); + } } }, error: function(e){ @@ -123,10 +125,11 @@ }); } - function addCloud(){ + filecounter = 0; + function addFiles(fileid){ $("#cloud_process_cloud").show(); $.ajax({ - url: "{% url 'api:apiaddcloud' %}", + url: "{% url 'api:apiaddfile' %}", headers: { 'Authorization':'Token {{ ncid }}', "Access-Control-Allow-Origin" : "*" @@ -135,13 +138,50 @@ dataType: 'json', data: { 'agencyid' : {{agency.pk}}, + 'fileid' : fileid, }, success: function(data){ if(data['status'] == true){ - $("#groups_process_groups").append('

' + data['message'] + "

"); - groupcounter += 1; - if(groupcounter < groupids.length){ - //createAgencyGroups(groupids[groupcounter]); + $("#cloud_process_cloud").append('

' + data['message'] + "

"); + filecounter += 1; + if(filecounter < files.length){ + addFiles(files[filecounter]); + } + else { + if(dirids[0] != undefined){ + addDirs(dirids[0]); + } + } + } + }, + error: function(e){ + console.log(e); + } + }); + } + + dircounter = 0; + function addDirs(dirid){ + $("#cloud_process_cloud").show(); + $.ajax({ + url: "{% url 'api:apiadddir' %}", + headers: { + 'Authorization':'Token {{ ncid }}', + "Access-Control-Allow-Origin" : "*" + }, + method: 'POST', + dataType: 'json', + data: { + 'agencyid' : {{agency.pk}}, + 'dirid' : dirid, + }, + success: function(data){ + if(data['status'] == true){ + $("#cloud_process_cloud").append('

' + data['message'] + "

"); + dircounter += 1; + if(dircounter < dirids.length){ + console.log(dircounter < dirids.length); + addDirs(dirids[dircounter]); } else { $("#migfinished").show(); diff --git a/adm/views.py b/adm/views.py index fe1e6c9..f05c5c5 100644 --- a/adm/views.py +++ b/adm/views.py @@ -709,10 +709,10 @@ class AdmImportFlow(TemplateView): # DataFiles context.update({'files' : DataFile.objects.filter(agency=agency)}) - + # DataDirs - context.update({'dirs' : DataDir.objects.filter(agency=agency)}) - + context.update({'dirs' : DataDir.objects.filter(agency=agency).exclude(is_root=True)}) + # Groups of the Agency groups = Group.objects.all() ag_pk = str(agency.pk) diff --git a/api/urls.py b/api/urls.py index 60e76ad..161f555 100644 --- a/api/urls.py +++ b/api/urls.py @@ -17,7 +17,8 @@ urlpatterns = [ path('addgroup/', views.NCAddGroup, name="apiaddgroup"), path('adduser/', views.NCAddUser, name="apiadduser"), path('addgf/', views.NCAddGroupFolder, name="apiaddgf"), - path('addcloud/', views.NCAddDirsFiles, name="apiaddcloud"), + path('addfile/', views.NCAddFiles, name="apiaddfile"), + path('adddir/', views.NCAddDirs, name="apiadddir"), # EXTERNAL FROM NC path('logout/', views.apilogout, name="api-logout"), path('uschanged//', views.userChangedInNc, name="api-userchanged"), diff --git a/api/views.py b/api/views.py index 7944fd1..2cf1b9c 100644 --- a/api/views.py +++ b/api/views.py @@ -1,3 +1,4 @@ +from cloud.models import DataFile, DataDir from django.shortcuts import redirect from rest_framework.views import APIView from rest_framework.response import Response @@ -252,7 +253,8 @@ def NCAddGroupFolder(request): if request.method == "POST": agency = Agency.objects.get(pk=request.POST.get('agencyid')) data = { - "gid" : "agencymaingroupid_" + str(agency.pk) + "gid" : "agencymaingroupid_" + str(agency.pk), + "aid" : str(agency.pk) } headers = { 'Authorization': 'Bearer ' + request.COOKIES['nc_session_id'] @@ -263,13 +265,84 @@ def NCAddGroupFolder(request): return JsonResponse({"status" : "NO AUTH"}) +import os + ''' - Hier werden die Dateien und Ordner angelegt und entsprechende Zugriffsrechte der Gruppen gesetzt. + Hier werden die Dateien angelegt und entsprechende Zugriffsrechte der Gruppen gesetzt. ''' @api_view(['POST'], ) -def NCAddDirsFiles(request): +def NCAddFiles(request): if request.method == "POST": agency = Agency.objects.get(pk=request.POST.get('agencyid')) - print(agency) - pass - return JsonResponse({"status" : "NO AUTH"}) \ No newline at end of file + file_to_load = DataFile.objects.get(pk=request.POST.get('fileid')) + datadir_parent = None + datadir_parent_dirnames = [] + if(file_to_load.parent != None): + datadir_parent = file_to_load.parent + datadir_parent_dirnames = [file_to_load.parent.name] + + while(datadir_parent.parent != None): + datadir_parent_dirnames.append(datadir_parent.parent.name) + datadir_parent = datadir_parent.parent + ## Popping last Element + d_prestring = "" + if(len(datadir_parent_dirnames) > 0): + datadir_parent_dirnames.pop(len(datadir_parent_dirnames)-1) + # Turning Array around + datadir_parent_dirnames = datadir_parent_dirnames[::-1] + + # Dirs needed for the File + for d in datadir_parent_dirnames: + new_folder = d_prestring + "/" +d + r = requests.request("MKCOL", settings.NEXTCLOUD_URL + "remote.php/dav/files/admin/Agenturdaten_" + str(agency.pk)+ '/' + new_folder, auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API)) + d_prestring += "/" + d + + # Uplod the file! + final_file_path = settings.NEXTCLOUD_URL + "remote.php/dav/files/admin/Agenturdaten_"+ str(agency.pk) + "/" + d_prestring + "/" + file_to_load.name + r = requests.put(final_file_path, files={file_to_load.name : file_to_load.file.path}, auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API)) + if(len(r.text) == 0): + return JsonResponse({'status' : True, 'message': 'Datei ' + file_to_load.name + ' angelegt.'}) + else: + return JsonResponse({'status' : True, 'message': 'Datei ' + file_to_load.name + ' konnte nicht angelegt. Bitte manuell prüfen!'}) + + return JsonResponse({"status" : "NO AUTH"}) + + +''' + Hier werden die Dateien angelegt und entsprechende Zugriffsrechte der Gruppen gesetzt. +''' +@api_view(['POST'], ) +def NCAddDirs(request): + if request.method == "POST": + agency = Agency.objects.get(pk=request.POST.get('agencyid')) + dir_to_create = DataDir.objects.get(pk=request.POST.get('dirid')) + # Dir has no parent, create + if(len(dir_to_create.parent.name) == 0): + r = requests.request("MKCOL", settings.NEXTCLOUD_URL + "remote.php/dav/files/admin/Agenturdaten_" + str(agency.pk)+ '/' + dir_to_create.name, auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API)) + return JsonResponse({'status' : True, 'message': 'Ordner ' + dir_to_create.name + ' angelegt.'}) + # Dir has parents, start thinking :) + else: + datadir_parent = None + datadir_parent_dirnames = [] + if(dir_to_create.parent != None and len(dir_to_create.parent.name) > 0): + datadir_parent = dir_to_create.parent + datadir_parent_dirnames = [dir_to_create.parent.name] + + if(datadir_parent.parent != None): + while(datadir_parent.parent != None and len(datadir_parent.parent.name) > 0): + datadir_parent_dirnames.append(datadir_parent.parent.name) + datadir_parent = datadir_parent.parent + + if(len(datadir_parent_dirnames) > 0): + datadir_parent_dirnames = datadir_parent_dirnames[::-1] + d_prestring = "" + for d in datadir_parent_dirnames: + new_folder = d_prestring + "/" +d + r = requests.request("MKCOL", settings.NEXTCLOUD_URL + "remote.php/dav/files/admin/Agenturdaten_" + str(agency.pk)+ '/' + new_folder, auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API)) + d_prestring += "/" + d + + r = requests.request("MKCOL", settings.NEXTCLOUD_URL + "remote.php/dav/files/admin/Agenturdaten_" + str(agency.pk)+ '/' + d_prestring + "/" + dir_to_create.name, auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API)) + return JsonResponse({'status' : True, 'message': 'Ordner ' + dir_to_create.name + ' angelegt.'}) + + + return JsonResponse({'status' : False, 'message': 'AUTH ERROR'}) diff --git a/users/admin.py b/users/admin.py index d625cf5..bc7360e 100644 --- a/users/admin.py +++ b/users/admin.py @@ -4,7 +4,7 @@ from .priomodel import Prio from standards.models import StandardCommentRate, StandardComments from django.contrib.auth.models import Permission from message.models import Message -from cloud.models import DataFile +from cloud.models import DataFile, DataDir from organizer.models import AGContacts from timemanagement.models import Workday, Breaks, AbsenceReason, FreeDays, Absence from chat.models import ChatRoom @@ -26,6 +26,7 @@ admin.site.register(AgencyNetwork) admin.site.register(AGContacts) admin.site.register(AgencyNetworkPreperation) admin.site.register(DataFile) +admin.site.register(DataDir) admin.site.register(UserTime) admin.site.register(Workday) admin.site.register(Breaks)