Name

global.SNMapHelper

Description

No description available

Script

var SNMapHelper = Class.create();
SNMapHelper.getMapData = function(mapId, filterItemVals, mapInputData) {
  mapInputData = (typeof mapInputData !== 'undefined') ?  mapInputData : {}; // defaulting mapInputData
  
  var data_item = {};
  var mapPageRecord = GlideRecord("cmn_map_page");
  mapPageRecord.get(mapId);
  if (!mapPageRecord) {
  	gs.error("SN_MAP: map page record is undefined.");
  	return {};
  }
  

  if (!SNMapHelper.validateRoles(mapPageRecord)) {
  	return {
  		"successs": "false",
  		"message": "User not authorized"
  	};
  }
  
  var filterItems = SNMapFilterItem.getFilterItem(mapPageRecord);
  var dataItemAndMarkerRes = SNMapDataItem.getDataItemWithMarker(mapPageRecord, filterItemVals, filterItems, mapInputData);
  return {
  	"data_item" : dataItemAndMarkerRes.data_item ? dataItemAndMarkerRes.data_item : "",
  	"marker" : dataItemAndMarkerRes.marker ? dataItemAndMarkerRes.marker : "",
  	"filter_items" :filterItems ? filterItems : "",
  };
};
SNMapHelper.verifyIfConfigIsAdvanced = function(mapSysId) {
  var mapPageRec = GlideRecord("cmn_map_page");
  mapPageRec.get(mapSysId);
  return mapPageRec.getValue("use_advanced_configuration") == 1;
};
SNMapHelper.getMapSysId = function(mapSysId, mapName) {
  if (JSUtil.notNil(mapSysId))
  	return mapSysId;
  var mapPageRec = GlideRecord("cmn_map_page");
  mapPageRec.addQuery("name", mapName);
  mapPageRec.query();
  if (mapPageRec.next())
  	return mapPageRec.sys_id;
  return null;
};
SNMapHelper.getConfigConsts = function() {
  var result = {};
  result["transl"] = {
  	DETAILS: gs.getMessage("Details"),
  	REFRESH_MAP: gs.getMessage("Refresh map"),
  	TOGGLE_FILTER_POPUP: gs.getMessage("Toggle filter popup"),
  	FILTER :gs.getMessage("Filter")
  };
  return result;
};

SNMapHelper.getMapPageInfo = function(sysId){
  var gr = new GlideRecord("cmn_map_page");
  gr.get(sysId);
  return {
  	"center_address":gr.getValue("center_address"),
  	"centrer_latitude":gr.getValue("center_latitude"),
  	"centrer_longitude":gr.getValue("centrer_longitude"),
  	"initial_zoom":gr.getValue("initial_zoom"),
  	"name": gr.getDisplayValue("name"),
  	"map_type": gr.getValue("type"),
  	"disable_map_controls": gr.getValue("disable_map_controls") ? gr.getValue("disable_map_controls").split(","): [],
  	"disable_nav_bar": gr.getValue("disable_nav_bar"),
  };
};

SNMapHelper.getMapConfigStr = function(sysId) {
  
  var mapPageRecord = new GlideRecord("cmn_map_page");
  mapPageRecord.get(sysId);
  
  var hasValidRoles = SNMapHelper.validateRoles(mapPageRecord);
  
  if (!hasValidRoles) {
  	return JSON.stringify({
  		"hasValidRoles": "false"
  	});
  }
  
  var language = gs.getSession().getLanguage();
  var usrLocRegion = global.SNMapHelper.getUserProfileLocation();
  var tollSetting = gs.getProperty('work.management.allow.toll.roads');
  if (tollSetting == null || tollSetting.length == 0)
  	tollSetting = gs.getProperty('glide.geolocation.allow.toll.roads', 'false');
  var mapAPIConfig = {
  	google_map: {
  		auto_close: gs.getProperty('google.maps.auto_close', 'true'),
  		hide_landmarks: gs.getProperty('google.maps.hide_landmarks', ''),
  		show_landmarks: gs.getProperty('google.maps.show_landmarks', ''),
  		allow_toll: tollSetting,
  		ver: gs.getProperty('google.maps.version', '3.37'),
  		lang: language,
  		region: usrLocRegion.region,
  	},
  	production_instance: gs.getProperty('glide.installation.production'),		
  };
  // set google map client id or api key
  switch (gs.getProperty('google.maps.method')) {
  	case "client-id":
  		mapAPIConfig.google_map["client_id"] = SNMapHelper.getMapClientId();
  		break;
  	case "key":
  		mapAPIConfig.google_map["api_key"] = SNMapHelper.getMapApiKey();
  		break;
  	default:
  		mapAPIConfig.google_map["api_key"] = SNMapHelper.getMapApiKey();
  		break;
  		
  }
  var configConsts = new global.SNMapHelper.getConfigConsts();
  var mapPageInfo = new global.SNMapHelper.getMapPageInfo(sysId);
  var smapObj = {
  	hasValidRoles: "true",
  	mapAPIConfig: mapAPIConfig,
  	configConsts: configConsts,
  	mapPageInfo: mapPageInfo
  };
  var smapObjStr = JSON.stringify(smapObj);
  return smapObjStr;
};
// NEXT: honor map settings
SNMapHelper.getUserProfileLocation = function() {
  // set default location
  var location = {lat: 0, lng: 0};
  var usrGR = new GlideRecord("sys_user");
  usrGR.get(gs.getUserID());
  var usrProfLoc = usrGR.location;
  if (usrProfLoc) {
  	location.lat = +usrProfLoc.latitude;
  	location.lng = +usrProfLoc.longitude;
  }
  var isRegionEnabled = gs.getProperty("google.maps.localization.region.enable") == "true";
  return {
  	location: location,
  	region: isRegionEnabled ? usrGR.getValue("country") : ""
  };
};
SNMapHelper.getMapClientId = function() {
  return GoogleMaps.getMapsClientId();
};
SNMapHelper.getMapPrivateKey = function() {
  return gs.getProperty("google.maps.client.key");
};
SNMapHelper.getMapApiKey = function() {
  return GoogleMaps.getMapsKey();
};
SNMapHelper.validateRoles = function(mapPageRecord) {
  var roles = mapPageRecord.getValue("roles") ? 
  	mapPageRecord.getValue("roles") : 
  	"snc_internal";
  
  return gs.hasRole(roles);
};

/* 
* Invoked from Business rule on cmn_location to determine if Geocoding is required to fetch the lat,lang upon address change 
* @param current - current GlideRecord object that is about to insert/update a record
* @return false - if address changed and the lat/lang are part of the current insert/update
*         true - if address changed and the lat/lang are not being updated/inserted in the current gliderecord object   
*/

SNMapHelper.isLatLangUpdateRequired = function(current) {
  var operation = current.operation();
  return isAddressChanging(current) && !isLatLangPresentInCurrent(current);
  
  function isLatLangPresentInCurrent(current) {
      if (operation == "insert") {
          return !(current.latitude.nil() || current.longitude.nil());
      }
      return ((current.latitude.changes() || current.longitude.changes()) && (!current.latitude.changesTo("") && !current.longitude.changesTo("")));
  }

  function isAddressChanging(current) {
      if (operation == "insert") {
          return (!current.street.nil() || !current.city.nil() || !current.state.nil() || !current.zip.nil() || !current.country.nil());
      }
      return current.street.changes() || current.city.changes() || current.state.changes() || current.zip.changes() || current.country.changes();
  }
};

Sys ID

7716aa94e743330074246188d2f6a903

Offical Documentation

Official Docs: