Update notification-workflow.md
This commit is contained in:
Родитель
8b3dcd82bd
Коммит
7da0ce52f8
|
@ -10,112 +10,112 @@ with it, we want to remove the notification again.
|
|||
|
||||
1. Grab a new notification object (`\OCP\Notification\INotification`) from the manager
|
||||
(`\OCP\Notification\IManager`):
|
||||
```php
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
```
|
||||
```php
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$notification = $manager->createNotification();
|
||||
```
|
||||
|
||||
2. Set the necessary information for the notification:
|
||||
```php
|
||||
$acceptAction = $notification->createAction();
|
||||
$acceptAction->setLabel('accept')
|
||||
->setLink('/apps/files_sharing/api/v1/remote_shares/1337', 'POST');
|
||||
```php
|
||||
$acceptAction = $notification->createAction();
|
||||
$acceptAction->setLabel('accept')
|
||||
->setLink('/apps/files_sharing/api/v1/remote_shares/1337', 'POST');
|
||||
|
||||
$declineAction = $notification->createAction();
|
||||
$declineAction->setLabel('decline')
|
||||
->setLink('/apps/files_sharing/api/v1/remote_shares/1337', 'DELETE');
|
||||
$declineAction = $notification->createAction();
|
||||
$declineAction->setLabel('decline')
|
||||
->setLink('/apps/files_sharing/api/v1/remote_shares/1337', 'DELETE');
|
||||
|
||||
$notification->setApp('files_sharing')
|
||||
->setUser('recipient1')
|
||||
->setDateTime(new DateTime())
|
||||
->setObject('remote', '1337') // $type and $id
|
||||
->setSubject('remote_share', ['/fancyFolder']) // $subject and $parameters
|
||||
->addAction($acceptAction)
|
||||
->addAction($declineAction)
|
||||
;
|
||||
```
|
||||
$notification->setApp('files_sharing')
|
||||
->setUser('recipient1')
|
||||
->setDateTime(new DateTime())
|
||||
->setObject('remote', '1337') // $type and $id
|
||||
->setSubject('remote_share', ['/fancyFolder']) // $subject and $parameters
|
||||
->addAction($acceptAction)
|
||||
->addAction($declineAction)
|
||||
;
|
||||
```
|
||||
Setting **app, user, timestamp, object and subject** are mandatory. You should not use a
|
||||
translated subject, message or action label. Use something like a "language key", to avoid
|
||||
length problems with translations in the storage of a notification app. Translation is done
|
||||
via invocation of your notifier by the manager when the notification is prepared for display.
|
||||
|
||||
3. Send the notification back to the manager:
|
||||
```php
|
||||
$manager->notify($notification);
|
||||
```
|
||||
```php
|
||||
$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`:
|
||||
```php
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$manager->registerNotifier(function() {
|
||||
return new \OCA\Files_Sharing\Notifier(
|
||||
\OC::$server->getL10NFactory()
|
||||
);
|
||||
});
|
||||
```
|
||||
```php
|
||||
$manager = \OC::$server->getNotificationManager();
|
||||
$manager->registerNotifier(function() {
|
||||
return new \OCA\Files_Sharing\Notifier(
|
||||
\OC::$server->getL10NFactory()
|
||||
);
|
||||
});
|
||||
```
|
||||
|
||||
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;
|
||||
```php
|
||||
protected $factory;
|
||||
|
||||
public function __construct(\OCP\L10N\IFactory $factory) {
|
||||
$this->factory = $factory;
|
||||
public function __construct(\OCP\L10N\IFactory $factory) {
|
||||
$this->factory = $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();
|
||||
}
|
||||
|
||||
/**
|
||||
* @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();
|
||||
}
|
||||
// Read the language from the notification
|
||||
$l = $this->factory->get('myapp', $languageCode);
|
||||
|
||||
// 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())
|
||||
);
|
||||
|
||||
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;
|
||||
}
|
||||
// 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;
|
||||
|
||||
$notification->addParsedAction($action);
|
||||
case 'decline':
|
||||
$action->setParsedLabel(
|
||||
(string) $l->t('Decline')
|
||||
);
|
||||
break;
|
||||
}
|
||||
return $notification;
|
||||
break;
|
||||
|
||||
default:
|
||||
// Unknown subject => Unknown notification => throw
|
||||
throw new \InvalidArgumentException();
|
||||
}
|
||||
$notification->addParsedAction($action);
|
||||
}
|
||||
return $notification;
|
||||
break;
|
||||
|
||||
default:
|
||||
// Unknown subject => Unknown notification => throw
|
||||
throw new \InvalidArgumentException();
|
||||
}
|
||||
```
|
||||
}
|
||||
```
|
||||
|
||||
**Note:** currently no markup is allowed.
|
||||
**Note:** currently no markup is allowed.
|
||||
|
||||
### Marking a notification as read/deleted/processed/obsoleted
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче