Name

sn_ex_sp.KBContentTranslationUtilSNC

Description

No description available

Script

var KBContentTranslationUtilSNC = Class.create();
KBContentTranslationUtilSNC.prototype = {
  initialize: function () {
      this.KB_TABLE = 'kb_knowledge';
      this.CONTENT_TABLE = 'm2m_connected_content';
      this.SCRIPT_INCLUDE_TABLE = 'sys_script_include';
  },
  /*
   * Returns translated versions of a Knowledge connected content
   */
  getTranslatedVersionsFromSysId: function (kbSysId) {
      var kbGr = this.getKbGr(kbSysId);
      if (!kbGr) {
          return null;
      }
      return this.getTranslatedVersionsFromGr(kbGr, null);
  },
  getTranslatedVersionsFromGr: function (kbGr, language) {
      var scriptIncludeGr = new GlideRecord(this.SCRIPT_INCLUDE_TABLE);
      scriptIncludeGr.get('a9e307e653ae3010b6eaddeeff7b122f');
      var translatedVersionsEncodedQuery = scriptIncludeGr.hasNext() ? new global.KBTranslation().getTranslatedVersionEncodedQuery(kbGr) : 
                                          this.getTranslatedVersionEncodedQuery(kbGr);
      var translatedVersionsGr = new GlideRecord(this.KB_TABLE);
      translatedVersionsGr.addEncodedQuery(translatedVersionsEncodedQuery);
      if (!gs.nil(language)) {
          translatedVersionsGr.addQuery('language', language);
      }
      translatedVersionsGr.query();
      return translatedVersionsGr;
  },
  getKbGr: function (kbSysId) {
      var kbGr = new GlideRecord(this.KB_TABLE);
      kbGr.get(kbSysId);
      return kbGr;
  },
  addTranslatedVersionsToTopic: function (contentGr) {
      var translatedVersionsGr = this.getTranslatedVersionsFromSysId(contentGr.getValue('knowledge'));
      while (translatedVersionsGr.next()) {
          var newContentGr = new GlideRecord(this.CONTENT_TABLE);
          newContentGr.addQuery('knowledge', translatedVersionsGr.getUniqueValue());
          newContentGr.addQuery('topic', contentGr.getValue('topic'));
          newContentGr.query();
          if (!newContentGr.next()) {
              newContentGr.initialize();
              newContentGr.setValue('topic', contentGr.getValue('topic'));
              newContentGr.setValue('knowledge', translatedVersionsGr.getUniqueValue());
              newContentGr.setValue('order', contentGr.getValue('order'));
              newContentGr.setValue('content_type', contentGr.getValue('content_type'));
              newContentGr.setValue('content_table', contentGr.getValue('content_table'));
              newContentGr.insert();
              gs.info(translatedVersionsGr.getDisplayValue() + ' was added to '+ (contentGr.getElement('topic')).name+'('+contentGr.getValue('topic')+')');
          }
      }
  },
  removeTranslatedVersionsFromTopic: function (contentGr) {
      var translatedVersionsGr = this.getTranslatedVersionsFromSysId(contentGr.getValue('knowledge'));
      while (translatedVersionsGr.next()) {
          var delContentGr = new GlideRecord(this.CONTENT_TABLE);
          delContentGr.addQuery('knowledge', translatedVersionsGr.getUniqueValue());
          delContentGr.addQuery('topic', contentGr.getValue('topic'));
          delContentGr.query()
          while (delContentGr.next()) {
              delContentGr.deleteRecord();
              gs.addInfoMessage(gs.getMessage("A translated version of the deleted Knowledge article was automatically removed"));
          }
      }
  },
  addNewKBToTopic: function (kbGr) {
      var translatedVersionsGr = this.getTranslatedVersionsFromGr(kbGr, null);
      var translatedVersionsArr = [];
      if (kbGr.operation() == 'insert') {
          while (translatedVersionsGr.next()) {
              translatedVersionsArr.push(translatedVersionsGr.getUniqueValue());
          }
          var contentGr = new GlideAggregate(this.CONTENT_TABLE);
          contentGr.addQuery('knowledge', 'IN', translatedVersionsArr);
          contentGr.groupBy('topic');
          contentGr.groupBy('content_type');
          contentGr.query();
          while (contentGr.next()) {
              var newContentGr = new GlideRecord(this.CONTENT_TABLE);
              newContentGr.addQuery('knowledge', kbGr.getUniqueValue());
              newContentGr.addQuery('topic', contentGr.getValue('topic'));
              newContentGr.query();
              if (!newContentGr.next()) {
                  newContentGr.initialize();
                  newContentGr.setValue('topic', contentGr.getValue('topic'));
                  newContentGr.setValue('knowledge', kbGr.getUniqueValue());
                  newContentGr.setValue('order', contentGr.getValue('order'));
                  newContentGr.setValue('content_type', contentGr.getValue('content_type'));
                  newContentGr.insert();
              }
          }
      }
      else{
          translatedVersionsArr.push(kbGr.getUniqueValue());
          while(translatedVersionsGr.next()){
              translatedVersionsArr.push(translatedVersionsGr.getUniqueValue());
          }
          var contentGr = new GlideAggregate(this.CONTENT_TABLE);
          contentGr.addQuery('knowledge', 'IN', translatedVersionsArr);
          contentGr.groupBy('topic');
          contentGr.groupBy('content_type');
          contentGr.query();
          while (contentGr.next()) {
              translatedVersionsArr.forEach(function(kbSysId){
                  var newContentGr = new GlideRecord(this.CONTENT_TABLE);
                  newContentGr.addQuery('knowledge', kbSysId);
                  newContentGr.addQuery('topic', contentGr.getValue('topic'));
                  newContentGr.query();
                  if (!newContentGr.next()) {
                      newContentGr.initialize();
                      newContentGr.setValue('topic', contentGr.getValue('topic'));
                      newContentGr.setValue('knowledge', kbSysId);
                      newContentGr.setValue('order', contentGr.getValue('order'));
                      newContentGr.setValue('content_type', contentGr.getValue('content_type'));
                      newContentGr.insert();
                  }
              },this)
          }
      }
  },

  /**
   * returns encoded query for getting translated version of given article .
   * 
   * @param GlideRecord: kb_knowledge record.
   * 
   * Replica of new global.KBTranslation().getTranslatedVersionEncodedQuery(kbGr) to support Rome
   */
  
  getTranslatedVersionEncodedQuery: function(articleGr){
      var kbArticleGr = new GlideRecord('kb_knowledge');
      
      if (GlidePluginManager.isActive('com.snc.knowledge_advanced') && !articleGr.summary.nil()) {
          //Versioning is installed and this article is versioned.
          if (gs.nil(articleGr.parent)) {
              kbArticleGr.addQuery('parent',articleGr.sys_id)
                         .addOrCondition('parent.summary', articleGr.summary);
          } else {
              kbArticleGr.addQuery('summary', '!=', articleGr.summary);
              //Bypass Before query BRs for dotwalking.
              var temp = new GlideRecord('kb_knowledge');
              //temp.setWorkflow(false);
              temp.get(articleGr.parent);
              kbArticleGr.addQuery('parent',articleGr.parent).addOrCondition('parent.summary',articleGr.summary).addOrCondition('summary', temp.summary);
          }
      } else {
          if (gs.nil(articleGr.parent))
              kbArticleGr.addQuery('parent', articleGr.sys_id);
          else {
              kbArticleGr.addQuery('sys_id', '!=', articleGr.sys_id);
              kbArticleGr.addQuery('parent', articleGr.parent).addOrCondition('sys_id', articleGr.parent);
          }
      }
      return kbArticleGr.getEncodedQuery()+'';
  },
  translatedVersionDoesntExist: function(contentGr) {
      var translatedVersionsGr = this.getTranslatedVersionsFromSysId(contentGr.getValue('knowledge'));
      while (translatedVersionsGr.next()){
          var newContentGr = new GlideRecord(this.CONTENT_TABLE);
          newContentGr.addQuery('knowledge', translatedVersionsGr.getUniqueValue());
          newContentGr.addQuery('topic', contentGr.getValue('topic'));
          newContentGr.query();
          if(newContentGr.next()){
              return false;
          }
      }
      return true;
  },
  type: 'KBContentTranslationUtilSNC'
};

Sys ID

97bf46b06b1101100a06c141ee44af84

Offical Documentation

Official Docs: