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 @@
Es werden {{users|length}} Benutzer angelegt und in die Gruppen gepackt. Die Nutzer müssen sich dann ein neues Passwort setzen.
- Es werden Dateien und Ordner kopiert und mit Zugriffsrechten gesetzt.
+ Es werden {{files|length}} Dateien und ({{dirids|length}}) Ordner angelegt und mit Zugriffsrechten gesetzt.
Gruppenordner wird angelegt
@@ -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)