Name

global.SPFavoriteUtil

Description

No description available

Script

var SPFavoriteUtil;
(function() { 
  var LIMIT = 50;

  SPFavoriteUtil = {
  	canView: canView,
  	toggleFavorite: toggleFavorite 
  };
  
  function toggleFavorite(tableName, recordID) {
  	var gr = new GlideRecord('sp_favorite');
  	gr.addQuery('reference_table', tableName);
  	gr.addQuery('reference_document', recordID);
  	gr.addQuery('user', gs.getUserID());
  	gr.query();
  	if (gr.next()) { //Favorite exists, unfavorite it
  		return gr.deleteRecord();
  	} else { // Favorite doesnot exist, add a new favorite
  		gr = new GlideRecord('sp_favorite');
  		gr.addQuery('user', gs.getUserID());
  		gr.query();
  		if (gr.getRowCount() >= LIMIT) {
  			gs.addErrorMessage(gs.getMessage('You have reached maximum number of favorites allowed'));
  			return false;
  		} else {
  			gr.initialize();
  			gr.reference_table = tableName;
  			gr.reference_document = recordID;
  			gr.insert();
  			return true;
  		}
  	}
  }

  function canView(gr, portalID) {
  	//First check extension point
  	var extensionPoints = new GlideScriptedExtensionPoint().getExtensions('global.SPFavoriteSecurity');
  	var extensionCanView = false;
  	var validExtension = false;
  	for (var i = 0; i < extensionPoints.length; ++i) {
  		var point = extensionPoints[i];
  		if (point.applies(gr)) {
  			validExtension = true;
  			if (point.canView(gr, portalID)) {
  				extensionCanView = true;
  				break;
  			}
  		}
  	}
  	if (validExtension)
  		return extensionCanView;

  	return gr.canRead(); // If there is no extension point, check ACL
  }

})();

Sys ID

419ffb25ebfa2010e0ef83c45e5228b9

Offical Documentation

Official Docs: