Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Ticketit Legacy Laravel Package

amoori/ticketit-legacy

Archived Laravel helpdesk/ticket system (Laravel 5.1–5.8, 6–8). Integrates with default users/auth; roles for users/agents/admins; ticket creation, comments, closing; auto-assign agents by department/queue; admin panel, stats, localization, image uploads.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require amoori/ticketit-legacy
    

    Publish the package assets and migrations:

    php artisan vendor:publish --provider="Amoor\Ticketit\TicketitServiceProvider" --tag="migrations"
    php artisan vendor:publish --provider="Amoor\Ticketit\TicketitServiceProvider" --tag="config"
    php artisan vendor:publish --provider="Amoor\Ticketit\TicketitServiceProvider" --tag="public"
    

    Run migrations:

    php artisan migrate
    
  2. Configuration Update .env with:

    TICKETIT_ENABLED=true
    TICKETIT_DEFAULT_CATEGORY_ID=1
    

    Review config/ticketit.php for customizations (e.g., email templates, permissions).

  3. First Use Case Create a ticket via Tinker or a controller:

    use Amoor\Ticketit\Models\Ticket;
    $ticket = Ticket::create([
        'title' => 'Test Ticket',
        'description' => 'This is a test ticket.',
        'user_id' => auth()->id(),
        'category_id' => 1,
    ]);
    

Implementation Patterns

Core Workflows

  1. Ticket Creation

    • Manual: Use Ticket::create() or Ticket::store() (if using the package’s form helpers).
    • API/Automation: Trigger via events (e.g., TicketCreated) or queue jobs for async processing.
    • Frontend: Integrate with Blade forms:
      {!! Form::open(['route' => 'tickets.store']) !!}
          {!! Form::text('title') !!}
          {!! Form::textarea('description') !!}
          {!! Form::submit('Submit Ticket') !!}
      {!! Form::close !!}
      
  2. Ticket Management

    • Listing: Use Ticket::query()->with(['user', 'category', 'replies'])->get().
    • Filtering: Chain methods like whereStatus(), whereCategoryId(), or use the package’s built-in scopes:
      Ticket::assignedTo(auth()->user())->open()->get();
      
    • Assigning: Update assigned_to_id and trigger TicketAssigned event.
  3. Replies and Notifications

    • Add replies via Ticket::find($id)->replies()->create(['body' => '...']).
    • Listen for TicketReplyCreated to send notifications (e.g., via Laravel Notifications).
  4. Permissions

    • Use Laravel’s gates/policies to restrict actions:
      Gate::define('delete-ticket', function ($user, $ticket) {
          return $user->isAdmin() || $ticket->user_id === $user->id;
      });
      

Integration Tips

  • Laravel Mix: Compile the package’s CSS/JS (resources/assets/ticketit/) into your main assets.
  • APIs: Expose endpoints via Laravel API Resources:
    Route::apiResource('tickets', 'TicketController')->middleware('auth:api');
    
  • Search: Use Laravel Scout for full-text search on title/description:
    Ticket::search('urgent')->get();
    
  • Webhooks: Dispatch events (e.g., TicketStatusUpdated) to trigger external actions.

Gotchas and Tips

Pitfalls

  1. Laravel Version Mismatch

    • The package targets Laravel 5.1–6.x. Avoid using with Laravel 7+ without patches.
    • Fix: Use a compatibility layer (e.g., laravel/framework:^6.0) or fork the package.
  2. Missing Middleware

    • Routes like /tickets may lack auth middleware. Add:
      Route::middleware(['auth'])->group(function () {
          Route::resource('tickets', 'TicketController');
      });
      
  3. Email Configuration

    • The package assumes Laravel’s default mail setup. Customize config/ticketit.php if using SMTP/Gmail:
      'mail' => [
          'from' => ['address' => 'support@example.com', 'name' => 'Support Team'],
      ],
      
  4. Database Collisions

    • Migrations may conflict if you’ve customized the users or categories tables.
    • Fix: Review database/migrations/ and adjust column names (e.g., ticket_user_id vs. user_id).
  5. Asset Paths

    • Published assets (public/ticketit/) may not auto-update. Clear cached views:
      php artisan view:clear
      

Debugging

  • Logs: Enable debug mode in config/ticketit.php:
    'debug' => env('APP_DEBUG', false),
    
  • Events: Dump events in EventServiceProvider:
    protected $listen = [
        'Amoor\Ticketit\Events\TicketCreated' => [
            function ($event) {
                \Log::debug('Ticket created:', $event->ticket);
            },
        ],
    ];
    

Extension Points

  1. Custom Fields

    • Extend the Ticket model to add morph-to relationships:
      public function customFields()
      {
          return $this->morphMany(CustomField::class, 'fieldable');
      }
      
  2. Status Machine

    • Override the status transitions in app/Providers/TicketitServiceProvider:
      Ticket::macro('close', function () {
          $this->update(['status' => 'closed']);
          event(new TicketStatusUpdated($this, 'closed'));
      });
      
  3. Testing

    • Use factories (if available) or seed test data:
      $ticket = factory(Ticket::class)->create(['user_id' => $user->id]);
      
    • Mock events for unit tests:
      Event::fake();
      $ticket->replies()->create(['body' => 'Test']);
      Event::assertDispatched(TicketReplyCreated::class);
      
  4. Localization

    • Override language strings in resources/lang/. Example:
      'ticketit::tickets.status.open' => 'Open (Custom)',
      
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope