Name

global.HRSecurityUtils

Description

Contains various utility functions for the Human Resources App Scoped Security Plugin .

Script

var HRSecurityUtils = Class.create();

HRSecurityUtils.prototype = {

  initialize : function(request, responseXML, gc) {
  	this.HR_CORE_SCOPE_SYS_ID = "d4ac3fff5b311200a4656ede91f91af2";
  },
  
  getFieldsFromCondition: function(table, condition) {
      try {
          var res = [];
          var eq = new GlideQueryString();
          eq.init(table, condition);
          eq.deserialize();
          var terms = eq.getTerms();
          for (var i = 0; i != terms.size(); i++) {
              var term = terms.get(i);
              if (term.isEndQuery())
                  continue;
              res.push(term.getTermField());
          }
          return res;
      } catch (error) {
          gs.error(error + '');
          throw new Error(error + '');
      }
  },

  processOrderGuide : function(orderGuide, variables) {
  	var sog = new SNC.ScriptableOrderGuide(String(orderGuide.sys_id));
  	var result = sog.process(new JSON().encode(variables));
  	if (!result)
  		gs.error("Processing the scriptable order guide failed with message: " + sog.getMessage());
  	else
  		return sog.getRequest();
  },

  isTablet: function() {
  	var agent = gs.getSession().getProperty("user-agent");
  	if (!/safari|chrome|firefox|Windows NT/i.test(agent)) {
  		return /Tablet|iPad|android|android 3.0|/i.test(agent);
  	}

  	return false;
  },

  /**
  *@param:  sys_id of HR Service
  *@returns: list of GlideRecords of knowledge articles configured on the HR Service (latest when KB versioning enabled)
  */
  getLatestKBRecordsForHRService: function(hrService) {
  	var kbRecords = [];
  	var kbAPI = new global.KBCommon();
  	var kbRecord = new GlideRecord('kb_knowledge');
  	var hrServiceGR = new GlideRecord('sn_hr_core_service');

  	if(hrServiceGR.get(hrService)) {
  		var kbIDs = hrServiceGR.kb_articles.split(',');

  		kbIDs.forEach( function(kbID) {
  			if(kbRecord.get(kbID)) {
  				kbRecords.push( kbAPI.getKnowledgeRecord(kbRecord.number) );
  			}
  		});
  	}

  	return kbRecords;
  },

  /**
  * HR Integrations BR uses this to encrypt or decrypt
  * addition key value pairs when a password checkbox
  * is true
  */
  encryptOrDecryptAditionalValues : function (isEncrypt, value){
  	var glideEncrypter = new GlideEncrypter();
  	if(!gs.nil(value)){
  		if(isEncrypt)
  			return glideEncrypter.encrypt(value);
  		else
  			return glideEncrypter.decrypt(value);
  	}
  	return value;
  },

  createNewUserCriteria : function(sys_id, name){
  	var newUserCriteria = new GlideRecord('user_criteria');
  	newUserCriteria.initialize();
  	newUserCriteria.name = name;
  	newUserCriteria.active = 'true';
  	newUserCriteria.advanced = 'true';
  	newUserCriteria.sys_scope = this.HR_CORE_SCOPE_SYS_ID;
  	newUserCriteria.script = 'new sn_hr_core.hr_Criteria().evaluateById("' + sys_id + '", user_id);';
  	if(newUserCriteria.canCreate())
  		return newUserCriteria.insert();
  	else
  		return "";
  },

  /** Activate a user_criteria record
  * @param sysId [String] sys_id of a user_criteria record
  * @return [boolean] Whether or not the record was updated
  **/
  activateUserCriteria: function(sysId) {
  	var grUserCriteria = new GlideRecord("user_criteria");
  	if (!sysId || !grUserCriteria.get(sysId) || !grUserCriteria.canWrite())
  		return false;
  	grUserCriteria.setValue("active", true);
  	return grUserCriteria.update();
  },

  /** Deactivate a user_criteria record
  * @param sysId [String] sys_id of a user_criteria record
  * @return [boolean] Whether or not the record was updated
  **/
  deactivateUserCriteria: function(sysId) {
  	var grUserCriteria = new GlideRecord("user_criteria");
  	if (!sysId || !grUserCriteria.get(sysId) || !grUserCriteria.canWrite())
  		return false;
  	grUserCriteria.setValue("active", false);
  	return grUserCriteria.update();
  },

  updateExistingUserCriteria : function(){
  	var hrCriteriaGr = new GlideRecord('sn_hr_core_criteria');
  	hrCriteriaGr.addNotNullQuery('related_user_criteria');
  	hrCriteriaGr.query();
  	while(hrCriteriaGr.next()){
  		var userCriteriaSysId = hrCriteriaGr.getValue('related_user_criteria');
  		var userCriteriaGr = new GlideRecord('user_criteria');
  		if(userCriteriaGr.get(userCriteriaSysId)){
  			var script = userCriteriaGr.script;
  			var hrCriteriaSysId = hrCriteriaGr.getUniqueValue();
  			var findScript = 'new sn_hr_core.hr_Criteria().evaluateById("'+hrCriteriaSysId+'")';
  			var replaceWithScript = 'new sn_hr_core.hr_Criteria().evaluateById("'+hrCriteriaSysId+'", user_id)';
  			script = script.replace(findScript,replaceWithScript);
  			userCriteriaGr.setValue('script',script);
  			userCriteriaGr.setWorkflow(false);
  			userCriteriaGr.update();
  		}
  	}
  },

  // -- Start of Employee Files APIs --

  moveAttachment : function (grAttachment, destinationTable, destinationId) {
  	grAttachment.table_name = destinationTable;
  	grAttachment.table_sys_id = destinationId;
  	grAttachment.update();

  	var encryptionID = this.getEncryptionID("sn_hr_ef.encryption_context");
  	if (encryptionID == "")
  		return;

  	this.encryptAttachment(grAttachment, encryptionID);

  	var tracking = new GlideRecord("sn_hr_ef_attachment_tracking");
  	tracking.addQuery('copy', grAttachment.getUniqueValue());
  	tracking.query();
  	while (tracking.next()) {
  		var attachment = new GlideRecord("sys_attachment");
  		if (attachment.get(tracking.original))
  			this.encryptAttachment(attachment, encryptionID);
  	}
  },

  getEncryptionID: function(encryptionRole) {
  	var role = new GlideRecord("sys_user_role");
  	role.addQuery('name', encryptionRole);
  	role.query();
  	if (!role.next())
  		return "";
  	else
  		return String(role.encryption_context);
  },

  encryptAttachment: function (attachment, context) {
  	var sysAttachment = new GlideSysAttachment();
  	sysAttachment.changeEncryptionContext(attachment.getValue("table_name"), attachment.getValue("table_sys_id"), attachment.getUniqueValue(), context);
  },

  removeSysAttachmentRecords : function(tableName, tableSysId){
  	var sysAttachment = new GlideSysAttachment();
  	var attachmentGR = sysAttachment.getAttachments(tableName, tableSysId);
  	while(attachmentGR.next())
  		attachmentGR.deleteRecord();
  },

  removeSysAttachmentsBySysId : function(attachmentSysId){
  	var sysAttachment = new GlideSysAttachment();
  	sysAttachment.deleteAttachment(attachmentSysId);
  },

  maxFileSizeCheck : function(fileSize) {
  	var max_file_size = gs.getProperty("sn_hr_ef.max_file_size", 30);
  	max_file_size = parseInt(max_file_size);
  	fileSize = parseInt(fileSize);
  	if (isNaN(max_file_size))
  		max_file_size = 30;
  	if (fileSize > max_file_size * 1048576)
  		return false;
  	return true;
  },

  updateUserStrides : function(numberRange, setForEveryone) {
  	var gr = new GlideRecord('sys_user');
  	gr.setWorkflow(false);

  	if (!setForEveryone)
  		gr.addNullQuery('sn_hr_ef_purging_stride');
  	gr.query();

  	while (gr.next()) {
  		gr.sn_hr_ef_purging_stride = Math.floor(Math.random() * (numberRange));
  		gr.update();
  	}
  },

  // -- End of Employee Files APIs --

  generatePassword : function(){
  	var pwdGenerationUtil = new PwdDefaultAutoGenPassword();
  	var pwd = pwdGenerationUtil.generatePassword("");
  	return pwd;
  },

  evaluateMailScripts : function(emailText, current, email, email_action, event) {
  	return GlideEmailFormatter(current,email_action,event,email).evaluateTemplateScript(emailText);
  },
  
  substitute: function(/* GlideRecord */ current,
        /* Optional EmailOutbound */ email, /* Optional GlideRecord */ email_action,
        /* Optional GlideRecord */ event,text){
  	var emailFormatter = new GlideEmailFormatter(current,email_action,event,email);
  	return emailFormatter.substitute(text, true, false);
  },

  authenticationSuccess : function(task_id, table_name, doc_revision_id, signature_acknowledgment) {
  	new sn_hr_core.hr_Login_Authenticator().success(task_id, table_name, doc_revision_id, signature_acknowledgment);
  },

  escapeHTML : function(text) {
  	return new GlideStringUtil().escapeHTML(text);
  },

  hasSignatureOnForm: function(gr) {
  	if (gr.canRead() && new sn_hr_core.hr_Delegation().isAssignedOrDelegated(gr)) {
  		if (gr.pdf_template.sys_class_name.toString() == 'sn_hr_core_pdf_template')
  			return new sn_hr_core.hr_PdfUtils().userHasSignature(gr);
  		else
  			return new sn_hr_core.GeneralHRForm(gr.sys_class_name, gr.sys_id, gr.sys_class_name, gr.sys_id).userHasSignature();
  	}
  },

  /**
  * Sync up source from HR Profile fix script uses
  * below method to update sys_user table with
  * setWorkflow as false
  * @input userSysId : String , source : String
  */
  updateIntegrationSourceFieldInSysUser: function(userSysId, source){
  	var sysUserGr = new GlideRecord("sys_user");
  	if (sysUserGr.get(userSysId)) {
  		sysUserGr.setValue("hr_integration_source", source);
  		sysUserGr.autoSysFields(false);
  		sysUserGr.setWorkflow(false);
  		sysUserGr.update();
  	}
  },

  getRelevantVariablesForCatItem : function(catItemSysId) {
  	//Ignore non-interactive display variables such as Container and Label types
  	var VAR_TYPES_TO_IGNORE = [11, 19, 20, 24];
  	var relevantVars = [];

  	function parseVariables(variables) {
  		for (var i = 0; i < variables.length; i++) {
  			var variable = variables[i];
  			if (variable.children)
  				parseVariables(variable.children);
  			else if (VAR_TYPES_TO_IGNORE.indexOf(variable.type) == -1)
  				relevantVars.push(variable);
  		}
  	}

  	parseVariables(new sn_sc.CatItem(catItemSysId).getVariables(false));

  	return relevantVars;
  },

  moveAttachmentToCase : function (grAttachment, destinationTable, destinationId) {
  	grAttachment.table_name = destinationTable;
  	grAttachment.table_sys_id = destinationId;
  	grAttachment.update();
  },

  getEmployeeFormRelatedTables: function(tblName, objSysId, stackName, gotoUrl) {
  	var dMap = GlideCascadeFromDelete.getCascadeTables(tblName, objSysId, stackName);
  	var retUrl = dMap.remove("return_url");

  	// Use the more explicit sysparm_goto_url if it exists
  	if (gotoUrl && gotoUrl != "")
  		retUrl = gotoUrl;

  	var dList = '';
  	if (retUrl != null) dList += retUrl + ';';
  	else dList += 'null;';

  	if (dMap.isEmpty()) {
  		return dList;
  	}

  	// translate returned Java Map to a string format that client page can understand
  	var objName = dMap.remove("name");
  	dList += objName + ';';
  	var itr = dMap.keySet().iterator();
  	while (itr.hasNext()) {
  		var dTbl = itr.next();
  		var count = dMap.get(dTbl).intValue();
  		dList = dList + count + ':' + dTbl + ',';
  	}
  	return dList;
  },

  caseCreationSearch : function(searchTerm) {
  	var caseCreation = new sn_hr_core.hr_CaseCreation();
  	var result = caseCreation.search(searchTerm, null, null);
  	return JSON.stringify(result.list);
  },

  getLatestKnowledgeRecordIds : function(kbNumbers) {
  	var kbAPI = new global.KBCommonSNC();
  	var articleMappings = {};

  	kbNumbers.forEach(function(number) {
  		var grArticle =  kbAPI.getKnowledgeRecord(number);

  		if (grArticle)
  			articleMappings[number] = grArticle.getUniqueValue();
  	});

  	return articleMappings;
  },

  isMemberOfGroup : function(userId, groupId) {
  	var user = GlideUser.getUserByID(userId);
  	var groups = user.getMyGroups();
  	return groups.contains(groupId);
  },
  
  /** Get next incremental number for a particular table
  * @param tableName [String] tableName for which next padded number to be fetched
  * @return [String] Padded number
  **/
  getNextObjNumberPadded: function(tableName){
  	return new global.NumberManager(tableName).getNextObjNumberPadded();
  },

  type: 'HRSecurityUtils'
};

Sys ID

9c71da339373320092051d1e867ffb42

Offical Documentation

Official Docs: