2017 © Pedro Peláez
 

yii2-extension yii2-message

Message system for Yii2

image

songyue/yii2-message

Message system for Yii2

  • Wednesday, August 30, 2017
  • by songyue
  • Repository
  • 1 Watchers
  • 0 Stars
  • 5 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 14 Forks
  • 0 Open issues
  • 8 Versions
  • 67 % Grown

The README.md

Yii2-message

System for users to send each other private messages. - A user configurable ignorelist and admin configurable whitelist (administrators are able to fine-tune the definition of which users are able to write to whom) is supported. - Encryption is not (yet?) supported. - Uses Font Awesome (http://fontawesome.io/) for some icons - Every message sent inside the messaging system can be forwarded to the recipient be e-mail automatically., (*1)

Prerequisites:

You need a Model with the 'id' and 'username' attributes. This needs to be an ActiveRecord or Model instance., (*2)

I suggest to use https://github.com/dektrium/yii2-user which works wonderful with this module., (*3)

Installation

$ composer require songyue/yii2-message
$ php yii migrate/up --migrationPath=@vendor/songyue/yii2-message/migrations

Configuration

Add following lines to your main configuration file:, (*4)

'modules' => [
    'message' => [
        'class' => 'songyue\message\Module',
        'userModelClass' => '\app\models\User', // your User model. Needs to be ActiveRecord.
    ],
],

Sending E-Mails

If you want the system to automatically send E-Mails via Yii::$app->mailer you only need to provide an 'email' column in your ActiveRecord Model., (*5)

Use the $mailMessages module option to define which users are getting E-Mails. For Example:, (*6)

        'mailMessages' => function ($user) {
            return $user->profile->receive_emails === true;
        },

You can overwrite the default e-mail views and layout by providing an @app/mail/ directory inside your Application., (*7)

Mailqueue

From version 0.4 and above you can use yii2-queue (https://github.com/yiisoft/yii2-queue) to send messages via a mail queue. Once you have yii2-queue configured in your application you can set, (*8)

        'useMailQueue' => true,

to let yii2-message push an EmailJob on to your queue instead of sending the E-Mail directly., (*9)

If you want to use an mailqueue like https://github.com/nterms/yii2-mailqueue you can override the 'mailer' configuration option in the module configuration. Since yii2-queue is stable and an official extension i personally prefer to use yii2-queue instead of 3rd party extensions., (*10)

Ignore List and Recipients Filter

The user can manage his own ignore list using the message/message/ignorelist route. You can place a callback that defines which users should be able to be messaged. For example, if you do not want your users to be able to write to admin users, do this:, (*11)

        'recipientsFilterCallback' => function ($users) {
            return array_filter($users, function ($user) {
                return !$user->isAdmin;
            });
        },

The recipients filter is applied after the ignore list., (*12)

Actions

The following Actions are possible:, (*13)

  • inbox: https://your-domain/message/message/inbox
  • sent messages: https://your-domain/message/message/sent
  • compose a message: https://your-domain/message/message/compose
  • delete a message: https://your-domain/message/message/delete/hash/
  • view a message: https://your-domain/message/message/view/hash/
  • manage your ignorelist: https://your-domain/message/message/ignorelist

You can place this code snippet in your layouts/main.php to give your users access to the message actions:, (*14)

$messagelabel = '<span class="glyphicon glyphicon-envelope"></span>';
$unread = Message::find()->where(['to' => $user->id, 'status' => 0])->count();
if ($unread > 0)
      $messagelabel .= '(' . $unread . ')';

echo Nav::widget([
    'encodeLabels' => false, // important to display HTML-code (glyphicons)
    'items' => [
    // ...
    [
      'label' => $messagelabel,
      'url' => '',
      'visible' => !Yii::$app->user->isGuest, 'items' => [
        ['label' => 'Inbox', 'url' => ['/message/message/inbox']],
        ['label' => 'Sent', 'url' => ['/message/message/sent']],
        ['label' => 'Compose a Message', 'url' => ['/message/message/compose']],
        ['label' => 'Manage your Ignorelist', 'url' => ['/message/message/ignorelist']],
      ]
    ],
    // ...
  ]);

Since 0.3.0 you can render the compose view inside an Modal Widget like this:, (*15)

use kartik\growl\GrowlAsset;
use yii\bootstrap\Modal;
use yii\helpers\Url;

GrowlAsset::register($this);

Modal::begin(['id' => 'compose-message', 'header' => '

Compose new Message

']); Modal::end(); $recipient_id = 1337; # write an message to user with id 1337 echo Html::a('<span class="glyphicon glyphicon-envelope"></span> Compose Message', '', [ 'class' => 'btn btn-default btn-contact-user', 'data-recipient' => $recipient_id, 'data-pjax' => 0 ]); $message_url = Url::to(['//message/message/compose']); $this->registerJs(" $('.modal-body').on('click', '.btn-send-message', function(event) { if ($('#message-title').val()) { $.post('".$message_url."', $('#message-form').serializeArray(), function() { $.notify({message: 'Message has been sent successfully.'}, {type: 'success'}); $('#compose-message').modal('hide'); }); } else { $('.modal-body').prepend('
Please enter a title at least.
'); } event.preventDefault(); }); $('.modal-body').on('submit', '#message-form', function(event) { $('.btn-send-message').click(); event.preventDefault(); }); $('body').on('click', '.btn-contact-user', function(event) { $('#compose-message').modal(); recipient = $(this).data('recipient'); $.ajax('".$message_url."?to='+recipient+'&add_to_recipient_list=1', { 'success': function(result) { $('.modal-body').html(result); } }); event.preventDefault(); }); ");

For some common url rules, you can copy Module::$urlRules into your 'rules' section of the URL Manager., (*16)

Contributing to this project

Anyone and everyone is welcome to contribute., (*17)

License

Yii2-message is released under the GPLv3 License., (*18)

The Versions