1. Go to this page and download the library: Download computy/yii2-notifications library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
computy / yii2-notifications example snippets
"computy/yii2-notifications": "*"
[
'modules' => [
'notifications' => [
'class' => 'computy\notifications\Module',
'channels' => [
'screen' => [
'class' => 'computy\notifications\channels\ScreenChannel',
],
'email' => [
'class' => 'computy\notifications\channels\EmailChannel',
'message' => [
'from' => '[email protected]'
],
],
'web' => [
'class' => 'computy\notifications\channels\WebChannel',
'enable' => true, // OPTIONAL (default: true) enable/disable web channel
'config' => [
'serviceWorkerFilepath' => '/service-worker.js', // OPTIONAL (default: /service-worker.js) is the service worker filename
'serviceWorkerScope' => '/app', // OPTIONAL (default: './' the service worker path) the scope of the service worker: https://developers.google.com/web/ilt/pwa/introduction-to-service-worker#registration_and_scope
'serviceWorkerUrl' => 'url-to-serviceworker', // OPTIONAL (default: Url::to(['/notifications/web-push-notification/service-worker']))
'subscribeUrl' => 'url-to-subscribe-handler', // OPTIONAL (default: Url::to(['/notifications/web-push-notification/subscribe']))
'unsubscribeUrl' => 'url-to-unsubscribe-handler', // OPTIONAL (default: Url::to(['/notifications/web-push-notification/unsubscribe']))
'subscribeLabel' => 'subscribe button label', // OPTIONAL (default: 'Subscribe')
'unsubscribeLabel' => 'subscribe button label', // OPTIONAL (default: 'Unsubscribe')
],
'auth' => [
'VAPID' => [
'subject' => 'mailto:[email protected]', // can be a mailto: or your website address
'publicKey' => '~88 chars', // (recommended) uncompressed public key P-256 encoded in Base64-URL
'privateKey' => '~44 chars', // (recommended) in fact the secret multiplier of the private key encoded in Base64-URL
'pemFile' => 'path/to/pem', // if you have a PEM file and can link to it on your filesystem
'pem' => 'pemFileContent', // if you have a PEM file and want to hardcode its content
'reuseVAPIDHeaders' => true // OPTIONAL (default: true) you can reuse the same JWT token them for the same flush session to boost performance using
],
],
],
],
],
],
];
\Minishlink\WebPush\VAPID::createVapidKeys();
namespace app\notifications;
use Yii;
use computy\notifications\Notification;
class AccountNotification extends Notification
{
const KEY_NEW_ACCOUNT = 'new_account';
const KEY_RESET_PASSWORD = 'reset_password';
/**
* @var \yii\web\User the user object
*/
public $user;
/**
* @inheritdoc
*/
public function getTitle(){
switch($this->key){
case self::KEY_NEW_ACCOUNT:
return Yii::t('app', 'New account {user} created', ['user' => '#'.$this->user->id]);
case self::KEY_RESET_PASSWORD:
return Yii::t('app', 'Instructions to reset the password');
}
}
/**
* @inheritdoc
*/
public function getRoute(){
return ['/users/edit', 'id' => $this->user->id];
}
}
/**
* Get the notification's delivery channels.
* @return boolean
*/
public function shouldSend($channel)
{
if($channel->id == 'screen'){
if(!in_array($this->key, [self::KEY_NEW_ACCOUNT])){
return false;
}
}
return parent::shouldSend($channel);
}
// For example to limit to 1 notification per hour
$notification = AccountNotification::create(AccountNotification::KEY_RESET_PASSWORD, ['user' => $user]);
$notification->renotification_time = 'PT1H';
$notification->send();
/**
* Override send to email channel
*
* @param $channel the email channel
* @return void
*/
public function toEmail($channel){
switch($this->key){
case self::KEY_NEW_ACCOUNT:
$subject = 'Welcome to MySite';
$template = 'newAccount';
break;
case self::KEY_RESET_PASSWORD:
$subject = 'Password reset for MySite';
$template = 'resetPassword';
break;
}
$message = $channel->mailer->compose($template, [
'user' => $this->user,
'notification' => $this,
]);
Yii::configure($message, $channel->message);
$message->setTo($this->user->email);
$message->setSubject($subject);
$message->send($channel->mailer);
}
namespace app\channels;
use computy\notifications\Channel;
use computy\notifications\Notification;
class VoiceChannel extends Channel
{
/**
* Send the given notification.
*
* @param Notification $notification
* @return void
*/
public function send(Notification $notification)
{
// use $notification->getTitle() ou $notification->getDescription();
// Send your notification in this channel...
}
}