PHP code example of offload-project / laravel-waitlist
1. Go to this page and download the library: Download offload-project/laravel-waitlist 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/ */
offload-project / laravel-waitlist example snippets
use OffloadProject\Waitlist\Facades\Waitlist;
// Add users to the default waitlist
$entry = Waitlist::add('John Doe', '[email protected]');
// Invite a user (sends notification automatically)
Waitlist::invite($entry);
// Get statistics
$total = Waitlist::count();
$pending = Waitlist::countPending();
use OffloadProject\Waitlist\Facades\Waitlist;
// Create separate waitlists
$beta = Waitlist::create('Beta Program', 'beta', 'Early access to new features');
$launch = Waitlist::create('Product Launch', 'launch', 'Get notified when we launch');
$vip = Waitlist::create('VIP Access', 'vip', 'Premium tier waitlist');
// Add users to specific waitlists
Waitlist::for('beta')->add('John Doe', '[email protected]');
Waitlist::for('launch')->add('Jane Smith', '[email protected]');
Waitlist::for('vip')->add('Bob Wilson', '[email protected]');
// Same person can join multiple waitlists
Waitlist::for('beta')->add('Alice Johnson', '[email protected]');
Waitlist::for('launch')->add('Alice Johnson', '[email protected]');
// Get entries for a specific waitlist
$betaEntries = Waitlist::for('beta')->getPending();
$launchCount = Waitlist::for('launch')->count();
// Invite users from a specific waitlist
$entry = Waitlist::for('beta')->getByEmail('[email protected]');
Waitlist::invite($entry);
use OffloadProject\Waitlist\Facades\Waitlist;
// Create waitlists
$beta = Waitlist::create('Beta Program', 'beta', 'Description');
$waitlist = Waitlist::find('beta'); // Find by slug
// Add users
$entry = Waitlist::for('beta')->add('John Doe', '[email protected]');
// Add with metadata
$entry = Waitlist::for('launch')->add('Jane Doe', '[email protected]', [
'referral_source' => 'twitter',
'interest' => 'premium',
'company' => 'Acme Inc',
]);
// Invite and reject
Waitlist::invite($entry); // By model
Waitlist::invite($entryId); // By ID
Waitlist::reject($entry);
Waitlist::reject($entryId);
// Pass options through to the underlying invitation
// $entry is a WaitlistEntry, e.g. from Waitlist::getByEmail() or getPending()
$entry = Waitlist::for('beta')->getByEmail('[email protected]');
Waitlist::invite($entry, [
'invited_by' => $admin, // Model or int; falls back to auth()->user()
'role' => 'beta-tester',
'metadata' => ['cohort' => 'wave-3'],
'expires_at' => now()->addDays(14),
]);
// Query entries
$pending = Waitlist::for('beta')->getPending();
$invited = Waitlist::for('beta')->getInvited();
$all = Waitlist::for('beta')->getAll();
$entry = Waitlist::for('beta')->getByEmail('[email protected]');
// Check existence
if (Waitlist::for('beta')->exists('[email protected]')) {
// User is on the beta waitlist
}
// Get statistics
$total = Waitlist::for('beta')->count();
$pending = Waitlist::for('beta')->countPending();
$invited = Waitlist::for('beta')->countInvited();
// Manage waitlist status
$beta->activate();
$beta->deactivate();
$beta->isActive(); // true/false
use OffloadProject\Waitlist\Models\WaitlistEntry;
// Create an entry
$entry = WaitlistEntry::create([
'name' => 'Jane Doe',
'email' => '[email protected]',
'metadata' => ['source' => 'landing-page'],
]);
// Check status
if ($entry->isPending()) {
// Entry is pending
}
if ($entry->isInvited()) {
// Entry has been invited
}
if ($entry->isRejected()) {
// Entry was rejected
}
// Update status
$entry->markAsInvited();
$entry->markAsRejected();
// Query entries
$pending = WaitlistEntry::where('status', 'pending')->get();
$recent = WaitlistEntry::latest()->take(10)->get();
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use OffloadProject\Waitlist\Facades\Waitlist;
class WaitlistController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'd to waitlist!',
'data' => $entry,
], 201);
}
public function stats()
{
return response()->json([
'total' => Waitlist::count(),
'pending' => Waitlist::countPending(),
'invited' => Waitlist::countInvited(),
]);
}
}
namespace App\Livewire;
use Livewire\Component;
use OffloadProject\Waitlist\Facades\Waitlist;
class WaitlistForm extends Component
{
public $name = '';
public $email = '';
public $success = false;
public function submit()
{
$this->validate([
'name' => '
}
}
namespace App\Notifications;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use OffloadProject\Waitlist\Models\WaitlistEntry;
class CustomWaitlistInvited extends Notification
{
public function __construct(public WaitlistEntry $entry) {}
public function via($notifiable): array
{
return ['mail'];
}
public function toMail($notifiable): MailMessage
{
return (new MailMessage)
->subject('Welcome to Our Platform!')
->greeting("Hi {$this->entry->name}!")
->line('Great news! Your wait is over.')
->action('Get Started', url('/register'))
->line('We can\'t wait to see what you build!');
}
}
use OffloadProject\Waitlist\Facades\Waitlist;
// Adding an entry automatically sends a verification email
$entry = Waitlist::add('John Doe', '[email protected]');
// Check verification status
$entry->isVerified(); // false initially
$entry->isPendingVerification(); // true after verification email sent
// Manually send/resend verification email
Waitlist::sendVerification($entry);
// Verify programmatically (normally handled by the verification route)
Waitlist::verify($token);
// Attempting to invite an unverified entry throws an exception
// when
// config/waitlist.php
'routes' => [
'enabled' => true, // Set to false to define your own routes
'prefix' => 'waitlist', // URL prefix
'middleware' => ['web'], // Middleware to apply
],
namespace App\Notifications;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use OffloadProject\Waitlist\Models\WaitlistEntry;
class CustomVerifyEmail extends Notification
{
public function __construct(public WaitlistEntry $entry) {}
public function via($notifiable): array
{
return ['mail'];
}
public function toMail($notifiable): MailMessage
{
$url = route('waitlist.verify', ['token' => $this->entry->verification_token]);
return (new MailMessage)
->subject('Confirm your spot on the waitlist')
->greeting("Hi {$this->entry->name}!")
->line('Please verify your email to secure your place.')
->action('Verify Email', $url);
}
}
return [
// The model class used for waitlist entries
'model' => \OffloadProject\Waitlist\Models\WaitlistEntry::class,
// Database table name
'table' => 'waitlist_entries',
// Auto-send invitation notifications
'auto_send_invitation' => true,
// Notification class for invitations
'notification' => \OffloadProject\Waitlist\Notifications\WaitlistInvited::class,
// Email verification settings
'verification' => [
'enabled' => false, // Enable/disable email verification
'
// Managing waitlists
Waitlist::create(string $name, string $slug, ?string $description = null, bool $isActive = true): Waitlist
Waitlist::find(string $slug): ?Waitlist
Waitlist::for(string|int|Waitlist $waitlist): self // Set waitlist context
Waitlist::getDefault(): Waitlist
// Adding entries (uses current waitlist context or default)
Waitlist::add(string $name, string $email, array $metadata = []): WaitlistEntry
// Managing status
Waitlist::invite(int|WaitlistEntry $entry, array $options = []): WaitlistEntry
Waitlist::reject(int|WaitlistEntry $entry): WaitlistEntry
// Email verification
Waitlist::sendVerification(int|WaitlistEntry $entry): WaitlistEntry
Waitlist::verify(string $token): ?WaitlistEntry
// Retrieving entries (uses current waitlist context or default)
Waitlist::getPending(): Collection
Waitlist::getInvited(): Collection
Waitlist::getAll(): Collection
Waitlist::getByEmail(string $email): ?WaitlistEntry
// Checking existence
Waitlist::exists(string $email): bool
// Counting
Waitlist::count(): int
Waitlist::countPending(): int
Waitlist::countInvited(): int
// Relationships
$waitlist->entries(): HasMany
// Status checks
$waitlist->isActive(): bool
// Status updates
$waitlist->activate(): self
$waitlist->deactivate(): self
// Different waitlists for different products
Waitlist::create('Product A', 'product-a');
Waitlist::create('Product B', 'product-b');
Waitlist::for('product-a')->add($name, $email);
Waitlist::for('product-b')->add($name, $email);
// Different tiers of access
Waitlist::create('Free Tier', 'free');
Waitlist::create('Pro Tier', 'pro');
Waitlist::create('Enterprise', 'enterprise');
// Users can be on multiple tiers
Waitlist::for('free')->add($name, $email);
Waitlist::for('pro')->add($name, $email);
// Individual features
Waitlist::create('AI Assistant', 'ai-assistant');
Waitlist::create('Advanced Analytics', 'analytics');
Waitlist::create('API Access', 'api');
// Track interest per feature
Waitlist::for('ai-assistant')->add($name, $email);
// Different regions
Waitlist::create('North America', 'na');
Waitlist::create('Europe', 'eu');
Waitlist::create('Asia Pacific', 'apac');
Waitlist::for('na')->add($name, $email);