get('q'); $users = []; if ($q) { $users = User::with('father', 'mother')->where(function ($query) use ($q) { $query->where('name', 'like', '%'.$q.'%'); $query->orWhere('nickname', 'like', '%'.$q.'%'); }) ->orderBy('name', 'asc') ->paginate(24); } return view('users.search', compact('users')); } /** * Display the specified User. * * @param \App\User $user * @return \Illuminate\View\View */ public function show(User $user) { $usersMariageList = $this->getUserMariageList($user); $allMariageList = $this->getAllMariageList(); $malePersonList = $this->getPersonList(1); $femalePersonList = $this->getPersonList(2); return view('users.show', [ 'user' => $user, 'usersMariageList' => $usersMariageList, 'malePersonList' => $malePersonList, 'femalePersonList' => $femalePersonList, 'allMariageList' => $allMariageList, ]); } /** * Display the user's family chart. * * @param \App\User $user * @return \Illuminate\View\View */ public function chart(User $user) { $father = $user->father_id ? $user->father : null; $mother = $user->mother_id ? $user->mother : null; $fatherGrandpa = $father && $father->father_id ? $father->father : null; $fatherGrandma = $father && $father->mother_id ? $father->mother : null; $motherGrandpa = $mother && $mother->father_id ? $mother->father : null; $motherGrandma = $mother && $mother->mother_id ? $mother->mother : null; $childs = $user->childs; $colspan = $childs->count(); $colspan = $colspan < 4 ? 4 : $colspan; $siblings = $user->siblings(); return view('users.chart', compact( 'user', 'childs', 'father', 'mother', 'fatherGrandpa', 'fatherGrandma', 'motherGrandpa', 'motherGrandma', 'siblings', 'colspan' )); } /** * Show user family tree. * * @param \App\User $user * @return \Illuminate\View\View */ public function tree(User $user) { return view('users.tree', compact('user')); } /** * Show user death info. * * @param \App\User $user * @return \Illuminate\View\View */ public function death(User $user) { $mapZoomLevel = config('leaflet.detail_zoom_level'); $mapCenterLatitude = $user->getMetadata('cemetery_location_latitude'); $mapCenterLongitude = $user->getMetadata('cemetery_location_longitude'); return view('users.death', compact('user', 'mapZoomLevel', 'mapCenterLatitude', 'mapCenterLongitude')); } /** * Show the form for editing the specified User. * * @param \App\User $user * @return \Illuminate\View\View */ public function edit(User $user) { $this->authorize('edit', $user); $replacementUsers = []; if (request('action') == 'delete') { $replacementUsers = $this->getPersonList($user->gender_id); } $validTabs = ['death', 'contact_address', 'login_account']; $mapZoomLevel = config('leaflet.zoom_level'); $mapCenterLatitude = $user->getMetadata('cemetery_location_latitude'); $mapCenterLongitude = $user->getMetadata('cemetery_location_longitude'); if ($mapCenterLatitude && $mapCenterLongitude) { $mapZoomLevel = config('leaflet.detail_zoom_level'); } $mapCenterLatitude = $mapCenterLatitude ?: config('leaflet.map_center_latitude'); $mapCenterLongitude = $mapCenterLongitude ?: config('leaflet.map_center_longitude'); return view('users.edit', compact( 'user', 'replacementUsers', 'validTabs', 'mapZoomLevel', 'mapCenterLatitude', 'mapCenterLongitude' )); } /** * Update the specified User in storage. * * @param \App\Http\Requests\Users\UpdateRequest $request * @param \App\User $user * @return \Illuminate\Http\RedirectResponse */ public function update(UpdateRequest $request, User $user) { $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('user_id', $user->id)->where('key', $key)->firstOrNew(); if (!$userMeta->exists) { $userMeta->id = Uuid::uuid4()->toString(); $userMeta->user_id = $user->id; $userMeta->key = $key; } $userMeta->value = $userAttributes->get($key); $userMeta->save(); } } return redirect()->route('users.show', $user->id); } /** * Remove the specified User from storage. * * @param \Illuminate\Http\Request $request * @param \App\User $user * @return \Illuminate\Http\RedirectResponse */ public function destroy(Request $request, User $user) { $this->authorize('delete', $user); if ($request->has('replace_delete_button')) { $attributes = $request->validate([ 'replacement_user_id' => 'required|exists:users,id', ], [ 'replacement_user_id.required' => __('validation.user.replacement_user_id.required'), ]); $this->dispatchNow(new DeleteAndReplaceUser($user, $attributes['replacement_user_id'])); return redirect()->route('users.show', $attributes['replacement_user_id']); } $request->validate([ 'user_id' => 'required', ]); if ($request->get('user_id') == $user->id && $user->delete()) { return redirect()->route('users.search'); } return back(); } /** * Upload users photo. * * @param \Illuminate\Http\Request $request * @param \App\User $user * @return \Illuminate\Http\RedirectResponse */ public function photoUpload(Request $request, User $user) { $request->validate([ 'photo' => 'required|image|max:200', ]); if (Storage::exists($user->photo_path)) { Storage::delete($user->photo_path); } $user->photo_path = $request->photo->store('images'); $user->save(); return back(); } /** * Get User list based on gender. * * @param int $genderId * * @return \Illuminate\Support\Collection */ private function getPersonList(int $genderId) { return User::where('gender_id', $genderId)->pluck('nickname', 'id'); } /** * Get marriage list of a user. * * @param \App\User $user * * @return array */ private function getUserMariageList(User $user) { $usersMariageList = []; foreach ($user->couples as $spouse) { $usersMariageList[$spouse->pivot->id] = $user->name.' & '.$spouse->name; } return $usersMariageList; } /** * Get all marriage list. * * @return array */ private function getAllMariageList() { $allMariageList = []; foreach (Couple::with('husband', 'wife')->get() as $couple) { $allMariageList[$couple->id] = $couple->husband->name.' & '.$couple->wife->name; } return $allMariageList; } }