PHP code example of swisnl / filament-activitylog

1. Go to this page and download the library: Download swisnl/filament-activitylog 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/ */

    

swisnl / filament-activitylog example snippets




namespace App\Filament\Resources;

use Filament\Resources\Resource;
use Filament\Tables\Table;
use Swis\Filament\Activitylog\Tables\Actions\ActivitylogAction;

class MyResource extends Resource
{
    public static function table(Table $table): Table
    {
        return $table
            ...
            ->actions([
                ...
                ActivitylogAction::make(),
                ...
            ]);
    }
}



namespace App\Filament\Resources\MyResource\Pages;

use App\Filament\Resources\MyResource;
use Filament\Resources\Pages\EditRecord;
use Swis\Filament\ActivityLog\Actions\ActivitylogAction;

class EditContract extends EditRecord
{
    protected static string $resource = ContractResource::class;

    protected function getHeaderActions(): array
    {
        return [
            ...
            ActivitylogAction::make(),
        ];
    }
}



namespace App\Policies;

use App\Models\MyModel;
use App\Models\User;

class MyModelPolicy
{
    public function viewActivitylog(User $user, MyModel $myModel)
    {
        return $user->isAdmin();
    }

    public function commentActivitylog(User $user, MyModel $myModel)
    {
        return $user->isAdmin();
    }
}



namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Swis\Filament\Activitylog\Facades\FilamentActivitylog;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        FilamentActivitylog::registerEntryContentEventViewResolver('myevent', 'activitylog.entries.myevent');
    }
}



namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Stringable;
use Swis\Filament\Activitylog\Facades\FilamentActivitylog;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        FilamentActivitylog::registerAttributeTableLabelProvider(function ($key, $recordClass) {
            $instance = new $recordClass;

            $translationKey = $instance->getMorphClass().'.fields.'.$key.'.label';
            $translation = __($translationKey);

            if ($translation === $translationKey) {
                return null;
            }

            return $translation;
        });
    }
}



namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Swis\Filament\Activitylog\AttributeTable\Contracts\LabelProvider;

class MyModel extends Model implements LabelProvider
{
    public function getAttributeTableLabel(string $key, string $recordClass): ?string
    {
        return match ($key) {
            'myproperty' => 'My Property',
            default => null,
        };
    }
}



namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Swis\Filament\Activitylog\AttributeTable\Builder;
use Swis\Filament\Activitylog\Facades\FilamentActivitylog;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        FilamentActivitylog::registerAttributeTableValueFormatter(function (Builder $builder, mixed $value, string $key, array $attributes, string $recordClass) {
            // Implement custom value formatting logic here.
        });
    }
}



namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Swis\Filament\Activitylog\AttributeTable\Builder;
use Swis\Filament\Activitylog\AttributeTable\Contracts\ValueFormatter;

class MyModel extends Model implements ValueFormatter
{
    public function formatAttributeTableValue(Builder $builder, mixed $value, string $key, array $attributes, string $recordClass): Stringable|string|null
    {
        if ($key === 'myproperty') {
            return 'This is a custom formatted value';
        }
     
        return null;
    }
}



namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Swis\Filament\Activitylog\AttributeTable\Contracts\SkipsAttributes;

class MyModel extends Model implements SkipsAttributes
{
    public function skipAttributeTableAttributes() {
        return ['foo', 'bar'];
    }
}



namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Swis\Filament\Activitylog\AttributeTable\Concerns\SkipsHiddenAttributes;
use Swis\Filament\Activitylog\AttributeTable\Contracts\SkipsAttributes;

class User extends Authenticatable implements SkipsAttributes
{
    use SkipsHiddenAttributes;
}