bakkerij / notifier

Notifications plugin for CakePHP 3.x
MIT License
59 stars 38 forks source link

Notifier plugin for CakePHP

Travis Packagist Packagist Gitter

This plugin allows you to integrate a simple notification system into your application.

Installation

You can install this plugin into your CakePHP application using composer.

The recommended way to install this plugin as composer package is:

    composer require bakkerij/notifier

Now load the plugin via the following command:

    bin/cake plugin load -b Bakkerij/Notifier

After loading the plugin you need to migrate the tables for the plugin using:

    bin/cake migrations migrate -p Bakkerij/Notifier

Sending notifications

Templates

Before sending any notification, we need to register a template. An example about how to add templates:

    $notificationManager->addTemplate('newBlog', [
        'title' => 'New blog by :username',
        'body' => ':username has posted a new blog named :name'
    ]);

When adding a new template, you have to add a title and a body. Both are able to contain variables like :username and :name. Later on we will tell more about these variables.

Notify

Now we will be able to send a new notification using our newBlog template.

    $notificationManager->notify([
        'users' => [1, 2],
        'recipientLists' => ['administrators'],
        'template' => 'newBlog',
        'vars' => [
            'username' => 'Bob Mulder',
            'name' => 'My great new blogpost'
        ]
    ]);

Note: You are also able to send notifications via the component: $this->Notifier->notify().

With the notify method we sent a new notification. A list of all attributes:

Recipient Lists

To send notifications to large groups you are able to use RecipientLists. You can register them with:

    $notificationManager->addRecipientList('administrators', [1,2,3,4]);

Now we have created a list of recipients called administrators.

This can be used later on when we send a new notification:

    $notificationManager->notify([
        'recipientLists' => ['administrators'],
    ]);

Now, the users 1, 2, 3 and 4 will receive a notification.

Retrieving notifications

Lists

You can easily retrieve notifications via the getNotifications method. Some examples:

    // getting a list of all notifications of the current logged in user
    $this->Notifier->getNotifications();

    // getting a list of all notifications of the user with id 2
    $this->Notifier->getNotifications(2);

    // getting a list of all unread notifications
    $this->Notifier->allNotificationList(2, true);

    // getting a list of all read notifications
    $this->Notifier->allNotificationList(2, false);

Counts

Getting counts of read/unread notifications can be done via the countNotifications method. Some examples:

    // getting a number of all notifications of the current logged in user
    $this->Notifier->countNotifications();

    // getting a number of all notifications of the user with id 2
    $this->Notifier->countNotifications(2);

    // getting a number of all unread notifications
    $this->Notifier->countNotificationList(2, true);

    // getting a number of all read notifications
    $this->Notifier->countNotificationList(2, false);

Mark as read

To mark notifications as read, you can use the markAsRead method. Some examples:

    // mark a single notification as read
    $this->Notifier->markAsRead(500;

    // mark all notifications of the given user as read
    $this->Notifier->markAsRead(null, 2);

Notification Entity

The following getters can be used at your notifications entity:

Example:

    // returns true or false
    $entity->get('unread');

    // returns the full output like 'Bob Mulder has posted a new blog named My Great New Post'
    $entity->get('body');

Passing to view

You can do something like this to use the notification list in your view:

    $this->set('notifications', $this->Notifier->getNotifications());

Notification Manager

The NotificationManager is the Manager of the plugin. You can get an instance with:

    NotificationManager::instance();

The NotificationManager has the following namespace: Bakkerij\Notifier\Utility\NotificationManager.

The manager has the following methods available:

Notifier Component

The Bakkerij/Notifier.Notifier component can be used in Controllers:

    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('Bakkerij/Notifier.Notifier');
    }

The component has the following methods available:

Keep in touch

If you need some help or got ideas for this plugin, feel free to chat at Gitter.

Pull Requests are always more than welcome!