diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 9152e32..53c2e26 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -6,7 +6,9 @@ use App\Couple; use App\Http\Requests\Users\UpdateRequest; use App\Jobs\Users\DeleteAndReplaceUser; use App\User; +use App\UserMetadata; use Illuminate\Http\Request; +use Ramsey\Uuid\Uuid; use Storage; class UsersController extends Controller @@ -125,7 +127,21 @@ class UsersController extends Controller */ public function update(UpdateRequest $request, User $user) { - $user->update($request->validated()); + $userAttributes = $request->validated(); + $user->update($userAttributes); + $userAttributes = collect($userAttributes); + foreach (['cemetery_location_name', 'cemetery_location_address', 'cemetery_location_latitude', 'cemetery_location_longitude'] as $key) { + if ($userAttributes->has($key)) { + $userMeta = UserMetadata::where('name', $key)->firstOrNew(); + if (!$userMeta->exists) { + $userMeta->id = Uuid::uuid4()->toString(); + $userMeta->user_id = $user->id; + $userMeta->name = $key; + } + $userMeta->value = $userAttributes->get($key); + $userMeta->save(); + } + } return redirect()->route('users.show', $user->id); } diff --git a/app/Http/Requests/Users/UpdateRequest.php b/app/Http/Requests/Users/UpdateRequest.php index ba34ff6..ad4d219 100644 --- a/app/Http/Requests/Users/UpdateRequest.php +++ b/app/Http/Requests/Users/UpdateRequest.php @@ -39,6 +39,11 @@ class UpdateRequest extends FormRequest 'email' => 'nullable|string|max:255', 'password' => 'nullable|min:6|max:15', 'birth_order' => 'nullable|numeric|min:1', + + 'cemetery_location_name' => 'nullable|string|max:255', + 'cemetery_location_address' => 'nullable|string|max:255', + 'cemetery_location_latitude' => 'required_with:cemetery_location_longitude|nullable|string|max:255', + 'cemetery_location_longitude' => 'required_with:cemetery_location_latitude|nullable|string|max:255', ]; } diff --git a/app/UserMetadata.php b/app/UserMetadata.php new file mode 100644 index 0000000..99e3d38 --- /dev/null +++ b/app/UserMetadata.php @@ -0,0 +1,12 @@ +uuid('id')->primary(); + $table->foreignId('user_id')->constrained('users')->onDelete('cascade'); + $table->string('name')->index(); + $table->text('value'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_metadata'); + } +} diff --git a/resources/views/users/partials/edit_death.blade.php b/resources/views/users/partials/edit_death.blade.php index 6e8ff6e..0bce3a4 100644 --- a/resources/views/users/partials/edit_death.blade.php +++ b/resources/views/users/partials/edit_death.blade.php @@ -2,3 +2,7 @@
{!! FormField::text('yod', ['label' => __('user.yod'), 'placeholder' => __('app.example').' 2003']) !!}
{!! FormField::text('dod', ['label' => __('user.dod'), 'placeholder' => __('app.example').' 2003-10-17']) !!}
+{!! FormField::text('cemetery_location_name', ['label' => __('user.cemetery_location_name')]) !!} +{!! FormField::text('cemetery_location_address', ['label' => __('user.cemetery_location_address')]) !!} +{!! FormField::text('cemetery_location_latitude', ['label' => __('user.cemetery_location_latitude')]) !!} +{!! FormField::text('cemetery_location_longitude', ['label' => __('user.cemetery_location_longitude')]) !!} \ No newline at end of file diff --git a/tests/Feature/UsersProfileTest.php b/tests/Feature/UsersProfileTest.php index 420c427..10145ec 100644 --- a/tests/Feature/UsersProfileTest.php +++ b/tests/Feature/UsersProfileTest.php @@ -168,6 +168,53 @@ class UsersProfileTest extends TestCase } /** @test */ + public function user_can_update_died_person_cemetary_location() + { + $user = $this->loginAsUser(); + $this->visit(route('users.edit', [$user->id, 'tab' => 'death'])); + $this->seePageIs(route('users.edit', [$user->id, 'tab' => 'death'])); + + $this->submitForm(trans('app.update'), [ + 'dod' => '', + 'yod' => '2003', + 'cemetery_location_name' => 'Some name', + 'cemetery_location_address' => 'Some address', + 'cemetery_location_latitude' => '-3.333333', + 'cemetery_location_longitude' => '114.583333', + ]); + + $this->seeInDatabase('users', [ + 'id' => $user->id, + 'dod' => null, + 'yod' => '2003', + ]); + + $this->seeInDatabase('user_metadata', [ + 'user_id' => $user->id, + 'name' => 'cemetery_location_name', + 'value' => 'Some name', + ]); + + $this->seeInDatabase('user_metadata', [ + 'user_id' => $user->id, + 'name' => 'cemetery_location_address', + 'value' => 'Some address', + ]); + + $this->seeInDatabase('user_metadata', [ + 'user_id' => $user->id, + 'name' => 'cemetery_location_latitude', + 'value' => '-3.333333', + ]); + + $this->seeInDatabase('user_metadata', [ + 'user_id' => $user->id, + 'name' => 'cemetery_location_longitude', + 'value' => '114.583333', + ]); + } + + /** @test */ public function manager_can_add_login_account_on_a_user() { $manager = $this->loginAsUser();