From 3d7e393810fd260ad4973891712f0c2e1d15b12d Mon Sep 17 00:00:00 2001
From: "a.schindlbeck" <a.schindlbeck@adito.de>
Date: Wed, 8 May 2019 08:50:22 +0200
Subject: [PATCH] Calendar_lib fix

---
 process/Calendar_lib/process.js | 750 +-------------------------------
 1 file changed, 1 insertion(+), 749 deletions(-)

diff --git a/process/Calendar_lib/process.js b/process/Calendar_lib/process.js
index 0c8fafbd7c..2c0288ceaf 100644
--- a/process/Calendar_lib/process.js
+++ b/process/Calendar_lib/process.js
@@ -750,756 +750,8 @@ function _addEntryCondition(pConditions, pIndex, pValues)
 CalendarUtil.addEntryCondition = function(pConditions, pIndex, pValues)
 {
     _addEntryCondition(pConditions, pIndex, pValues);
-}
-/*
- * Liefert Events zu bestimmten Usern/Daten in einem Array.
- *
- * @param {Object} pFilter req
- * @param {String} pLanguage opt
- * @param {bool} pShortForm opt wenn true wird nur die kurzversion geladen
- *
- * @return {[]}
- *				[0] ID
- *				[1] Vordergrundfarbe
- *				[2] Hintergrundfarbe
- *				[3] Start
- *				[4] Ende
- *				[5] Betreff
- *				[6] Inhalt
- *				[7] User
- *				[8] Anzahl Verknüpfungen
- *				[9] Klassifikation (privat/öffentlich)
- */
-function getEvents( pFilter, pLanguage, pShortForm )
-{
-    if ( pFilter == "" )  pFilter = reset_filterEvent();
-    var tab = [];
-    var conditions = [];
-    var today = getDate(vars.getString("$sys.date"));
-    var conditioncount = 0;
-    var stati = [];
-    var user = undefined;
-    if ( pFilter.tentative == "true" )    stati.push(calendars.STATUS_TENTATIVE);
-    if ( pFilter.cancelled == "true" )    stati.push(calendars.STATUS_CANCELLED);
-    if ( pFilter.confirmed == "true" )
-        stati.push(mapCalendarStatus(calendars.STATUS_CONFIRMED, calendars.getBackendType() ));
-
-    if (getCalendarSystemType(calendars.VEVENT) == calendars.BACKEND_EXCHANGEWS && pFilter.free == "true")
-        stati.push(calendars.STATUS_FREE);
-
-    if ( pFilter.user != "" )	user = (pFilter.user).trim();
-
-    for ( var z = 0; z < stati.length; z++ )
-        _addEntryCondition(conditions, String(++conditioncount),
-        {
-            TYPE: calendars.VEVENT,
-            START: pFilter.datefrom,
-            END: pFilter.dateto,
-            USER: user,
-            STATUS: stati[z]
-        });
-
-    conditions["COUNT"] = String(conditioncount);
-
-    var entries = calendars.getExpandedEntries(conditions, pFilter.datefrom, pFilter.dateto);
-    for ( var i = 0;i < entries.length; i++)
-    {
-        for (var j = 0; j < entries[i].length; j++)
-        {
-            var entry = entries[i][j];
-            if( pFilter.category == "" || text.decodeMS(entry[calendars.CATEGORIES]).indexOf(pFilter.category) > -1 )
-            {
-                var entr = new Array;
-                var start = getDate(entry[calendars.DTSTART]);
-                var end = getDate(entry[calendars.DTEND]);
-
-                user = tools.getUserByAttribute(tools.CALENDARID, entry[calendars.USER2]["paramvalue"].substr("mailto:".length))
-                if(user == null) user = entry[calendars.USER2]["cn"];
-                else user = user[tools.TITLE]
-                entr[0] = text.encodeMS([ entry[calendars.ID], user, entry[calendars.RECURRENCEID]]);
-                if (end < today ) entr[1]	="-6710887" ;
-                else if (start > today) entr[1]	= "-16777216";
-                else entr[1]	= "-16744020" ;
-                entr[2] = "-1"
-                entr[3] = entry[calendars.ATTENDEES].length;
-                entr[4] = entry[calendars.DTSTART];
-                entr[5] = entry[calendars.DTEND];
-                entr[6] = entry[calendars.SUMMARY];
-
-                if (!pShortForm)
-                {
-                    entr[7] = getRealName([entry[calendars.ORGANIZER2]]);
-                    entr[8] = getRealName(entry[calendars.ATTENDEES]);
-                    entr[9] = getCalendarStatus( entry[calendars.STATUS], pLanguage );
-                    if (entry[calendars.LINKS] == undefined) entr[10] = "";
-                    else entr[10] = entry[calendars.LINKS];
-                    entr[11] = entry[calendars.DESCRIPTION];
-                }
-                tab.push( entr );
-            }
-        }
-    }
-    sortArray(tab, -1, 4, 1, 6 );
-    return tab;
-}
-
-/*
- * Liefert den echten Namen anhand des Logins zurück
- *
- * @param {Array}[]} pUserMap req pUserMap
- *
- * @return String
- */
-function getRealName(pUserMap)
-{
-    var resultName = [];
-    var RealNames = getRealNameObject(pUserMap);
-
-    for ( var realname in RealNames )   resultName.push(RealNames[realname]);
-    return resultName.join(", \n");
-}
-
-/*
- * Liefert den echten Namen anhand des Logins zurück
- *
- * @param {Array}[]} pUserMap req pUserMap
- *
- * @return Object
- */
-function getRealNameObject(pUserMap)
-{
-    var resultObject = {};
-    var realname = "";
-
-    for ( let i = 0; i < pUserMap.length; i++ )
-    {
-        let user = tools.getUserByAttribute(tools.CALENDARID, [pUserMap[i]["paramvalue"].substr("mailto:".length)])
-        if ( user != null )
-        {
-            if(vars.exists("$global.firstLastName") && vars.get("$global.firstLastName"))
-                realname = user[tools.PARAMS][tools.LASTNAME] + " " + user[tools.PARAMS][tools.FIRSTNAME];
-            else realname = user[tools.PARAMS][tools.FIRSTNAME] + " " + user[tools.PARAMS][tools.LASTNAME];
-        }
-        else //Der User existiert nicht im System
-        {
-            realname = pUserMap[i]["cn"] + " " + pUserMap[i]["paramvalue"];
-        }
-        resultObject[pUserMap[i]["cn"]] = realname;
-    }
-    return resultObject;
-}
-
-
-/*
- * Gibt an ob der User im Calendarobject vorhanden ist
- *
- * @param {Object} pEntry req Calendarobject
- * @param {String} pUser req Title
- *
- * @return Object
- */
-function isAffectedUser( pEntry, pUser)
-{
-    var usermap = pEntry[calendars.ATTENDEES];
-
-    for ( var i = 0; i < usermap.length; i++ )
-        if( usermap[i]["cn"] == pUser )
-            return true;
-    return false;
-}
-
-/*
- * Liefert das Datum ohne Urzeit zurück
- *
- * @param {String} datetimeIn req DatumZeit
- *
- * @return {date}
- */
-function getDate( datetimeIn )
-{
-    if ( datetimeIn != "")
-        return datetime.clearTime(datetimeIn);
-    else return "";
-}
-
-/*
- * Setzt den Aufgaben-Filter
- *
- * @param {Object} pFilter req
- *
- * @return {image}
- */
-function filterToDo( pFilter )
-{
-    var error = true;
-    var von = pFilter.datefrom;
-    var bis = pFilter.dateto;
-    if ( pFilter == "" )	pFilter =  reset_filterToDo();
-    do
-    {
-        vars.set("$local.relation_id", pFilter.user);
-        vars.set("$local.edt_von", pFilter.datefrom);
-        vars.set("$local.edt_bis", pFilter.dateto);
-        vars.set("$local.category", pFilter.category);
-        vars.set("$local.delegated", pFilter.delegated);
-        vars.set("$local.needs_action", pFilter.needs_action);
-        vars.set("$local.in_process", pFilter.in_process);
-        vars.set("$local.completed", pFilter.completed);
-        vars.set("$local.cancelled", pFilter.cancelled);
-        var res = swing.askUserQuestion(translate.text("Bitte Filterbedingungen setzen"), "DLG_TASK_FILTER");
-        if( res != null )
-        {
-            pFilter.user =      res["DLG_TASK_FILTER.relation_id"];
-            pFilter.datefrom =  res["DLG_TASK_FILTER.edt_von"];
-            pFilter.dateto =    res["DLG_TASK_FILTER.edt_bis"];
-            pFilter.category =  res["DLG_TASK_FILTER.category"];
-            pFilter.delegated = res["DLG_TASK_FILTER.delegated"];
-            pFilter.needs_action = res["DLG_TASK_FILTER.needs_action"];
-            pFilter.in_process = res["DLG_TASK_FILTER.in_process"];
-            pFilter.completed = res["DLG_TASK_FILTER.completed"];
-            pFilter.cancelled = res["DLG_TASK_FILTER.cancelled"];
-            if (pFilter.datefrom != "" && pFilter.dateto != "" && pFilter.dateto >= pFilter.datefrom ) error = false;
-            else question.showMessage(translate.text("Bitte Datumseingabe prüfen!"))
-        }
-        else
-        {
-            pFilter.datefrom = von;
-            pFilter.dateto = bis;
-            error = false;
-        }
-    }
-    while ( error )
-    return pFilter;
-}
-
-/*
- * Setzt den Aufgaben-Filter
- *
- * @param {Object} pFilter req
- *
- * @return {image}
- */
-function filterToDo_Neon( pFilter )
-{
-    var error = true;
-    var von = pFilter.datefrom;
-    var bis = pFilter.dateto;
-    if ( pFilter == "" )	pFilter =  reset_filterToDo();
-    do
-    {
-        var prompts = {
-            FILTER_TEXT: translate.text("Bitte Filterbedingungen setzen"),
-            RESPONSIBLE: pFilter.user,
-            DATE_FROM: pFilter.datefrom,
-            DATE_TO: pFilter.dateto,
-            CATEGORY_TODO: pFilter.category,
-            DELEGATED: pFilter.delegated,
-            NEEDS_ACTION: pFilter.needs_action,
-            IN_PROCESS: pFilter.in_process,
-            COMPLETED: pFilter.completed,
-            CANCELLED: pFilter.cancelled
-        }
-
-        var buttons = {
-            "ok" : translate.text("OK"),
-            "": translate.text("Abbrechen")
-            };
-        var defaultButton = "ok";
-
-        var res = question.openDialog("DLG_FILTER_TODO_Neon", prompts, buttons, defaultButton);
-
-        if( res.button != null )
-        {
-            pFilter.user =      res.RESPONSIBLE;
-            pFilter.datefrom =  res.DATE_FROM;
-            pFilter.dateto =    res.DATE_TO;
-            pFilter.category =  res.CATEGORY_TODO;
-            pFilter.delegated = res.DELEGATED;
-            pFilter.needs_action = res.NEEDS_ACTION;
-            pFilter.in_process = res.IN_PROCESS;
-            pFilter.completed = res.COMPLETED;
-            pFilter.cancelled = res.CANCELLED;
-            if (pFilter.datefrom != "" && pFilter.dateto != "" && pFilter.dateto >= pFilter.datefrom ) error = false;
-            else question.showMessage(translate.text("Bitte Datumseingabe prüfen!"))
-        }
-        else
-        {
-            pFilter.datefrom = von;
-            pFilter.dateto = bis;
-            error = false;
-        }
-    }
-    while ( error )
-    return pFilter;
-}
-
-
-/*
- * Anzeige des Aufgaben-Filter
- *
- * @param {Object} pFilter req
- *
- * @return string Anzeige
- */
-function show_filterToDo(pFilter)
-{
-    var retstring = "";
-    var userp = tools.getUser( pFilter.user )[tools.PARAMS];
-    if (pFilter.user != "") retstring = (translate.text("Aufgaben von") + " " + userp[tools.FIRSTNAME] + " " + userp[tools.LASTNAME]);
-    if (pFilter.datefrom != "") retstring += ", " + datetime.toDate(pFilter.datefrom, translate.text("dd.MM.yyyy"));
-    if (pFilter.dateto != "") retstring += " - " + datetime.toDate(pFilter.dateto, translate.text("dd.MM.yyyy"));
-    if (pFilter.category != "") retstring += ", " + translate.text("Kategorie") + " " + pFilter.category;
-    if (pFilter.delegated == "true") retstring += ", " + translate.text("delegiert");
-    if (pFilter.needs_action == "true") retstring += ", " + translate.text("Nicht begonnen");
-    if (pFilter.in_process == "true") retstring += ", " + translate.text("In Bearbeitung");
-    if (pFilter.completed == "true") retstring += ", " + translate.text("Erledigt");
-    if (pFilter.cancelled == "true") retstring += ", " + translate.text("Zurückgestellt");
-
-    return retstring
-}
-
-/*
- * Setzt den Aufgaben-Filter zurück
- *
- * @return {filter}
- */
-function reset_filterToDo()
-{
-    var today = getDate (vars.getString("$sys.date"));
-
-    return pFilter =  {
-        user: vars.getString("$sys.user"),
-        datefrom: String(eMath.subInt(today, 720 * datetime.ONE_DAY)),
-        dateto: String(eMath.addInt(eMath.addInt(today, 3 * datetime.ONE_DAY)
-            ,datetime.ONE_DAY - datetime.ONE_MINUTE)),
-        category: "",
-        delegated: "",
-        needs_action: "true",
-        in_process: "true",
-        completed: "",
-        cancelled: ""
-    };
-}
-
-/*
- * Setzt den Event-Filter
- *
- * @param {Object} pFilter req
- *
- * @return {image}
- */
-function filterEvent( pFilter )
-{
-    var error = true;
-    var von = pFilter.datefrom;
-    var bis = pFilter.dateto;
-    if ( pFilter == "" )	pFilter =  reset_filterEvent();
-    do
-    {
-        vars.set("$local.relation_id", pFilter.user);
-        vars.set("$local.edt_von", pFilter.datefrom);
-        vars.set("$local.edt_bis", pFilter.dateto);
-        vars.set("$local.category", pFilter.category);
-        vars.set("$local.tentative", pFilter.tentative);
-        vars.set("$local.confirmed", pFilter.confirmed);
-        vars.set("$local.cancelled", pFilter.cancelled);
-        vars.set("$local.free", pFilter.free);
-        var res = swing.askUserQuestion(translate.text("Bitte Filterbedingungen setzen"), "DLG_EVENT_FILTER");
-        if( res != null )
-        {
-            pFilter.user =      res["DLG_EVENT_FILTER.relation_id"];
-            pFilter.datefrom =  res["DLG_EVENT_FILTER.edt_von"];
-            pFilter.dateto =    res["DLG_EVENT_FILTER.edt_bis"];
-            pFilter.category =  res["DLG_EVENT_FILTER.category"];
-            pFilter.tentative = res["DLG_EVENT_FILTER.tentative"];
-            pFilter.confirmed = res["DLG_EVENT_FILTER.confirmed"];
-            pFilter.cancelled = res["DLG_EVENT_FILTER.cancelled"];
-            pFilter.free      = res["DLG_EVENT_FILTER.free"];
-            if (pFilter.datefrom != "" && pFilter.dateto != "" && pFilter.dateto >= pFilter.datefrom ) error = false;
-            else question.showMessage(translate.text("Bitte Datumseingabe prüfen!"))
-        }
-        else
-        {
-            pFilter.datefrom = von;
-            pFilter.dateto = bis;
-            error = false;
-        }
-    }
-    while ( error )
-    return pFilter;
-}
-
-/*
- * Setzt den Event-Filter
- *
- * @param {Object} pFilter req
- *
- * @return {image}
- */
-function filterEvent_Neon( pFilter )
-{
-    var error = true;
-    var von = pFilter.datefrom;
-    var bis = pFilter.dateto;
-    if ( pFilter == "" )	pFilter =  reset_filterEvent();
-    do
-    {
-        var buttons = {
-            "ok" : translate.text("OK"),
-            "": translate.text("Abbrechen")
-        };
-        var defaultButton = "ok";
-
-        var prompts = {
-            FILTER_TEXT: translate.text("Bitte Filterbedingungen setzen"),
-            RESPONSIBLE_APPOINTMENT: pFilter.user,
-            DATE_FROM: pFilter.datefrom,
-            DATE_TO: pFilter.dateto,
-            CATEGORY_APPOINTMENT: pFilter.category,
-            TENTATIVE: pFilter.tentative,
-            CONFIRMED: pFilter.confirmed,
-            CANCELLED: pFilter.cancelled
-        }
-        var res = question.openDialog("DLG_FILTER_APPOINTMENT_Neon", prompts, buttons, defaultButton);
-        if( res.button != null )
-        {
-            pFilter.user =      res.RESPONSIBLE_APPOINTMENT;
-            pFilter.datefrom =  res.DATE_FROM;
-            pFilter.dateto =    res.DATE_TO;
-            pFilter.category =  res.CATEGORY_APPOINTMENT;
-            pFilter.tentative = res.TENTATIVE;
-            pFilter.confirmed = res.CONFIRMED;
-            pFilter.cancelled = res.CANCELLED;
-            if (pFilter.datefrom != "" && pFilter.dateto != "" && pFilter.dateto >= pFilter.datefrom ) error = false;
-            else question.showMessage(translate.text("Bitte Datumseingabe prüfen!"))
-        }
-        else
-        {
-            pFilter.datefrom = von;
-            pFilter.dateto = bis;
-            error = false;
-        }
-    }
-    while ( error )
-    return pFilter;
-}
-
-/*
- * Anzeige des Event-Filter
- *
- * @param {Object} pFilter req
- *
- * @return string Anzeige
- */
-function show_filterEvent(pFilter)
-{
-    var retstring = "";
-
-    var userp = tools.getUser( pFilter.user )[tools.PARAMS];
-    if (pFilter.user != "") retstring = translate.text("Termine von") + " " + userp[tools.FIRSTNAME] + " " + userp[tools.LASTNAME];
-    if (pFilter.datefrom != "") retstring += ", " + datetime.toDate(pFilter.datefrom, translate.text("dd.MM.yyyy"));
-    if (pFilter.dateto != "") retstring += " - " + datetime.toDate(pFilter.dateto, translate.text("dd.MM.yyyy"));
-    if (pFilter.category == "true") retstring += ", " + translate.text("Kategorie") + " " + pFilter.category;
-    if (pFilter.tentative == "true") retstring += ", " + translate.text("Vorläufig");
-    if (pFilter.confirmed == "true") retstring += ", " + translate.text("Bestätigt");
-    if (pFilter.cancelled == "true") retstring += ", " + translate.text("Abgesagt");
-
-    return retstring
-}
-
-/*
- * Setzt den Event-Filter zurück
- *
- * @return {filter}
- */
-function reset_filterEvent()
-{
-    var today = getDate (vars.getString("$sys.date"));
-
-    return pFilter =  {
-        user: vars.getString("$sys.user"),
-        datefrom: String(today), //nur die Termine ab heute anzeigen,
-        //die von vor einer Woche sind uninteressant
-        dateto: String(eMath.addInt(eMath.addInt(today, datetime.ONE_WEEK)
-            ,datetime.ONE_DAY - datetime.ONE_MINUTE)),
-        category: "",
-        tentative: "true",
-        confirmed: "true",
-        cancelled: "",
-        free: "true"
-    };
-}
-
-/*
- * Setzt den Aufgaben-Filter in Tab Aufgaben
- *
- * @return {image}
- */
-function filterLinkedToDo()
-{
-    var filtervalues = ["", "false"];
-    vars.set("$local.CalenderUser", getCalenderUser( calendars.RIGHT_READ_TASK ));
-
-    //Vorbelegen der Werte, wenn bereits gewählt wurde:
-    if(vars.exists("$image.FilterValuesT"))
-    {
-        filtervalues = vars.get("$image.FilterValuesT");
-        vars.set("$local.relation_id", filtervalues[0]);
-        vars.set("$local.done", filtervalues[1]);
-    }
-
-    var res = swing.askUserQuestion(translate.text("Bitte Filterbedingungen setzen"), "DLG_TASK_DATE_LINKED_FILTER");
-
-    if( res != null && res != undefined && res != "")
-    {
-        filtervalues[0] = res["DLG_TASK_DATE_LINKED_FILTER.relation_id"];
-        filtervalues[1] = res["DLG_TASK_DATE_LINKED_FILTER.done"]
-    }
-    vars.set("$image.FilterValuesT", filtervalues );
-
-    return(filtervalues);
-}
-
-/*
- * Setzt den Aufgabe-Filter zurück
- *
- * @return {image}
- */
-function resetfilterLinkedToDo()
-{
-    var filtervalues = ["", "false"];
-
-    vars.set("$image.FilterValuesT", filtervalues );
-
-}
-
-/*
- * setzt die Kalenderrechte
- *
- * @return {void}
- */
-function setCalendarGrant()
-{
-    calendars.resetCalendarUser();
-    var user_read_todo = [];
-    var user_write_todo = [];   // ["Admin"]
-    var user_read_event = [];
-    var user_write_event = [];
-    var tree = {};
-    var data = db.table("select THEMEID, THEME.THEME_ID, LOGIN, STATUS from THEME "
-        + " left join EMPLOYEE on EMPLOYEE.THEME_ID = THEMEID left join RELATION on RELATION_ID = RELATIONID and STATUS = 1"
-        +" where KIND = 2");
-    for ( let i = 0; i < data.length; i++)
-    {
-        if ( tree[data[i][0]] == undefined )    tree[data[i][0]] = {
-            pid: data[i][1],
-            isuser: false
-        };
-        if ( data[i][2] != "" && data[i][3] != "" )     tree[data[i][2]] = {
-            pid: data[i][0],
-            isuser: true
-        };
-    }
-
-    var user = vars.getString("$sys.user");
-    // Lese- und Schreibrechte auf Kalender aus Datentabelle holen
-    data = db.table("select HASRIGHTFOR, TODO_RIGHTS, EVENT_RIGHTS from AOSYS_CALENDAR_RIGHTS where LOGIN = '" + user + "'");
-    for ( var i = 0; i < data.length; i++ )
-        if(tree[data[i][0]] != undefined)
-            tree[data[i][0]].grants = data[i].slice(1);
-
-    for ( login in tree )
-    {
-        if( tree[login].isuser )
-        {
-            var grantstodo = __getGrants( login, 0 );
-            var grantsevent = __getGrants( login, 1 );
-            if ( grantstodo.length + grantsevent.length > 0 )
-            {
-                if ( grantstodo == "1" || grantstodo == "3")  user_read_todo.push(login);
-                if ( grantstodo == "2" || grantstodo == "3")  user_write_todo.push(login);
-                if ( grantsevent == "1" || grantsevent == "3")  user_read_event.push(login);
-                if ( grantsevent == "2" || grantsevent == "3")  user_write_event.push(login);
-            }
-        }
-    }
-    calendars.setCalendarUser(user_read_todo, calendars.RIGHT_READ_TASK, true, calendars.SORTSTRATEGY_NATURAL );
-    calendars.setCalendarUser(user_write_todo, calendars.RIGHT_WRITE_TASK, true, calendars.SORTSTRATEGY_NATURAL );
-    calendars.setCalendarUser(user_read_event, calendars.RIGHT_READ_APPOINTMENT, true, calendars.SORTSTRATEGY_NATURAL );
-    calendars.setCalendarUser(user_write_event, calendars.RIGHT_WRITE_APPOINTMENT, true, calendars.SORTSTRATEGY_NATURAL );
-
-    //********** Ressourcen in Kalender einfügen ************
-    var ressource = tools.getUsersWithRole("PROJECT_Ressource");
-    calendars.setCalendarUser(  ressource, calendars.RIGHT_READ_APPOINTMENT | calendars.RIGHT_WRITE_APPOINTMENT  );
-
-    //add all users from support-role since support-action-tasks (sp_supportAktionen) generates tasks for all support-role members
-    //and if you're a member you are allowed to edit these
-    if (tools.hasRole(user, "PROJECT_Support"))
-    {
-        var support = tools.getUsersWithRole("PROJECT_Support");
-        calendars.setCalendarUser(  support, calendars.RIGHT_WRITE_TASK | calendars.RIGHT_READ_TASK  );
-    }
-
-    function __getGrants( pKey, pIndex )
-    {
-        var grants = [];
-        if ( tree[pKey].grants != undefined && tree[pKey].grants[pIndex]) grants = tree[pKey].grants[pIndex];
-        else if ( tree[pKey].pid != "" )   grants = __getGrants( tree[pKey].pid, pIndex );
-        return grants;
-    }
-}
-
-/*
- * setzt Recht für alle Kalender
- *
- * @return {void}
- */
-function setAllCalendarGrant()
-{
-    calendars.resetCalendarUser();
-    var users = tools.getStoredUsers();
-    var calendar_user = [];
-    for ( var i = 0; i < users.length; i++ )    calendar_user.push( users[i][1] );
-    calendars.setCalendarUser(calendar_user, calendars.RIGHT_READ_TASK | calendars.RIGHT_WRITE_TASK, false, calendars.SORTSTRATEGY_NATURAL );
-}
-
-/*
- * gibt die Logins der user, die den übergebenen User als Attribute eingetragen haben, zurück
- *
- * @param {[]} pUsers req Logins
- * @param {String []} pAttrName req AttributeName für Employee
- * @param {String []} pFields opt
- *
- * @return {String []} Logins
- */
-function getUsersbyAttr( pUsers, pAttrName, pFields )
-{
-    if (typeof(pAttrName) == "string") pAttrName = [pAttrName]
-
-    if ( pFields == undefined )
-    {
-        pFields = ["LOGIN"];
-    }
-
-    var sqlstr = "select " + pFields.join(", ") + " from ATTRLINK join ATTR on ATTRLINK.ATTR_ID = ATTRID and OBJECT_ID = 12 "
-    + "and ATTRNAME in ('" + pAttrName.join("','") + "') "
-    + " join EMPLOYEE on EMPLOYEEID = ATTRLINK.ROW_ID join RELATION on RELATION_ID = RELATIONID join PERS on PERS_ID = PERSID"
-    + " where VALUE_ID in (select EMPLOYEEID from EMPLOYEE where LOGIN in ('" + pUsers.join("','") + "'))"
-    + "";
-
-    if(pFields.length == 1)
-        return db.array(db.COLUMN, sqlstr);
-    else
-        return db.table(sqlstr);
-}
-
-/*
- * Gibt die Anzahl der verknüpften Aufgaben und Termine zurück.
- *
- * @param {String} pID req
- * @param {String} pFrame req
- *
- * @return {String} text
- */
-function countLinkedTodoEvent(pID, pFrame)
-{
-    var today = getDate (vars.getString("$sys.date"));
-    var datefrom = String(today);
-    var dateto = String(eMath.addInt(today, datetime.ONE_WEEK));
-
-    var str = "select count(distinct ELEMENTUID) from ASYS_CALENDARLINK join ASYS_CALENDARBACKEND on ELEMENTUID = ASYS_CALENDARLINK.ENTRYID "
-    + " where FRAME = 'comp." + pFrame + "' and ELEMENTUID is not null and DBID = '" + pID + "'";
-    var rettask = db.cell(str + "and ENTRYTYPE = " + calendars.VTODO + " and STATUS in ('"
-        + mapCalendarStatus(calendars.STATUS_NEEDSACTION, calendars.getBackendTypeTasks() ) + "', '"
-        + mapCalendarStatus(calendars.STATUS_INPROCESS, calendars.getBackendTypeTasks() ) + "')");
-
-    var eventStatusList = [
-         mapCalendarStatus(calendars.STATUS_CONFIRMED, calendars.getBackendType() )
-        ,mapCalendarStatus(calendars.STATUS_TENTATIVE, calendars.getBackendType() )
-    ];
-
-    if (calendars.getBackendType() == calendars.BACKEND_EXCHANGEWS)
-        eventStatusList.push(calendars.STATUS_FREE);
-
-    var retevent = db.cell([str + " and ENTRYTYPE = " + calendars.VEVENT + " and STATUS in ('" + eventStatusList.join("', '") + "')"
-            + " and DTSTART >= ? and DTEND <= ?",
-        [ [ String(datefrom), SQLTYPES.DATE ],  [String(dateto), SQLTYPES.DATE ] ]]);
-
-    result.string(translate.withArguments("&Aufg / Term (%0/%1)", [rettask, retevent]));
-}
-
-/*
- * Gibt die Anzahl der verknüpften Aufgaben zurück.
- *
- * @param {String} pID req
- * @param {String} pFrame req
- *
- * @return {String} text
- */
-function countLinkedTodo(pID, pFrame)
-{
-    var str = "select count(distinct ELEMENTUID) "
-    + "from ASYS_CALENDARLINK "
-    + "join ASYS_CALENDARBACKEND on ELEMENTUID = ASYS_CALENDARLINK.ENTRYID "
-    + " where FRAME = 'comp." + pFrame + "' "
-    + "and ELEMENTUID is not null and DBID = '" + pID + "'";
-
-    var rettask = db.cell(str + "and ENTRYTYPE = " + calendars.VTODO
-        + " and  STATUS in ('"
-        + mapCalendarStatus(calendars.STATUS_NEEDSACTION, calendars.getBackendTypeTasks() ) + "', '"
-        + mapCalendarStatus(calendars.STATUS_INPROCESS, calendars.getBackendTypeTasks() ) + "')"
-        + "");
-
-    result.string(translate.withArguments("&Aufgaben (%0)", [rettask]));
-}
-
-/*
- * Gibt die Überschneidungen von Termine zurück.
- *
- * @param {Date} pStart req
- * @param {Date} pEnd req
- * @param {Array} pUsers req
- *
- * @return {String Array} Termine
- */
-function getOverlappingEvents(pStart, pEnd, pUsers  )
-{
-    var resultEvents = new Array();
-    var users = pUsers;
-    if (calendars.getBackendType() == calendars.BACKEND_DB && pStart != "" && pEnd != "" && users.length > 0)
-    {
-        calendars.clearCache();
-        for (var u = 0; u < users.length; u++)
-        {
-            var localuid = vars.get("$image.entry")[calendars.ID]
-            var condition = new Array();
-            condition["COUNT"] = "1";
-            condition["TYPE_1"] = calendars.VFREEBUSY;
-            condition["USER_1"] = users[u][0];
-            condition["START_1"] = pStart;
-            condition["END_1"] = pEnd;
+} 
 
-            var fbsall = calendars.getEntries(condition);
-            for (var j = 0; j < fbsall.length; j++)
-            {
-                var fbs = fbsall[j];
-                for (var i = 0; i < fbs.length; i++)
-                {
-                    var next = fbs[i];
-                    var uid = next[calendars.ID];
-                    var sum = next[calendars.SUMMARY];
-                    if (uid != localuid)
-                    {
-                        var freebusy = next[calendars.FREEBUSY];
-                        var freebusyDec = text.decodeMS(freebusy);
-                        var match = false;
-                        for (var k = 0; k < freebusyDec.length; k++)
-                        {
-                            var freebusyInstance = text.decodeMS(freebusyDec[k]);
-CalendarUtil.addEntryCondition = function(pConditions, pIndex, pValues)
-{
-    _addEntryCondition(pConditions, pIndex, pValues);
-}
 /*
  * Liefert Events zu bestimmten Usern/Daten in einem Array.
  *
-- 
GitLab