Skip to content

Commit 043b311

Browse files
authored
Merge pull request #80 from pheeque/version-hidden-fields
Allow versioning of hidden fields in model_data.
2 parents e2cb4da + 1c0a7ae commit 043b311

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,28 @@ class User extends Model {
8989
}
9090
```
9191

92+
<a name="hiddenFields" />
93+
94+
### Hidden fields
95+
96+
There are times you might want to include hidden fields in the version data. You might have hidden the fields with the `visible` or `hidden` properties in your model.
97+
98+
You can have those fields that are typically hidden in the rest of your project saved in the version data by adding them to the `versionedHiddenFields` property of the versionable model.
99+
100+
```php
101+
class User {
102+
103+
use VersionableTrait;
104+
105+
// Typically hidden fields
106+
protected $hidden = ['email', 'password'];
107+
108+
// Save these hidden fields
109+
protected $versionedHiddenFields = ['email', 'password'];
110+
111+
}
112+
```
113+
92114
<a name="maximum" />
93115

94116
### Maximum number of stored versions

src/Mpociot/Versionable/VersionableTrait.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,11 @@ protected function versionablePostSave()
173173
$version->versionable_id = $this->getKey();
174174
$version->versionable_type = method_exists($this, 'getMorphClass') ? $this->getMorphClass() : get_class($this);
175175
$version->user_id = $this->getAuthUserId();
176+
177+
$versionedHiddenFields = $this->versionedHiddenFields ?? [];
178+
$this->makeVisible($versionedHiddenFields);
176179
$version->model_data = serialize($this->attributesToArray());
180+
$this->makeHidden($versionedHiddenFields);
177181

178182
if (!empty( $this->reason )) {
179183
$version->reason = $this->reason;

tests/VersionableTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,31 @@ public function testKeepMaxVersionCount()
488488

489489
$this->assertEquals( $name_v3, $model->name );
490490
}
491+
492+
public function testAllowHiddenFields() {
493+
$user = new TestHiddenFieldsUser();
494+
$user->name = "Marcel";
495+
$user->email = "m.pociot@test.php";
496+
$user->password = "12345";
497+
$user->save();
498+
sleep(1);
499+
500+
$user->name = "John";
501+
$user->email = "j.barlow@test.php";
502+
$user->password = "6789";
503+
$user->save();
504+
sleep(1);
505+
506+
$diff = $user->previousVersion()->diff();
507+
508+
$this->assertArrayHasKey('email', $diff);
509+
$this->assertArrayHasKey('password', $diff);
510+
$this->assertEquals( 'John', $diff['name'] );
511+
$this->assertEquals( 'j.barlow@test.php', $diff['email'] );
512+
$this->assertEquals( '6789', $diff['password'] );
513+
514+
$this->assertArrayNotHasKey('password', $user->toArray());
515+
}
491516

492517
}
493518

@@ -545,3 +570,12 @@ class ModelWithJsonField extends Model
545570
protected $casts = ['json_field' => 'array'];
546571
}
547572

573+
class TestHiddenFieldsUser extends \Illuminate\Foundation\Auth\User {
574+
use \Mpociot\Versionable\VersionableTrait;
575+
576+
protected $table = "users";
577+
578+
protected $hidden = ['email', 'password'];
579+
580+
protected $versionedHiddenFields = ['email', 'password'];
581+
}

0 commit comments

Comments
 (0)