Name
global.PortalBoard
Description
Decorator on Portal Board.
Script
var PortalBoard = Class.create();
PortalBoard.prototype = {
initialize: function(id) {
this.gr = new GlideRecordSecure('planned_task_custom_console');
if (!JSUtil.nil(id))
this.gr.get(id);
this.ppmConfigHelper = new PPMConfigHelper();
},
table: function() {
return this.gr.getValue('table') ? this.gr.getValue('table') : "";
},
filter: function() {
var filter = this.gr.getValue('filter') ? this.gr.getValue('filter') : "";
/* PortalBoard includes only Top Projects */
return PortalBoardUtils.appendToptaskFilter(this.table(), filter);
},
filterDisplayValue: function() {
return this.gr.getValue('filter') ? this.gr.getDisplayValue('filter') : "";
},
table2: function() {
return this.gr.getValue('table2') ? this.gr.getValue('table2') : "";
},
table2Filter: function() {
return this.gr.getValue('filter2') ? this.gr.getValue('filter2') : "";
},
name: function() {
return this.gr.getValue('name');
},
pinnedByList: function() {
return this.gr.getValue('pinned_by');
},
isPinnedByUser: function(userId) {
var pinList = this.pinnedByList();
if (JSUtil.notNil(pinList) && pinList.indexOf(userId) >= 0)
return true;
else
return false;
},
recordLimit: function() {
if (JSUtil.nil(this.gr.getValue('record_limit')))
return 50;
else
return this.gr.getValue('record_limit');
},
tableInstanceOf: function(table) {
if (JSUtil.nil(this.table()))
return false;
var gr = new GlideRecord(this.table());
return gr.instanceOf(table);
},
getBoardWidgetDetails: function() {
var widgetDetailsArray = [];
var gr = new GlideRecord('planned_task_custom_console_widget');
gr.addActiveQuery();
gr.addQuery('display_on_board', true);
gr.query();
while (gr.next()) {
var widget = new PortalBoardWidget(gr.getUniqueValue());
widgetDetailsArray.push(widget.getWidgetValue(this.id()));
}
return widgetDetailsArray;
},
matchingRecordIds: function() {
var ids = [];
if (this.table() == "") {
return ids;
}
var gr = new GlideRecordSecure(this.table());
gr.addQuery("sys_class_name", 'IN', this.ppmConfigHelper.getProjectTables(this.table()));
if (JSUtil.notNil(this.filter()))
gr.addEncodedQuery(this.filter());
gr.setLimit(this.recordLimit());
gr.query();
while (gr.next())
ids.push({
sys_id: gr.getValue('sys_id'),
parent: gr.getValue('parent')
});
return ids;
},
matchingTable2RecordIds: function() {
var ids = [];
if (this.table2() == "") {
return ids;
}
if (JSUtil.notNil(this.table2())) {
var gr = new GlideRecordSecure(this.table2());
gr.addQuery("sys_class_name", this.table2());
if (JSUtil.notNil(this.table2Filter()))
gr.addEncodedQuery(this.table2Filter());
gr.setLimit(this.recordLimit());
gr.query();
while (gr.next())
ids.push({
sys_id: gr.getValue('sys_id'),
parent: gr.getValue('parent')
});
}
return ids;
},
id: function() {
return this.gr.getValue('sys_id');
},
groupType: function() {
return this.gr.getValue('group_type');
},
groups: function() {
var members = new GlideRecordSecure('planned_task_custom_console_member');
members.addQuery('console', this.id());
members.addNotNullQuery('user_group');
members.query();
return members;
},
members: function() {
var members = new GlideRecordSecure('planned_task_custom_console_member');
members.addQuery('console', this.id());
members.addNotNullQuery('user');
members.query();
return members;
},
owner: function() {
return this.gr.getValue('owner');
},
addGroup: function(groupId) {
var group = new GlideRecordSecure('planned_task_custom_console_member');
group.initialize();
group.setValue('console', this.id());
group.setValue('user_group', groupId);
return group.insert();
},
removeGroup: function(groupId) {
var group = new GlideRecordSecure('planned_task_custom_console_member');
group.addQuery('user_group', groupId);
group.addQuery('console', this.id());
group.query();
if (group.hasNext() && group.next())
return group.deleteRecord();
else
return false;
},
groupExists: function(groupId) {
if (JSUtil.notNil(groupId)) {
var groups = new GlideRecord('planned_task_custom_console_member');
groups.addQuery('console', this.id());
groups.addQuery("user_group", groupId);
groups.query();
if (groups.hasNext())
return true;
}
return false;
},
addMember: function(userId) {
var member = new GlideRecordSecure('planned_task_custom_console_member');
member.initialize();
member.setValue('console', this.id());
member.setValue('user', userId);
return member.insert();
},
removeMember: function(userId) {
var member = new GlideRecordSecure('planned_task_custom_console_member');
member.addQuery('user', userId);
member.addQuery('console', this.id());
member.query();
if (member.hasNext() && member.next())
return member.deleteRecord();
else
return false;
},
memberExists: function(memberId) {
if (JSUtil.notNil(memberId)) {
var members = new GlideRecord('planned_task_custom_console_member');
members.addQuery('console', this.id());
members.addQuery("user", memberId);
members.query();
if (members.hasNext())
return true;
}
return false;
},
getEntities: function() {
var entities = [];
if(this.table()) {
var tableList = new PPMConfigHelper().getProjectTableList(this.table()); //Fetches all non-teamspace Projects
for (var i = 0; i < tableList.length; i++)
entities.push({
table: tableList[i].value,
filter: this.filter()
});
}
entities.push({
table: this.table2(),
filter: this.table2Filter()
});
return entities;
},
isValid: function() {
return this.gr.isValidRecord();
},
getPreferences: function() {
var preferences = {};
['widget_pref', 'show_summary_pref', 'overview_grid_pref', 'finance_grid_pref', 'timeline_pref'].forEach(function(field) {
preferences[field] = this.gr.getValue(field);
}.bind(this));
return preferences;
},
setPreference: function(prefKey, prefValue) {
if (this.gr.isValidField(prefKey)) {
var stringValue = '';
if (prefKey == 'widget_pref' && prefValue != null)
stringValue = prefValue.join();
else
stringValue = JSON.stringify(prefValue);
if (stringValue == 'null' || !stringValue)
stringValue = '';
this.gr.setValue(prefKey, stringValue);
}
return false;
},
update: function() {
this.gr.update();
},
hasShared: function() {
var members = new GlideRecordSecure('planned_task_custom_console_member');
members.addQuery('console', this.id());
members.setLimit(1)
members.query();
if (members.hasNext())
return true;
return false;
},
getWidgetValue: function getWidgetValue(widgetInstance, widgets, sysId, visiblePreferences, current) {
var include = widgetInstance.gr.getValue('include_default');
if (widgetInstance.getParent()) {
//if widget is a child we do need to go to preferences and if parent is not evaluated no need to evaluate child
for (var j = 0; j < widgets.length; j++) {
if (widgets[j].sys_id === widgetInstance.getParent() && widgets[j]['fullFetch'] === false) {
return widgetInstance.getPartialWidgetValue();
}
}
return widgetInstance.getWidgetValue(sysId);
} else if (visiblePreferences.length > 0) {
//widget is present in preferences so evaluate based on visibility value
if (visiblePreferences.indexOf(current) > -1) {
return widgetInstance.getWidgetValue(sysId);
} else {
return widgetInstance.getPartialWidgetValue();
}
} else if (include === '1') {
//widget is new but include by default is true so fetch full value
return widgetInstance.getWidgetValue(sysId);
} else {
//widget is not present in preferences but no need to show value as include by default is false
return widgetInstance.getPartialWidgetValue();
}
},
getPortalBoardWidgets: function(sysId, ids) {
var widgets = {};
var children = {};
var preferences = PortalBoardFactory.getPreferences(sysId);
var visiblePreferences = [];
if (preferences && preferences.widget_pref)
visiblePreferences = preferences['widget_pref'].split(',');
var gr = new GlideRecord('planned_task_custom_console_widget');
gr.addActiveQuery();
gr.orderBy('parent'); //so that we get all parent widgets first
if (ids && ids.length > 0) {
//it means we are trying to fetch single widget and its children(if present)
gr.addQuery('sys_id', "IN", ids);
}
gr.query();
while (gr.next()) {
try {
var current = gr.getUniqueValue();
var widgetInstance = new PortalBoardWidget(current);
var widget;
if (ids && ids.length > 0) {
widget = widgetInstance.getWidgetValue(sysId);
} else {
widget = this.getWidgetValue(widgetInstance, widgets, sysId, visiblePreferences, current);
}
if (widget.parent) {
if (!children.hasOwnProperty(widget.parent))
children[widget.parent] = [];
children[widget.parent].push(widget);
} else {
widgets[current] = widget;
}
} catch (e) {
gs.error("PortalBoardGlideServices:getBoardWidgets:" + JSON.stringify(e));
}
}
return Object.keys(widgets).map(function(key) {
widgets[key].children = children[key] || [];
return widgets[key];
});
},
isValidRecord: function() {
return this.gr && this.gr.isValidRecord();
},
type: 'PortalBoard'
};
Sys ID
cc9d28c85f63030056976e303e4666e5