Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 57 additions & 48 deletions docs/notification-workflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ $declineAction = $notification->createAction();
$declineAction->setLabel('decline')
->setLink('/apps/files_sharing/api/v1/remote_shares/1337', 'DELETE');

$notification->setApp('files_sharing')
$notification->setApp('myapp')
->setUser('recipient1')
->setDateTime(new DateTime())
->setObject('remote', '1337') // $type and $id
Expand All @@ -47,70 +47,79 @@ $manager->notify($notification);
### Preparing a notification for display

1. In `app.php` register your Notifier (`\OCP\Notification\INotifier`) interface to the manager,
using a `\Closure`:
using a `\Closure` returning the Notifier and a `\Closure` returning an array of the id and name:
```php
$manager = \OC::$server->getNotificationManager();
$manager->registerNotifier(function() {
return new \OCA\Files_Sharing\Notifier(
\OC::$server->getL10NFactory()
);
}, function() {
$l = \OC::$server->getL10N('myapp');
return [
'id' => 'myapp',
'name' => $l->t('My apps name'),
];
});
```

2. The manager will execute the closure and then call the `prepare()` method on your notifier.
If the notification is not known by your app, just throw an `\InvalidArgumentException`,
but if it is actually from your app, you must set the parsed subject, message and action labels:
```php
protected $factory;
class Notifier implements OCP\Notification\INotifier {

public function __construct(\OCP\L10N\IFactory $factory) {
$this->factory = $factory;
}
protected $factory;

/**
* @param INotification $notification
* @param string $languageCode The code of the language that should be used to prepare the notification
*/
public function prepare(INotification $notification, $languageCode) {
if ($notification->getApp() !== 'files_sharing') {
// Not my app => throw
throw new \InvalidArgumentException();
public function __construct(\OCP\L10N\IFactory $factory) {
$this->factory = $factory;
}

// Read the language from the notification
$l = $this->factory->get('myapp', $languageCode);

switch ($notification->getSubject()) {
// Deal with known subjects
case 'remote_share':
$notification->setParsedSubject(
(string) $l->t('You received the remote share "%s"', $notification->getSubjectParameters())
);

// Deal with the actions for a known subject
foreach ($notification->getActions() as $action) {
switch ($action->getLabel()) {
case 'accept':
$action->setParsedLabel(
(string) $l->t('Accept')
);
break;

case 'decline':
$action->setParsedLabel(
(string) $l->t('Decline')
);
break;
/**
* @param INotification $notification
* @param string $languageCode The code of the language that should be used to prepare the notification
*/
public function prepare(INotification $notification, $languageCode) {
if ($notification->getApp() !== 'myapp') {
// Not my app => throw
throw new \InvalidArgumentException();
}

// Read the language from the notification
$l = $this->factory->get('myapp', $languageCode);

switch ($notification->getSubject()) {
// Deal with known subjects
case 'remote_share':
$notification->setParsedSubject(
(string) $l->t('You received the remote share "%s"', $notification->getSubjectParameters())
);

// Deal with the actions for a known subject
foreach ($notification->getActions() as $action) {
switch ($action->getLabel()) {
case 'accept':
$action->setParsedLabel(
(string) $l->t('Accept')
);
break;

case 'decline':
$action->setParsedLabel(
(string) $l->t('Decline')
);
break;
}

$notification->addParsedAction($action);
}
return $notification;
break;

$notification->addParsedAction($action);
}
return $notification;
break;

default:
// Unknown subject => Unknown notification => throw
throw new \InvalidArgumentException();
default:
// Unknown subject => Unknown notification => throw
throw new \InvalidArgumentException();
}
}
}
```
Expand All @@ -126,7 +135,7 @@ notification object:

```php
$manager = \OC::$server->getNotificationManager();
$notification->setApp('files_sharing')
$notification->setApp('myapp')
->setObject('remote', 1337)
->setUser('recipient1');
$manager->markProcessed($notification);
Expand All @@ -138,7 +147,7 @@ remove all notifications for the app files_sharing on the object "remote #1337":

```php
$manager = \OC::$server->getNotificationManager();
$notification->setApp('files_sharing')
$notification->setApp('myapp')
->setObject('remote', 1337);
$manager->markProcessed($notification);
```
Expand Down