Name

sn_sow_admin.SOWAdminUtils

Description

No description available

Script

var SOWAdminUtils = Class.create();
SOWAdminUtils.prototype = {
  initialize: function() {
      this.CONSTANTS = new SOWAdminConstants();
  },

  // Check if plugin is installed or not
  pluginIsInstalled: function(pluginId) {
      return new GlidePluginManager().isActive(pluginId);
  },

  // Generate plugin manager link
  generatePluginInstallLink: function(pluginId) {
      return "/nav_to.do?uri=$allappsmgmt.do?sysparm_search==" + pluginId;
  },

  // Add product documentation link for the given plugin
  addProductDocLink: function(pluginId) {
  	var hrefAttributes = 'target="_blank" style="color: RGB(var(--now-text-link--primary--color,var(--now-color--secondary-1,1,119,142)));"';
      if (pluginId == "sn_now_teams_it")
          return '<a href="api/now/v1/context_doc_url/msteams-integ-sow" ' + hrefAttributes + '>' + gs.getMessage("Product Documentation") + '</a>';
      else
          return "";
  },

  // Get the installed store plugin version
  getStorePluginVersion: function(pluginId) {
      var pluginGR = new GlideRecord("sys_store_app");
      pluginGR.addQuery("scope", pluginId);
      pluginGR.query();

      if (pluginGR.next())
          return pluginGR.version.toString();
  },

  // Get the installed family plugin version
  getFamilyPluginVersion: function(pluginId) {
      var pluginGR = new GlideRecord("v_plugin");
      pluginGR.addQuery("id", pluginId);
      pluginGR.query();

      if (pluginGR.next())
          return pluginGR.version.toString();
  },

  // Compare version numbers and return true if verion1 >= version2
  versionCompare: function(version1, version2) {
      var vnum1 = 0,
          vnum2 = 0;
      for (var i = 0, j = 0;
          (i < version1.length || j < version2.length);) {
          while (i < version1.length && version1[i] != '.') {
              vnum1 = vnum1 * 10 + (version1[i] - '0');
              i++;
          }
          while (j < version2.length && version2[j] != '.') {
              vnum2 = vnum2 * 10 + (version2[j] - '0');
              j++;
          }
          if (vnum1 > vnum2)
              return true;
          if (vnum1 < vnum2)
              return false;

          vnum1 = 0, vnum2 = 0;
          i++;
          j++;
      }
      // Both version numbers are equal
      return true;
  },

  // Set application card button label
  setAppButtonLabel: function(pluginId, pluginStatus) {
      if (pluginId == "sn_oe_sfs") {
          if (pluginStatus) {
              var version = this.getStorePluginVersion(pluginId);
              if (!gs.nil(version) && this.versionCompare(version, "2.1.5"))
                  return gs.getMessage("Configure");
              else
                  return gs.getMessage("Update");
          } else
              return gs.getMessage("Get App");
      } else {
          return (pluginStatus) ? gs.getMessage("Configure") : gs.getMessage("Get App");
      }
  },

  // Set application card button payload
  setAppButtonPayload: function(pluginId, pluginStatus, configRedirectLink) {
      if (pluginId == "sn_oe_sfs") {
          if (pluginStatus) {
              var version = this.getStorePluginVersion(pluginId);
              if (!gs.nil(version) && this.versionCompare(version, "2.1.5"))
                  return configRedirectLink;
          }
          return this.generatePluginInstallLink(pluginId);
      } else {
          return (pluginStatus) ? configRedirectLink : this.generatePluginInstallLink(pluginId);
      }
  },

  // Retrieve list of additional related apps in interactive cards list format
  getAdditionalSetupList: function() {
      var cardsPayloadObj = {};
      var cardsList = [];

      // Iterate over all entries
      var additional_apps_list = this.CONSTANTS.ADDITIONAL_APPS;
      for (const app in additional_apps_list) {
          if (additional_apps_list.hasOwnProperty(app)) {
              var pluginId = additional_apps_list[app]["PLUGIN_ID"];
              var pluginStatus = this.pluginIsInstalled(additional_apps_list[app]["PLUGIN_ID"]);
              var label = this.setAppButtonLabel(pluginId, pluginStatus);
              var obj = this.CONSTANTS.BASE_INTERACTIVE_CARD_OBJECT;
              obj.title = additional_apps_list[app]["PLUGIN_NAME"];
              obj.image = additional_apps_list[app]["IMAGE"];
              obj.button_action_type = additional_apps_list[app]["BUTTON_ACTION_TYPE"];
              obj.button_action_payload = this.setAppButtonPayload(pluginId, pluginStatus, additional_apps_list[app]["CONFIG_REDIRECTION_LINK"]);
              obj.button_text = label;
              obj.button_type = "tertiary";
              obj.button_tooltip_label = label + ' ' + additional_apps_list[app]["PLUGIN_NAME"];
              obj.highlighted_color = (pluginStatus) ? "info" : "critical";
              obj.highlighted_icon = (pluginStatus) ? "circle-check-outline" : "presence-offline-outline";
              obj.highlighted_label = (pluginStatus) ? gs.getMessage("Installed") : gs.getMessage("Not installed");
              obj.highlighted_variant = "tertiary";
              obj.interaction = "none_bordered";
              obj.body = '<p>' + additional_apps_list[app]["DESCRIPTION"] + " " + this.addProductDocLink(pluginId) + '</p>';
              cardsList.push(JSON.parse(JSON.stringify(obj)));
          }
      }

      cardsPayloadObj.cards_list = cardsList;
      return cardsPayloadObj;
  },

  // Retrieve list of setup elements section in interactive cards list format
  getSetupUIElementList: function() {
      var cardsPayloadObj = {};
      var cardsList = [];

      // Iterate over all entries
      var setupElements = this.CONSTANTS.SETUP_UI_ELEMENTS;
      for (const element in setupElements) {
          if (setupElements.hasOwnProperty(element)) {
              var name = setupElements[element]["CARD_NAME"];
              var obj = this.CONSTANTS.BASE_INTERACTIVE_CARD_OBJECT;
              obj.title = name;
              obj.interaction = setupElements[element]["INTERACTION"];
              obj.interaction_payload = setupElements[element]["INTERACTION_PAYLOAD"];
              obj.image = setupElements[element]["IMAGE"];
              cardsList.push(JSON.parse(JSON.stringify(obj)));
          }
      }

      cardsPayloadObj.cards_list = cardsList;
      return cardsPayloadObj;
  },

  type: 'SOWAdminUtils'
};

Sys ID

45eb8578eb472110f51bddde23522862

Offical Documentation

Official Docs: