GildeRecord not working in widget server script

v-paulp
Tera Contributor

Hi 

All we have one requirement  by clicking a button need to change the kb_knlowledge author from the portal.

And I have add below script but it is not working.

client Script

c.Review = function(des){
alert(des);
c.data.action1="get_value";
c.data.reviewtime1=des;
c.server.update();

}

Server script 

if(input && input.action1=="get_value"){
console.log("input" + input.reviewtime1);
data.reviewtime=input.reviewtime1;
console.log(data.reviewtime);
var grupdate = new GlideRecord('kb_knowledge');
grupdate.addQuery('sys_id',data.reviewtime);
grupdate.query();
if(grupdate.next()){
/*var actualreviewdate = grupdate.u_review_date;
var gdt = new GlideDateTime(actualreviewdate);
gdt.addMonths(12);
grupdate.u_review_date=gdt;*/
console.log('test');
grupdate.author='9413981c1b445154f75a0e55cc4bcb39';
grupdate.update();
//data.time=knowledgeRecord.u_review_date;
}
}

 

Code is executing till console.log(data.reviewtime);  line .

The glideRecord part not executing I check it from console.log.

 

 

 

7 REPLIES 7

Still not working

 

Please place gs.info or gs.log to check if it is going inside if statement or not and also to check if correct sys_id is showing.

 

Also, check that a user exists with the sys_id - 9413981c1b445154f75a0e55cc4bcb39

 

may be you can share the full code so that few more suggestions can be provided.

sys_id is correct and I tun this code to background script and it is working there.

There is one OOB widget named Knowledge article content and I clone that widget make modification

Here is the full script

HTML code

<div class="kb-article-wrapper">
  <div ng-if="data.versionWarningMessage && c.options.show_version_info != 'false'" class="alert alert-info alert-dismissible" role="alert">
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <div ng-bind-html="data.versionWarningMessage">
    </div>
  </div>
<div ng-if="c.data.replacementArticleId" class="alert alert-info alert-dismissible" role="alert">
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <div ng-bind-html="c.data.replacementAlert">
    </div>
  </div>
  <div ng-if="::data.isValid" ng-class="{'kb-mobile' : c.isMobile, 'panel panel-default kb-desktop' : !c.isMobile, 'mesp-ui' : c.data.isMESP}">
    <div class="kb-panel-heading" ng-class="{'panel-heading' : !c.isMobile}">
      <span ng-class="{'panel-title' : !c.isMobile}">
        <div class="row">
          <span class="col-md-5 kb-panel-title-header">
            <div class="kb-number-info">
              <span>{{data.number}}</span>
  <span ng-if="!c.isMobile && !data.showHistory && data.workflowState">{{data.workflowState}}</span>
              <span ng-if="data.isKBAdmin && data.isArticleExpired">${(Expired)}</span>
              <span ng-if="!c.isMobile && data.showHistory && c.options.show_version_info != 'false'"> - 
                <div class="dropdown inline" role="list">
                  <button id="kbVersionButton" aria-expanded="{{!c.showVersions}}" class="btn btn-default kb-version dropdown-toggle kb-dropdown-button transparent-button" data-toggle="dropdown" ng-click="c.toggleVersions()" aria-label="{{data.versionInfoLabel}}"> {{data.versionInfo}}
                    <i class="fa fa-chevron-down" aria-hidden="true"></i>
                  </button>
              <span ng-if="!c.isMobile && data.workflowState">{{data.workflowState}}</span>
                  
                  <ul id="kbVersionMenuList" class="dropdown-menu dropdown-menu-left version-menu-list">
                    <li class="kb-version" ng-repeat="version in data.versionList">
                      <a ng-if="!version.isCurrent && data.viewAsUser.length == 0" href="?id=kb_article_view&sys_kb_id={{version.sysId}}" 
                         aria-label="${{{version.versionLabel}} - {{version.versionText}}}">{{version.versionNumber}} - {{version.versionText}}</a>
                      <a ng-if="!version.isCurrent && data.viewAsUser.length > 0" href="?id=kb_article_view&sys_kb_id={{version.sysId}}&view_as_user={{data.viewAsUser}}" 
                         aria-label="${{{version.versionLabel}} - {{version.versionText}}}">{{version.versionNumber}} - {{version.versionText}}</a>
                      <span ng-if="version.isCurrent"><b>{{version.versionNumber}} - {{version.versionText}}</b></span>
                    </li>
                  </ul>
                </div>
  </span>
            </div>
          </span>
          <div ng-if="!c.isMobile && !$root.hideFeedbackOptions && c.options.hide_all_actions != 'true'" class="col-md-7 kb-end-buttons">
            <div class="dropdown kb-end-buttons">
              <span class="pull-left">
                <sp-widget widget="data.favoriteWidget"></sp-widget>
              </span>
              <span class="hidden-sm hidden-xs" ng-if="!data.externalArticle">
                <button ng-mouseover="c.handleSubscribeButtonFocus()"
                   ng-if="data.properties.isSubscriptionEnabled"
                   ng-mouseleave="c.handleSubscribeButtonBlur()"
                   ng-focus="c.handleSubscribeButtonFocus()"
                   ng-blur="c.handleSubscribeButtonBlur()"
                   class="btn btn-default kb-subscribe kb-sub-icon apply-brand-color" ng-click="c.handleSubscription()">
                    {{data.subscribeLabel}}
                </button>
              </span>
              <button ng-if="c.showAttachArticle()" class="btn btn-default" type="button" ng-click="c.attachToTask()" aria-label="{{::data.messages.ATTACH_TO_TASK_LABEL}}">{{::data.messages.ATTACH_TO_TASK_LABEL}}</button>
              <button id="actionMenuLabel" ng-if="c.showActionMenu() && !$root.readOnly" 
                      class="btn btn-default dropdown-toggle kb-dropdown-button more-actions-menu apply-brand-color" type="button" data-toggle="dropdown" aria-label="{{::data.messages.ACTION_MENU}}">
                {{::data.messages.ACTION_MENU_LABEL}}
                <i class="fa fa-chevron-down" aria-hidden="true"></i>
              </button>
              <ul id="kbActionMenuList" class="dropdown-menu dropdown-menu-right moreActionsMenuList">
                <li class="kb-menu-entry hidden-md hidden-lg visible-sm visible-xs" ng-if="data.properties.isSubscriptionEnabled && !data.externalArticle">
                  <a ng-mouseover="c.handleSubscribeButtonFocus()"
                     ng-if="data.properties.isSubscriptionEnabled && c.options.hide_subscription != 'true'"
                     ng-mouseleave="c.handleSubscribeButtonBlur()"
                     ng-focus="c.handleSubscribeButtonFocus()"
                     ng-blur="c.handleSubscribeButtonBlur()"
                     href="javascript&colon;void(6)"
                     ng-click="c.handleSubscription()">
                    <span  class="kb-sub-icon" aria-label="{{data.subscribeLabel}}">
                      {{data.subscribeLabel}}
                    </span>
                  </a>
                </li>
                <li class="kb-menu-entry" ng-if="c.showFlagArticle"><a id="flagArticleButton" href="javascript&colon;void(1)" data-toggle="modal" ng-click="c.launchFlagModal($event)">{{data.messages.FLAG_ARTICLE}}</a></li>
                <li class="kb-menu-entry" ng-if="c.showCreateIncident"><a target="_blank" href="{{c.createIncidentURL}}">{{c.createIncidentLabel}}</a></li>
                <li class="kb-menu-entry" ng-if="data.properties.isEditable  && data.kbName != 'IT - Tier 1 - Service Desk and Account Admin'" ><a target="_blank" href="{{c.editUrl}}">{{data.messages.EDIT}}</a></li>
                <li class="kb-menu-entry"><a ng-click="c.Review(data.article_sys_id)">{{data.messages.REVIEW}}</a></li>
<li class="kb-menu-entry" ng-if="data.kbDocSysId"><a target="_blank" href="sys_attachment.do?sys_id={{data.kbDocSysId}}">{{data.messages.DOWNLOAD_DOCUMENT}}</a></li>
              </ul>
            </div>
            <!-- Flag article modal -->
          </div>
        </div>
      </span>
    </div>
    <div class="kb-wrapper" ng-class="c.isMobile ? 'kb-mobile' : 'panel-body kb-desktop'">
      <h1 lang="{{c.selectedLanguage.language}}" class="widget-header kb-title-header">{{::data.shortDesc}}</h1>
      <div class="kb-language-block pad-right text-nowrap" ng-if="data.langList.length > 1" ng-cloak>
        <div class="kb-language">
          <div class="dropdown">
            <button class="dropdown-toggle transparent-button trim-padding-right kb-lang-dropdown-btn" aria-label="${Language: {{c.selectedLanguage.label}}}. Select to choose other available languages to view this article." aria-haspopup="true" data-toggle="dropdown">
              <span class="lang-icon" aria-hidden="true"><i class="fa fa-globe"></i></span>
              <span lang="{{c.selectedLanguage.language}}" class="lang-data" ng-class="{'hidden-xs':!c.isMobile}">${{{c.selectedLanguage.label}}}</span>
            </button>
            <ul class="dropdown-menu dd-right-menu" role="list">
              <li ng-repeat="item in data.langList" role="listitem">
                 <a lang="{{item.language}}" ng-click="c.selectLanguage($index)" href="javascript&colon;void(1)" role="menuitem">${{{item.label}}}</a>
              </li>
            </ul>
          </div>
        </div>
      </div>
      <div class="title-secondary-data">
        <span ng-if="!c.isMobile" class="sr-only">${Article metadata.}</span>
        <span ng-if="data.revisionString" class="author pad-right text-nowrap">
          <span ng-if="!c.isMobile && data.langList.length > 1" class="pad-right" aria-hidden="true">&#8226;</span>
          <i class="fa fa-user pad-right" aria-hidden="true"/>
          {{data.revisionString}}
        </span>
        <span ng-if="!c.isMobile && data.externalArticle" class="pad-right text-nowrap">
          {{data.messages.EXTERNAL_CONTENT}}
        </span>
        <br class="visible-xs" aria-hidden="true"/>
        <div class="published published-date pad-right text-nowrap">
          <span class="sr-only">${This article was updated}</span>
          <span class="pad-right hidden-xs" ng-if="!c.isMobile" aria-hidden="true">&#8226;</span> <i class="fa fa-calendar pad-right" aria-hidden="true"/>
          <sn-time-ago timestamp="data.sys_updated_on"/>
        </div>
        <span ng-if="data.viewCount == 1" class="views pad-right text-nowrap">
          <span class="sr-only">${This article has {{::data.viewCount}} view.}</span>
          <span class="pad-right" aria-hidden="true">&#8226;</span> <i class="fa fa-eye pad-right" aria-hidden="true"/>
          <span aria-hidden="true">${{{::data.viewCount}} View}</span>
        </span>
        <span ng-if="data.viewCount > 1" class="views pad-right text-nowrap">
          <span class="sr-only">${This article has {{::data.viewCount}} views.}</span>
          <span class="pad-right" aria-hidden="true">&#8226;</span> <i class="fa fa-eye pad-right" aria-hidden="true"/>
          <span aria-hidden="true">${{{::data.viewCount}} Views}</span>
        </span>
        <span class="text-nowrap str-rating" ng-if="data.properties.showKBStarRating && data.properties.showKBRatingOptions && data.avgRating >= 0">
          <span class="sr-only">${This article has average rating: {{::data.avgRating}} out of 5 stars}</span>
          <span class="pad-right" aria-hidden="true">&#8226;</span> 
          <span class="kb-rating-stars" ng-if="::c.KBRatingStyle" aria-hidden="true">
            <uib-rating sp-rating ng-model="::data.avgRating" max="5" aria-label="{{::data.messages.ARTICLE_RATING}}" readonly="true"/>
          </span>
          <span class="sp-stars" ng-if="!c.KBRatingStyle" aria-hidden="true">
            <span uib-rating sp-rating ng-model="::data.avgRating" max="5" readonly="true" aria-label="{{::data.messages.ARTICLE_RATING}}" state-on="'fa fa-star kb-star-on'" state-off="'fa fa-star kb-star-off'" />
        </span>
      </span>
      </div>
      <div class="row community-attribution" ng-if="!c.isMobile && data.hInfo">
        <div class="contributor pad-right" ng-if="data.hInfo.contributor && data.hInfo.contributor.userId">
          <i class="fa fa-globe" aria-hidden="true"></i>
          <span class="pad-lr pad-right" ng-bind-html="data.hInfo.profileMessage"></span>
          <span class="discussion-published pad-right pre-bullet-icon text-nowrap" ng-if="data.hInfo.postedOn">
            ${Posted}<sn-day-ago date="data.hInfo.postedOn"/>
          </span>
          <span class="discussion-link pad-right pre-bullet-icon text-nowrap" ng-if="data.hInfo.title">
            <a href="?id=community_question&sys_id={{data.hInfo.sourceRoot}}" target="_blank_cm1">${Link to Discussion}</a>
          </span>
        </div>
      </div>
      <div ng-if="c.isMobile && !c.isAgentApp && c.options.hide_all_actions != 'true'" class="kb-favorite" ng-click="toggleFavorite($event)">
              <sp-widget widget="data.favoriteWidget"></sp-widget>
              <span ng-if = "showFavorite">
                <span class="favorite-text" ng-if="isFavorite === true">${Favorited}</span>
                <span class="favorite-text" ng-if="isFavorite === false">${Favorite}</span>
          </span>
      </div>
      <hr class="kb-header-line" aria-hidden="true"/>
      <article lang="{{c.selectedLanguage.language}}" class="kb-article-content" ng-if="::data.articleType != 'wiki'">
        <section ng-if="::!c.data.kbContentData.isTemplate" ng-bind-html="::c.data.kbContentData.data" ng-class="{'word-addin-mobile' : c.data.wordOnlineUrl && c.data.wordOnlineUrl.length>0}"/>
        <section ng-if="::c.data.kbContentData.isTemplate" ng-repeat="field in c.data.kbContentData.data track by $index" ng-attr-style="{{field.field_style}}">
          <h3 ng-if="::!field.collapsible" ng-attr-style="{{field.heading_style}}">{{field.label}}</h3>
          <header class="collapsible-title" ng-if="::field.collapsible">
            <h3 ng-attr-style="{{::field.heading_style}}">
              <button aria-expanded="{{!field.collapsed}}"
                      aria-controls="{{::field.column}}"
                      class="transparent-button accordion-trigger"
                      ng-click="c.toggleSection(field)">    
                        {{field.label}}
                        <i class="fa fa-chevron-up rotate" ng-class="{'down': field.collapsed}" aria-hidden="true"/>
              </button> 
             </h3>
          </header>
          <p id="{{::field.column}}" ng-if="::field.type != 'html' && field.collapsed" style="display:none;">{{field.content}}</p>
          <p id="{{::field.column}}" ng-if="::field.type != 'html' && !field.collapsed">{{field.content}}</p>
          <section id="{{::field.column}}" ng-if="::field.type == 'html' && field.collapsed" style="display:none;" ng-bind-html="::field.content"/>
          <section id="{{::field.column}}" ng-if="::field.type == 'html' && !field.collapsed" ng-bind-html="::field.content"/>
        </section>
      </article>
      <article lang="{{c.selectedLanguage.language}}" class="kb-article-content" ng-if="::data.articleType == 'wiki'" ng-bind-html="::data.kbWiki"></article>
      <hr class="kb-permalink-separator" ng-if="::!c.isMobile" aria-hidden="true"/>
      <p class="pull-right kb-permalink" ng-if="::!c.isMobile">
        <button class="transparent-button" ng-click="c.copyPermalink()">{{::data.messages.COPY_PERMALINK}}</button>
      </p>
    </div>
  </div>
  <div ng-if="!data.isValid && !data.knowledgeExists" class="col-sm-12 panel-danger panel-message-position">
    <div class="panel-heading">{{data.messages.RECORD_NOT_FOUND}}</div>
  </div>
  <div ng-if="!data.isValid && data.knowledgeExists && !data.isArticleExpired" class="col-sm-12 panel-warning panel-message-position">
    <div class="panel-heading kb-font-color-black">{{data.messages.INSUFFICIENT_PREVILEGES}}</div>
  </div>
  <div ng-if="!data.isKBAdmin && data.isArticleExpired" class="col-sm-12 panel-warning panel-message-position">
    <div class="panel-heading kb-font-color-black">{{data.messages.ARTICLE_EXPIRED}}</div>
  </div>
</div>
<style>
  #uiNotificationContainer{
    top : 10px;
  }
  .kb-article-wrapper .kb-desktop .kb-panel-title-header{
    padding-left: 25px;
  }
  .kb-article-wrapper .app-modal-window .modal-dialog {
    margin-top: 110px;
  }
  .kb-article-wrapper .kb-mobile{
    letter-spacing: .6px;
  }
  .kb-article-wrapper .kb-mobile .title-secondary-data{
    word-spacing:1px;
  }
  .kb-article-wrapper .kb-mobile .author{
    margin-bottom: 17px;
  }
  .kb-article-content dl {
    margin-top: .2em;
    margin-bottom: .5em;
  }
  .kb-article-content dd { 
    line-height: 1.5em;
    margin-left: 2em;
    margin-bottom: .1em;
  }
  @media only screen and (max-width :992px){
    .kb-article-wrapper .kb-desktop{
      margin-top:15px;
    }
    .kb-article-wrapper .kb-wrapper{
      padding : 10px !important;
    }
    .kb-article-wrapper .kb-menu-entry{
      padding-top: 2px;
      padding-bottom: 2px;
    }
    .kb-article-wrapper .kb-version-info{
      margin-top : 5px !important;
    }
    .kb-article-wrapper .kb-desktop .kb-number-info{
      margin-top : 6px !important;
      padding-left: 10px;
    }
    .kb-article-wrapper .kb-mobile .kb-panel-title-header{
      padding-left: 16px;
    }
    .kb-article-wrapper .kb-desktop .kb-panel-title-header{
      padding-left: 0px;
    }
  }
  @media only screen and (max-width :768px){
    .kb-article-wrapper .right-col-padding{
      padding-left : 25px !important;
    }
  }
  @media only screen and (max-width: 750px) {
    .kb-article-wrapper .kb-mobile .author{
      margin-bottom: 0px;
    }
  }
  @media only screen and (min-width: 992px) {
    .kb-article-wrapper .app-modal-window .modal-dialog {
      width: 750px;
    }
    .kb-article-wrapper .control-label{
      float :right;
    }
    .kb-article-wrapper .left-col-padding{
      padding-right : 30px !important;
    }
    .kb-article-wrapper .right-col-padding{
      padding-left : 5px !important;
    }
  }
  @media only screen and (min-width:768px) and (max-width: 992px) {
    .kb-article-wrapper .app-modal-window .modal-dialog {
      width: 600px;
    }
    .kb-article-wrapper .control-label{
      float :right;
    }
    .kb-article-wrapper .left-col-padding{
      padding-right : 5px !important;
    }
    .kb-article-wrapper .right-col-padding{
      padding-left : 5px !important;
    }    
    .panel-message-position
    {
  float: none; 
    }
  }
  @media only screen and (max-width: 400px) {
    .pad-right{
      padding-right:0px !important;
    }
  }
 
  @media only screen and (max-width: 376px) {
    .kb-article-wrapper .kb-mobile{
      letter-spacing: 0px;
    }
    .kb-article-wrapper .kb-mobile .title-secondary-data{
      word-spacing:0px;
    }
    .kb-article-wrapper .kb-mobile .title-secondary-data .str-rating{
      margin-top: 17px;
      display: block;
    }
    .kb-article-wrapper .kb-mobile .title-secondary-data .str-rating .pad-right{
      display: none;
    }
  }
  /*Versions dropdown screen width adjustment*/
  @media only screen and (min-width: 500px) {
     .version-menu-list li,.version-menu-list{
         font-size: 14px !important;
         margin: auto;
         min-width: 410px !important;
    }
     .version-menu-list li a,.version-menu-list li span{
         display:block;
         padding: 3px 10px !important;
         white-space: normal !important;
    }
  }
  @media only screen and (max-width: 500px) {
     .version-menu-list li,.version-menu-list{
         font-size: 14px !important;
         margin: auto;
         min-width: 200px !important;
         width:100% !important;
    }
     .version-menu-list li a, .version-menu-list li span{
         display:block;
         padding: 3px 10px !important;
         white-space: normal !important;
    }
  }
}
</style>
 
 
Client script
function($rootScope, $scope, $window, $timeout, spUtil, $sce, spModal, $uibModal,$location,cabrillo, snAnalytics) {
/* widget controller */
 
var c = this;
if (c.data.redirect) {
var id = $location.search().sys_kb_id ? 'sys_kb_id' : 'sys_id';
if ($location.search()[id] && $location.search()[id] !== c.data.redirect) {
$location.state({addSPA: true});
$location.search('spa', 1);
$location.search(id, c.data.redirect);
$location.replace();
}
}
 
if(c.data.replacementArticleId) {
var queryParameters = $location.search();
var articleIdentifier = queryParameters.hasOwnProperty('sysparm_article') ? 'sysparm_article':( queryParameters.hasOwnProperty('sys_kb_id') ? 'sys_kb_id' : 'sys_id');
 
if(queryParameters[articleIdentifier] !== c.data.replacementArticleId) {
$location.state({addSPA: true});
$location.search('spa', 1);
$location.search(articleIdentifier, c.data.replacementArticleId);
if(articleIdentifier == 'sysparm_article'){
$location.search("sys_kb_id",null);
$location.search("sys_id",null);
}
else if(articleIdentifier == 'sys_kb_id' || articleIdentifier == 'sys_id' ){
$location.search("sysparm_article",null);
}
$location.replace();
}
 
if(c.data.page_title && c.data.page_title != $window.document.title) {
$window.document.title = c.data.page_title;
}
}
 
$window.onpopstate = function (e){
if(e && e.state && e.state.addSPA){
$location.search('spa',null);
$location.replace();
}
};
 
if(c.data.isValid){
if(c.data.kbContentData && c.data.kbContentData.isTemplate ){
c.data.kbContentData.data.forEach(function(field){
if(field.type == 'html')
field.content = $sce.trustAsHtml(field.content);
});
 
if (c.data.articleType === 'wiki')
c.data.kbWiki = $sce.trustAsHtml(c.data.kbWiki);
}
else if (c.data.articleType === 'wiki')
c.data.kbWiki = $sce.trustAsHtml(c.data.kbWiki);
else 
c.data.kbContentData.data = $sce.trustAsHtml(c.data.kbContentData.data);
}
 
$scope.submitted = false;
c.flagMessage = null;
$timeout(function(){
$rootScope.$broadcast("sp.update.breadcrumbs", $scope.data.breadCrumb);
});
$rootScope.properties = $scope.data.properties;
$rootScope.messages = $scope.data.messages;
$rootScope.isValid = c.data.isValid;
$rootScope.isKBAdmin = $scope.data.isKBAdmin;
$rootScope.isKBOwner = $scope.data.isKBOwner;
$rootScope.article_sys_id = $scope.data.article_sys_id;
$rootScope.attachments = $scope.data.attachments;
$rootScope.attachedIncidents = $scope.data.attachedIncidents;
$rootScope.affectedProducts = $scope.data.affectedProducts;
$rootScope.displayAttachments = $scope.data.displayAttachments;
$rootScope.hideFeedbackOptions = $scope.data.hideFeedbackOptions;
$rootScope.helpfulContent = $scope.data.helpfulContent;
$rootScope.tableName = $scope.data.tableName;
$rootScope.hasComments = $scope.data.hasComments;
$scope.data.isSubscribed = $scope.data.isArticleSubscribed || $scope.data.isArticleSubscribedAtKB;
$scope.data.subscribeLabel = ($scope.data.isSubscribed ? $scope.data.messages.SUBSCRIBED : $scope.data.messages.SUBSCRIBE);
c.createIncidentURL = c.options.create_task_url || ($scope.data.properties && $scope.data.properties.createIncidentURL);
if (c.createIncidentURL) {
    c.createIncidentURL = c.createIncidentURL.replace("$[encodedKb_desc]", encodeURIComponent(c.data.shortDesc));
}
c.createIncidentLabel = c.options.create_task_prompt || $scope.data.messages.CREATE_INCIDENT;
c.showCreateIncident = c.data.isLoggedInUser && c.options.show_create_incident_action != 'false' && c.data.properties && c.data.properties.showKBCreateIncident && c.createIncidentURL;
c.showFlagArticle =  c.data.properties && c.data.properties.showKBFlagArticle && c.data.properties.showRatingOptions;
c.showMenu = c.data.properties && (c.showFlagArticle || c.data.properties.isEditable || c.showCreateIncident);
$rootScope.stackUrl = window.location.pathname + '?id='+c.data.params.sysparm_article_view_page_id+'%26' +  (c.data.params.sysparm_article ? 'sysparm_article=' + c.data.params.sysparm_article : 'sys_kb_id=' + c.data.params.sys_kb_id);
c.stackUrl = $rootScope.stackUrl;
c.flagMessage = '';
c.task ={};
c.imageInstance = '';
$scope.data.toggleSubscribed = ($scope.data.isSubscribed ? true : false);
c.reasons = c.data.feedback_reasons;
c.data.reason = '4';
c.imageInstance = '';
c.minImageHeight = parseInt(c.options.min_image_height) || 100;
c.minImageWidth = parseInt(c.options.min_image_width) || 185;
c.readOnly = false;
c.isMobile = spUtil.isMobile() || cabrillo.isNative();
c.isAgentApp = navigator.userAgent.indexOf('Agent') > -1;
c.editUrl = c.data.wordOnlineUrl || 'kb_knowledge.do?sys_id=' + c.data.article_sys_id + '&sysparm_stack=' + c.stackUrl;
 
//Use KB specific stylic for all portals unless rating style is set
c.KBRatingStyle = c.options.kb_rating_style;
 
if(c.data.langList && c.data.langList.length > 1){
for(var lng in c.data.langList){
if(c.data.langList[lng].selected == true){
c.selectedLanguage = c.data.langList[lng];
break;
}
}
}
 
var payload= {};
payload.name = "View Knowledge Article";
payload.data = {};
payload.data["Article Title"] = c.data.shortDesc;
payload.data["Article SysID"] = c.data.article_sys_id;
payload.data["Language"] = c.selectedLanguage ? c.selectedLanguage.language : "en";
snAnalytics.addEvent(payload);
 
populateBreadCrumbURLs();
 
function populateBreadCrumbURLs() {
if(c.data.breadCrumb) {
if(c.data.breadCrumb[0].type == 'kb_knowledge_base') {
if( c.data.showKbHomeLink && c.data.kb_knowledge_page!='kb_search') {
c.data.breadCrumb[0].url = '?id=' + c.data.kb_knowledge_page + '&kb_id=' + c.data.breadCrumb[0].values.kb_knowledge_base;
} else {
c.data.breadCrumb[0].url = '?id=kb_search&kb_knowledge_base=' + c.data.breadCrumb[0].values.kb_knowledge_base;
}
}
 
for(var i = 1; i < c.data.breadCrumb.length; i++) {
if(c.data.breadCrumb[i].type == 'kb_category') {
if(c.data.showKbHomeLink && c.data.kb_knowledge_page!='kb_search') {
if(c.data.breadCrumb[i].values.kb_category == "NULL_VALUE") {
c.data.breadCrumb.splice(i, 1);
} else {
c.data.breadCrumb[i].url = '?id=kb_category&kb_id=' + c.data.breadCrumb[i].values.kb_knowledge_base + '&kb_category=' +  c.data.breadCrumb[i].values.kb_category;
}
} else {
c.data.breadCrumb[i].url = '?id=kb_search&kb_knowledge_base=' + c.data.breadCrumb[i].values.kb_knowledge_base + '&kb_category=' + c.data.breadCrumb[i].values.kb_category;
}
}
}
}
}
 
var shouldSetTitle = c.data.params.sysparm_language && (c.data.number != c.data.params.sysparm_article);
if(c.options.set_page_title != 'false' || shouldSetTitle){
if (c.data.page_title) {
// setting default page title for supporting km seo
$window.document.title = c.data.page_title;
var metaTag = $('meta[custom-tag][name="description"]')[0];
 
if(metaTag)
metaTag.content = c.data.meta_tag;
}
}
 
c.showVersions = false;
c.toggleVersions = function(){
c.showVersions = !c.showVersions;
};
 
c.selectLanguage = function(ind){
var viewAsUser = "";
 
if(c.data.params.view_as_user.length > 0)
viewAsUser = "&view_as_user=" + c.data.params.view_as_user;
 
$window.location.replace('?id='+c.data.params.sysparm_article_view_page_id+'&sys_kb_id=' + c.data.langList[ind].sys_id + viewAsUser);
};
 
c.showActionMenu = function(){
if(c.showMenu){
return true;
}
else{
if(c.data.properties && c.data.properties.isSubscriptionEnabled && $window.innerWidth < 992)
return true;
else
return false;
}
}
 
c.toggleSection = function(field) {
field.collapsed = !field.collapsed;
$('#'+field.column).slideToggle("fast");
};
 
c.handleSubscribeButtonFocus = function(){
if($scope.data.isSubscribed){
$scope.data.subscribeLabel = $rootScope.messages.UNSUBSCRIBE;
$scope.data.toggleSubscribed = !$scope.data.toggleSubscribed;
}
 
};
 
c.handleSubscribeButtonBlur = function(){
if($scope.data.isSubscribed){
$scope.data.subscribeLabel = $rootScope.messages.SUBSCRIBED;
$scope.data.toggleSubscribed = !$scope.data.toggleSubscribed;
}
}
c.closeUnsubscribeModal = function(){
$("#unSubscribeModal").modal('hide');
};
 
c.handleSubscription = function(confirmation){
c.data.actionName = null;
if(!$scope.data.isSubscribed){
c.data.actionName = 'subscribe';
c.data.articleSysId = $scope.data.article_sys_id;
c.data.articleNum = $scope.data.number;
}
else
{
if($scope.data.isArticleSubscribed && !$scope.data.isArticleSubscribedAtKB){
c.data.actionName = "unsubscribe";
c.data.articleSysId = $scope.data.article_sys_id;
c.data.articleNum = $scope.data.number;
c.data.unsubscribeKB = false;
}
else if(!confirmation){
//$("#unSubscribeModal").modal();
var unsubscribeMessage = "<p>" + c.data.messages.UNSUBSCRIBE_CONTENT + "</p><p><b>" + c.data.messages.UNSUBSCRIBE_CONFIRMATION + "</b></p>";
spModal.open(
{
title: c.data.messages.UNSUBSCRIBE,
buttons : [{label : c.data.messages.NO, cancel : true}, {label: c.data.messages.YES, primary : true}],
message : unsubscribeMessage
}).then(function(){
c.handleSubscription('Y');
}, function(){
c.closeUnsubscribeModal();
});
 
return;
}
else if(confirmation === 'Y'){
c.data.actionName = "unsubscribe";
c.closeUnsubscribeModal();
c.data.articleSysId = $scope.data.article_sys_id;
c.data.kbSysId = $scope.data.kbSysId;
c.data.articleNum = $scope.data.number;
c.data.kbName = $scope.data.kbName;
c.data.unsubscribeKB = true;
}
}
c.server.get({action : c.data.actionName, kbSysId : c.data.kbSysId, kbName : c.data.kbName, articleSysId : c.data.articleSysId, articleNum : c.data.articleNum, unsubscribeKB : c.data.unsubscribeKB, isArticleSubscribed: c.data.isArticleSubscribed, isKBSubscribed : c.data.isArticleSubscribedAtKB}).then(function(resp){
if(c.data.actionName == 'subscribe'){
$scope.data.isArticleSubscribed = true;
$scope.data.isSubscribed = true;
$scope.data.subscribeLabel = $rootScope.messages.SUBSCRIBED;
}
else{
$scope.data.isArticleSubscribed = false;
$scope.data.isSubscribed = false;
$scope.data.isArticleSubscribedAtKB = false;
$scope.data.subscribeLabel = $rootScope.messages.SUBSCRIBE;
}
c.showUIMessage('info', resp.data.responseMessage);
 
});
};
 
 
 
c.submitFlagComments = function(){
if(!c.data.comment){
c.flagMessage = "${Please provide a comment to flag the article}";
$("#flagComment").focus();
return false;
}
else{
$("#submitFlagComment").attr("disabled", true);
c.server.get({action : 'saveFlagComment', article_sys_id : c.data.article_sys_id, comment : c.data.comment}).then(function(resp){
if(resp.data.feedbackSuccess)
c.showUIMessage('info', c.data.messages.ARTICLE_FLAGGED);
else
c.showUIMessage('error', c.data.messages.RATE_LIMIT_REACHED);
});
c.clearComment();
 
}
 
};
 
c.copyPermalink = function(){
var v = document.createElement('textarea');
var permalink = document.location.origin + document.location.pathname + '?id='+c.data.params.sysparm_article_view_page_id+'&sysparm_article=' + $scope.data.number;
v.innerHTML = permalink;
v.className = "sr-only";
document.body.appendChild(v);
v.select();
var result = true;
try {
result = document.execCommand('copy');
}
catch(err){
result = false;
}
finally{
document.body.removeChild(v);
}
if(result === true){
c.showUIMessage('info', c.data.messages.PERMALINK_COPIED);
}
else{
$window.prompt("${Because of a browser limitation the URL can not be placed directly in the clipboard. Please use Ctrl-C to copy the data and escape to dismiss this dialog}", permalink);
}
$('p.kb-permalink button').focus();
};
var modal = null;
c.launchFlagModal = function(e){
c.clearComment();
var pageRoot = angular.element('.sp-page-root');
modal = $uibModal.open(
{
title : c.data.messages.FLAG_THIS_ARTICLE,
scope : $scope,
templateUrl : 'kb-flag-article-modal',
keyboard: true,
            controller: function($scope) {
                $scope.$on('modal.closing', function() {
                    pageRoot.attr('aria-hidden', 'false');
                    // Toggle dropdown if not already visible:
                    if ($('.dropdown').find('.moreActionsMenuList').is(":hidden") && !$("#submitFlagComment").attr("disabled")) {
                        $('.more-actions-menu').dropdown('toggle');
                        //Give focus to the flagArticle 
                        $('#flagArticleButton').focus();
                    }
                });
            }
});
modal.rendered.then(function() {
//hide the root page headings when modal is active
pageRoot.attr('aria-hidden', 'true');
$("#flagComment").focus();
 
});
  e.stopPropagation();
}
 
var taskPopUp = $rootScope.$on("sp.kb.feedback.openTaskPopup",function(event,data){
c.ftask = {};
if(data){
c.launchFeedbackTaskModal();
c.ftask.feedback_action = data.feedback_data.action;
c.ftask.feedback_rating = data.feedback_data.rating
c.ftask.action= "createFeedbackTask";
 
}
});
 
c.launchFeedbackTaskModal = function(){
var pageRoot = angular.element('.sp-page-root');
c.clearFeedbackTask();
modal = $uibModal.open({
title : c.data.messages.FEEDBACK,
windowClass : 'app-modal-window',
scope : $scope,
templateUrl : 'kb-feedback-task-modal',
keyboard: true,
            controller: function($scope) {
                $scope.$on("modal.closing", function() {
                    pageRoot.attr('aria-hidden', 'false');
                    $('#useful_no').focus();
 
                    if (!c.submitted) {
                        c.data.reason = "4";
                        c.data.details = "";
                    }
                    if (c.ftask.action == "createFeedbackTaskWithFlagComment" && !c.submitted)
                        return;
                    modal = null;
                    c.server.get({
                        action: c.ftask.action,
                        article_sys_id: c.data.article_sys_id,
                        reason: c.data.reason,
                        details: c.data.details,
                        feedback_action: c.ftask.feedback_action,
                        rating: c.ftask.feedback_rating
                    }).then(function(resp) {
                        if (resp.data.responseMessage) {
                            if (resp.data.feedbackSuccess) {
                                c.showUIMessage('info', resp.data.responseMessage);
                            } else {
                                c.showUIMessage('error', resp.data.responseMessage);
                            }
 
                        }
                    });
                    c.clearFeedbackTask();
                });
            }
});
modal.rendered.then(function() {
//hide the root page headings when modal is active
pageRoot.attr('aria-hidden', 'true');
    $('.type-multiple_choice input[aria-checked="true"]').focus();
});
 
}
 
c.clearComment = function(e){
if(e){
e.stopPropagation();
e.preventDefault();
}
$scope.data.comment = '';
c.flagMessage = '';
c.closePopup();
}
 
c.closeTaskPopup = function(e){
if(e){
e.stopPropagation();
e.preventDefault();
}
modal.dismiss({$value: "dismiss"});
$('#useful_no').focus();
}
 
c.selectReason = function(e, elem){
// space keycode to select the radio button
if(e.keyCode ==32){
$("div.type-multiple_choice").find("input[type=radio]").each(function(){
$(this).attr("checked", false);
$(this).attr("aria-checked", false);
$(this).find("input[type=radio]").attr("checked", false);
$(this).find("input[type=radio]").attr("aria-checked", false);
});
$(e.target).click(); 
$(e.target).find("input[type=radio]").click();
}
  
}
 
c.showUIMessage = function(type,msg){
if(cabrillo.isNative()){
cabrillo.message.showMessage(type != 'error' ? cabrillo.message.SUCCESS_MESSAGE_STYLE : cabrillo.message.ERROR_MESSAGE_STYLE, msg);
}else{
if(type == 'error')
spUtil.addErrorMessage(msg);
else
spUtil.addInfoMessage(msg);
}
}
 
c.closePopup = function(){
if(modal){
modal.dismiss();
}
}
 
c.clearFeedbackTask = function(){
c.submitted = false;
c.data.reason = '4';
c.data.details = '';
c.flagMessage = '';
c.ftask = {};
c.closePopup();
}
 
c.submitFeedbackTask = function(){
if(!c.data.reason){
c.flagMessage = "${Please provide the mandatory details}";
$("#detailsComment").focus();
return false;
}
else{
c.submitted = true;
c.closePopup();
}
}
 
c.imgModalClose = function(){
c.imageInstance.close();
}
 
c.getLabelForTemplateField = function(label, isCollapsed) {
if(isCollapsed)
return label + " " + c.data.messages.COLLAPSED_FIELD;
else
return label + " " + c.data.messages.EXPANDED_FIELD;
}
 
$scope.$on("$destroy", taskPopUp);
 
$("#flagComment").keydown(function(ev){
if(ev.which ==13)
$("#flagComment").click();
});
 
c.handleKeyDown = function(ev) {
        if (ev.which == 13)
            $(ev.target).click();
    }
 
    var favoriteEvent = $rootScope.$on('favorite', function(e, favorite) {
        $scope.showFavorite = favorite.showFavorite;
        $scope.isFavorite = favorite.isFavorite;
    });
    $scope.$on("$destroy", favoriteEvent);
 
$scope.toggleFavorite = function($event){
$event.preventDefault();
$event.stopPropagation();
$scope.$broadcast('toggleFavorite');
}
 
var destroyRootScopeArticleSysId = function() {
$rootScope.article_sys_id = null;
}
$scope.$on("$destroy", destroyRootScopeArticleSysId);
 
c.Review = function(des){
alert(des);
c.data.action1="get_value";
c.data.reviewtime1=des;
c.server.update();
// alert(data.reviewdate);
 
Server script
 
data.tsQueryId = $sp.getParameter("sysparm_tsqueryId") || "";
var isMESP = (options.is_mobile && options.is_mobile == "true") || ($sp.getParameter("id") == "me_kb_view") || false;
data.isMESP = isMESP;
options.kb_rating_style = options.kb_rating_style ? options.kb_rating_style == "true" : true;
var portalRecord = $sp.getPortalRecord();
var portal = portalRecord.getUniqueValue();
data.showKbHomeLink = (portal != '45d6680fdb52220099f93691f0b8f5ad');
 
if(!input){
var kbViewModel = new global.KBViewModel();
data.isCrawlerBot = kbViewModel.checkCrawlerBot();
data.messages = {};
populateParameters();
 
if(data.isCrawlerBot){
kbViewModel.findKnowledgeById(GlideAppCache.get("articleSysId"));
var knowledgeRecord = kbViewModel.knowledgeRecord;
var isValidRecord = kbViewModel.isValid;
if (options.redirect_latest == 'true' && isValidRecord && knowledgeRecord && !knowledgeRecord.article_id.nil()) {
var latest = kbViewModel.getLatestAccessibleVersionFromId(knowledgeRecord.article_id);
var newVersionAvailable = !gs.nil(latest) && (latest.getValue('version')!=knowledgeRecord.getValue('version'));
if(newVersionAvailable){
data.params.sys_kb_id = latest.getValue('sys_id');
data.redirect = data.params.sys_kb_id;
kbViewModel = new global.KBViewModel();
kbViewModel.getInfoForSP(data.params);
isValidRecord = kbViewModel.isValid;
knowledgeRecord = kbViewModel.knowledgeRecord;
}
}
data.knowledgeExists = kbViewModel.knowledgeExists;
if (isValidRecord && knowledgeRecord) {
data.isKBAdmin = kbViewModel.isAdminUser(knowledgeRecord);
data.isArticleExpired = kbViewModel.isArticleExpired(knowledgeRecord);
if (data.isArticleExpired && !data.isKBAdmin) {
data.messages.ARTICLE_EXPIRED = gs.getMessage("This knowledge item has expired");
else {data.isKBOwner = (gs.getUserID() == knowledgeRecord.kb_knowledge_base.owner);
populateDataForCrawler();
kbViewModel.setTableName(knowledgeRecord.getTableName() + "");
data.attachments = kbViewModel.getAttachments();
populateMessages();
data.page_title = getPageTitle();
data.meta_tag = getMetaTag();
 
if(data.articleType === 'wiki'){
initGlideWiki();
}
 
data.shortDesc = knowledgeRecord.short_description.getDisplayValue() + "";
}
}
else{
data.messages.INSUFFICIENT_PREVILEGES = gs.getMessage("You do not have sufficient privileges to access this knowledge item");
data.messages.RECORD_NOT_FOUND = gs.getMessage("Knowledge record not found");
}
}
 
else{
 
var hasViewAsUserAccess = true;
 
if(!gs.nil(data.params.view_as_user)){
var response = isUserAllowedToViewAs(data.params);
 
if(response.hasAccess == false){
data.messages.INSUFFICIENT_PREVILEGES = response.message;
data.isValid = false;
data.knowledgeExists = true;
hasViewAsUserAccess = false;
}
}
 
if(hasViewAsUserAccess){
kbViewModel.setShowVersionHistory(options.show_version_info);
kbViewModel.getInfoForSP(data.params);
 
var isValidRecord = kbViewModel.isValid;
var canAdminOverrideRedirect = ($sp.getParameter('sysparm_redirect') + '' === 'false') && kbViewModel.isAdminUser(kbViewModel.knowledgeRecord);
 
if(isValidRecord && !canAdminOverrideRedirect) {
var articleIdentifier = !gs.nil(data.params.sysparm_article) ? 'sysparm_article' : (!gs.nil(data.params.sys_kb_id) ? 'sys_kb_id' : 'sys_id');
var baseArticleURL = $sp.getPortalRecord().getDisplayValue('url_suffix') + '?id=' + $sp.getParameter('id') + '&' + articleIdentifier + '=' + data.params[articleIdentifier] + '&sysparm_redirect=false';
 
if(kbViewModel.isAdminUser(kbViewModel.knowledgeRecord)) {
data.replacementAlert = gs.getMessage("The article <a href={0}>{1}</a> has been retired and replaced with the current article.", [baseArticleURL, kbViewModel.knowledgeRecord.getValue('number')]);
} else {
data.replacementAlert = gs.getMessage("The article {0} has been retired and replaced with the current article.", [kbViewModel.knowledgeRecord.getValue('number')]);
}
 
while(isValidRecord && kbViewModel.hasReplacementAvailable()) {
if(articleIdentifier === 'sysparm_article') {
data.params[articleIdentifier] = kbViewModel.knowledgeRecord.getElement('replacement_article.number') + '';
delete data.params["sys_kb_id"];
delete data.params["sys_id"];
 
} else {
data.params[articleIdentifier] = kbViewModel.knowledgeRecord.getValue('replacement_article');
var latestReplacementArticle = kbViewModel.getLatestAccessibleVersionFromId(data.params[articleIdentifier]);
var isLatest = (!gs.nil(latestReplacementArticle) && (latestReplacementArticle.getValue('version')!=kbViewModel.knowledgeRecord.getValue('version')));
data.params[articleIdentifier] = isLatest? latestReplacementArticle.getValue('sys_id'):data.params[articleIdentifier];
delete data.params["sysparm_article"];
}
 
data.replacementArticleId = data.params[articleIdentifier];
 
kbViewModel = new global.KBViewModel();
kbViewModel.setShowVersionHistory(options.show_version_info);
kbViewModel.getInfoForSP(data.params);
 
isValidRecord = kbViewModel.isValid;
}
}
 
if (options.redirect_latest == 'true' && isValidRecord && kbViewModel.knowledgeRecord && kbViewModel.versioningInfo.newVersionAvailable) {
data.params.sys_kb_id = kbViewModel.versioningInfo.newVersion.getValue('sys_id');
data.redirect = data.params.sys_kb_id;
kbViewModel = new global.KBViewModel();
kbViewModel.getInfoForSP(data.params);
isValidRecord = kbViewModel.isValid;
}
 
var knowledgeRecord = kbViewModel.knowledgeRecord;
 
if(isValidRecord && data.params.view_as_user.length > 0 && knowledgeRecord.getValue("view_as_allowed") == 0)
isValidRecord = false;
 
var kbPortal = new KBPortalService();
data.knowledgeExists = kbViewModel.knowledgeExists;
data.kb_knowledge_page = $sp.getDisplayValue("kb_knowledge_page") || "kb_view2";
data.langList = [];
var tsQueryId = $sp.getParameter("sysparm_tsqueryId");
var rank = $sp.getParameter("sysparm_rank");
if(tsQueryId && rank && tsQueryId != ""){
kbViewModel.updateTsQueryKbWithRank(tsQueryId,rank);
}
 
options.knowledge_bases = options.knowledge_bases || String(kbPortal.getServicePortalKnowledgeBases($sp.getPortalRecord().url_suffix)) || "";
 
 
if(options.knowledge_bases && knowledgeRecord && knowledgeRecord.kb_knowledge_base ){
if(options.knowledge_bases.indexOf(knowledgeRecord.kb_knowledge_base) == -1)
isValidRecord = false;
}
 
data.isArticleExpired = false;
data.viewAsUser = data.params.view_as_user;
 
if (isValidRecord && knowledgeRecord) {
data.isKBAdmin = kbViewModel.isAdminUser(knowledgeRecord);
data.isArticleExpired = kbViewModel.isArticleExpired(knowledgeRecord);
if (data.isArticleExpired && !data.isKBAdmin) {
data.messages.ARTICLE_EXPIRED = gs.getMessage("This knowledge item has expired");
} else {
data.isKBOwner = (gs.getUserID() == knowledgeRecord.kb_knowledge_base.owner);
populateDataFromKBViewModel();
// fetching default page title to support km seo
data.page_title = getPageTitle();
data.meta_tag = getMetaTag();
populateMessages();
populateCommonProperties();
if(!isMESP){
populateBreadCrumbs();
populateVersionInfo();
}
handleViewCountIncrement();
if(!isMESP)
populateContributorInfo();
 
 
if(data.articleType === 'wiki'){
initGlideWiki();
}
 
data.sys_updated_on = "";
if (kbViewModel.publishedRecord) {
published = kbViewModel.publishedRecord.published;
data.sys_updated_on = kbViewModel.publishedRecord.sys_updated_on + "";
}
 
data.shortDesc = knowledgeRecord.short_description.getDisplayValue() + "";
 
populateSystemProperties();
getFeedbackReasonValues();
if(data.properties.showAffectedProducts === 'true' || data.properties.showAffectedProducts === true){
populateAffectedProducts();
}
 
if(data.properties.showAttachedTasks === true || data.properties.showAttachedTasks === 'true'){
populateAttachedTasks();
}
 
data.favoriteWidget = $sp.getWidget('ec_favorite', {'table': 'kb_knowledge', 'sys_id': data.article_sys_id});
 
$sp.logStat('KB Article View', "kb_knowledge", knowledgeRecord.sys_id, knowledgeRecord.short_description);
}
}
else{
data.messages.INSUFFICIENT_PREVILEGES = gs.getMessage("You do not have sufficient privileges to access this knowledge item");
data.messages.RECORD_NOT_FOUND = gs.getMessage("Knowledge record not found");
}
}
}
}
 
if(input){
if(input.action === 'saveFlagComment'){
var kbPortal = new KBPortalService();
var params = {};
params.sysparm_id = input.article_sys_id;
params.feedback = input.comment;
params.sysparm_flag = "true";
params.ts_queryId = data.tsQueryId;
var response = kbPortal.kbWriteCommentWithParams(params);
var resp = new global.JSON().decode(response);
 
data.feedbackSuccess=resp.success;
}
if(input.action == 'createFeedbackTask'){
var response;
var kbPortal = new KBPortalService();
var successMessage = options.feedback_message ? options.feedback_message : gs.getMessage('Thank you, we appreciate your feedback');
var max_daily_comments = gs.getProperty("glide.knowman.max_comments_per_user_daily",'0');
var failureMessage = parseInt(max_daily_comments)>0? gs.getMessage("You have reached the daily limit for comments posted by a user."):gs.getMessage('Failed to save feedback');
var params = buildParams();
params.reason = input.reason;
params.comments = input.details;
if(input.feedback_action == "useful_no"){
params.useful = "no";
response = kbPortal.saveUsefulWithParams(params) + '';
}else if(input.feedback_action == "rating"){
params.rating = input.rating;
response = kbPortal.saveStarRatingWithParams(params) + '';
}
data.responseMessage = response.includes('true') ? successMessage : failureMessage;
var resp = new global.JSON().decode(response);
data.feedbackSuccess = resp.success;
}
if(input.action === 'subscribe'){
var subResult = subscribeObject('Article', input.articleSysId, gs.getUserID());
if(subResult){
data.responseMessage = gs.getMessage("You are now subscribed to {0}. You will be notified of any new activity according to your notification settings.", input.articleNum);
}
}
if(input.action === 'unsubscribe'){
 
var subResult = false;
if(input.unsubscribeKB){
subResult = unsubscribeObject('KB', input.articleSysId, input.kbSysId);
if(subResult === 'Article'){
data.responseMessage = gs.getMessage("Your subscriptions to {0} Knowledge Base and {1} have been removed.", [input.kbName, input.articleNum]);
}
else{
data.responseMessage = gs.getMessage("Your subscription to {0} Knowledge Base has been removed.", input.kbName);
}
}
else{
subResult = unsubscribeObject('Article', input.articleSysId, null);
if(subResult){
data.responseMessage = gs.getMessage("Your subscription to {0} has been removed.", input.articleNum);
}
}
}
 
if(input.action == 'kbAttachArticle'){
var kAjax = new global.KnowledgeAjax();
data.articleContent = kAjax.kbAttachArticleImpl(input.value);
}
}
 
function buildParams(){
var params = {};
params.article = input.article_sys_id;
params.sysparm_id = input.article_sys_id;
params.ts_queryId = data.tsQueryId;
params.session_id = gs.getSessionID();
params.user = gs.getUserID();
return params;
}
 
function subscribeObject(type, sysId, userId){
var kAjax = new global.KnowledgeAjax();
return kAjax.subscribeKbArticle(sysId, "7d8f537453003200fa9bd7b08cc5872c");
}
 
function unsubscribeObject(type, articleSysId, kbSysId){
var kAjax = new global.KnowledgeAjax();
if(type === 'Article'){
return kAjax.unsubscribeKbArticle(articleSysId);
}
else{
return kAjax.unsubscribeKB(articleSysId, kbSysId);
}
}
 
function populateMessages(){
 
data.messages.REASON = gs.getMessage("Reason");
data.messages.DETAILS = gs.getMessage("Details");
data.messages.FEEDBACK = gs.getMessage("Feedback");
data.messages.THANKYOU_FEEDBACK = gs.getMessage("Thank you for the feedback");
data.messages.ADDTIONAL_DETAILS = gs.getMessage("Please provide additional details");
data.messages.NO_THANKS = gs.getMessage("No thanks");
data.messages.ADD_DETAIL = gs.getMessage("Add a Detail Comment");
data.messages.ARTICLE_FLAGGED = gs.getMessage("Article has been flagged");
data.messages.FLAG_THIS_ARTICLE = gs.getMessage("Flag this article");
data.messages.ADD_COMMENT = gs.getMessage("Add a comment (mandatory)");
data.messages.NOT_RETIRED = gs.getMessage("Article not retired");
data.messages.NOT_PUBLISHED = gs.getMessage("Article not published");
data.messages.NOT_SAVED = gs.getMessage("Article not saved");
data.messages.SAVED = gs.getMessage("Article saved");
data.messages.HOME = gs.getMessage('Home');
data.messages.DISCARDED = gs.getMessage("Article changes discarded");
data.messages.SUBMITTED = gs.getMessage("Your article has been submitted");
data.messages.PREVIEW = gs.getMessage(" Preview ");
data.messages.PREVIEW_HINT = gs.getMessage("Preview changes");
data.messages.DELETE = gs.getMessage("Delete");
data.messages.CONFIRM_DELETE = gs.getMessage("Confirm deletion of this article?");
data.messages.TITLE_CANCEL = gs.getMessage("Cancel changes");
data.messages.MESSAGE_CANCEL = gs.getMessage("Discard all changes?");
data.messages.TITLE_RETIRE = gs.getMessage("Retire");
data.messages.MESSAGE_RETIRE = gs.getMessage("Retire this article?");
// Status messages for the message bar.
data.messages.DRAFT_MSG = gs.getMessage("This knowledge item has been created");
data.messages.REVIEW_MSG = gs.getMessage("This knowledge item has been published");
data.messages.PUBLISHED_MSG = gs.getMessage("This knowledge item has been published");
data.messages.PEND_RETIRE_MSG = gs.getMessage("This knowledge item has been retired");
data.messages.RETIRED_MSG = gs.getMessage("This knowledge item has been retired");
data.messages.DELETE_FAIL_MSG = gs.getMessage("This article could not be deleted");
data.messages.TXT_PLACEHOLDER = gs.getMessage("Add content");
data.messages.LATEST_VERSION = gs.getMessage("Latest version");
data.messages.SUBSCRIBE = gs.getMessage("Subscribe");
data.messages.UNSUBSCRIBE = gs.getMessage("Unsubscribe");
data.messages.COPY_PERMALINK = gs.getMessage("Copy Permalink");
data.messages.SUBMIT = gs.getMessage('Submit');
data.messages.COMMENTS = gs.getMessage('Comments');
data.messages.AFFECTED_PRODUCTS = gs.getMessage('Affected Products');
data.messages.OUTDATED = gs.getMessage('Outdated');
data.messages.KNOWLEDGE_BASE = gs.getMessage('Knowledge Base');
data.messages.KNOWLEDGE = gs.getMessage('Knowledge');
data.messages.ATTACHED_INCIDENTS = gs.getMessage("Most recent tasks");
data.messages.THANK_YOU = gs.getMessage("Thank you");
data.messages.RATE_LIMIT_REACHED = gs.getMessage("You have reached the daily limit for comments posted by a user.");
data.messages.NO_ATTACHMENTS = gs.getMessage("No attachments found");
data.messages.NO_INCIDENTS = gs.getMessage("No tasks found");
data.messages.NO_PRODUCTS = gs.getMessage("No affected products found");
data.messages.EDIT = gs.getMessage("Edit Article");
data.messages.REVIEW= gs.getMessage("Update Review Date");
data.messages.ATTACHMENTS = gs.getMessage('Attachments');
data.messages.CREATE_INCIDENT = gs.getMessage("Create Incident");
data.messages.FLAG_ARTICLE = gs.getMessage("Flag Article");
data.messages.PERMALINK_COPIED = gs.getMessage("Permalink copied successfully");
data.messages.SUBSCRIPTION_CONFIRMATION = gs.getMessage("You are now subscribed to {0}. You will be notified of any new activity according to your notification settings", data.number);
data.messages.SUBSCRIBED = gs.getMessage("Subscribed");
data.messages.YES = gs.getMessage("Yes");
data.messages.NO = gs.getMessage("No");
data.messages.UNSUBSCRIBE_CONTENT = gs.getMessage("In order to unsubsrcibe from this article, you will need to unsubscribe from the parent knowledge base: {0}. ", data.kbName);
data.messages.UNSUBSCRIBE_CONFIRMATION = gs.getMessage("Would you like to unsubscribe from {0}", data.kbName);
data.messages.CANCEL = gs.getMessage("Cancel");
data.messages.ACTION_MENU = gs.getMessage("More actions.");
data.messages.ACTION_MENU_LABEL = gs.getMessage("Actions");
data.messages.CLOSE = gs.getMessage("Close");
data.messages.JUST_NOW = gs.getMessage("just now");
data.messages.ARTICLE_RATING = gs.getMessage("Average article rating - {0} out of 5 stars", data.avgRating);
data.messages.EXTERNAL_CONTENT = gs.getMessage(gs.getProperty("sn_km_intg.glide.knowman.external.ui_label_for_external_content", "External Content"));
data.messages.DOWNLOAD_DOCUMENT = gs.getMessage('Download as Word (.docx)');
data.messages.COLLAPSED_FIELD = gs.getMessage('section is in collapsed mode');
data.messages.EXPANDED_FIELD = gs.getMessage('section is in expanded mode');
 
if(data.params.sysparm_kb_search_table){
var label = new GlideRecord(data.params.sysparm_kb_search_table).getLabel();
if(label)
data.messages.ATTACH_TO_TASK_LABEL = gs.getMessage("Attach to {0}", label);
else
data.messages.ATTACH_TO_TASK_LABEL = gs.getMessage("Attach to record");
}
}
 
function populateParameters(){
data.params = {};
data.params.sysparm_article = $sp.getParameter('sysparm_article');
data.params.sysparm_language = $sp.getParameter('sysparm_language');
data.params.sys_kb_id = $sp.getParameter('sys_kb_id') || $sp.getParameter('sys_id');
data.params.sysparm_no_update = $sp.getParameter('sysparm_no_update');
data.params.sysparm_no_suggest = $sp.getParameter('sysparm_no_suggest');
data.params.sysparm_no_info = $sp.getParameter('sysparm_no_info');
data.params.sysparm_no_create_incident = $sp.getParameter('sysparm_no_create_incident');
data.params.sysparm_ts_queryId = $sp.getParameter('sysparm_tsqueryId');
data.params.sysparm_article_view_page_id = $sp.getParameter('id');
data.params.view_as_user = $sp.getParameter('view_as_user') || '';
data.params.extension_type = $sp.getParameter('extension_type') || '';
 
if(data.params.view_as_user.length > 0)
data.params.override_LoggedInUser_Access = true;
 
data.params.sysparm_kb_search_table = $sp.getParameter('sysparm_kb_search_table')||'';
}
 
function populateSystemProperties(){
data.properties = {};
 
data.properties.showStarRating = getProperty("glide.knowman.show_star_rating", "show_star_rating", true, true);
data.properties.showRatingOptions = getProperty("glide.knowman.show_rating_options", "show_rating_options", true, true);
data.properties.showYesNoRatings = getProperty("glide.knowman.show_yn_rating", "show_yn_rating", true, true);
//data.properties.showFlagArticle = getProperty("glide.knowman.show_flag", "show_flag", true, true);
//data.properties.showFlagArticle = data.properties.showFlagArticle && !params.sysparm_no_suggest && !knowledgeRecord.disable_suggesting;
 
data.properties.showUserComments = getProperty("glide.knowman.show_user_feedback", "show_user_feedback", 'onload');
data.properties.showAffectedProducts = gs.getProperty('glide.knowman.affected_products.display','true');
data.properties.showAttachedTasks = gs.getProperty('glide.knowman.recent_tasks.display','true');
 
data.properties.attachFields = gs.getProperty('glide.knowman.attach.fields');
if(data.properties.showAttachedTasks === 'true'){
data.properties.showAttachedTasks = gs.hasRole('itil') || gs.hasRole('knowledge');
}
data.properties.showCreateIncident = !kbViewModel.isInPopup && !data.params.sysparm_no_create_incident;
data.properties.createIncidentURL = getProperty('glide.knowman.create_incident_link', 'create_incident_link', '', false);
data.properties.isSubscriptionEnabled = kbViewModel.isSubscriptionEnabled;
 
 
data.properties.isEditable = kbViewModel.isEditable;
data.properties.showFeedBack = kbViewModel.showKBFeedback;
data.properties.showKBRatingOptions = kbViewModel.showKBRatingOptions;
 
data.properties.showKBHelpfullRating = kbViewModel.showKBHelpfullRating;
data.properties.showKBStarRating = kbViewModel.showKBStarRating;
 
data.properties.showKBCreateIncident = kbViewModel.showKBCreateIncident;// && !kbViewModel.isInPopup && !params.sysparm_no_create_incident;
data.properties.showKBFlagArticle = kbViewModel.showKBFlagArticle && !data.params.sysparm_no_suggest && !knowledgeRecord.disable_suggesting;
data.properties.showKBUpdateAction = kbViewModel.showKBUpdateAction;
 
data.properties.readOnlyPage = gs.getProperty('glide.knowman.contextual_search.show_read_only_article','false');
}
function getProperty(propertyName, optionName, defaultValue, checkRoles){
var optionVal = options[optionName];
if(!optionVal || optionVal === 'use_system' || !(optionVal === 'yes' || optionVal === 'no') ){
var propValue = gs.getProperty(propertyName, defaultValue);
if(propValue && checkRoles){
var roles = gs.getProperty(propertyName + '.roles');
if (roles != null && roles != ''){
propValue = gs.hasRole(roles);
}
}
return propValue;
}
else {
return optionVal === 'yes' ? true : false;
}
}
 
function populateCommonProperties(){
data.isMobileView = ($sp.getParameter('sysparm_device') != "" && $sp.getParameter('sysparm_device') == "mobile");
data.isKBLanguagesNewUI = GlidePluginManager.isActive('com.glideapp.knowledge.i18n2');
if(data.isKBLanguagesNewUI){
data.langList = kbViewModel.getLanguagesToDisplay(knowledgeRecord);
}
}
 
function populateDataForCrawler(){
data.isValid = true;
data.article_sys_id = knowledgeRecord.sys_id + '';
data.kbContentData = kbViewModel.getArticleViewData();//.getArticleContentBySysId(data.article_sys_id);
data.number = knowledgeRecord.number + '';
data.articleType = knowledgeRecord.article_type + '';
data.attachments = kbViewModel.attachments;
data.shortDesc = knowledgeRecord.short_description.getDisplayValue() + "";
data.displayAttachments = knowledgeRecord.display_attachments + '';
data.kbSysId = knowledgeRecord.kb_knowledge_base.sys_id + '';
data.hasComments = false;
data.tableName = knowledgeRecord.sys_class_name + '';
}
 
function populateDataFromKBViewModel(){
data.isValid = true;
data.isLoggedInUser = gs.getSession().isLoggedIn();
data.canContributeToKnowledge = kbViewModel.canContributeToKnowledgeBase; //canContributeHelper.canContribute(kbViewModel.knowledgeRecord);
data.article_sys_id = knowledgeRecord.sys_id + '';
data.authorTitle = kbViewModel.authorTitle || kbViewModel.getAuthorInfo("author.title");
data.kbContentData = kbViewModel.getArticleViewData();
data.avgRating = Math.round(knowledgeRecord.rating);
data.number = knowledgeRecord.number + '';
data.articleType = knowledgeRecord.article_type + '';
data.permalink = kbViewModel.permalink;
data.category = knowledgeRecord.category;
data.attachments = kbViewModel.attachments;
data.shortDesc = knowledgeRecord.short_description.getDisplayValue() + "";
data.viewCount = knowledgeRecord.getDisplayValue('sys_view_count');
data.displayAttachments = knowledgeRecord.display_attachments + '';
data.tableName = knowledgeRecord.sys_class_name + '';
data.disableSuggesting = knowledgeRecord.disable_suggesting;
data.revisionString = kbViewModel.revisionString;
data.articleTemplate = kbViewModel.articleTemplateName;
data.isSubscriptionEnabled = kbViewModel.isSubscriptionEnabled;
data.helpfulContent = kbViewModel.helpfulText;
data.reviewdate = knowledgeRecord.u_review_date + '';
data.author = knowledgeRecord.author + '';
if(data.isSubscriptionEnabled === true && !isMESP){
data.isArticleSubscribed = (new global.ActivitySubscriptionContext().getSubscriptionService().isSubscribed(knowledgeRecord.sys_id).subscriptionId) ? true : false;//kbViewModel.isArticleSubscribed;
data.isArticleSubscribedAtKB = (new global.ActivitySubscriptionContext().getSubscriptionService().isSubscribed(knowledgeRecord.kb_knowledge_base).subscriptionId) ? true : false;//kbViewModel.isArticleSubsrcibedAtKB;
}
else{
data.isArticleSubscribed = false;
data.isArticleSubscribedAtKB = false;
}
 
data.kbSysId = knowledgeRecord.kb_knowledge_base.sys_id + '';
data.kbName = knowledgeRecord.kb_knowledge_base.getDisplayValue() + '';
data.externalArticle = kbViewModel.externalArticle;
data.hasComments = !kbViewModel.feedbackEntryInitialDisplay;
data.isTaskTable = data.params.sysparm_kb_search_table ? kbViewModel.isTaskTable(data.params.sysparm_kb_search_table) : false;
data.kbDocSysId = kbViewModel.kbDocSysId;
data.wordOnlineUrl = kbViewModel.wordOnlineUrl;
 
}
 
function populateBreadCrumbs(){
var breadCrumb = kbViewModel.getBreadcrumb();
data.breadCrumb = [];
data.breadCrumb.push({label: knowledgeRecord.kb_knowledge_base.title + ' (' + data.messages.KNOWLEDGE_BASE + ')', type: 'kb_knowledge_base', values: {kb_knowledge_base: knowledgeRecord.kb_knowledge_base.sys_id + ''}});
var ctg = '';
for(var i = 0; i < breadCrumb.length; i++){
ctg += breadCrumb[i].name;
if(i != breadCrumb.length - 1){
ctg += ' - ';
}
}
if(ctg !== '' && breadCrumb && breadCrumb.length > 0){
data.breadCrumb.push({label: ctg + '', type: 'kb_category', values: {kb_knowledge_base: breadCrumb[breadCrumb.length - 1].knowledge_base + '', kb_category:  breadCrumb[breadCrumb.length - 1].value + ''}});
}
}
 
function handleViewCountIncrement(){
var incrementedViewCount = new global.KBViewModel().incrementAndReturnKBView(knowledgeRecord);
if(incrementedViewCount)
data.viewCount = parseInt(incrementedViewCount);
}
 
function initGlideWiki(){
try{
data.kbWiki = kbViewModel.getWikiContent();
}
catch(e){
data.kbWiki = '';
}
}
 
function populateAttachedTasks(){
data.attachedIncidents = [];
data.attachedIncidents = kbViewModel.getAttachedTasks();
}
 
function populateAffectedProducts(){
data.affectedProducts = [];
data.affectedProducts = kbViewModel.getAffectedProducts();
}
 
function populateVersionInfo(){
data.isVersioningEnabled = kbViewModel.versioningInfo.isEnabled;
data.versionList = kbViewModel.versioningInfo.history;
data.version = knowledgeRecord.getDisplayValue('version');
data.isLatestVersion = !(kbViewModel.versioningInfo.newVersionAvailable === true);
data.workflowState = (knowledgeRecord.workflow_state != 'published') ? ('(' + knowledgeRecord.workflow_state.getDisplayValue() + ')') : '';
data.versionInfo = kbViewModel.versioningInfo.versionDisplay;//((kbViewModel.versioningInfo.newVersionAvailable === true) ? 'v' + data.version  : data.messages.LATEST_VERSION);
data.versionInfoLabel = kbViewModel.versioningInfo.versionDisplayLabel;
data.showHistory = kbViewModel.versioningInfo.showHistory;
data.hideFeedbackOptions = kbViewModel.hideFeedbackOptions;
data.versionWarningMessage = kbViewModel.versioningInfo.warningMessage;
if(data.versionWarningMessage){
data.versionWarningMessage = data.versionWarningMessage.replace('kb_view.do?', '?id='+data.params.sysparm_article_view_page_id+'&');
}
}
 
 
function populateContributorInfo(){
if(!GlidePluginManager.isActive('com.sn_communities')) return;
if(sn_communities.CommunityKnowledgeHarvest){
var h = new sn_communities.CommunityKnowledgeHarvest();
var res = h.getHarvestedContentInfo(''+knowledgeRecord.sys_id);
if(res && res.status == 200){
data.hInfo = res.data;
if(data.hInfo){
var message = gs.getMessage("Created from the Community by {0}");
var contributor = data.hInfo.contributor;
var profile = gs.getMessage('Community user');
if(contributor){
profile = contributor.name.length > 0 ? contributor.name : profile;
if(contributor.userId)
profile = '<a href="?id=community_user_profile&user='+contributor.userId+'" target="_blank_cm1" >'+profile+'</a>';
}
message = message.replace('{0}', profile);
data.hInfo.profileMessage = message;
}
}
}
}
 
 
function getFeedbackReasonValues(){
data.feedback_reasons=[];
var kbFbTask = new global.KBFeedbackTask();
var response = kbFbTask.getReasonValues();
if(response){
data.feedback_reasons = new global.JSON().decode(response);
}
}
 
function getPageTitle() {
 
var title = gs.getMessage("Knowledge Article View");
 
if (!gs.nil(data.article_sys_id)) // kb record found
title = knowledgeRecord.kb_knowledge_base.getDisplayValue() + " - " + data.shortDesc; // kb name - kb short_desc
else if (!gs.nil(data.params.sysparm_article_view_page_id)) {
// kb record NOT found - fetching the kb_article_view portal page title
var kbPage = new GlideRecord('sp_page');
kbPage.addQuery("id",data.params.sysparm_article_view_page_id+"");
kbPage.query();
if(kbPage.next())
title = kbPage.getValue('title');
}
 
return title;
}
 
function getMetaTag() {
 
var content = '';
 
// kb record found
if (!gs.nil(data.article_sys_id)){
content = knowledgeRecord.kb_knowledge_base.getDisplayValue() + " - "
+ knowledgeRecord.kb_category.getDisplayValue() + " - "
+ knowledgeRecord.meta_description.getDisplayValue();
}
return content;
}
 
function isUserAllowedToViewAs(params){
    return new KBPortalService().isUserAllowedToViewAs(params);
}
if(input && input.action1=="get_value"){
console.log("input" + input.reviewtime1);
data.reviewtime=input.reviewtime1;
console.log(data.reviewtime +data.author);
 
var grupdate = new GlideRecord('kb_knowledge');
grupdate.addQuery('sys_id',data.reviewtime.toString());
grupdate.query();
while(grupdate.next()){
/*var actualreviewdate = grupdate.u_review_date;
var gdt = new GlideDateTime(actualreviewdate);
gdt.addMonths(12);
grupdate.u_review_date=gdt;*/
console.log('test');
grupdate.caller_id='9413981c1b445154f75a0e55cc4bcb39';
grupdate.update();
//data.time=knowledgeRecord.u_review_date;
}
}
}//update the review date
}