PHP code example of hamoda-dev / filament-activity-history

1. Go to this page and download the library: Download hamoda-dev/filament-activity-history library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

hamoda-dev / filament-activity-history example snippets


use HamodaDev\ActivityHistory\ActivityHistoryPlugin;

public function panel(Panel $panel): Panel
{
    return $panel->plugin(ActivityHistoryPlugin::make());
}

use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Traits\LogsActivity;

class Order extends Model
{
    use LogsActivity;

    public function getActivitylogOptions(): LogOptions
    {
        return LogOptions::defaults()
            ->logFillable()
            ->logOnlyDirty()
            ->dontSubmitEmptyLogs();
    }
}

use Illuminate\Support\Facades\Auth;
use Spatie\Activitylog\Facades\CauserResolver;

CauserResolver::resolveUsing(function () {
    foreach (['store', 'admin', 'web'] as $guard) {
        if (Auth::guard($guard)->check()) {
            return Auth::guard($guard)->user();
        }
    }

    return null;
});

use HamodaDev\ActivityHistory\Contracts\HasActivityRelations;

class Order extends Model implements HasActivityRelations
{
    /** @return array<int, string> */
    public function activityRelations(): array
    {
        return ['items', 'payments', 'refunds'];
    }
}

use HamodaDev\ActivityHistory\Concerns\HasActivityHistory;

class Order extends Model implements HasActivityRelations
{
    use HasActivityHistory;

    protected array $activityRelations = ['items', 'payments'];
}

use HamodaDev\ActivityHistory\Contracts\HasActivityTitle;

class ProductVariant extends Model implements HasActivityTitle
{
    public function activityTitle(): ?string
    {
        return $this->optionDescriptor() ?: null;   // "Gray / S"
    }
}

use HamodaDev\ActivityHistory\Actions\TimelineAction;
use HamodaDev\ActivityHistory\Timeline\Timeline;

TimelineAction::make()
    ->timeline(fn (Timeline $timeline) => $timeline->searchable())

TimelineAction::make()
    ->toPage(fn (Order $record): string => OrderResource::getUrl('history', ['record' => $record]))

use HamodaDev\ActivityHistory\Pages\RecordActivityPage;

class OrderHistory extends RecordActivityPage
{
    protected static string $resource = OrderResource::class;

    protected function timeline(): Timeline
    {
        return parent::timeline()->attributeCast(Money::class, $formatter);
    }
}

// OrderResource::getPages()
'history' => OrderHistory::route('/{record}/history'),

use HamodaDev\ActivityHistory\Pages\ActivityFeedPage;

class Activity extends ActivityFeedPage
{
    protected function timeline(): Timeline
    {
        return parent::timeline()->modifyQueryUsing(
            fn (Builder $query) => $query->whereBelongsTo(Filament::getTenant()),
        );
    }
}

Timeline::make('activity_history')
    ->searchable()
    ->maxHeight('28rem')

// lang/ar/activity.php
return [
    'subjects' => [
        'product_variant' => 'خيار المنتج',
    ],
    'attributes' => [
        'product' => ['price' => 'السعر'],   // this model only
        'stock' => 'الكمية',                  // every model
    ],
    'values' => [
        'vat_class' => ['standard' => 'الأساسية'],
    ],
];

'translations' => ['use_filament_labels' => true],

use Filament\Actions\Action;

Timeline::make('activity_history')
    ->itemActions([
        Action::make('viewSubject')
            ->label(fn (array $arguments): string => $arguments['subjectType'] === Order::class
                ? 'View order'
                : 'View item')
            ->icon(Heroicon::OutlinedEye)
            ->visible(fn (array $arguments): bool => $arguments['subjectType'] === Order::class)
            ->url(fn (array $arguments): string => OrderResource::getUrl('view', ['record' => $arguments['subjectId']])),

        Action::make('revert')
            ->

Timeline::make('activity_history')
    ->authorize(fn (): bool => auth()->user()->can('viewActivityHistory'))
    ->modifyQueryUsing(fn (Builder $query) => $query->where('team_id', auth()->user()->team_id))

use HamodaDev\ActivityHistory\ActivityHistoryPlugin;
use HamodaDev\ActivityHistory\Timeline\Timeline;

$panel->plugin(
    ActivityHistoryPlugin::make()->timeline(function (Timeline $timeline): void {
        $timeline
            ->authorize(fn (): bool => Filament::auth()->check())
            ->causerUrl(fn (Model $causer): string => UserResource::getUrl('view', ['record' => $causer]))
            ->attributeCast(Money::class, fn (int $cents): string => Currency::format($cents));
    }),
);
bash
php artisan make:activity-history-page OrderHistory --resource=OrderResource
bash
php artisan activity-history:translations --locale=ar --locale=en