Datenmigration

This commit is contained in:
holger.trampe 2021-07-27 17:10:34 +02:00
parent 39759cfeb6
commit 43ef9ece43
5 changed files with 137 additions and 22 deletions

View File

@ -10,7 +10,7 @@
<div id="groups_process_groups"></div>
<h5 id="user_process" style="display: none;">Es werden {{users|length}} Benutzer angelegt und in die Gruppen gepackt. Die Nutzer müssen sich dann ein neues Passwort setzen.</h5>
<div id="user_process_user" style="display: none;"></div>
<h5 id="cloud_process" style="display: none;">Es werden Dateien und Ordner kopiert und mit Zugriffsrechten gesetzt.</h5>
<h5 id="cloud_process" style="display: none;">Es werden {{files|length}} Dateien und ({{dirids|length}}) Ordner angelegt und mit Zugriffsrechten gesetzt.</h5>
<div id="cloud_process_main" style="display: none;">Gruppenordner wird angelegt</div>
<div id="cloud_process_cloud" style="display: none;"></div>
</div>
@ -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('<p>' + data['message'] + "</p>");
groupcounter += 1;
if(groupcounter < groupids.length){
//createAgencyGroups(groupids[groupcounter]);
$("#cloud_process_cloud").append('<p>' + data['message'] + "</p>");
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('<p>' + data['message'] + "</p>");
dircounter += 1;
if(dircounter < dirids.length){
console.log(dircounter < dirids.length);
addDirs(dirids[dircounter]);
}
else {
$("#migfinished").show();

View File

@ -711,7 +711,7 @@ class AdmImportFlow(TemplateView):
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()

View File

@ -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/<str:uid>', views.apilogout, name="api-logout"),
path('uschanged/<str:uid>/<str:sid>', views.userChangedInNc, name="api-userchanged"),

View File

@ -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
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'})

View File

@ -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)