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