Name

global.CSMPortalUtils

Description

It contains utility methods to perform operations related to CSM portals.

Script

var CSMPortalUtils = Class.create();
CSMPortalUtils.prototype = {

  initialize: function() {
      this.TABLE_SYS_PROPERTIES = 'sys_properties';
      this.TABLE_SYS_ANALYTICS_BUCKET = 'sys_analytics_bucket';
      this.TABLE_SP_PORTAL = 'sp_portal';
      this.ANALYTICS_PLUGIN_NAME = 'com.glide.service-portal.analytics';
      this.PROPERTY_FORCED_TRACKING = 'glide.analytics.tracking.force_allowed.portals';
  },

  addSysIdtoProperty: function(sysId, propertyName) {
      var propertyValue = gs.getProperty(propertyName);
      if (propertyValue != null) {
          var portalSysIds = propertyValue.split(',').map(function(e) {
              return e.trim();
          });
          var isIdPresent = (portalSysIds.indexOf(sysId) > -1);
          //If SysId is not present
          if (!isIdPresent) {
              var gr = new GlideRecord(this.TABLE_SYS_PROPERTIES);
              gr.addActiveQuery();
              gr.addQuery('name', propertyName);
              gr.query();
              if (gr.next()) {
                  if (portalSysIds == '')
                      gr.value = sysId;
                  else
                      gr.value = portalSysIds + ',' + sysId;
                  gr.update();
              }
          }
      }
  },
  removeSysIdfromProperty: function(sysId, propertyName) {
      var propertyValue = gs.getProperty(propertyName);
      if (propertyValue != null) {
          var portalSysIds = propertyValue.split(',').map(function(e) {
              return e.trim();
          });
          var indexOfId = portalSysIds.indexOf(sysId);
          var isIdPresent = (indexOfId > -1);

          if (isIdPresent) {
              var gr = new GlideRecord(this.TABLE_SYS_PROPERTIES);
              gr.addActiveQuery();
              gr.addQuery('name', propertyName);
              gr.query();
              if (gr.next()) {
                  //Removing the sys Id from array
                  portalSysIds.splice(indexOfId, 1);
                  gr.value = portalSysIds.join();
                  gr.update();
              }
          }
      }
  },
  /*
  sysId - The sys_id of the portal for which Analytics Settings are to be configured
  trackAuthenticatedUsers - boolean, to indicate whether to track Logged-in/Authenticated Users
  trackUnauthenticatedUsers - boolean, to indicate whether to track Unauthenticated Users
  */
  manageAnalyticsSettings: function(sysId, trackAuthenticatedUsers, trackUnauthenticatedUsers) {
      var isSettingsEnabled = false;
      var isSettingsExistforPortal = false;

      if (pm.isActive(this.ANALYTICS_PLUGIN_NAME))
          isSettingsEnabled = sn_app_analytics.SNAnalytics.isEnabled();

      if (isSettingsEnabled)
          isSettingsExistforPortal = sn_sp_analytics.SPAnalytics.settingsExistForPortal(sysId);

      if (isSettingsEnabled) {
          //Record does not exist,Creating a new Record for this portal when enabled value is true
          if (!isSettingsExistforPortal && trackAuthenticatedUsers) {
              try {
                  sn_sp_analytics.SPAnalytics.createSettingsForPortal(sysId, 'service_portal');
                  this.updateAnalyticsSettings(sysId, trackAuthenticatedUsers, trackUnauthenticatedUsers);
                  this.addSysIdtoProperty(sysId, this.PROPERTY_FORCED_TRACKING);
              } catch (err) {
                  return gs.getMessage('Unable to create Service Portal Analytics Settings for this entry');
              }
          } else if (isSettingsExistforPortal) {
              try {
                  //Setting values for 'Enabled' and 'Unauthenticated User Tracking' fields to new values
                  this.updateAnalyticsSettings(sysId, trackAuthenticatedUsers, trackUnauthenticatedUsers);
              } catch (err) {
                  return gs.getMessage('Unable to change Service Portal Analytics Settings for this entry');
              }

          }
      }
  },
  updateAnalyticsSettings: function(sysId, trackAuthenticatedUsers, trackUnauthenticatedUsers) {
      var gr = new GlideRecord(this.TABLE_SYS_ANALYTICS_BUCKET);
      gr.addQuery('bucket_table_name', this.TABLE_SP_PORTAL);
      gr.addQuery('bucket_document_id', sysId);
      gr.query();
      if (gr.next()) {
          gr.setValue('enabled', trackAuthenticatedUsers);
          gr.setValue('enable_unauthenticated_user_tracking', trackUnauthenticatedUsers);
          gr.update();
      }
  },
  deleteSettingsForPortal: function(sysId) {
      var gr = new GlideRecordSecure(this.TABLE_SYS_ANALYTICS_BUCKET);
      gr.addQuery('bucket_table_name', this.TABLE_SP_PORTAL);
      gr.addQuery('bucket_document_id', sysId);
      gr.query();
      if (gr.next()) {
          gr.deleteRecord();
      }
  },

  canAccessWorkOrders: function(){
  	if(gs.hasRole("sn_customerservice.service_organization_contributor") && !gs.hasRole("admin"))
  		return false;
  	return true;
  },

  canAccessOrders: function(){
  	return !((gs.hasRole("sn_customerservice.service_organization_contributor") || gs.hasRole("sn_customerservice.proxy_contact")) && !gs.hasRole("admin"));
  },

  canAccessSupport: function(){
  	return (!gs.hasRole("sn_customerservice.case_contributor_creator") ||
  			gs.hasRole("admin") ||
  			gs.hasRole("sn_customerservice.service_organization_contributor"));
  },

  type: 'CSMPortalUtils'
};

Sys ID

be6414d0c3302010a6f3f97c9840dd4f

Offical Documentation

Official Docs: