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

Offical Documentation

Official Docs: