digitlimit/inbox

There is no license information available for the latest version (v1.0.0) of this package.

Laravel messages and inbox system

v1.0.0 2023-05-21 15:12 UTC

This package is auto-updated.

Last update: 2024-04-21 17:12:19 UTC


README

This Laravel package will help you to create an inbox system and send messages between users easily. This package was forked from https://github.com/DigitlimitLab/laravel-inbox.

Changes

  • Fix Inbox listing issue, Inbox now only list received massages
  • Add default avatar from https://ui-avatars.com/
  • Fix labels on Inbox & Sent Item tabs
  • Add separate route and controller for sent items

Installation

This package can be installed through Composer.

composer require digitlimit/laravel-inbox

If you don't use Laravel 5.5+ you have to add the service provider manually

// config/app.php
'providers' => [
    ...
    Digitlimit\Inbox\InboxServiceProvider::class,
    ...
];

You can publish migrations, config, views, lang files

php artisan vendor:publish --provider="Digitlimit\Inbox\InboxServiceProvider" 

This is the contents of the published config file:

<?php

return [

    'paginate' => 10,

    /*
    |--------------------------------------------------------------------------
    | Inbox Route Group Config
    |--------------------------------------------------------------------------
    |
    | ..
    |
    */

    'route' => [
        'prefix' => 'inbox',
        'middleware' => ['web', 'auth'],
        'name' => null
    ],

    /*
    |--------------------------------------------------------------------------
    | Inbox Tables Name
    |--------------------------------------------------------------------------
    |
    | ..
    |
    */

    'tables' => [
        'threads' => 'threads',
        'messages' => 'messages',
        'participants' => 'participants',
    ],

    /*
    |--------------------------------------------------------------------------
    | Models
    |--------------------------------------------------------------------------
    |
    | If you want to overwrite any model you should change it here as well.
    |
    */

    'models' => [
        'thread' => Digitlimit\Inbox\Models\Thread::class,
        'message' => Digitlimit\Inbox\Models\Message::class,
        'participant' => Digitlimit\Inbox\Models\Participant::class,
    ],

    /*
    |--------------------------------------------------------------------------
    | Inbox Notification
    |--------------------------------------------------------------------------
    |
    | Via Supported: "mail", "database", "array"
    |
    */

    'notifications' => [
        'via' => [
            'mail',
        ],
    ],
];

Usage

First, we need to use HasInbox trait so users can have their inbox:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Digitlimit\Inbox\Traits\HasInbox;

class User extends Authenticatable
{
    use Notifiable, HasInbox;
}

Get user threads:

$user->threads()

Get unread messages:

$thread = $user->unread()

Get the threads that have been sent by a user:

$thread = $user->sent()

Get the threads that have been sent to the user:

$thread = $user->received()

Send new thread:

  • subject(): your message subject
  • writes(): your message body
  • to(): array of users ID that you want them to receive your message
  • send(): to send your message
$thread = $user->subject($request->subject)
            ->writes($request->body)
            ->to($request->recipients)
            ->send();

Reply for thread:

  • reply() an object for your thread
$message = $user->writes($request->body)
                ->reply($thread);

Check if the thread has any unread messages:

if ($thread->isUnread())

License

The MIT License (MIT). Please see License File for more information.