Name
sn_sow_collab.SOWSidebarChatUtilsSNC
Description
No description available
Script
var SOWSidebarChatUtilsSNC = Class.create();
SOWSidebarChatUtilsSNC.prototype = {
initialize: function() {},
TABLES: {
SYS_CS_COLLAB_RECORD: 'sys_cs_collab_record',
INCIDENT: 'incident',
SYS_USER_HAS_ROLE: 'sys_user_has_role'
},
FIELDS: {
TABLE: 'table',
DOCUMENT: 'document',
SYS_ID: 'sys_id',
COLLAB_CHAT: 'collab_chat',
TITLE: 'title',
SYS_UPDATED_ON: 'sys_updated_on',
SYS_CREATED_BY: 'sys_created_by',
CALLER_ID: 'caller_id',
USER: 'user',
ROLE: 'role'
},
COLLAB_MEMBER_FIELDS: {
USER_NAME: 'userName',
DISPLAY_NAME: 'displayName',
AVATAR: 'avatar',
EMAIL: 'email',
SYS_ID: 'userSysId'
},
SIDEBAR_CHATS: {
NUMBER_OF_AVATARS: 5
},
hasPermission: function(userSysId, recordSysId, table) {
if (!userSysId || !recordSysId || !table)
return false;
if (table == 'interaction' && this.userHasNoRoles(userSysId))
return false;
if (table == 'incident' || table == 'sc_request' || table == 'sc_req_item' || table == 'change_request') {
var isRequesterIncluded = gs.getProperty('sn_sow_collab.enable_requester_in_sidebar_discussion', 'true');
if (isRequesterIncluded == 'false' && this.userHasNoRoles(userSysId))
return false;
}
return true;
},
userHasNoRoles: function(userSysId) {
if (!userSysId)
return true;
var roleGr = new GlideRecord(this.TABLES.SYS_USER_HAS_ROLE);
roleGr.addQuery(this.FIELDS.USER, userSysId);
roleGr.addQuery('role.name', '!=', 'snc_internal'); // Exclude users with no role or only snc_internal role
roleGr.setLimit(1);
roleGr.query();
return !(roleGr.hasNext());
},
isSidebarSupportedOnSOW: function() {
var isPolarisEnabled = gs.getProperty('glide.ui.polaris.experience', "false");
var releaseVersion = gs.getProperty('itsm_family_release_version_check', 0);
var isSidebarSupportedOnSOW = gs.getProperty('sn_oe_sfs.prepopulate_users_on_sidebar_modal_is_supported', "false");
if (isSidebarSupportedOnSOW === 'true' && isPolarisEnabled === 'true' && (releaseVersion && releaseVersion >= 24))
return true;
return false;
},
getChatsForRecord: function(table, sysId, participantsLimit, chatSysId, chatsLimit) {
if (gs.nil(table) || gs.nil(sysId)) return [];
if (!this.isSidebarSupportedOnSOW()) return [];
var sidebarChats = [];
var collabRecordGr = new GlideRecord(this.TABLES.SYS_CS_COLLAB_RECORD);
collabRecordGr.addQuery(this.FIELDS.TABLE, table);
collabRecordGr.addQuery(this.FIELDS.DOCUMENT, sysId);
if (!gs.nil(chatSysId))
collabRecordGr.addQuery(this.FIELDS.COLLAB_CHAT, chatSysId);
collabRecordGr.orderByDesc(this.FIELDS.SYS_UPDATED_ON);
if (!gs.nil(chatsLimit))
collabRecordGr.setLimit(chatsLimit);
collabRecordGr.query();
while (collabRecordGr.next()) {
var chatGr = collabRecordGr.collab_chat ? collabRecordGr.collab_chat.getRefRecord() : null;
if (gs.nil(chatGr) || !chatGr.isValidRecord())
continue;
var collabChatMembers = sn_collab.CollabChatScriptObject.getCollabChatMembers(chatGr.getValue(this.FIELDS.SYS_ID), participantsLimit);
var participants = [];
var moreParticipantsText = "";
var createdByUserSysId = '';
for (var i = 0; i < collabChatMembers.length; i++) {
createdByUserSysId = chatGr.getValue(this.FIELDS.SYS_CREATED_BY) === collabChatMembers[i]['userName'] ? collabChatMembers[i]['userSysId'] : createdByUserSysId;
if (i < this.SIDEBAR_CHATS.NUMBER_OF_AVATARS)
participants.push({
'userName': collabChatMembers[i][this.COLLAB_MEMBER_FIELDS.USER_NAME],
'displayName': collabChatMembers[i][this.COLLAB_MEMBER_FIELDS.DISPLAY_NAME],
'avatar': collabChatMembers[i][this.COLLAB_MEMBER_FIELDS.AVATAR],
'email': collabChatMembers[i][this.COLLAB_MEMBER_FIELDS.EMAIL],
'sysId': collabChatMembers[i][this.COLLAB_MEMBER_FIELDS.SYS_ID]
});
else
if (!moreParticipantsText.length)
moreParticipantsText = collabChatMembers[i][this.COLLAB_MEMBER_FIELDS.DISPLAY_NAME];
else
moreParticipantsText += ", " + collabChatMembers[i][this.COLLAB_MEMBER_FIELDS.DISPLAY_NAME];
}
var moreParticipantsHtml = "";
if (moreParticipantsText)
moreParticipantsHtml = '<div title="' + moreParticipantsText + '">+' + this._nFormatter(parseInt(collabChatMembers.length) - 5) + "</div>";
sidebarChats.push({
'chatSysId': chatGr.getValue(this.FIELDS.SYS_ID),
'type': "sidebar_discussion",
'title': chatGr.getValue(this.FIELDS.TITLE),
'timeAgo': this.getDuration(chatGr.getValue(this.FIELDS.SYS_UPDATED_ON)),
'updatedOn': chatGr.getValue(this.FIELDS.SYS_UPDATED_ON),
'createdBy': createdByUserSysId,
'participants': participants,
'totalParticipants': collabChatMembers.length,
'moreParticipantsHtml': moreParticipantsHtml
});
}
return sidebarChats;
},
getNumberOfChats: function(table, sysId) {
var collabRecordGa = new GlideAggregate(this.TABLES.SYS_CS_COLLAB_RECORD);
collabRecordGa.addAggregate('COUNT');
collabRecordGa.addQuery(this.FIELDS.TABLE, table);
collabRecordGa.addQuery(this.FIELDS.DOCUMENT, sysId);
collabRecordGa.query();
if (collabRecordGa.next())
return collabRecordGa.getAggregate('COUNT');
return 0;
},
getDuration: function(gdt) {
if (!gdt)
return '';
var gd = new GlideDuration();
gd.setValue(gdt);
var currentGd = new GlideDuration();
currentGd.setValue(new GlideDateTime());
var difference = currentGd.subtract(gd);
difference = difference.getDisplayValue();
difference = difference.split(" ");
return difference[0] + " " + difference[1];
},
_nFormatter: function(num) {
if (num >= 1000000000)
return (num / 1000000000).toFixed(1).replace(/\.0$/, '') + 'B';
if (num >= 1000000)
return (num / 1000000).toFixed(1).replace(/\.0$/, '') + 'M';
if (num >= 1000)
return (num / 1000).toFixed(1).replace(/\.0$/, '') + 'K';
return num;
},
type: 'SOWSidebarChatUtilsSNC'
};
Sys ID
917e3fb753822110ad0fddeeff7b1279