From 3ca44156d01cd9b6ccad122de1506fedc4bb74f0 Mon Sep 17 00:00:00 2001
From: "a.schindlbeck" <a.schindlbeck@adito.de>
Date: Mon, 2 Nov 2020 10:38:22 +0100
Subject: [PATCH] Revert Revert #1060919 Calendar Fixes

---
 .../Appointment_entity/grantDeleteProcess.js  |  8 ++++++--
 .../Appointment_entity/grantUpdateProcess.js  | 10 ++++++++--
 .../recordcontainers/jdito/contentProcess.js  |  3 ++-
 .../recordcontainers/jdito/onDelete.js        | 20 ++++++++++++++-----
 4 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/entity/Appointment_entity/grantDeleteProcess.js b/entity/Appointment_entity/grantDeleteProcess.js
index 4caa2d99cfd..aef302f1112 100644
--- a/entity/Appointment_entity/grantDeleteProcess.js
+++ b/entity/Appointment_entity/grantDeleteProcess.js
@@ -2,6 +2,10 @@ import("system.vars");
 import("system.result");
 import("system.calendars");
 import("system.text");
+import("system.tools");
 
-var owner = text.decodeMS(JSON.parse(vars.get("$param.Entry_param"))["h"])[1].split(":")[1];
-result.string(calendars.hasPermission([owner], calendars.VEVENT, "WRITE"));
\ No newline at end of file
+
+var user = tools.getCurrentUser();
+var calUser = calendars.getCalendarUser(user["title"]);
+var calUserCn = text.decodeMS(calUser)[1].split(":")[1];
+result.string(calendars.hasPermission(calUserCn, calendars.VEVENT, "WRITE"));
\ No newline at end of file
diff --git a/entity/Appointment_entity/grantUpdateProcess.js b/entity/Appointment_entity/grantUpdateProcess.js
index 3562ea4a6c4..e6ac4c8426c 100644
--- a/entity/Appointment_entity/grantUpdateProcess.js
+++ b/entity/Appointment_entity/grantUpdateProcess.js
@@ -2,7 +2,13 @@ import("system.vars");
 import("system.result");
 import("system.calendars");
 import("system.text");
+import("system.tools");
+import("system.logging");
 
-var owner = text.decodeMS(JSON.parse(vars.get("$param.Entry_param"))["h"])[1].split(":")[1];
-result.string(calendars.hasPermission([owner], calendars.VEVENT, "WRITE"));
 
+var user = tools.getCurrentUser();
+var calUser = calendars.getCalendarUser(user["title"]);
+var calUserCn = text.decodeMS(calUser)[1].split(":")[1];
+var permitted = calendars.hasPermission(calUserCn, calendars.VEVENT, "WRITE");
+
+result.string(permitted);
diff --git a/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
index e56415a0faf..3d5ff22eafe 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
@@ -9,6 +9,7 @@ import("system.datetime");
 import("system.eMath");
 import("system.util");
 import("system.neon");
+import("system.text");
 
 var appointmentSelect = newSelect("APPOINTMENT_ID").from("AB_APPOINTMENTLINK");
 var appointmentUids;
@@ -77,7 +78,7 @@ function buildEntry(pEntry, pMasterentry)
     if(pEntry[calendars.ORGANIZER2] != undefined)
         var organizer = pEntry[calendars.ORGANIZER2]["paramvalue"];
     if(pEntry[calendars.USER2] != undefined)
-        var owner = pEntry[calendars.USER2]["paramvalue"];
+        var owner = JSON.stringify(pEntry[calendars.USER2]);
     var status = pEntry[calendars.STATUS];
     var location = pEntry[calendars.LOCATION];
     var reminder = pEntry[calendars.REMINDER_DURATION];
diff --git a/entity/Appointment_entity/recordcontainers/jdito/onDelete.js b/entity/Appointment_entity/recordcontainers/jdito/onDelete.js
index 4e0e5c7a5c1..6f6249aee33 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/onDelete.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/onDelete.js
@@ -1,20 +1,30 @@
+import("system.logging");
 import("Sql_lib");
 import("system.neon");
 import("system.calendars");
 import("system.vars");
 
-if (vars.exists("$param.Entry_param"))
+var uid;
+
+if (vars.get("$param.Entry_param") != null)
 {
     var entry = JSON.parse(vars.getString("$param.Entry_param"));
     var reccurenceid = entry[calendars.RECURRENCEID];
+    
     if (reccurenceid == undefined) 
         reccurenceid = null;
     
-    calendars.removeEntryByUID(calendars.VEVENT, entry[calendars.USER2]["cn"], entry[calendars.ID], reccurenceid)
+    uid = entry[calendars.ID];
+    calendars.removeEntryByUID(calendars.VEVENT, entry[calendars.USER2]["cn"], uid, reccurenceid);
+}
+else if(vars.get("$field.OWNER"))
+{
+    uid = vars.get("$field.UID");
+    calendars.removeEntryByUID(calendars.VEVENT, JSON.parse(vars.get("$field.OWNER"))["cn"], uid, vars.get("$field.RECURRENCEID"));
+}
     
     /**
      * Deletes ApointmentLinks referring to the deleted Appointment.
      */
-    newWhereIfSet("AB_APPOINTMENTLINK.APPOINTMENT_ID", entry[calendars.ID])
-            .deleteData();
-}
\ No newline at end of file
+    newWhereIfSet("AB_APPOINTMENTLINK.APPOINTMENT_ID", uid)
+            .deleteData();
\ No newline at end of file
-- 
GitLab