Installation
You can install the extension via composer using the following command:
composer require igniterlabs/ti-ext-grouporder -W
Run the database migrations to create the required tables:
php artisan igniter:up
Getting started
This section walks you through setting up group ordering for your restaurant so customers can order together with friends and family.
Adding the Start Group Order button on your menus page
Run the following command to publish the extension's theme files to your active theme:
php artisan igniter:theme-publish
Alternatively, you can manually add the Start Group Order button to your menu page by following the steps below:
- Navigate to the Theme Template Editor under Design > Themes then click the file icon next to your active theme
- On the Theme Template Editor page, select Pages under the Template section, then choose Menus [local.menus] page to edit.
- From the Choose a component to attach dropdown, select Group Order - Start group order to attach the component to the page.
- Under the Markup tab, add the following HTML where you want the Start Group Order button to appear. Typically, this is somewhere on the menus page.
<div class="d-flex justify-content-end mt-3">
<livewire:igniterlabs.grouporder::start-group-order/>
</div>
After adding the HTML code above, your markup should look similar to this:
<div class="col-lg-4 mt-4 mt-lg-0">
<div class="d-flex justify-content-end">
<div class="local-control p-3 border rounded">
<div class="d-inline-block w-100 fw-bold text-sm-left text-md-center">
<x-igniter-orange::fulfillment/>
</div>
</div>
</div>
<div class="d-flex justify-content-end mt-3">
<livewire:igniterlabs.grouporder::start-group-order/>
</div>
</div>
- Click the Save button to save your changes.
Creating the Join Group Order page
If you have not already done so, run the following command to publish the extension's theme files to your active theme:
php artisan igniter:theme-publish
Alternatively, you can manually create the Join Group Order page by following the steps below:
- Navigate to the Theme Template Editor under Design > Themes then click the file icon next to your active theme
- On the Theme Template Editor page, select Pages under the Template section, then click the New Page button to create a new page.
- In the Create Page form, enter the following details:
- Template filename: group-order.join
- Click the Save button to create the page.
- After creating the page, add the following HTML code to the page's markup:
<div class="container pt-5 pb-4">
<div class="row">
<div class="col-sm-6 m-auto">
<div class="card mb-4">
<div class="card-body">
<livewire:igniterlabs.grouporder::join-group-order/>
</div>
</div>
</div>
</div>
</div>
- From the Choose a component to attach dropdown, select Join Group Order to attach the component to the page.
- Click the Save button to save your changes.
Configuration
From your TastyIgniter Admin, navigate to Manage > Settings > Group Order Settings to configure global settings.
Enable order deadline
Set a time limit for guests to join and submit their orders before the ready time:
- Go to Settings > Group Order Settings
- Switch on Enable Order Deadline
- Set Deadline (minutes before ready time) to your desired value (e.g., 30 minutes)
- Click Save
Set minimum guests required
Require a minimum number of guests to submit their orders before the host can checkout:
- Go to Settings > Group Order Settings
- Set Minimum Guests Required to your desired value (e.g., 2)
- Set to 0 to disable this requirement
- Click Save
Location-specific settings
Override global settings for specific locations:
- Go to Manage > Locations
- Find the location you want to customize and click the settings icon (gear/cog)
- Navigate to the Group Order under General tab
- Configure the following options:
- Enable Group Ordering: Toggle group ordering on/off for this location
- Enable Deadline: Override the global deadline setting (-1 uses global, 0 disables, 1 enables)
- Deadline Minutes: Set a custom deadline for this location
- Minimum Guests Required: Set a custom minimum guest requirement
- Click Save
Automation events
The extension provides automation rules for group orders. Navigate to Manage > Automation > Rules to create custom automation based on group order events.
Hourly schedule event
The extension dispatches an automation.groupOrder.schedule.hourly event every hour for active group orders created within the last 30 days. Use this to:
- Send reminder emails to guests who haven't submitted
- Notify hosts about pending guests
Automation conditions
Add a Group Order Attribute condition to your automation rules to check:
| Attribute | Description |
|---|---|
| Group order status | Active, Locked, Completed, or Canceled |
| Has pending guests | Whether guests are still adding items |
| Has deadline set | Whether a deadline is configured |
| Hours until deadline | Time remaining until deadline |
| Is past deadline | Whether the deadline has passed |
Usage
This section covers how to integrate with the Group Order extension programmatically.
Get current group order
Retrieve the current group order from the session:
use IgniterLabs\GroupOrder\Classes\Manager;
$manager = resolve(Manager::class);
// Get the current group order (returns null if none active)
$groupOrder = $manager->current();
// Check if user is the host
$isHost = $manager->isCurrentHost();
// Check if user is a guest
$isGuest = $manager->isCurrentGuest();
// Get the current guest record
$guest = $manager->getGuest();
Start a group order programmatically
use IgniterLabs\GroupOrder\Actions\StartGroupOrder;
use IgniterLabs\GroupOrder\Models\GroupOrder;
$groupOrder = resolve(StartGroupOrder::class)->handle($customer, $location, [
'split_bill' => true, // or false
'spending_limit' => 20, // Optional, only used if split_bill is true
]);
Join a group order programmatically
use IgniterLabs\GroupOrder\Actions\JoinGroupOrder;
$guest = resolve(JoinGroupOrder::class)->handle($groupOrder, [
'first_name' => 'John',
'last_name' => 'Doe',
'email' => '[email protected]',
]);
Send an invite email
use IgniterLabs\GroupOrder\Actions\SendInvite;
resolve(SendInvite::class)->handle($groupOrder, '[email protected]');
Lock a group order
use IgniterLabs\GroupOrder\Actions\LockGroupOrder;
resolve(LockGroupOrder::class)->handle($groupOrder);
Cancel a group order
use IgniterLabs\GroupOrder\Actions\CancelGroupOrder;
resolve(CancelGroupOrder::class)->handle($groupOrder);
Remove a guest
use IgniterLabs\GroupOrder\Actions\RemoveGuest;
resolve(RemoveGuest::class)->handle($groupOrder, $guest);
Available events
The extension dispatches events that you can listen to for custom integrations:
Group order started
Fired when a customer creates a new group order:
Event::listen('groupOrder.started', function($groupOrder) {
// $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});
Guest joined
Fired when a guest joins the group order:
Event::listen('groupOrder.joined', function($guest, $groupOrder) {
// $guest: IgniterLabs\GroupOrder\Models\Guest model
// $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});
Guest submitted order
Fired when a guest submits their order:
Event::listen('groupOrder.guestSubmitted', function($guest) {
// $guest: IgniterLabs\GroupOrder\Models\Guest model
});
Guest left
Fired when a guest leaves the group order:
Event::listen('groupOrder.guestLeft', function($guest, $groupOrder) {
// $guest: IgniterLabs\GroupOrder\Models\Guest model
// $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});
Guest removed
Fired when the host removes a guest from the group order:
Event::listen('groupOrder.guestRemoved', function($guest, $groupOrder) {
// $guest: IgniterLabs\GroupOrder\Models\Guest model
// $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});
Invite sent
Fired when the host sends an email invitation:
Event::listen('groupOrder.inviteSent', function($groupOrder, $email) {
// $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
// $email: string - The email address the invite was sent to
});
Group order locked
Fired when the host locks the group order:
Event::listen('groupOrder.locked', function($groupOrder) {
// $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});
Group order canceled
Fired when the host cancels the group order:
Event::listen('groupOrder.canceled', function($groupOrder) {
// $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});
Deadline extended
Fired when the host extends the order deadline:
Event::listen('groupOrder.deadlineExtended', function($groupOrder) {
// $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});
Current group order set
Fired when a group order is set as the current session order:
Event::listen('groupOrder.setCurrent', function($groupOrder) {
// $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});
Permissions
Two permissions control access to group order features in the admin panel:
| Permission | Purpose |
|---|---|
IgniterLabs.GroupOrder.Manage |
Allow viewing and editing group orders |
IgniterLabs.GroupOrder.Delete |
Allow deleting group orders |
Assign these in Manage > Staff members > Roles.
Mail templates
The extension registers the following mail templates:
| Template | Purpose |
|---|---|
igniterlabs.grouporder::mail.invite |
Email sent to guests with the invite link |
Customize this template in Design > Mail Templates.