Skip to content

Commit 5fd30e7

Browse files
committed
Implement withoutAudits to match laravel behavior
1 parent 51c5b2e commit 5fd30e7

File tree

4 files changed

+40
-16
lines changed

4 files changed

+40
-16
lines changed

src/AuditableTrait.php

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
/**
1010
* @property Model $creator
1111
* @property Model $updater
12-
* @property bool $auditable
12+
* @property bool $auditing
1313
*/
1414
trait AuditableTrait
1515
{
16-
public bool $auditable = true;
16+
protected static bool $auditing = true;
1717

1818
/**
1919
* Boot the audit trait for a model.
@@ -23,6 +23,29 @@ public static function bootAuditableTrait(): void
2323
static::observe(new AuditableTraitObserver);
2424
}
2525

26+
/**
27+
* Disable auditing.
28+
*/
29+
public static function withoutAudits(callable $callback)
30+
{
31+
$previousState = static::$auditing;
32+
static::$auditing = false;
33+
34+
try {
35+
return $callback();
36+
} finally {
37+
static::$auditing = $previousState;
38+
}
39+
}
40+
41+
/**
42+
* Check is auditing is enabled.
43+
*/
44+
public function isAuditable(): bool
45+
{
46+
return static::$auditing;
47+
}
48+
2649
/**
2750
* Get user model who created the record.
2851
*/

src/AuditableTraitObserver.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ class AuditableTraitObserver
1111
*/
1212
public function creating(Model $model): void
1313
{
14-
if (method_exists($model, 'getCreatedByColumn') && $model->auditable) {
14+
if (method_exists($model, 'getCreatedByColumn') && $model->isAuditable()) {
1515
$createdBy = $model->getCreatedByColumn();
1616

1717
if (! $model->$createdBy) {
1818
$model->$createdBy = $this->getAuthenticatedUserId();
1919
}
2020
}
2121

22-
if (method_exists($model, 'getUpdatedByColumn') && $model->auditable) {
22+
if (method_exists($model, 'getUpdatedByColumn') && $model->isAuditable()) {
2323
$updatedBy = $model->getUpdatedByColumn();
2424

2525
if (! $model->$updatedBy) {
@@ -41,7 +41,7 @@ protected function getAuthenticatedUserId(): int|string|null
4141
*/
4242
public function updating(Model $model): void
4343
{
44-
if (method_exists($model, 'getUpdatedByColumn') && $model->auditable) {
44+
if (method_exists($model, 'getUpdatedByColumn') && $model->isAuditable()) {
4545
$updatedBy = $model->getUpdatedByColumn();
4646

4747
if (! $model->isDirty($updatedBy)) {
@@ -55,7 +55,7 @@ public function updating(Model $model): void
5555
*/
5656
public function saved(Model $model): void
5757
{
58-
if (method_exists($model, 'getUpdatedByColumn') && $model->auditable) {
58+
if (method_exists($model, 'getUpdatedByColumn') && $model->isAuditable()) {
5959
$updatedBy = $model->getUpdatedByColumn();
6060

6161
if ($this->getAuthenticatedUserId() && $this->getAuthenticatedUserId() != $model->$updatedBy) {

src/AuditableWithDeletesTraitObserver.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class AuditableWithDeletesTraitObserver
1111
*/
1212
public function deleting(Model $model): void
1313
{
14-
if (method_exists($model, 'getDeletedByColumn')) {
14+
if (method_exists($model, 'getDeletedByColumn') && $model->isAuditable()) {
1515
$deletedBy = $model->getDeletedByColumn();
1616

1717
$model->$deletedBy = $this->getAuthenticatedUserId();
@@ -32,7 +32,7 @@ protected function getAuthenticatedUserId(): int|string|null
3232
*/
3333
public function restoring(Model $model): void
3434
{
35-
if (method_exists($model, 'getDeletedByColumn')) {
35+
if (method_exists($model, 'getDeletedByColumn') && $model->isAuditable()) {
3636
$deletedBy = $model->getDeletedByColumn();
3737

3838
$model->$deletedBy = null;

tests/Feature/AuditableModelTest.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,17 @@
5656

5757
actingAs($user);
5858

59-
$post = new Post;
60-
$post->title = 'Hello World';
61-
$post->auditable = false;
62-
$post->save();
59+
Post::withoutAudits(function () {
60+
$post = new Post;
61+
$post->title = 'Hello World';
62+
$post->save();
6363

64-
expect($post->created_by)->toBe(null);
65-
expect($post->updated_by)->toBe(null);
66-
expect($post->deleted_by)->toBe(null);
64+
expect($post->created_by)->toBe(null);
65+
expect($post->updated_by)->toBe(null);
66+
expect($post->deleted_by)->toBe(null);
67+
});
6768

68-
$post->auditable = true;
69+
$post = Post::first();
6970
$post->title = 'Hello World 2';
7071
$post->save();
7172

0 commit comments

Comments
 (0)