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

Offical Documentation

Official Docs: