Widget-based workflow buttons for osTicket 1.18+
One-click Start/Stop buttons in the agent panel queue view, driven by ticket status. Supports multi-step workflows with chained widgets — from simple single-step handoffs to complex multi-department assembly lines.
Built by ChesnoTech.
- Start/Stop buttons on each ticket row in the queue view
- Status-driven visibility — buttons appear/disappear based on ticket status
- Multi-step workflows — chain multiple widgets for N-step processes
- Per-department configuration — enable/disable buttons per department with a visual matrix UI
- One widget per help topic — different workflows for different ticket types
- Auto-claim on Start — assigns the ticket to the clicking agent
- Auto-release + transfer on Stop — releases agent and moves ticket to the next department
- osTicket access role integration — respects department access and permissions
- Desktop + Mobile responsive — sticky column on desktop, card layout on mobile
- Three confirmation modes — None (instant), Confirm Dialog, or Countdown with cancel window
- Countdown popup — auto-execute after configurable timer (3–10s) with progress bar and cancel button
- Undo support — 60-second undo window after any action
- Live elapsed timer — shows how long an agent has been working on a ticket
- Error recovery — rollback claim if status change fails
- Dark mode support
- Theme auto-detection — works with both osTicketAwesome and default osTicket theme
Each plugin instance is a widget tied to one help topic. The widget defines Start/Stop behavior per department:
Ticket in "Collecting Parts" status
→ Agent clicks [▶ Start] → ticket claimed, status changes to "Platform Build"
Ticket in "Platform Build" status
→ Agent clicks [✓ Done] → agent released, status changes to "Ready for Packing",
ticket transferred to Packing department
Chain multiple widgets on the same help topic for multi-step processes:
Widget 1 (Platform Build):
[▶ Start] Collecting Parts → Platform Build [✓ Done] → Case Assembly
Widget 2 (Case Assembly):
[▶ Start] Case Assembly → Case Assembly (Working) [✓ Done] → Ready for Packing → Transfer
Different agents can handle each step. Platform builders pick up "Collecting Parts" tickets, case assemblers pick up "Case Assembly" tickets — all in the same department, driven by status.
- osTicket 1.18+
- PHP 7.4+
- Works with osTicketAwesome theme (SVG icons) and default osTicket theme (Font Awesome)
-
Download or clone this repository into your osTicket plugins directory:
cd /path/to/osticket/include/plugins/ git clone https://github.com/ChesnoTech/ost-quick-buttons.git quick-buttons -
In osTicket Admin Panel, go to Manage > Plugins
-
Click Add New Plugin and select Quick Buttons
-
Set the plugin status to Active
-
Click the Instances tab and Add New Instance to create your first widget
- Go to Admin Panel > Manage > Plugins > Quick Buttons
- Click Instances tab > Add New Instance
- Instance tab: Set name and status to "Enabled"
- Config tab:
- Select a Help Topic (one widget per topic)
- The department matrix appears with all departments
- Check Enabled for each department that should show buttons
- Configure the status chain for each enabled department:
| Field | Description |
|---|---|
| Start: Trigger Status | Ticket status that makes the Start button visible |
| Start: Target Status | Status set after clicking Start (also triggers the Stop button) |
| Stop: Target Status | Status set after clicking Stop |
| Stop: Transfer To | Department to transfer the ticket to (leave empty for no transfer) |
| Button | Icon | Color | Actions |
|---|---|---|---|
| Start | ▶ Play | Blue (#128DBE) | Claim ticket + Change status |
| Stop | ✓ Done | Green (#27ae60) | Change status + Release agent + Transfer (optional) |
Each widget can be configured with one of three confirmation modes:
| Mode | Behavior | Best For |
|---|---|---|
| None | Instant execution on click | Trusted agents, low-risk actions |
| Confirm Dialog | Modal dialog with Confirm/Cancel buttons | Critical workflows, training |
| Countdown | Auto-executes after N seconds with cancel window | High-volume workflows (40+ tickets/day) |
The Countdown mode shows a popup near the button with:
- Action description (what will happen)
- Countdown timer with animated progress bar
- Cancel button to abort before execution
- Configurable duration (3–10 seconds per widget)
To create a multi-step workflow, create multiple widget instances for the same help topic:
-
Widget 1 — handles step 1 (e.g., Platform Build)
- Stop target = step 2's trigger status
- Stop transfer = empty (stays in same department)
-
Widget 2 — handles step 2 (e.g., Case Assembly)
- Start trigger = Widget 1's stop target
- Stop transfer = next department
The widgets chain automatically through matching statuses.
- Buttons are shown based on the agent's department access (
getDepts()— primary + extended + managed departments) - Actions are verified server-side against osTicket permissions:
- Start (Claim): requires
Ticket::PERM_ASSIGN - Status Change: requires
canManageTickets() - Transfer: requires
Ticket::PERM_TRANSFER - Release: requires
Ticket::PERM_RELEASE
- Start (Claim): requires
The plugin includes a built-in workflow dashboard accessible from the plugin admin page (Dashboard tab). It shows:
- Tickets Per Day — bar chart of daily status change throughput
- Average Time Per Step — how long tickets spend in each status
- Agent Leaderboard — top agents by tickets claimed
- Current Queue — snapshot of open tickets by status
Supports 7-day, 30-day, and 90-day time ranges.
Run the self-contained test suite (no osTicket bootstrap required):
php tests/QuickButtonsTest.php53 tests covering: choiceKey extraction, JSON parsing, config validation, duration formatting, button resolution logic, and undo state management.
quick-buttons/
├── plugin.php # Plugin metadata
├── config.php # QuickButtonsConfig — topic + JSON widget config
├── class.QuickButtonsPlugin.php # Bootstrap, AJAX routes, asset injection
├── class.QuickButtonsAjax.php # API endpoints: widgets, execute, admin-config-data
└── assets/
├── quick-buttons.js # Queue view button rendering + click handlers
├── quick-buttons.css # Styles for osTicketAwesome theme (SVG icons)
├── quick-buttons-default.css # Styles for default osTicket theme (Font Awesome)
├── quick-buttons-admin.js # Admin config matrix UI builder
└── quick-buttons-admin.css # Admin matrix table styles
| Endpoint | Method | Description |
|---|---|---|
/scp/ajax.php/quick-buttons/widgets |
POST | Get widget configs + ticket metadata |
/scp/ajax.php/quick-buttons/execute |
POST | Execute Start/Stop action on tickets |
/scp/ajax.php/quick-buttons/admin-config-data |
GET | Get departments + statuses for admin UI |
/scp/ajax.php/quick-buttons/assets/* |
GET | Serve JS/CSS assets with ETag caching |
| Component | Version |
|---|---|
| osTicket | 1.18+ |
| PHP | 7.4+ |
| osTicketAwesome | Revision 3+ (auto-detected) |
| Default osTicket theme | Supported (auto-detected) |
Theme detection is automatic — the plugin checks for the osta/ directory at runtime and serves the appropriate CSS.
This plugin is provided as-is, free and open source, with no guaranteed support.
- Bug reports: Open a GitHub Issue with steps to reproduce
- Feature requests: Open a GitHub Issue — no promises on timeline
- Pull requests: Welcome, but review may take time
- No email support, no SLA, no paid support plans
- For professional setup or custom workflows: contact via GitHub Issues
Use at your own risk. Always test in a staging environment before deploying to production. Back up your database before installing or upgrading.
THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. The author is not responsible for any data loss, downtime, or damage caused by the use of this plugin. It is your responsibility to test the plugin in your environment before production deployment.
This plugin modifies ticket status, assignment, and department via osTicket's built-in API. It does not directly modify the database, but actions performed (claim, transfer, status change) are permanent and trigger osTicket's native notification and logging systems.
MIT License. See LICENSE for details.
ChesnoTech — github.com/ChesnoTech
Product Visionary. Systems Architect. Founder.