Filament Activity Log

repository·main·Indexed 42 days ago

https://github.com/pxlrbt/filament-activity-log

A Filament Admin panel plugin that visualizes activity logs generated by spatie/laravel-activitylog. It provides specialized pages to view history from the perspective of a subject (what happened to a record) or a causer (what actions a user performed). Compatible with PHP 8.1+, Filament 4.0 or 5.0, and spatie/laravel-activitylog 4.7 or 5.0.

Tokens
1.5K
Snippets
6
Records
6
Agent score
3%

What's inside Filament Activity Log

  1. How to list activities for a subject

    main

    Use the ListActivitiesBySubject page to show all activities recorded on a specific record (e.g., every change made to a specific Order).

    This requires your model to use the LogsActivity trait from spatie/laravel-activitylog, which provides the activitiesAsSubject() relation.

    <?php
    
    use Spatie\\Activitylog\\Models\\Concerns\\LogsActivity;
    
    class Order extends Model
    {
        use LogsActivity;
    }
  2. How to list activities caused by a record

    main

    Use the ListActivitiesByCauser page to show all activities a specific record (typically a User) has caused across all subjects. Each row links to the affected subject's resource if one is registered.

    This requires your model to use the CausesActivity trait from spatie/laravel-activitylog, which provides the activitiesAsCauser() relation.

    <?php
    
    use Spatie\Activitylog\Models\Concerns\CausesActivity;
    
    class User extends Authenticatable implements FilamentUser
    {
        use CausesActivity;
    }
  3. Upgrade to Filament v4

    main

    To ensure styles are applied correctly in Filament v4, you must use a custom theme. Add the following import to your custom theme CSS file and recompile:

    @import '../../../../vendor/pxlrbt/filament-activity-log/resources/css/styles.css';

    @import '../../../../vendor/pxlrbt/filament-activity-log/resources/css/styles.css';
  4. Create and register a ListActivitiesBySubject page

    main

    To implement a subject-based activity log for a resource:

    1. Setup the Model: Ensure the model uses the LogsActivity trait.
    2. Create the Page: Create a new class in your resource's Pages/ directory that extends ListActivitiesBySubject and defines the $resource property.
    3. Register the Page: Add the new page to your resource's getPages() method using the /{record}/activities route pattern.
    // 1. Model Setup
    class Order extends Model
    {
        use \\Spatie\\Activitylog\\Models\\Concerns\\LogsActivity;
    }
    
    // 2. Create the Page (App\Filament\Resources\Orders\Pages\ListOrderActivities)
    namespace App\Filament\Resources\Orders\Pages;
    
    use pxlrbt\FilamentActivityLog\Pages\ListActivitiesBySubject;
    
    class ListOrderActivities extends ListActivitiesBySubject
    {
        protected static string $resource = OrderResource::class;
    }
    
    // 3. Register in OrderResource
    public static function getPages(): array
    {
        return [
            'index' => Pages\ListOrders::route('/'),
            'create' => Pages\CreateOrder::route('/create'),
            'activities' => Pages\ListOrderActivities::route('/{record}/activities'),
            'edit' => Pages\EditOrder::route('/{record}/edit'),
        ];
    }
  5. Install Filament Activity Log

    main

    Install the package via Composer. This plugin requires spatie/laravel-activitylog to be installed and configured to function.

    Requirements:

    • PHP 8.1+
    • Filament 4.0 or 5.0
    • spatie/laravel-activitylog 4.7 or 5.0
    composer require pxlrbt/filament-activity-log
  6. Create and register a ListActivitiesByCauser page

    main

    To implement a causer-based activity log for a resource:

    1. Setup the Model: Ensure the model (e.g., User) uses the CausesActivity trait.
    2. Create the Page: Create a new class in your resource's Pages/ directory that extends ListActivitiesByCauser and defines the $resource property.
    3. Register the Page: Add the new page to your resource's getPages() method using the /{record}/activities route pattern.
    // 1. Model Setup
    class User extends Authenticatable implements FilamentUser
    {
        use \\Spatie\\Activitylog\\Models\\Concerns\\CausesActivity;
    }
    
    // 2. Create the Page (App\Filament\Resources\Users\Pages\ListUserActivities)
    namespace App\Filament\Resources\Users\Pages;
    
    use pxlrbt\FilamentActivityLog\Pages\ListActivitiesByCauser;
    
    class ListUserActivities extends ListActivitiesByCauser
    {
        protected static string $resource = UserResource::class;
    }
    
    // 3. Register in UserResource
    public static function getPages(): array
    {
        return [
            'index' => Pages\ListUsers::route('/'),
            'create' => Pages\CreateUser::route('/create'),
            'activities' => Pages\ListUserActivities::route('/{record}/activities'),
            'edit' => Pages\EditUser::route('/{record}/edit'),
        ];
    }