Name
sn_grc.ItemInheritanceBase
Description
No description available
Script
var ItemInheritanceBase = Class.create();
ItemInheritanceBase.prototype = {
initialize: function() {},
isImplementedAsItem: function(entityId, itemId) {
return this._isImplementedAsItem(entityId, itemId);
},
isAddedUnderDifferentItem: function(entityId, itemId) {
return this._isAddedUnderDifferentItem(entityId, itemId);
},
isAddedUnderAnyItem: function(entityId, itemId) {
return this._isAddedUnderAnyItem(entityId, itemId);
},
isImplementedUnderItem: function(entityId, contentId) {
return this._isImplementedUnderItem(entityId, contentId);
},
updateSourceInItemEntityM2m: function(m2mGr, sourceField, source) {
this._updateSourceInItemEntityM2m(m2mGr, sourceField, source);
},
getReliantEntites: function(itemId){
return this._getReliantEntites(itemId);
},
getImplementedItem: function(entityId, itemId, selectedItem) {
return this._getImplementedItem(entityId, itemId);
},
getSkippedGenericItems: function(table, item, selectedItems) {
return this._getSkippedGenericItems(table, item, selectedItems);
},
getChildrenOfItemTable: function() {
return this._getChildrenOfItemTable();
},
getChildrenOfItemToEntityTable: function() {
return this._getChildrenOfItemToEntityTable();
},
getItemForReliantEntity: function(entityId, contentId) {
var m2mGr = new GlideRecord('sn_grc_m2m_item_entity');
m2mGr.addQuery('active', true);
m2mGr.addQuery('entity', entityId);
m2mGr.addQuery('item.active', true);
m2mGr.addQuery('item.content', contentId);
m2mGr.addQuery('item.instance', true);
m2mGr.setLimit(1);
m2mGr.query();
var itemId = '';
if (m2mGr.next()) {
itemId = m2mGr.item + '';
}
return itemId;
},
getItemsForReliantEntity: function(entityId, itemType) {
var className = '';
if (itemType === 'Control') {
className = 'sn_compliance_control';
} else if (itemType === 'Risk') {
className = 'sn_risk_risk';
}
var m2mGr = new GlideRecord('sn_grc_m2m_item_entity');
if (!gs.nil(className))
m2mGr.addQuery('item.sys_class_name', className);
m2mGr.addQuery('active', true);
m2mGr.addQuery('entity', entityId);
m2mGr.query();
var itemIds = [];
while (m2mGr.next()) {
itemIds.push(m2mGr.item + '');
}
return itemIds;
},
addEntityToItem: function(entityId, itemId, sourceField, source, skipInsertAction) {
var m2mSysId = '';
var isActivated = false;
if (this._isImplementedAsItem(entityId, itemId)) return;
if (this._isAddedUnderDifferentItem(entityId, itemId)) return;
var m2mRec = new GlideRecord('sn_grc_m2m_item_entity');
m2mRec.addQuery('item', itemId);
m2mRec.addQuery('entity', entityId);
m2mRec.setLimit(1);
m2mRec.query();
if (m2mRec.next()) {
this._updateSourceInItemEntityM2m(m2mRec, sourceField, source);
if (!m2mRec.active) {
m2mRec.setValue('active', true);
isActivated = true;
}
m2mRec.skipInsertActionToQueue = skipInsertAction;
m2mSysId = m2mRec.update();
if (skipInsertAction && m2mSysId && isActivated) {
this._executeEntityToItemAction('activate_entity_to_item', m2mRec);
}
} else {
m2mRec.initialize();
m2mRec.setValue('item', itemId);
m2mRec.setValue('entity', entityId);
m2mRec.setValue('active', true);
m2mRec.skipInsertActionToQueue = skipInsertAction;
m2mRec.setValue(sourceField, source + '');
m2mSysId = m2mRec.insert();
if (skipInsertAction && m2mSysId) {
this._executeEntityToItemAction('add_entity_to_item', m2mRec);
}
}
return m2mSysId;
},
deleteOrUpdateSourceInItemEntityM2m: function(m2mGr, sourceField, source, skipInsertAction) {
source = source +'';
if (!gs.nil(m2mGr[sourceField])) {
var sourceIds = this._removeSourceFromField(m2mGr.getValue(sourceField), sourceField, source);
m2mGr.setValue(sourceField, sourceIds);
}
if (gs.nil(m2mGr.getValue('source_entity_types')) && m2mGr.getValue('individually_added') == false) {
m2mGr.skipInsertActionToQueue = skipInsertAction;
var isDeleted = m2mGr.deleteRecord();
if (skipInsertAction && isDeleted) {
this._executeEntityToItemAction('remove_entity_from_item', m2mGr);
}
return;
}
m2mGr.update();
},
deleteReliantEntityTypeAssociations: function(itemId){
var m2m = new GlideRecord('sn_grc_m2m_item_entity_type');
m2m.addQuery('item', itemId);
m2m.query();
while(m2m.next()){
m2m.setWorkflow(false);
m2m.deleteRecord();
}
},
deleteRelaintEntityAssociations: function(itemId) {
var m2m = new GlideRecord('sn_grc_m2m_item_entity');
m2m.addQuery('item', itemId);
m2m.query();
while (m2m.next()) {
m2m.skipInsertActionToQueue = true;
m2m.deleteRecord();
this._executeEntityToItemAction('remove_entity_from_item', m2m);
}
},
isContentToEntitym2mExits: function(entity,content) {
var m2m = new GlideRecord('sn_grc_m2m_content_profile');
m2m.addQuery('sn_grc_profile', entity);
m2m.addQuery('sn_grc_content', content);
m2m.query();
return m2m.hasNext();
},
hasReliantAssociation: function(itemRec) {
return this._hasReliantAssociation(itemRec, itemRec.profile + '', false);
},
getAuthorisationBoundaryEntity: function(entityId) {
return this._getAuthorisationBoundaryEntity(entityId);
},
hasSameReliantEntity: function(itemRec) {
var currItemReliantEntites = this._getReliantEntites(itemRec.getUniqueValue());
if (currItemReliantEntites.length > 0) {
var gr = new GlideRecord('sn_grc_m2m_item_entity');
gr.addActiveQuery();
gr.addQuery('item.content', itemRec.getValue('content'));
gr.addQuery('entity', 'IN', currItemReliantEntites);
gr.addQuery('item', '!=', itemRec.getUniqueValue());
gr.addQuery('item.name', itemRec.getValue('name'));
gr.query();
return gr.hasNext();
}
},
isEntitySameAsReliantEntityForItem: function(itemRec) {
var gr = new GlideRecord('sn_grc_m2m_item_entity');
gr.addActiveQuery();
gr.addQuery('item', itemRec.getUniqueValue());
gr.addQuery('entity', itemRec.getValue('profile'));
gr.query();
return gr.hasNext();
},
_removeSourceFromField: function(sourceIds, sourceField, newSource) {
sourceIds = sourceIds.split(',');
sourceIds.splice(sourceIds.indexOf(newSource), 1);
return sourceIds.join(',');
},
_updateSourceInItemEntityM2m: function(m2mGr, sourceField, source) {
if (gs.nil(sourceField) || gs.nil(source)) return;
var oldSourceIds = m2mGr[sourceField] + '';
if (oldSourceIds.contains(source)) return;
var newSourceIds = gs.nil(oldSourceIds) ? source : oldSourceIds + ',' + source;
m2mGr[sourceField]= newSourceIds;
},
_isImplementedAsItem: function(entityId, itemId) {
var itemGr = new GlideRecord('sn_grc_item');
if (!itemGr.get(itemId)) return false;
var items = new GlideAggregate('sn_grc_item');
items.addQuery('active', true);
items.addQuery('profile', entityId);
items.addQuery('content', itemGr.getValue('content'));
items.addQuery('name', itemGr.getValue('name'));
items.addAggregate('COUNT');
items.query();
items.next();
return items.getAggregate('COUNT') > 0;
},
_isAddedUnderDifferentItem: function(entityId, itemId) {
var itemGr = new GlideRecord('sn_grc_item');
if (!itemGr.get(itemId)) return false;
return this._hasReliantAssociation(itemGr, entityId, true);
},
_isAddedUnderAnyItem: function(entityId, itemId) {
var itemGr = new GlideRecord('sn_grc_item');
if (!itemGr.get(itemId)) return false;
return this._hasReliantAssociation(itemGr, entityId, false);
},
_isImplementedUnderItem: function(entityId, contentId) {
var m2mGr = new GlideAggregate('sn_grc_m2m_item_entity');
m2mGr.addQuery('active', true);
m2mGr.addQuery('entity', entityId);
m2mGr.addQuery('item.active', true);
m2mGr.addQuery('item.content', contentId);
m2mGr.addQuery('item.instance', true);
m2mGr.addAggregate('COUNT');
m2mGr.query();
m2mGr.next();
return m2mGr.getAggregate('COUNT') > 0;
},
_executeEntityToItemAction: function(action, m2mRec) {
var strategy = new ItemGenerationV2Utils().getStrategy(m2mRec.item.sys_class_name + '');
var actionParams = {
'action': action,
'source': m2mRec.getUniqueValue(),
'table': m2mRec.getTableName(),
'entity_id': m2mRec.getValue('entity'),
'item_id': m2mRec.getValue('item')
};
new sn_grc.IGItemToEntityActionHandler(actionParams, strategy).execute();
},
_getReliantEntites: function(itemId){
var entities = [];
var reliantEntities = new GlideRecord('sn_grc_m2m_item_entity');
reliantEntities.addActiveQuery();
reliantEntities.addQuery('item',itemId);
reliantEntities.query();
while(reliantEntities.next()){
entities.push(reliantEntities.getValue('entity'));
}
return entities;
},
_getImplementedItem: function(entityId, itemId, selectedItem) {
var itemSysId = '';
var commonItem = new GlideRecord('sn_grc_item');
if (commonItem.get(itemId)) {
var itemGr = new GlideRecord('sn_grc_item');
itemGr.addQuery('active', true);
itemGr.addQuery('profile', entityId);
itemGr.addQuery('content', commonItem.getValue('content'));
itemGr.addQuery('name', commonItem.getValue('name'));
itemGr.addQuery('sys_id', '!=', selectedItem + '');
itemGr.query();
if (itemGr.next()) {
itemSysId = itemGr.getUniqueValue();
}
}
return itemSysId;
},
_getSkippedGenericItems: function(table, item, selectedItems) {
item = item +'';
selectedItems = selectedItems +'';
var skippedItems = [];
var selectedItemsGR = new GlideRecord(table);
selectedItemsGR.addQuery('sys_id', 'IN', selectedItems);
selectedItemsGR.query();
while (selectedItemsGR.next()) {
var existingItem = this._getImplementedItem(selectedItemsGR.getValue('profile'), item, selectedItemsGR.getUniqueValue()) + '';
var isPresentAsRelaint = this._isAddedUnderAnyItem(selectedItemsGR.getValue('profile'), item + '');
if ((existingItem && selectedItems.indexOf(existingItem + '') == -1) || isPresentAsRelaint) {
skippedItems.push(selectedItemsGR.getUniqueValue());
}
}
return skippedItems;
},
_hasReliantAssociation: function(itemRec, entityId, isAddedUnderDifferentItem) {
var m2m = new GlideRecord('sn_grc_m2m_item_entity');
m2m.addQuery('entity', entityId);
m2m.addQuery('active', true);
if (isAddedUnderDifferentItem)
m2m.addQuery('item', '!=', itemRec.getUniqueValue());
m2m.addQuery('item.content', itemRec.content + '');
m2m.addQuery('item.active', true);
if (itemRec.instance)
m2m.addQuery('item.name', itemRec.content.name + '');
else
m2m.addQuery('item.name', itemRec.name + '');
m2m.query();
return m2m.hasNext();
},
_getAuthorisationBoundaryEntity: function(entityId) {
var authBoundary = new GlideRecord('sn_irm_cont_auth_authorization_boundary');
authBoundary.addQuery('entity', entityId);
authBoundary.setLimit(1);
authBoundary.query();
if (authBoundary.next()) {
return entityId;
}
return '';
},
_getChildrenOfItemTable: function() {
var itemTables = [];
if (GlidePluginManager.isActive('sn_compliance') || GlidePluginManager.isActive('com.sn_compliance'))
itemTables.push('sn_compliance_control');
if (GlidePluginManager.isActive('sn_risk') || GlidePluginManager.isActive('com.sn_risk'))
itemTables.push('sn_risk_risk');
return itemTables;
},
_getChildrenOfItemToEntityTable: function() {
var itemToEntityTables = [];
if (GlidePluginManager.isActive('sn_compliance') || GlidePluginManager.isActive('com.sn_compliance'))
itemToEntityTables.push('sn_compliance_m2m_control_entity');
return itemToEntityTables;
},
type: 'ItemInheritanceBase'
};
Sys ID
54a665a0879219109e390d87cebb3593