Name
sn_grc.IGContentActionHandler
Description
No description available
Script
var IGContentActionHandler = Class.create();
IGContentActionHandler.prototype = {
initialize: function(action, strategy, skip) {
this.actionType = String(action.action);
this.source = action.source || '';
this.sourceTable = action.table || '';
this.contentId = action.content_id;
this.batchIds = action.batch_processing_ids;
this.strategy = strategy;
this.skip = skip;
},
execute: function() {
if (gs.nil(this.strategy) || gs.nil(this.actionType) || gs.nil(this.contentId)) {
return;
}
switch (this.actionType) {
// When activating content, system is trying to make up for items if they are missing and activate any inactive items
case 'activate_content':
case 'set_auto_control_create_flag': {
this._activateCommonItems();
this._createItemsForContent();
this._createItemsForContentToProfile();
this._activateManualCreatedItems();
if (GlidePluginManager.isActive('com.sn_privacy')) {
this._createItemsForCOToProcessingActivity();
}
break;
}
case 'create_content':
this.strategy.contentCreationToEntityType(this.contentId);
break;
case 'deactivate_content':
this._deactivateItemsForContents(this.contentId);
break;
case 'delete_content':
this._deactivateItemsById(this.batchIds);
break;
case 'add_content_to_content':
this.strategy.associateRiskToControl(this.source, this.sourceTable, this.skip);
break;
case 'remove_content_from_content':
this.strategy.disassociateRiskFromControl(this.source, this.contentId);
break;
}
},
_deactivateItemsForContents: function(contentIds) {
var item = new GlideRecord(this.strategy.itemTable);
item.addActiveQuery();
//item.addQuery("instance", true);
item.addQuery('content', 'IN', contentIds);
item.query();
while (item.next()) {
item.active = false;
item.retired_manually = false;
item.skipInsertActionToQueue = true;
item.update();
var actionParms = {
action: 'deactivate_item',
source: item.getUniqueValue(),
table: item.getTableName(),
item_id: item.getUniqueValue()
};
new IGItemActionHandler(actionParms, this.strategy).execute();
}
},
_deactivateItemsById: function(batchIds) {
var item = new GlideRecord(this.strategy.itemTable);
item.addActiveQuery();
item.addQuery('sys_id', 'IN', batchIds);
item.query();
while (item.next()) {
item.active = false;
item.retired_manually = false;
if (!item.created_one_off) {
item.setValue('source', 'NULL');
}
item.skipInsertActionToQueue = true;
item.update();
var actionParms = {
action: 'deactivate_item',
source: item.getUniqueValue(),
table: item.getTableName(),
item_id: item.getUniqueValue()
};
new IGItemActionHandler(actionParms, this.strategy).execute();
}
if ((GlidePluginManager.isActive('sn_risk') || GlidePluginManager.isActive('com.sn_risk'))) {
// Delete Risk to Control records. Deletion must be under Risk scope
var deleteScope = new sn_risk.RiskGeneratorV2Strategy();
var riskToControl = new GlideRecord('sn_risk_m2m_risk_control');
var itemField = riskToControl.addQuery('sn_risk_risk', 'IN', batchIds);
itemField.addOrCondition('sn_compliance_control', 'IN', batchIds);
riskToControl.query();
while (riskToControl.next()) {
deleteScope.deleteRecords(riskToControl, true);
}
}
},
_createItemsForContent: function() {
var contentToProfileType = new GlideRecord(this.strategy.getContentToProfileTypeTable());
contentToProfileType.addQuery('sn_grc_content', this.contentId);
contentToProfileType.addQuery('sn_grc_profile_type.active', true);
contentToProfileType.query();
while (contentToProfileType.next()) {
this._generateContentToEntityTypeAction(contentToProfileType);
}
},
_createItemsForContentToProfile: function() {
var contentProfileM2MGr = new GlideRecord('sn_grc_m2m_content_profile');
contentProfileM2MGr.addQuery('sn_grc_content', this.contentId);
contentProfileM2MGr.addQuery('sn_grc_profile.active', true);
contentProfileM2MGr.query();
while (contentProfileM2MGr.next()) {
this._generateContentToAddtlEntityAction(contentProfileM2MGr);
}
},
_activateManualCreatedItems: function() {
var item = new GlideRecord(this.strategy.itemTable);
item.addQuery('active', false);
item.addQuery('content', this.contentId);
item.addQuery('profile.active', true);
item.addQuery('created_one_off', true);
item.addQuery('retired_manually', false);
item.query();
while (item.next()) {
item.setValue('active', true);
item.skipInsertActionToQueue = true;
item.update();
var actionParms = {
action: 'activate_item',
source: item.getUniqueValue(),
table: item.getTableName(),
item_id: item.getUniqueValue(),
};
new IGItemActionHandler(actionParms, this.strategy).execute();
}
},
_activateCommonItems: function() {
var item = new GlideRecord(this.strategy.itemTable);
item.addQuery('active', false);
item.addQuery('content', this.contentId);
item.addQuery('profile.active', true);
item.addQuery('retired_manually', false);
item.addQuery('item_function', '1');
item.query();
while (item.next()) {
item.setValue('active', true);
item.skipInsertActionToQueue = true;
item.update();
var actionParms = {
action: 'activate_item',
source: item.getUniqueValue(),
table: item.getTableName(),
item_id: item.getUniqueValue(),
};
new IGItemActionHandler(actionParms, this.strategy).execute();
}
},
_createItemsForCOToProcessingActivity: function() {
var coProcessingActivityM2MGr = new GlideRecord('sn_privacy_m2m_policy_statement_processing_activity');
coProcessingActivityM2MGr.addQuery('policy_statement', this.contentId);
coProcessingActivityM2MGr.addQuery('processing_activity.active', true);
coProcessingActivityM2MGr.query();
while (coProcessingActivityM2MGr.next()) {
this._generateCOToProcessingActivityAction(coProcessingActivityM2MGr);
}
},
_generateContentToEntityTypeAction: function(m2mContentToProfileType) {
var actionParms = {
action: 'add_content_to_entity_type',
source: m2mContentToProfileType.getUniqueValue(),
table: m2mContentToProfileType.getTableName(),
content_id: m2mContentToProfileType.getValue('sn_grc_content'),
entity_type_id: m2mContentToProfileType.getValue('sn_grc_profile_type')
};
var handlerObj = new IGContentToEntityTypeActionHandler(actionParms, this.strategy);
handlerObj.execute();
},
_generateContentToAddtlEntityAction: function(m2mContentToProfile) {
var actionParms = {
action: 'add_content_to_addtl_entity',
source: m2mContentToProfile.getUniqueValue(),
table: m2mContentToProfile.getValue('content_type'),
content_id: m2mContentToProfile.getValue('sn_grc_content'),
entity_id: m2mContentToProfile.getValue('sn_grc_profile')
};
return new IGContentToAddtlEntityActionHandler(actionParms).execute();
},
_generateCOToProcessingActivityAction: function(m2mCOToProcessingActivity) {
if (!m2mCOToProcessingActivity.processing_activity.entity.nil()) {
var actionParms = {
action: 'add_co_to_processing_activity',
source: m2mCOToProcessingActivity.getUniqueValue(),
table: m2mCOToProcessingActivity.getTableName(),
content_id: m2mCOToProcessingActivity.getValue('policy_statement'),
processing_activity_id: m2mCOToProcessingActivity.getValue('processing_activity'),
entity_id: m2mCOToProcessingActivity.processing_activity.entity
};
return new sn_privacy.IGControlObjectiveToProcessingActivityActionHandler(actionParms).execute();
}
},
type: 'IGContentActionHandler'
};
Sys ID
9cdef049531f20104f3eddeeff7b1200