Notification API

This commit is contained in:
Joas Schilling 2015-08-31 12:24:37 +02:00
parent d044884cfa
commit 4e347170ac
10 changed files with 1279 additions and 1 deletions

View File

@ -0,0 +1,151 @@
<?php
/**
* @author Joas Schilling <nickvergessen@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OC\Notification;
use OCP\Notification\IAction;
class Action implements IAction {
/** @var string */
protected $label;
/** @var string */
protected $labelParsed;
/** @var string */
protected $link;
/** @var string */
protected $icon;
/**
* Constructor
*/
public function __construct() {
$this->label = '';
$this->labelParsed = '';
$this->link = '';
$this->icon = '';
}
/**
* @param string $label
* @return $this
* @throws \InvalidArgumentException if the label is invalid
* @since 8.2.0
*/
public function setLabel($label) {
if (!is_string($label) || $label === '' || isset($label[32])) {
throw new \InvalidArgumentException('The given label is invalid');
}
$this->label = $label;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getLabel() {
return $this->label;
}
/**
* @param string $label
* @return $this
* @throws \InvalidArgumentException if the label is invalid
* @since 8.2.0
*/
public function setParsedLabel($label) {
if (!is_string($label) || $label === '') {
throw new \InvalidArgumentException('The given parsed label is invalid');
}
$this->labelParsed = $label;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getParsedLabel() {
return $this->labelParsed;
}
/**
* @param string $link
* @return $this
* @throws \InvalidArgumentException if the link is invalid
* @since 8.2.0
*/
public function setLink($link) {
if (!is_string($link) || $link === '' || isset($link[256])) {
throw new \InvalidArgumentException('The given link is invalid');
}
$this->link = $link;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getLink() {
return $this->link;
}
/**
* @param string $icon
* @return $this
* @throws \InvalidArgumentException if the icon is invalid
* @since 8.2.0
*/
public function setIcon($icon) {
if (!is_string($icon) || $icon === '' || isset($icon[64])) {
throw new \InvalidArgumentException('The given icon is invalid');
}
$this->icon = $icon;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getIcon() {
return $this->icon;
}
/**
* @return bool
*/
public function isValid() {
return $this->label !== '' && $this->link !== '';
}
/**
* @return bool
*/
public function isValidParsed() {
return $this->labelParsed !== '' && $this->link !== '';
}
}

View File

@ -0,0 +1,180 @@
<?php
/**
* @author Joas Schilling <nickvergessen@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OC\Notification;
use OCP\Notification\IApp;
use OCP\Notification\IManager;
use OCP\Notification\INotification;
use OCP\Notification\INotifier;
class Manager implements IManager {
/** @var IApp */
protected $apps;
/** @var INotifier */
protected $notifiers;
/** @var \Closure */
protected $appsClosures;
/** @var \Closure */
protected $notifiersClosures;
/**
* @param \Closure $service The service must implement IApp, otherwise a
* \InvalidArgumentException is thrown later
* @return null
* @since 8.2.0
*/
public function registerApp(\Closure $service) {
$this->appsClosures[] = $service;
$this->apps = [];
}
/**
* @param \Closure $service The service must implement INotifier, otherwise a
* \InvalidArgumentException is thrown later
* @return null
* @since 8.2.0
*/
public function registerNotifier(\Closure $service) {
$this->notifiersClosures[] = $service;
$this->notifiers = [];
}
/**
* @return IApp[]
*/
protected function getApps() {
if (!empty($this->apps)) {
return $this->apps;
}
foreach ($this->appsClosures as $closure) {
$app = $closure;
if (!($app instanceof IApp)) {
throw new \InvalidArgumentException('The given notification app does not implement the IApp interface');
}
$this->apps[] = $app;
}
return $this->apps;
}
/**
* @return INotifier[]
*/
protected function getNotifiers() {
if (!empty($this->notifiers)) {
return $this->notifiers;
}
foreach ($this->notifiersClosures as $closure) {
$notifier = $closure;
if (!($notifier instanceof INotifier)) {
throw new \InvalidArgumentException('The given notification app does not implement the INotifier interface');
}
$this->notifiers[] = $notifier;
}
return $this->notifiers;
}
/**
* @return INotification
* @since 8.2.0
*/
public function createNotification() {
return new Notification();
}
/**
* @param INotification $notification
* @return null
* @throws \InvalidArgumentException When the notification is not valid
* @since 8.2.0
*/
public function notify(INotification $notification) {
if (!$notification->isValid()) {
throw new \InvalidArgumentException('The given notification is invalid');
}
$apps = $this->getApps();
foreach ($apps as $app) {
$app->notify($notification);
}
}
/**
* @param INotification $notification
* @return INotification
* @throws \InvalidArgumentException When the notification was not prepared by a notifier
* @since 8.2.0
*/
public function prepare(INotification $notification) {
$notifiers = $this->getNotifiers();
foreach ($notifiers as $notifier) {
try {
$notifier->prepare($notification);
} catch (\InvalidArgumentException $e) {}
}
if (!$notification->isValidParsed()) {
throw new \InvalidArgumentException('The given notification has not been handled');
}
return $notification;
}
/**
* @param string $objectType
* @param int $objectId
* @param string $user
* @return null
*/
public function markProcessed($objectType, $objectId, $user = '') {
$apps = $this->getApps();
foreach ($apps as $app) {
$app->markProcessed($objectType, $objectId, $user);
}
}
/**
* @param string $user
* @param string $appId
* @return int
*/
public function getCount($user, $appId = '') {
$apps = $this->getApps();
$count = 0;
foreach ($apps as $app) {
$count += $app->markProcessed($user, $appId);
}
return $count;
}
}

View File

@ -0,0 +1,448 @@
<?php
/**
* @author Joas Schilling <nickvergessen@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OC\Notification;
use OCP\Notification\IAction;
use OCP\Notification\INotification;
class Notification implements INotification {
/** @var string */
protected $app;
/** @var string */
protected $user;
/** @var int */
protected $timestamp;
/** @var string */
protected $objectType;
/** @var int */
protected $objectId;
/** @var string */
protected $subject;
/** @var array */
protected $subjectParameters;
/** @var string */
protected $subjectParsed;
/** @var string */
protected $message;
/** @var array */
protected $messageParameters;
/** @var string */
protected $messageParsed;
/** @var string */
protected $link;
/** @var string */
protected $icon;
/** @var array */
protected $actions;
/** @var array */
protected $actionsParsed;
/**
* Constructor
*/
public function __construct() {
$this->app = '';
$this->user = '';
$this->timestamp = 0;
$this->objectType = '';
$this->objectId = 0;
$this->subject = '';
$this->subjectParameters = [];
$this->subjectParsed = '';
$this->message = '';
$this->messageParameters = [];
$this->messageParsed = '';
$this->link = '';
$this->icon = '';
$this->actions = [];
$this->actionsParsed = [];
}
/**
* @param string $app
* @return $this
* @throws \InvalidArgumentException if the app id is invalid
* @since 8.2.0
*/
public function setApp($app) {
if (!is_string($app) || $app === '' || isset($app[32])) {
throw new \InvalidArgumentException('The given app name is invalid');
}
$this->app = $app;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getApp() {
return $this->app;
}
/**
* @param string $user
* @return $this
* @throws \InvalidArgumentException if the user id is invalid
* @since 8.2.0
*/
public function setUser($user) {
if (!is_string($user) || $user === '' || isset($app[64])) {
throw new \InvalidArgumentException('The given user id is invalid');
}
$this->user = $user;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getUser() {
return $this->user;
}
/**
* @param int $timestamp
* @return $this
* @throws \InvalidArgumentException if the timestamp is invalid
* @since 8.2.0
*/
public function setTimestamp($timestamp) {
if (!is_int($timestamp)) {
throw new \InvalidArgumentException('The given timestamp is invalid');
}
$this->timestamp = $timestamp;
return $this;
}
/**
* @return int
* @since 8.2.0
*/
public function getTimestamp() {
return $this->timestamp;
}
/**
* @param string $type
* @param int $id
* @return $this
* @throws \InvalidArgumentException if the object type or id is invalid
* @since 8.2.0
*/
public function setObject($type, $id) {
if (!is_string($type) || $type === '' || isset($type[64])) {
throw new \InvalidArgumentException('The given object type is invalid');
}
$this->objectType = $type;
if (!is_int($id)) {
throw new \InvalidArgumentException('The given object id is invalid');
}
$this->objectId = $id;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getObjectType() {
return $this->objectType;
}
/**
* @return int
* @since 8.2.0
*/
public function getObjectId() {
return $this->objectId;
}
/**
* @param string $subject
* @param array $parameters
* @return $this
* @throws \InvalidArgumentException if the subject or parameters are invalid
* @since 8.2.0
*/
public function setSubject($subject, array $parameters = []) {
if (!is_string($subject) || $subject === '' || isset($subject[64])) {
throw new \InvalidArgumentException('The given subject is invalid');
}
$this->subject = $subject;
if (!is_array($parameters)) {
throw new \InvalidArgumentException('The given subject parameters are invalid');
}
$this->subjectParameters = $parameters;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getSubject() {
return $this->subject;
}
/**
* @return string[]
* @since 8.2.0
*/
public function getSubjectParameters() {
return $this->subjectParameters;
}
/**
* @param string $subject
* @return $this
* @throws \InvalidArgumentException if the subject are invalid
* @since 8.2.0
*/
public function setParsedSubject($subject) {
if (!is_string($subject) || $subject === '') {
throw new \InvalidArgumentException('The given parsed subject is invalid');
}
$this->subjectParsed = $subject;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getParsedSubject() {
return $this->messageParsed;
}
/**
* @param string $message
* @param array $parameters
* @return $this
* @throws \InvalidArgumentException if the message or parameters are invalid
* @since 8.2.0
*/
public function setMessage($message, array $parameters = []) {
if (!is_string($message) || $message === '' || isset($message[64])) {
throw new \InvalidArgumentException('The given message is invalid');
}
$this->message = $message;
if (!is_array($parameters)) {
throw new \InvalidArgumentException('The given message parameters are invalid');
}
$this->messageParameters = $parameters;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getMessage() {
return $this->message;
}
/**
* @return string[]
* @since 8.2.0
*/
public function getMessageParameters() {
return $this->messageParameters;
}
/**
* @param string $message
* @return $this
* @throws \InvalidArgumentException if the message are invalid
* @since 8.2.0
*/
public function setParsedMessage($message) {
if (!is_string($message) || $message === '') {
throw new \InvalidArgumentException('The given parsed message is invalid');
}
$this->messageParsed = $message;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getParsedMessage() {
return $this->messageParsed;
}
/**
* @param string $link
* @return $this
* @throws \InvalidArgumentException if the link are invalid
* @since 8.2.0
*/
public function setLink($link) {
if (!is_string($link) || $link === '' || isset($link[256])) {
throw new \InvalidArgumentException('The given link is invalid');
}
$this->link = $link;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getLink() {
return $this->link;
}
/**
* @param string $icon
* @return $this
* @throws \InvalidArgumentException if the icon are invalid
* @since 8.2.0
*/
public function setIcon($icon) {
if (!is_string($icon) || $icon === '' || isset($icon[64])) {
throw new \InvalidArgumentException('The given icon is invalid');
}
$this->icon = $icon;
return $this;
}
/**
* @return string
* @since 8.2.0
*/
public function getIcon() {
return $this->icon;
}
/**
* @return IAction
* @since 8.2.0
*/
public function createAction() {
return new Action();
}
/**
* @param IAction $action
* @return $this
* @throws \InvalidArgumentException if the action are invalid
* @since 8.2.0
*/
public function addAction(IAction $action) {
if ($action->isValid()) {
throw new \InvalidArgumentException('The given action is invalid');
}
$this->actions[] = $action;
return $this;
}
/**
* @return IAction[]
* @since 8.2.0
*/
public function getActions() {
return $this->actions;
}
/**
* @param IAction $action
* @return $this
* @throws \InvalidArgumentException if the action are invalid
* @since 8.2.0
*/
public function addParsedAction(IAction $action) {
if ($action->isValidParsed()) {
throw new \InvalidArgumentException('The given parsed action is invalid');
}
$this->actions[] = $action;
return $this;
}
/**
* @return IAction[]
* @since 8.2.0
*/
public function getParsedActions() {
return $this->actionsParsed;
}
/**
* @return bool
* @since 8.2.0
*/
public function isValid() {
return
$this->isValidCommon()
&&
$this->subject !== ''
;
}
/**
* @return bool
* @since 8.2.0
*/
public function isValidParsed() {
return
$this->isValidCommon()
&&
$this->subjectParsed !== ''
;
}
/**
* @return bool
*/
protected function isValidCommon() {
return
$this->app !== ''
&&
$this->user !== ''
&&
$this->timestamp !== 0
&&
$this->objectType !== ''
&&
$this->objectId !== 0
;
}
}

View File

@ -53,6 +53,7 @@ use OC\Lock\DBLockingProvider;
use OC\Lock\MemcacheLockingProvider;
use OC\Lock\NoopLockingProvider;
use OC\Mail\Mailer;
use OC\Notification\Manager;
use OC\Security\CertificateManager;
use OC\Security\Crypto;
use OC\Security\Hasher;
@ -475,6 +476,9 @@ class Server extends SimpleContainer implements IServerContainer {
$c->getDatabaseConnection()
);
});
$this->registerService('NotificationManager', function() {
return new Manager();
});
$this->registerService('CapabilitiesManager', function (Server $c) {
$manager = new \OC\CapabilitiesManager();
$manager->registerCapability(function() use ($c) {
@ -1043,6 +1047,16 @@ class Server extends SimpleContainer implements IServerContainer {
return $this->query('EventDispatcher');
}
/**
* Get the Notification Manager
*
* @return \OCP\Notification\IManager
* @since 8.2.0
*/
public function getNotificationManager() {
return $this->query('NotificationManager');
}
/**
* @return \OC\Session\CryptoWrapper
*/

View File

@ -448,7 +448,6 @@ interface IServerContainer {
*/
public function getMimeTypeLoader();
/**
* Get the EventDispatcher
*
@ -456,4 +455,12 @@ interface IServerContainer {
* @since 8.2.0
*/
public function getEventDispatcher();
/**
* Get the Notification Manager
*
* @return \OCP\Notification\IManager
* @since 8.2.0
*/
public function getNotificationManager();
}

View File

@ -0,0 +1,96 @@
<?php
/**
* @author Joas Schilling <nickvergessen@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCP\Notification;
/**
* Interface IAction
*
* @package OCP\Notification
* @since 8.2.0
*/
interface IAction {
/**
* @param string $label
* @return $this
* @throws \InvalidArgumentException if the label is invalid
* @since 8.2.0
*/
public function setLabel($label);
/**
* @return string
* @since 8.2.0
*/
public function getLabel();
/**
* @param string $label
* @return $this
* @throws \InvalidArgumentException if the label is invalid
* @since 8.2.0
*/
public function setParsedLabel($label);
/**
* @return string
* @since 8.2.0
*/
public function getParsedLabel();
/**
* @param string $link
* @return $this
* @throws \InvalidArgumentException if the link is invalid
* @since 8.2.0
*/
public function setLink($link);
/**
* @return string
* @since 8.2.0
*/
public function getLink();
/**
* @param string $icon
* @return $this
* @throws \InvalidArgumentException if the icon is invalid
* @since 8.2.0
*/
public function setIcon($icon);
/**
* @return string
* @since 8.2.0
*/
public function getIcon();
/**
* @return bool
*/
public function isValid();
/**
* @return bool
*/
public function isValidParsed();
}

View File

@ -0,0 +1,55 @@
<?php
/**
* @author Joas Schilling <nickvergessen@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCP\Notification;
/**
* Interface IApp
*
* @package OCP\Notification
* @since 8.2.0
*/
interface IApp {
/**
* @param INotification $notification
* @return null
* @throws \InvalidArgumentException When the notification is not valid
* @since 8.2.0
*/
public function notify(INotification $notification);
/**
* @param string $objectType
* @param int $objectId
* @param string $user
* @return null
* @since 8.2.0
*/
public function markProcessed($objectType, $objectId, $user = '');
/**
* @param string $user
* @param string $appId
* @return int
* @since 8.2.0
*/
public function getCount($user, $appId = '');
}

View File

@ -0,0 +1,52 @@
<?php
/**
* @author Joas Schilling <nickvergessen@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCP\Notification;
/**
* Interface IManager
*
* @package OCP\Notification
* @since 8.2.0
*/
interface IManager extends IApp, INotifier {
/**
* @param \Closure $service The service must implement IApp, otherwise a
* \InvalidArgumentException is thrown later
* @return null
* @since 8.2.0
*/
public function registerApp(\Closure $service);
/**
* @param \Closure $service The service must implement INotifier, otherwise a
* \InvalidArgumentException is thrown later
* @return null
* @since 8.2.0
*/
public function registerNotifier(\Closure $service);
/**
* @return INotification
* @since 8.2.0
*/
public function createNotification();
}

View File

@ -0,0 +1,237 @@
<?php
/**
* @author Joas Schilling <nickvergessen@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCP\Notification;
/**
* Interface INotification
*
* @package OCP\Notification
* @since 8.2.0
*/
interface INotification {
/**
* @param string $app
* @return $this
* @throws \InvalidArgumentException if the app id are invalid
* @since 8.2.0
*/
public function setApp($app);
/**
* @return string
* @since 8.2.0
*/
public function getApp();
/**
* @param string $user
* @return $this
* @throws \InvalidArgumentException if the user id are invalid
* @since 8.2.0
*/
public function setUser($user);
/**
* @return string
* @since 8.2.0
*/
public function getUser();
/**
* @param int $timestamp
* @return $this
* @throws \InvalidArgumentException if the timestamp are invalid
* @since 8.2.0
*/
public function setTimestamp($timestamp);
/**
* @return int
* @since 8.2.0
*/
public function getTimestamp();
/**
* @param string $type
* @param int $id
* @return $this
* @throws \InvalidArgumentException if the object type or id are invalid
* @since 8.2.0
*/
public function setObject($type, $id);
/**
* @return string
* @since 8.2.0
*/
public function getObjectType();
/**
* @return int
* @since 8.2.0
*/
public function getObjectId();
/**
* @param string $subject
* @param array $parameters
* @return $this
* @throws \InvalidArgumentException if the subject or parameters are invalid
* @since 8.2.0
*/
public function setSubject($subject, array $parameters = []);
/**
* @return string
* @since 8.2.0
*/
public function getSubject();
/**
* @return string[]
* @since 8.2.0
*/
public function getSubjectParameters();
/**
* @param string $subject
* @return $this
* @throws \InvalidArgumentException if the subject are invalid
* @since 8.2.0
*/
public function setParsedSubject($subject);
/**
* @return string
* @since 8.2.0
*/
public function getParsedSubject();
/**
* @param string $message
* @param array $parameters
* @return $this
* @throws \InvalidArgumentException if the message or parameters are invalid
* @since 8.2.0
*/
public function setMessage($message, array $parameters = []);
/**
* @return string
* @since 8.2.0
*/
public function getMessage();
/**
* @return string[]
* @since 8.2.0
*/
public function getMessageParameters();
/**
* @param string $message
* @return $this
* @throws \InvalidArgumentException if the message are invalid
* @since 8.2.0
*/
public function setParsedMessage($message);
/**
* @return string
* @since 8.2.0
*/
public function getParsedMessage();
/**
* @param string $link
* @return $this
* @throws \InvalidArgumentException if the link are invalid
* @since 8.2.0
*/
public function setLink($link);
/**
* @return string
* @since 8.2.0
*/
public function getLink();
/**
* @param string $icon
* @return $this
* @throws \InvalidArgumentException if the icon are invalid
* @since 8.2.0
*/
public function setIcon($icon);
/**
* @return string
* @since 8.2.0
*/
public function getIcon();
/**
* @return IAction
* @since 8.2.0
*/
public function createAction();
/**
* @param IAction $action
* @return $this
* @throws \InvalidArgumentException if the action are invalid
* @since 8.2.0
*/
public function addAction(IAction $action);
/**
* @return IAction[]
* @since 8.2.0
*/
public function getActions();
/**
* @param IAction $action
* @return $this
* @throws \InvalidArgumentException if the action are invalid
* @since 8.2.0
*/
public function addParsedAction(IAction $action);
/**
* @return IAction[]
* @since 8.2.0
*/
public function getParsedActions();
/**
* @return bool
* @since 8.2.0
*/
public function isValid();
/**
* @return bool
* @since 8.2.0
*/
public function isValidParsed();
}

View File

@ -0,0 +1,38 @@
<?php
/**
* @author Joas Schilling <nickvergessen@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCP\Notification;
/**
* Interface INotifier
*
* @package OCP\Notification
* @since 8.2.0
*/
interface INotifier {
/**
* @param INotification $notification
* @return INotification
* @throws \InvalidArgumentException When the notification was not prepared by a notifier
* @since 8.2.0
*/
public function prepare(INotification $notification);
}