Name
sn_grc.IGEntityTypeActionHandler
Description
No description available
Script
var IGEntityTypeActionHandler = Class.create();
IGEntityTypeActionHandler.prototype = {
initialize: function(action) {
this.actionType = String(action.action);
this.source = String(action.source);
this.sourceTable = String(action.table);
this.entityTypeId = String(action.entity_type_id);
},
execute: function() {
if (gs.nil(this.entityTypeId) || gs.nil(this.actionType) || gs.nil(this.source) || gs.nil(this.sourceTable)) {
return;
}
switch (this.actionType) {
case 'delete_entity_type':
this._deleteReliantAssociationsForEntityType();
this._deleteRelatedItemsForEntityType();
break;
case 'deactivate_entity_type':
return this._deactivateEntityType();
case 'activate_entity_type':
return this._activateEntityType();
}
},
_deleteRelatedItemsForEntityType: function() {
var entityType = new GlideRecord(this.sourceTable);
if (!entityType.get(this.source)) {
return;
}
var relatedContentIds = new ItemGenerationV2Utils().deletePTRelationships(entityType, 'sn_grc_m2m_content_profile_type', 'sn_grc_content', 'document');
for (var relatedContentId in relatedContentIds) {
var itemTables = new ItemInheritance().getChildrenOfItemTable();
for (var i = 0; i < itemTables.length; i++) {
var item = new GlideRecord(itemTables[i]);
item.addQuery('content', relatedContentId);
item.addQuery('instance', 'true');
item.addQuery('source', 'CONTAINS', this.entityTypeId);
item.query();
while (item.next()) {
new ItemGenerationV2Utils().deleteSourceInItem(item, this.entityTypeId);
}
}
}
new GRCUtils().checkProfilesForDeactivation(entityType);
},
_deactivateEntityType: function() {
var entityType = new GlideRecord(this.sourceTable);
if (!entityType.get(this.source)) {
return;
}
new GRCUtils().checkProfilesForDeactivation(entityType);
//If individually added is false and all source entity types are inactive, we deactivate the item to entity m2m
this._updateItemEntityM2m(false);
},
_activateEntityType: function() {
var entityType = new GlideRecord(this.sourceTable);
if (!entityType.get(this.source)) {
return;
}
new GRCUtils().checkProfilesForActivation(entityType);
/* If individualy added is false and at least 1 source entity types are active and reliant entity and item are also active
* and no standard item or reliant association to a common item exists for this entity type,
* we activate the item to entity m2m
*/
this._updateItemEntityM2m(true);
},
_deleteReliantAssociationsForEntityType: function() {
//Delete common item to entity type associations
var itemToEntityType = new GlideRecord('sn_grc_m2m_item_entity_type');
itemToEntityType.addQuery('entity_type', this.entityTypeId);
itemToEntityType.setWorkflow(false);
itemToEntityType.deleteMultiple();
//Delete item to entity records or just remove entity type from source
var itemToEntityTables = new ItemInheritance().getChildrenOfItemToEntityTable();
for (var j = 0; j < itemToEntityTables.length; j++) {
var itemToEntity = new GlideRecord(itemToEntityTables[j]);
itemToEntity.addQuery('source_entity_types', 'CONTAINS', this.entityTypeId);
itemToEntity.query();
while (itemToEntity.next()) {
new ItemGenerationV2Utils().deleteOrUpdateSourceInItemEntityM2m(itemToEntity, 'source_entity_types', this.entityTypeId, true);
}
}
},
_updateItemEntityM2m: function(activateM2m) {
var itemToEntityTables = new ItemInheritance().getChildrenOfItemToEntityTable();
for (var j = 0; j < itemToEntityTables.length; j++) {
var itemEntityGr = new GlideRecord(itemToEntityTables[j]);
itemEntityGr.addQuery('individually_added', 'false');
itemEntityGr.addQuery('active', !activateM2m);
if (activateM2m) {
itemEntityGr.addQuery('item.active', true);
itemEntityGr.addQuery('entity.active', true);
}
itemEntityGr.addQuery('source_entity_types', 'CONTAINS', this.entityTypeId);
itemEntityGr.query();
var strategy;
var activeEntityTypesGr = new GlideRecord('sn_grc_profile_type');
var inheritanceUtils = new sn_grc.ItemInheritance();
var action;
while (itemEntityGr.next()) {
activeEntityTypesGr.initialize();
activeEntityTypesGr.addActiveQuery();
activeEntityTypesGr.addQuery('sys_id', 'IN', itemEntityGr.getValue('source_entity_types'));
activeEntityTypesGr.setLimit(1);
activeEntityTypesGr.query();
if ((activateM2m && !activeEntityTypesGr.hasNext()) || (!activateM2m && activeEntityTypesGr.hasNext())) {
continue;
}
if (activateM2m) {
var entity = itemEntityGr.getValue('entity');
var item = itemEntityGr.getValue('item');
if (inheritanceUtils.isImplementedAsItem(entity, item) || inheritanceUtils.isAddedUnderDifferentItem(entity, item)) {
continue;
}
action = 'activate_entity_to_item';
} else {
action = 'deactivate_entity_to_item';
}
strategy = new ItemGenerationV2Utils().getStrategy(itemEntityGr.item.sys_class_name + '');
itemEntityGr.setValue('active', activateM2m);
itemEntityGr.skipInsertActionToQueue = true;
itemEntityGr.update();
var actionParams = {
'action': action,
'source': itemEntityGr.getUniqueValue(),
'table': itemEntityGr.getTableName(),
'entity_id': itemEntityGr.entity + '',
'item_id': itemEntityGr.item + ''
};
new sn_grc.IGItemToEntityActionHandler(actionParams, strategy).execute();
}
}
},
type: 'IGEntityTypeActionHandler'
};
Sys ID
8fefa50e532620104f3eddeeff7b1243