Name
sn_ex_sp.PortalExtensibleNavigationUtilSNC
Description
WARNING Customers should NOT modify this script The purpose of this script include is to provide default behaviours for the PortalExtensibleNavigationUtilSNC script include. To change the behaviour of these methods (or add new methods), Customers should override/add new methods to the PortalExtensibleNavigationUtil script include.
Script
var PortalExtensibleNavigationUtilSNC = Class.create();
PortalExtensibleNavigationUtilSNC.prototype = {
initialize: function() {},
getMenus: function(portalExtensibleNavigation) {
var menuGr = this._getSpMenuItemGr(portalExtensibleNavigation);
if (menuGr) {
var menuSysIds = [];
while (menuGr.next()) {
menuSysIds.push(menuGr.getUniqueValue());
}
return 'sys_idIN' + menuSysIds.join(',');
}
return 'sys_idIN';
},
getTopics: function(portalExtensibleNavigation) {
var topicGr = this._getTopicGr(portalExtensibleNavigation);
if (topicGr) {
var topicSysIds = [];
while (topicGr.next()) {
topicSysIds.push(topicGr.getUniqueValue());
}
return 'sys_idIN' + topicSysIds.join(',');
}
return 'sys_idIN';
},
_getPortalTaxonomy: function(portalExtensibleNavigation) {
if (portalExtensibleNavigation && portalExtensibleNavigation.portal) {
var portalTaxonomyGr = new GlideRecord("m2m_sp_portal_taxonomy");
portalTaxonomyGr.addActiveQuery();
portalTaxonomyGr.query('sp_portal', portalExtensibleNavigation.portal);
portalTaxonomyGr.query();
if (portalTaxonomyGr.next()) {
return portalTaxonomyGr.taxonomy;
}
}
return null;
},
_getPortalExtensibleNavObject: function(order, itemType, item, portalNavigation) {
var portalNavigationObj = {};
portalNavigationObj['order'] = order;
portalNavigationObj['itemType'] = itemType;
portalNavigationObj['item'] = item;
portalNavigationObj['portalNavigation'] = portalNavigation;
return portalNavigationObj;
},
_getExtensibleNavigationItemsForSync: function(sysId) {
var extensibleNavigationItems = [];
var extensibleItemGr = new GlideRecord('sn_ex_sp_portal_extensible_navigation_item');
extensibleItemGr.addQuery('portal_extensible_navigation', sysId);
extensibleItemGr.query();
while (extensibleItemGr.next()) {
var item = this._getItem(extensibleItemGr);
extensibleNavigationItems.push(item);
}
return extensibleNavigationItems;
},
_getItem : function(extensibleItemGr){
var item = {
type: extensibleItemGr.getValue('navigation_item_type'),
order: extensibleItemGr.getValue('order') ? Number(extensibleItemGr.getValue('order')) : 99999
};
if (item.type == 'menu') {
item.sysId = extensibleItemGr.menu.toString();
item.name = extensibleItemGr.getDisplayValue('menu');
} else {
item.sysId = extensibleItemGr.topic.toString();
item.name = extensibleItemGr.getDisplayValue('topic');
}
return item;
},
syncPortalExtensibleNavItems: function(portalExtensibleNavigation) {
try {
var portalNavItems = this.getPortalTopicAndMenuItems(portalExtensibleNavigation);
var portalExtensibleNavItems = this._getExtensibleNavigationItemsForSync(portalExtensibleNavigation.getUniqueValue());
var taxonomy = this._getPortalTaxonomy(portalExtensibleNavigation);
// if no elements in extensible nav item table, then populate records with order
if (portalNavItems.length > 0 && portalExtensibleNavItems.length == 0) {
this._insertPortalExtensibleNavItems(portalNavItems, taxonomy, portalExtensibleNavigation.portal.sp_rectangle_menu);
return true;
}
// insert items in extensibleNavItem table if not present
var portalNavigationItems = [];
for (var i = 0; i < portalNavItems.length; i++) {
var findExtensibleNavItem = portalExtensibleNavItems.some(function(navItem) {
return portalNavItems[i].item == navItem.sysId;
});
if (!findExtensibleNavItem) {
portalNavigationItems.push(this._getPortalExtensibleNavObject('99999', portalNavItems[i].itemType, portalNavItems[i].item, portalExtensibleNavigation.sys_id));
}
}
if (portalNavigationItems.length) {
this._insertPortalExtensibleNavItems(portalNavigationItems, taxonomy, portalExtensibleNavigation.portal.sp_rectangle_menu);
}
return true;
} catch (ex) {
return false;
}
},
getPortalTopicAndMenuItems: function(portalExtensibleNavigation) {
var portalItems = [];
var lastMenuOrder = "0";
var topicGr = this._getTopicGr(portalExtensibleNavigation, true);
if (topicGr) {
while (topicGr.next()) {
lastMenuOrder = gs.nil(topicGr.getDisplayValue('order')) ? '0' : topicGr.getDisplayValue('order');
portalItems.push(this._getPortalExtensibleNavObject(lastMenuOrder, 'topic', topicGr.getUniqueValue(), portalExtensibleNavigation.sys_id));
}
}
var spMenuGr = this._getSpMenuItemGr(portalExtensibleNavigation, true);
lastMenuOrder = Number(lastMenuOrder);
if (spMenuGr) {
while (spMenuGr.next()) {
lastMenuOrder = lastMenuOrder + 100;
portalItems.push(this._getPortalExtensibleNavObject(lastMenuOrder, 'menu', spMenuGr.getUniqueValue(), portalExtensibleNavigation.sys_id));
}
}
return portalItems;
},
populatePortalNavigationItems: function(portalExtensibleNavigation) {
var portalItems = this.getPortalTopicAndMenuItems(portalExtensibleNavigation);
var taxonomy = this._getPortalTaxonomy(portalExtensibleNavigation);
this._insertPortalExtensibleNavItems(portalItems, taxonomy, portalExtensibleNavigation.portal.sp_rectangle_menu);
return;
},
_getTopicGr: function(portalExtensibleNavigation, isOrdered) {
var taxonomy = this._getPortalTaxonomy(portalExtensibleNavigation);
if (taxonomy) {
var topicGr = new GlideRecord('topic');
topicGr.addActiveQuery();
topicGr.addNullQuery('parent_topic');
topicGr.addQuery('taxonomy', taxonomy);
if (isOrdered) {
topicGr.orderBy('order');
}
topicGr.query();
return topicGr;
}
return null;
},
_getSpMenuItemGr: function(portalExtensibleNavigation, isOrdered) {
if (portalExtensibleNavigation && portalExtensibleNavigation.portal && portalExtensibleNavigation.portal.sp_rectangle_menu) {
var menuGr = new GlideRecord('sp_rectangle_menu_item');
menuGr.addActiveQuery();
menuGr.addNullQuery('sp_rectangle_menu_item');
menuGr.addEncodedQuery('sp_rectangle_menu=' + portalExtensibleNavigation.portal.sp_rectangle_menu + '^sys_id!=01ef85b65368301056c1ddeeff7b12ce');
if (isOrdered) {
menuGr.orderBy('order');
}
menuGr.query();
return menuGr;
}
return null;
},
_insertPortalExtensibleNavItems: function(portalNavigationItems, taxonomy, portalMenu) {
var navItemGr = new GlideRecord('sn_ex_sp_portal_extensible_navigation_item');
portalNavigationItems.forEach(function(navigationItem) {
navItemGr.initialize();
navItemGr.portal_extensible_navigation = navigationItem.portalNavigation;
navItemGr.order = navigationItem.order;
navItemGr.navigation_item_type = navigationItem.itemType;
if (navigationItem.itemType === 'topic') {
navItemGr.topic = navigationItem.item;
} else {
navItemGr.menu = navigationItem.item;
}
navItemGr.insert();
});
},
getExtensibleNavigationItems: function(portalId, fetchAll) {
var extensibleNavigationItems = [];
var extensibleNavigationGr = new GlideRecord('sn_ex_sp_portal_extensible_navigation');
if (!fetchAll) {
extensibleNavigationGr.addActiveQuery();
}
extensibleNavigationGr.addQuery('portal', portalId);
extensibleNavigationGr.query();
if (extensibleNavigationGr.next()) {
var extensibleItemGr = new GlideRecord('sn_ex_sp_portal_extensible_navigation_item');
extensibleItemGr.addActiveQuery();
extensibleItemGr.addQuery('portal_extensible_navigation', extensibleNavigationGr.getUniqueValue());
extensibleItemGr.query();
while (extensibleItemGr.next()) {
var item = this._getItem(extensibleItemGr);
extensibleNavigationItems.push(item);
}
extensibleNavigationItems.sort(function(a, b) {
if (a.order > b.order) {
return 1;
} else if (a.order < b.order) {
return -1;
} else {
if (a.name > b.name) {
return 1;
}
return -1;
}
});
}
return extensibleNavigationItems;
},
type: 'PortalExtensibleNavigationUtilSNC'
};
Sys ID
b91680fceba295104a299f671352284b