concept7/filament-invite

Handles invites so setup your users' passwords.


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

The package will be sending out invite emails by listening to the 'created'-event on user model. The user can click a link in the email to setup their password. Also included is a expired check on the link. The link will be as following: domain.tld/invite/accept?acceptId=<uuid>&hash=<hash>

Installation

You can install the package via composer:

composer require concept7/filament-invite

Register the plugin in your panel provider:

use Concept7\FilamentInvite\InvitePlugin;

public function panel(Panel $panel): Panel
{
    return $panel
       ->plugin(new InvitePlugin());
}

You can publish and run the migrations with:

php artisan vendor:publish --tag="filament-invite-migrations"
php artisan migrate

Optionally, you can publish the views using

php artisan vendor:publish --tag="filament-invite-views"

Usage

Add Invitable trait to User model

use Concept7\FilamentInvite\Models\Traits\Invitable;

Create a mailable

In app/Mail, create SendInviteMail.php, e.g.

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
use App\Models\User;
use Concept7\FilamentInvite\Contracts\SendInviteMail as SendInviteMailContract;

class SendInviteMail extends Mailable implements SendInviteMailContract
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
    /**
     * Create a new message instance.
     */
    public function __construct(
        private User $user,
        private $url
    ) {
        //
    }

    /**
     * Get the message envelope.
     */
    public function envelope(): Envelope
    {
        return new Envelope(
            to: $this->user->email,
            subject: 'You are invited to join ' . config('app.name'),
        );
    }

    /**
     * Get the message content definition.
     */
    public function content(): Content
    {
        return new Content(
            markdown: 'filament-invite::mail.invite',
            with: [
                'user' => $this->user,
                'link' => $this->url,
            ]
        );
    }
}

Event listener

If for some reason you need to listen to the InviteAccepted Event, you can register a listener handling a InviteProcessedEvent. Register the listener in your EventServiceProvider.

InviteProcessedEvent::class => [
    InviteProcessedListener::class,
]

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

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