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