concept7 / filament-invite
Handles invites so setup your users' passwords.
Fund package maintenance!
concept7
Requires
- php: ^8.0
- filament/filament: ^3.0
- illuminate/contracts: ^10.0
- illuminate/validation: ^10.0
- spatie/laravel-package-tools: ^1.13.5
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.7
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.9
- pestphp/pest-plugin-laravel: ^2.0
- pestphp/pest-plugin-livewire: ^2.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^10.2.3
- spatie/laravel-ray: ^1.26
This package is auto-updated.
Last update: 2024-11-08 16:01:07 UTC
README
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.