PHPackages                             nineinchnick/yii-nfy - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Mail &amp; Notifications](/categories/mail)
4. /
5. nineinchnick/yii-nfy

ActiveLibrary[Mail &amp; Notifications](/categories/mail)

nineinchnick/yii-nfy
====================

Yii framework module for ending notifications and displaying them using web notifications and ajax polling.

v0.10.0(9y ago)161.8k11[9 issues](https://github.com/nineinchnick/yii-nfy/issues)[1 PRs](https://github.com/nineinchnick/yii-nfy/pulls)MITPHPPHP &gt;=5.3.0

Since Jan 6Pushed 9y ago7 watchersCompare

[ Source](https://github.com/nineinchnick/yii-nfy)[ Packagist](https://packagist.org/packages/nineinchnick/yii-nfy)[ RSS](/packages/nineinchnick-yii-nfy/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (2)DependenciesVersions (4)Used By (0)

Notifications
=============

[](#notifications)

This is a module for [Yii framework](http://www.yiiframework.com/) that provides:

- a generic queue component
- a Publish/Subscribe message delivery pattern
- a SQL database queue implementation
- a configurable way to send various notifications, messages and tasks to a queue
- a basic widget to read such items from queue and display them to the user as system notifications
- a basic widget to put in a navbar that displays notifications and/or messages in a popup
- a basic CRUD to manage and/or debug queues or use as a simple messanger

Messages could be passed directly as strings or created from some objects, like Active Records. This could be used to log all changes to the models, exactly like the [audittrail2](http://www.yiiframework.com/extension/audittrail2) extension.

When recipients are subscribed to a channel, message delivery can depend on category filtering, much like in logging system provided by the framework.

A simple SQL queue implementation is provided if a MQ server is not available or not necessary.

Installation
------------

[](#installation)

Download and extract.

Enable module in configuration. Do it in both main and console configs, because some settings are used in migrations. See the configuration section how to specify users table name and its primary key type.

Copy migrations to your migrations folder and adjust dates in file and class names. Then apply migrations:

```
./yiic migrate

```

Define some queues as application components and optionally enable the module, see the next section.

Configuration
-------------

[](#configuration)

### Queue components

[](#queue-components)

Define each queue as an application component.

```
'components' => array(
	'queue' => array(
		'class' => 'nfy.components.NfyDbQueue',
		'name' => 'Notifications',
		'timeout' => 30,
	),
	// ...
),
```

Then you can send and receive messages through this component:

```
// send one message 'test'
Yii::app()->queue->send('test');
// receive all available messages without using subscriptions and immediately delete them from the queue
$messages = $queue->receive();
```

Or you could subscribe some users to it:

```
Yii::app()->queue->subscribe(Yii:app()->user->getId());
// send one message 'test'
Yii::app()->queue->send('test');
// receive all available messages for current user and immediately delete them from the queue
$messages = $queue->receive(Yii:app()->user->getId());
// if there are any other users subscribed, they will receive the message independently
```

### Module parameters

[](#module-parameters)

By specifying the users model class name in the *userClass* property proper table name and primary key column name will be used in migrations.

Usage examples
--------------

[](#usage-examples)

### Broadcasting

[](#broadcasting)

To send a message to every user create a queue and just subscribe every user to it.

### Filtering

[](#filtering)

When subscribing a user to a queue a list of categories can be specified. Only messages with matching category will be delivered to this subscription. This system is modelled after logger from the framework.

### Notifying model changes

[](#notifying-model-changes)

Monitor one model for changes and notify some users.

By extending the NfyDbQueue or NfyQueue classes you can handle messages that are not strings and create a string message body from such data.

```
// this could be your CActiveRecord model
class Test extends CActiveRecord {
	... // CActiveRecord requires some methods, this is skipped for keeping this short
	public static function match($data) {
		return $data['new']->attribute == 'value';
	}
	public function afterFind($event){
		$this->_old($this->getOwner()->getAttributes());
		return parent::afterFind($event);
	}
	public function afterSave($event) {
		$old = clone $this;
		$old->setAttributes($this->_old);
		Yii::app()->queue->send(array('old'=>$old,'new'=>$this), 'logs.audit');
		return parent::afterSave($event);
	}
}

// trigger logging
$test = Test::model()->find();
$test->attribute = 'value';
$test->save();
```

### Display notifications

[](#display-notifications)

Put anywhere in your layout or views or controller.

```
$this->widget('nfy.extensions.webNotifications.WebNotifications', array('url'=>$this->createUrl('/nfy/default/poll', array('id'=>'queueComponentId'))));
```

### Using together with Pusher

[](#using-together-with-pusher)

Instead of ussing NfyQueue, publish messages directly to [Pusher.com](http://pusher.com/) service, using [pusher](http://www.yiiframework.com/extension/pusher) extension:

```
	$pusher = Yii::createComponent(array(
		'class' => 'Pusher',
		'key' => 'XXX',
		'secret' => 'YYY',
		'appId' => 'ZZZ',
	));
	$pusher->trigger('test_channel','newMessage',array('title'=>'nfy title', 'body'=>'test message'));
```

Configure the WebNotifications widget to receive messages through a web socket:

```
