1. Go to this page and download the library: Download dibakar/activity-scope 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/ */
namespace App\Models;
use Dibakar\ActivityScope\Traits\LogsActivity;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use LogsActivity;
protected $fillable = ['title', 'content', 'status'];
}
namespace App\Models;
use Dibakar\ActivityScope\Traits\HasActivities;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use HasActivities;
protected $fillable = ['name', 'email', 'role'];
}
// Log an activity performed BY this user
$user->newActivity()
->on($post)
->did('reviewed')
->with(['rating' => 5, 'comments' => 'Excellent post'])
->log();
// Access relationships
$user->actions; // Activities performed BY this user
$user->activities; // Activities performed ON this user
namespace App\Models;
use Dibakar\ActivityScope\Traits\LogsActivity;
use Illuminate\Database\Eloquent\Model;
class Order extends Model
{
use LogsActivity;
protected $fillable = ['customer_id', 'total', 'status'];
/**
* Customize which events to log
*/
protected function getActivityEvents(): array
{
return ['created', 'updated'];
}
/**
* Customize what data gets logged
*/
protected function getActivityData(): array
{
return [
'total' => $this->total,
'status' => $this->status,
'customer_name' => $this->customer->name,
];
}
/**
* Conditionally skip logging
*/
protected function shouldLogActivity(string $event): bool
{
return $this->status !== 'draft';
}
}
use Dibakar\ActivityScope\Models\Activity;
// Filter by Actor (User, System, etc.)
$activities = Activity::by($user)->get();
$systemActivities = Activity::bySystem()->get();
$guestActivities = Activity::byGuest()->get();
// Filter by Subject (Post, Order, etc.)
$postActivities = Activity::onSubject($post)->get();
// or using the alias
$orderActivities = Activity::forSubject($order)->get();
// Filter by Action
$updateActivities = Activity::did('updated')->get();
$multipleActions = Activity::did(['created', 'updated', 'deleted'])->get();
// Filter by Status
$failedActivities = Activity::failed()->get();
$warningActivities = Activity::warning()->get();
// Filter by Date Range
$recentActivities = Activity::today()->get();
$lastWeekActivities = Activity::lastWeek()->get();
$customRange = Activity::between($startDate, $endDate)->get();
// Combine multiple filters
$userPostUpdates = Activity::by($user)
->onSubject($post)
->did('updated')
->where('status', 'success')
->orderBy('created_at', 'desc')
->get();
$activity = Activity::first();
echo $activity->message(); // "System published Post 'Laravel Rocks'"
// Custom message formatting
echo $activity->getMessageBuilder()
->actorFirst()
->
use Dibakar\ActivityScope\Events\ActivityLogged;
// In your EventServiceProvider
protected $listen = [
ActivityLogged::class => [
SendActivityNotification::class,
LogToExternalService::class,
UpdateAnalytics::class,
],
];
// Custom listener example
class SendActivityNotification
{
public function handle(ActivityLogged $event)
{
$activity = $event->activity;
if ($activity->isCritical()) {
// Send email notification
Mail::to('[email protected]')
->send(new CriticalActivityAlert($activity));
}
if ($activity->hasTag('security')) {
// Send to security team
$this->securityService->alert($activity);
}
}
}
// In your service provider
Event::listen(ActivityLogged::class, function ($event) {
$activity = $event->activity;
// Log to external monitoring
if ($activity->status === 'failed') {
Sentry::captureMessage($activity->message());
}
// Update user metrics
if ($activity->subject_type === 'App\Models\User') {
Cache::increment("user_activity_{$activity->subject_id}");
}
});
// Complete e-commerce order workflow
class OrderService
{
public function processOrder(Order $order, User $user)
{
// Log order creation
activity()
->by($user)
->created($order)
->with(['total' => $order->total, 'items' => $order->items->count()])
->tags(['order', 'ecommerce'])
->log();
try {
// Process payment
$payment = $this->paymentService->charge($order);
activity()
->by($user)
->on($payment)
->did('processed')
->success()
->with(['amount' => $payment->amount, 'gateway' => 'stripe'])
->log();
// Update order status
$order->update(['status' => 'confirmed']);
activity()
->by($user)
->on($order)
->did('confirmed')
->changes(['status' => 'confirmed'])
->success()
->log();
} catch (PaymentException $e) {
activity()
->by($user)
->on($order)
->failed($e->getMessage())
->severity('critical')
->tags(['payment', 'error'])
->log();
throw $e;
}
}
}