Install via Composer
composer require umark1142/ticketit
(Note: Despite being archived, the package remains functional for Laravel 5.1–8.x.)
Publish Assets & Config
php artisan vendor:publish --provider="Ticketit\TicketitServiceProvider"
config/ticketit.php and resources/views/vendor/ticketit/.Run Migrations
php artisan migrate
Register Routes
Add to routes/web.php:
Route::prefix('ticketit')->group(function () {
require __DIR__.'/vendor/ticketit/routes.php';
});
Assign Roles
Use the Ticketit\Ticketit facade to assign roles to users:
use Ticketit\Facades\Ticketit;
// Assign 'agent' role to a user
Ticketit::assignRoleToUser($userId, 'agent');
First Ticket Test
user)./ticketit/tickets/create to submit a test ticket.config/ticketit.php – Adjust department settings, auto-assignment rules, and permissions.resources/views/vendor/ticketit/ – Customize UI (e.g., tickets/index.blade.php).Ticketit:: – Core functionality (e.g., Ticketit::createTicket(), Ticketit::assignAgent()).Ticketit\Middleware\CheckRole – Restrict routes by role (e.g., agents only).// config/ticketit.php
'departments' => [
'technical' => ['agents' => [1, 2]], // User IDs
'billing' => ['agents' => [3]],
],
$ticket = Ticketit::createTicket($userId, [
'title' => 'Issue with login',
'department' => 'technical',
]);
// Auto-assigns agent with lowest queue in 'technical' department.
// Create ticket via facade
$ticket = Ticketit::createTicket($userId, [
'title' => 'API Error',
'description' => '404 on /endpoint',
'department' => 'technical',
]);
Ticketit::attachFileToTicket($ticketId, $filePath).// Reply to ticket
Ticketit::addComment($ticketId, $agentId, 'Debugging...');
// Close ticket
Ticketit::closeTicket($ticketId, $agentId);
Route::get('/admin/dashboard', function () {
// ...
})->middleware(['auth', 'ticketit.role:admin']);
// Bulk assign roles
Ticketit::assignRoleToUsers([1, 2, 3], 'agent');
// Override default assignment in config/ticketit.php
'auto_assign' => [
'strategy' => 'least_busy', // or 'round_robin'
'fallback_agent' => 1, // ID if no agent available
],
Ticketit::assignAgent($ticketId, $agentId);
app()->setLocale('fr'); // French
php artisan vendor:publish --tag=ticketit-lang
Then extend resources/lang/vendor/ticketit/.Ticketit\Events\TicketCreated to trigger Slack/email alerts:
Event::listen(TicketitEvents::TICKET_CREATED, function ($event) {
Notification::route('mail', $event->ticket->agent->email)
->notify(new TicketAssigned($event->ticket));
});
dispatch(new AssignAgentToTicket($ticketId));
Route::get('/api/tickets/{id}', 'TicketController@show')->middleware('auth:api');
// resources/views/vendor/ticketit/partials/ticket-comment.blade.php
@extends('vendor.ticketit.partials.ticket-comment')
@section('comment-body')
<div class="custom-style">
{{ $comment->body }}
</div>
@endsection
php artisan vendor:publish --tag=ticketit-assets
Then extend public/vendor/ticketit/css/ticketit.css.// database/seeds/TicketitTableSeeder.php
$departments = [
['name' => 'Technical', 'description' => 'Tech support'],
['name' => 'Billing', 'description' => 'Invoices'],
];
DB::table('ticketit_departments')->insert($departments);
Archived Package Risks:
Role Assignment Quirks:
user, agent, admin) must exist in ticketit_roles table.php artisan ticketit:install if roles are missing (if command exists).Auto-Assignment Failures:
fallback_agent in config or validate departments before creation:
$department = Ticketit::getDepartment('technical');
if (!$department || empty($department->agents)) {
throw new \Exception("No agents in department.");
}
File Uploads:
public/ticketit_uploads. Ensure symlink exists:
php artisan storage:link
'file_uploads' => [
'disk' => 's3',
'path' => 'ticket-attachments',
],
Localization Gaps:
__('ticketit::default', ['key' => 'ticket.created']);
Log Auto-Assignment: Enable debug mode in config:
'debug' => true,
Logs assignment logic to storage/logs/laravel.log.
Middleware Issues:
php artisan view:clear
Database Conflicts:
php artisan migrate:fresh --env=local
Queue Stuck Jobs:
failed_jobs table for Ticketit\Jobs\AssignAgentToTicket.Custom Ticket Fields:
ticketit_tickets table via migrations, then override the Ticket model:
// app/Models/Ticket.php
class Ticket extends \Ticketit\Models\Ticket {
protected $casts = [
'priority' => 'integer',
];
}
Event Hooks:
Event::listen(TicketitEvents::TICKET_COMMENT_ADDED, function ($event) {
// Send webhook to third-party system
});
API Endpoints:
class TicketController extends Controller {
public function update(TicketUpdateRequest $request, $id) {
$ticket = Ticketit::updateTicket($id, $request->
How can I help you explore Laravel packages today?