import("Sql_lib"); import("system.db"); import("Attribute_lib"); import("system.vars"); import("system.result"); import("system.tools"); import("Util_lib"); import("Contact_lib"); import("JditoFilter_lib"); import("Employee_lib"); var users; if (vars.exists("$local.idvalues") && vars.get("$local.idvalues")) users = tools.getUsersByAttribute(tools.NAME, vars.get("$local.idvalues"), tools.PROFILE_FULL); else { var values = ["true", "false"]; if (vars.exists("$param.OnlyActives_param") && vars.get("$param.OnlyActives_param") == "true") values = ["true"]; users = tools.getUsersByAttribute(tools.ISACTIVE, values, tools.PROFILE_DEFAULT); } users = users.map(function (user) { return [ user[tools.NAME], user[tools.TITLE], user[tools.PARAMS][tools.ISACTIVE], user[tools.PARAMS][tools.FIRSTNAME], user[tools.PARAMS][tools.LASTNAME], user[tools.PARAMS][tools.EMAIL], user[tools.PARAMS][tools.EMAIL], user[tools.DESCRIPTION], user[tools.PARAMS][tools.CONTACTID], //8 user[tools.PARAMS].department, "", //password "", //confirm_password user[tools.ROLENAMES], //for filtering EmployeeUtils.sliceUserId(user[tools.NAME]), user[tools.PARAMS][tools.PHONE_ADDRESS] ]; }); var filter = vars.get("$local.filter"); //TODO: this is a workaround that filters the records manually, it should be possible to filter the users with a tools.* method var filterFields = ["UID", "TITLE", "ISACTIVE", "FIRSTNAME", "LASTNAME", "EMAIL_ADDRESS", "", "DESCRIPTION", "CONTACT_ID", "DEPARTMENT", "", "", "ROLE_FILTER", "$$$LOOKUPFIELD$$$"]; var filterFns = { "ROLE_FILTER" : function (pRecordVal, pFilterVal, pOperator) { if (!pRecordVal) pRecordVal = []; switch (pOperator) { case "EQUAL": return pRecordVal.indexOf(pFilterVal) !== -1; case "NOT_EQUAL": return pRecordVal.indexOf(pFilterVal) === -1; case "ISNULL": return pRecordVal.length === 0; case "ISNOTNULL": return pRecordVal.length !== 0; default: return false; } }, "$$$LOOKUPFIELD$$$" : function (pRecordValue, pFilterValue, pOperator, pRow) { if (pOperator == "CONTAINS") { pRow = [pRow[1], pRow[3], pRow[4], pRow[5]]; var filterValues = pFilterValue.split(" ").filter(function (val) {return val.trim();}); return filterValues.every(function (filterValue) { return pRow.some(function (fieldValue) { return (new RegExp(filterValue, "i")).test(fieldValue); }); }); } return false; } }; users = JditoFilterUtils.filterRecords(filterFields, users, filter.filter, filterFns); var order = vars.get("$local.order"); var columnOrder = { "TITLE.value" : 1, "ISACTIVE.value" : 2, "FIRSTNAME.value" : 3, "LASTNAME.value" : 4 }; var sortOrder = []; for (let field in order) { if (field in columnOrder) { sortOrder.push(columnOrder[field]); sortOrder.push(order[field] == "DOWN"); } } if (!sortOrder.length) //sort by login by default sortOrder = [1, false]; ArrayUtils.sortMulti(users, sortOrder); result.object(users);