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

Offical Documentation

Official Docs: