/** * A provider for messages to be displayed in the iTop Newsroom */ interface iNewsroomProvider { /** * Inject the current configuration in the provider * @param Config $oConfig * @return void */ public function SetConfig(Config $oConfig); /** * Tells if this provider is enabled for the given user * @param User $oUser The user for who to check if the provider is applicable. * return bool */ public function IsApplicable(User $oUser = null); /** * The human readable (localized) label for this provider * @return string */ public function GetLabel(); /** * The URL to query (from the browser, using jsonp) to fetch all unread messages * @return string */ public function GetFetchURL(); /** * The URL to navigate to in order to display all messages * @return string */ public function GetViewAllURL(); /** * The URL to query(from the browser, using jsonp) to mark all unread messages as read * @return string */ public function GetMarkAllAsReadURL(); /** * Return the URL to configure the preferences for this provider or null is there is nothing to configure * @return string|null */ public function GetPreferencesUrl(); /** * Return an array key => value to be replaced in URL of the messages * Example: '%itop_root%' => utils::GetAbsoluteUrlAppRoot(); * @return string[] */ public function GetPlaceholders(); /** * The duration between to refreshes of the cache (in seconds) * @return int */ public function GetTTL(); } /** * Basic implementation of a Newsroom provider, to be overloaded by your own provider implementation * */ abstract class NewsroomProviderBase implements iNewsroomProvider { /** * The current configuration parameters * @var Config */ protected $oConfig; public function __construct() { $this->oConfig = null; } /** * {@inheritDoc} * @see iNewsroomProvider::SetConfig() */ public function SetConfig(Config $oConfig) { $this->oConfig = $oConfig; } /** * {@inheritDoc} * @see iNewsroomProvider::GetPreferencesUrl() */ public function GetPreferencesUrl() { return null; // No preferences } /** * {@inheritDoc} * @see iNewsroomProvider::GetLabel() */ abstract public function GetLabel(); /** * {@inheritDoc} * @see iNewsroomProvider::GetFetchURL() */ abstract public function GetFetchURL(); /** * {@inheritDoc} * @see iNewsroomProvider::GetMarkAllURL() */ abstract public function GetMarkAllAsReadURL(); /** * {@inheritDoc} * @see iNewsroomProvider::GetViewAllURL() */ abstract public function GetViewAllURL(); public function IsApplicable(User $oUser = null) { return false; } /** * {@inheritDoc} * @see iNewsroomProvider::GetPlaceholders() */ public function GetPlaceholders() { return []; // By default, empty set of placeholders } public function GetTTL() { return 10 * 60; // Refresh every 10 minutes } }