178 lines
5.5 KiB
JavaScript
178 lines
5.5 KiB
JavaScript
"use strict";
|
|
/**
|
|
* Value object for knowledge article item.
|
|
*
|
|
* @author Victor Shevchenko
|
|
* @author Igor Samulenko
|
|
*
|
|
* @constructor
|
|
*/
|
|
function KnowledgeArticleVO() {
|
|
// simple fields
|
|
this.title = '';
|
|
this.isDraft = false;
|
|
this.createDate = null;
|
|
this.updateDate = null;
|
|
this.modifiedDate = null;
|
|
this.desc = '';
|
|
this.likePercentage = 0;
|
|
this.rating = '';
|
|
this.useCount = 0;
|
|
this.notUsefulCount = 0;
|
|
this.viewCount = 0;
|
|
this.type = EntityVO.TYPE_KNOWLEDGE;
|
|
this.articleId = '';
|
|
this.status = '';
|
|
this.following = false;
|
|
this.tags = '';
|
|
this.entityLink = '';
|
|
this.uuid = '';
|
|
this.templateId = '';
|
|
this.templateName = '';
|
|
this.version = 0;
|
|
this.favorite = false;
|
|
this.flagged = false;
|
|
this.articleGUID = '';
|
|
this.isLastVersion = false;
|
|
this.isInApproval = false;
|
|
this.attachmentLimit = 0;
|
|
this.internalUse = false;
|
|
this.perfAssessment = false;
|
|
// complex fields
|
|
this.additionalCategoriesOrganization = [];
|
|
this.additionalCategoriesSite = [];
|
|
this.additionalCategoriesBusinessService = [];
|
|
this.additionalCategoriesCompanies = [];
|
|
this.additionalCategorization = [];
|
|
this.articleVisibilityGroup = [];
|
|
this.categorizations = [];
|
|
this.content = [];
|
|
this.assignee = {};
|
|
this.author = {};
|
|
this.owner = {};
|
|
this.company = {};
|
|
this.comments = [];
|
|
this.hashTags = [];
|
|
this.accessMappings = {};
|
|
this.assigneeGroup = {};
|
|
this.supportGroup = {};
|
|
this.language = '';
|
|
//mocked data for article metadata
|
|
this.autoAssign = true;
|
|
this.site = {};
|
|
this.businessService = {};
|
|
this.organization = {};
|
|
this.commentCount = 0;
|
|
//for primary/additional data
|
|
this.allCompanies = [];
|
|
this.allSites = [];
|
|
this.allServices = [];
|
|
this.allOrganizations = [];
|
|
this.approvalProcessName = '';
|
|
this.isPasswordEnabled = false;
|
|
this.nextReviewDate = null;
|
|
}
|
|
// inherit BaseVO
|
|
KnowledgeArticleVO.prototype = new BaseVO();
|
|
// correct the constructor pointer
|
|
KnowledgeArticleVO.prototype.constructor = KnowledgeArticleVO;
|
|
/**
|
|
* @override
|
|
* @return {Array}
|
|
*/
|
|
KnowledgeArticleVO.prototype.getProps = function () {
|
|
var keys = Object.keys(new KnowledgeArticleVO());
|
|
return BaseVO.prototype.getProps().concat(keys);
|
|
};
|
|
KnowledgeArticleVO.prototype.postBuild = function () {
|
|
this.recalculateRating();
|
|
if (!_.isEmpty(this.accessMappings)) {
|
|
var accessMappings = {};
|
|
for (var i = 0; i < this.accessMappings.length; i++) {
|
|
var accessMappingId = this.accessMappings[i].id.indexOf('action') !== -1 ?
|
|
this.accessMappings[i].id.replace(/\-/g, '').replace('action', '') + 'ActionAllowed' :
|
|
this.accessMappings[i].id + 'EditAllowed';
|
|
accessMappings[accessMappingId] = (this.accessMappings[i].permission === 'write');
|
|
}
|
|
this.accessMappings = accessMappings;
|
|
}
|
|
else {
|
|
this.accessMappings = {
|
|
assigneeEditAllowed: true,
|
|
attachmentsEditAllowed: true,
|
|
companyEditAllowed: true,
|
|
detailsEditAllowed: true,
|
|
relationsEditAllowed: true,
|
|
statusEditAllowed: true,
|
|
summaryEditAllowed: true,
|
|
timelineEditAllowed: true,
|
|
visibilitygroupsEditAllowed: true,
|
|
helpfulEditAllowed: true,
|
|
internaluseEditAllowed: true
|
|
};
|
|
}
|
|
this.status = { value: this.status };
|
|
this.content = _.sortBy(this.content, 'order');
|
|
this.entityLink = '#/' + this.type + '/' + this.uuid;
|
|
this.tags = !this.tags ? [] : this.tags.split(',');
|
|
if (this.supportGroup) {
|
|
this.assigneeGroup = this.supportGroup;
|
|
}
|
|
if (this.assignee) {
|
|
this.autoAssign = false;
|
|
}
|
|
if (this.templateName === 'Decision Tree' && angular.isObject(this.content[0])) {
|
|
this.decisionTree = JSON.parse(this.content[0].snippet);
|
|
}
|
|
this.defaultCategorization = [
|
|
{
|
|
name: 'operational',
|
|
tiers: {}
|
|
},
|
|
{
|
|
name: 'product',
|
|
tiers: {}
|
|
}
|
|
];
|
|
this.categorizations = _.filter(this.categorizations, function (category) {
|
|
return !_.isEmpty(category.tiers);
|
|
});
|
|
_.forEach(this.categorizations, _.bind(function (category) {
|
|
category.company = {
|
|
name: this.company.name
|
|
};
|
|
}, this));
|
|
_.forEach(this.additionalCategorization, _.bind(function (category) {
|
|
category.company = {
|
|
name: this.company.name
|
|
};
|
|
}, this));
|
|
this.nextReviewDate = this.nextReviewDate ? new Date(this.nextReviewDate) : null;
|
|
};
|
|
/**
|
|
* Returns full name of knowledge article author.
|
|
*
|
|
* @returns {String}
|
|
*/
|
|
KnowledgeArticleVO.prototype.getAuthorFullName = function () {
|
|
return this.author && this.author.getFullName() || '';
|
|
};
|
|
/**
|
|
* Returns profile thumbnail of knowledge article author.
|
|
*
|
|
* @returns {String}
|
|
*/
|
|
KnowledgeArticleVO.prototype.getAuthorThumbnail = function () {
|
|
return (this.author.thumbnailMime && this.author.thumbnail) ? ('data:' + this.author.thumbnailMime + ';base64,' + this.author.thumbnail) : '';
|
|
};
|
|
KnowledgeArticleVO.prototype.isDecisionTree = function () {
|
|
if (this.templateName === 'Decision Tree') {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
KnowledgeArticleVO.prototype.recalculateRating = function () {
|
|
this.viewCount = (+this.useCount) + (+this.notUsefulCount);
|
|
this.rating = Math.round((this.useCount / this.viewCount) * 100);
|
|
};
|