Name
sn_ex_sp.TopicServiceUtilSNC
Description
No description available
Script
var TopicServiceUtilSNC = Class.create();
TopicServiceUtilSNC.prototype = {
initialize: function () {
this.SORT_BY_FIELD_ORDER = 'order';
this.SORT_BY_FIELD_POPULARITY = 'popularity';
},
/*
* Check if article is in user preferred language or Glide system language(fallback)
*/
isValidArticleLanguage: function (m2mGr) {
var kbGr = new GlideRecord('kb_knowledge');
if (kbGr.get(m2mGr.getValue('knowledge'))) {
var articleLanguage = kbGr.getValue('language');
var userPreferredLanguage = gs.getSession().getLanguage();
var systemFallbackLanguage = gs.getProperty('glide.sys.language');
var validLanguages = [];
validLanguages.push(userPreferredLanguage);
validLanguages.push(systemFallbackLanguage);
if (articleLanguage === userPreferredLanguage)
return true;
if (validLanguages.indexOf(articleLanguage) == -1) {
return false;
} else if (articleLanguage.equals(systemFallbackLanguage)) {
if (this.hasTranslatedArticleInUPL(kbGr, userPreferredLanguage, m2mGr.getValue('topic')))
return false;
}
return true;
}
else {
return false;
}
},
hasTranslatedArticleInUPL: function (currentGr, language, topicId) {
var kbGr = new KBContentTranslationUtil().getTranslatedVersionsFromGr(currentGr, language);
if (kbGr.next() && kbGr.getValue('workflow_state') === 'published' && this.isKBPresentInTopic(kbGr, topicId)) {
return true;
}
return false;
},
getTranslatedArticleInSelectedLanguage: function (m2mGr) {
var kbGr = new GlideRecord('kb_knowledge');
if (kbGr.get(m2mGr.getValue('knowledge'))) {
var articleLanguage = kbGr.getValue('language');
var userPreferredLanguage = gs.getSession().getLanguage();
var systemFallbackLanguage = gs.getProperty('glide.sys.language');
if (articleLanguage === userPreferredLanguage) {
return kbGr;
}
var kbGrUPL = new KBContentTranslationUtil().getTranslatedVersionsFromGr(kbGr, userPreferredLanguage);
if (kbGrUPL.next() && kbGrUPL.getValue('workflow_state') === 'published' && this.isKBPresentInTopic(kbGrUPL, m2mGr.getValue('topic'))) {
return kbGrUPL;
}
else {
if (articleLanguage === systemFallbackLanguage) {
return kbGr;
}
var kbGrFallback = new KBContentTranslationUtil().getTranslatedVersionsFromGr(kbGr, systemFallbackLanguage);
if (kbGrFallback.next() && kbGrFallback.getValue('workflow_state') === 'published' && this.isKBPresentInTopic(kbGrFallback, m2mGr.getValue('topic'))) {
return kbGrFallback;
}
}
return null;
}
else {
return null;
}
},
/*
* Wrapper for getContent function in Topic API
*/
getContent: function (topicId, includeChildTopics, limit, isMobile, excludeItems, contentConfigIds) {
return this.filterContentByLanguage(topicId, includeChildTopics, limit, isMobile, excludeItems, contentConfigIds, this.SORT_BY_FIELD_ORDER);
},
/*
* Wrapper for getContentByPopularity function in Topic API
*/
getContentByPopularity: function (topicId, includeChildTopics, limit, isMobile, excludeItems, contentConfigIds) {
return this.filterContentByLanguage(topicId, includeChildTopics, limit, isMobile, excludeItems, contentConfigIds, this.SORT_BY_FIELD_POPULARITY);
},
/*
* Wrapper for getFeaturedContent function
*/
getFeaturedContent: function (topicId, featuredContentCount, isMobileApp, filterBy) {
var taxonomyUtil = new global.TaxonomyPortalUtil();
var featuredContent = taxonomyUtil.getFeaturedContent(topicId, featuredContentCount, isMobileApp, filterBy);
if (GlidePluginManager.isActive('com.glideapp.knowledge.i18n2')) {
return this.filterFeaturedContentByLanguage(featuredContent);
} else {
return featuredContent;
}
},
filterContentByLanguage: function (topicId, includeChildTopics, limit, isMobile, excludeItems, contentConfigIds, sortByField) {
var KB_CONTENT_TYPE = '4c32a92153622010069addeeff7b12a3';
var topicJs = new sn_taxonomy.Topic(topicId);
var contentArr = [];
var translatedArr = [];
while (translatedArr.length < limit && (contentArr.length === 0 || contentArr.length === limit)) {
if (sortByField === this.SORT_BY_FIELD_ORDER) {
contentArr = topicJs.getContent(includeChildTopics, limit, isMobile, excludeItems, contentConfigIds);
}
else {
contentArr = topicJs.getContentByPopularity(includeChildTopics, limit, isMobile, excludeItems, contentConfigIds);
}
if (!contentArr || contentArr.length === 0) {
break;
}
if (!GlidePluginManager.isActive('com.glideapp.knowledge.i18n2') || gs.getProperty('taxonomy.knowledge.translation.tokyo')) {
return contentArr;
}
for (var i = 0; i < contentArr.length; i++) {
var content = contentArr[i];
if (content.content_type === KB_CONTENT_TYPE) {
var contentGr = new GlideRecord('m2m_connected_content');
contentGr.get(content.sys_id);
if (contentGr && this.isValidArticleLanguage(contentGr)) {
translatedArr.push(content);
}
}
else {
translatedArr.push(content);
}
if (translatedArr.length === limit) {
break;
}
}
var sysIdArr = [];
for (var j = 0; j < contentArr.length; j++) {
sysIdArr.push(contentArr[j].content);
}
excludeItems = excludeItems.concat(sysIdArr);
}
return translatedArr;
},
filterFeaturedContentByLanguage: function (featuredContent) {
var translatedArr = [];
featuredContent.forEach(function (content) {
if (content.content_table === 'kb_knowledge') {
var contentGr = new GlideRecord('m2m_connected_content');
contentGr.get(content.sys_id);
var kbInSelectedLang = this.getTranslatedArticleInSelectedLanguage(contentGr);
if (kbInSelectedLang) {
translatedArr.push(this.getContentFromKB(kbInSelectedLang, contentGr.getValue('topic')));
}
}
else {
translatedArr.push(content);
}
}, this);
return translatedArr;
},
getContentFromKB: function (kbGr, topic) {
var contentObj = {};
var m2mGr = new GlideRecord('m2m_connected_content');
m2mGr.addQuery('knowledge', kbGr.getUniqueValue());
m2mGr.addQuery('topic', topic);
m2mGr.query();
if (m2mGr.next()) {
contentObj.sys_id = m2mGr.getUniqueValue();
contentObj.content_table = 'kb_knowledge';
contentObj.content = kbGr.getUniqueValue();
contentObj.topic = topic;
contentObj.popularity = m2mGr.getValue('popularity');
return contentObj;
}
return null;
},
isKBPresentInTopic: function (kbGr, topicId) {
var contentGr = new GlideRecord('m2m_connected_content');
contentGr.addQuery('topic', topicId);
contentGr.addQuery('knowledge', kbGr.getUniqueValue());
contentGr.query();
if (contentGr.hasNext()) {
return true;
}
else {
return false;
}
},
type: 'TopicServiceUtilSNC'
};
Sys ID
6cb9e3866b35011050bdc141ee44af0c