Notification API
This commit is contained in:
parent
d044884cfa
commit
4e347170ac
10 changed files with 1279 additions and 1 deletions
151
lib/private/notification/action.php
Normal file
151
lib/private/notification/action.php
Normal 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 !== '';
|
||||
}
|
||||
}
|
180
lib/private/notification/manager.php
Normal file
180
lib/private/notification/manager.php
Normal 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;
|
||||
}
|
||||
}
|
448
lib/private/notification/notification.php
Normal file
448
lib/private/notification/notification.php
Normal 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
|
||||
;
|
||||
}
|
||||
}
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
96
lib/public/notification/iaction.php
Normal file
96
lib/public/notification/iaction.php
Normal 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();
|
||||
}
|
55
lib/public/notification/iapp.php
Normal file
55
lib/public/notification/iapp.php
Normal 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 = '');
|
||||
}
|
52
lib/public/notification/imanager.php
Normal file
52
lib/public/notification/imanager.php
Normal 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();
|
||||
}
|
237
lib/public/notification/inotification.php
Normal file
237
lib/public/notification/inotification.php
Normal 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();
|
||||
}
|
38
lib/public/notification/inotifier.php
Normal file
38
lib/public/notification/inotifier.php
Normal 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);
|
||||
}
|
Loading…
Reference in a new issue