All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 1m4s
- [DOCS] 補齊 en, ja, zh_TW 語系檔翻譯並完善驗證錯誤訊息 (validation.php) - [FEAT] 角色權限頁面新增「所屬單位」篩選功能 (僅限系統管理員) - [STYLE] 優化角色列表顯示,將「類型」變更為具體「所屬單位」名稱 - [STYLE] 修正角色頁面工具列佈局,搜尋框置前並修正下拉箭頭顯示 - [REFACTOR] 統一全站刪除確認視窗,導入新版 <x-delete-confirm-modal /> 組件 - [REFACTOR] 優化 PermissionController 查詢效能 (Eager Loading) - [FIX] 修正 RoleSeeder 角色命名與資料庫同步邏輯
80 lines
2.1 KiB
PHP
80 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\ProfileUpdateRequest;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Redirect;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\View\View;
|
|
|
|
class ProfileController extends Controller
|
|
{
|
|
/**
|
|
* Display the user's profile form.
|
|
*/
|
|
public function edit(Request $request): View
|
|
{
|
|
$user = $request->user();
|
|
|
|
return view('profile.edit', [
|
|
// 只取最新 10 筆登入紀錄
|
|
'user' => $user->load(['loginLogs' => fn($q) => $q->latest('login_at')->limit(10)]),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Update the user's profile information.
|
|
*/
|
|
public function update(ProfileUpdateRequest $request): RedirectResponse
|
|
{
|
|
$user = $request->user();
|
|
$user->fill($request->validated());
|
|
|
|
if ($user->isDirty('email')) {
|
|
$user->email_verified_at = null;
|
|
}
|
|
|
|
$user->save();
|
|
|
|
return Redirect::route('profile.edit')->with('success', __('Profile updated successfully.'));
|
|
}
|
|
|
|
/**
|
|
* Update the user's avatar via AJAX.
|
|
*/
|
|
public function updateAvatar(Request $request): \Illuminate\Http\JsonResponse
|
|
{
|
|
$request->validate([
|
|
'avatar' => ['required', 'image', 'mimes:jpeg,png,jpg,gif', 'max:1024'],
|
|
]);
|
|
|
|
$user = $request->user();
|
|
|
|
if ($request->hasFile('avatar')) {
|
|
// Delete old avatar if exists
|
|
if ($user->avatar) {
|
|
Storage::disk('public')->delete($user->avatar);
|
|
}
|
|
|
|
$path = $request->file('avatar')->store('avatars', 'public');
|
|
$user->avatar = $path;
|
|
$user->save();
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'avatar_url' => $user->avatar_url,
|
|
'message' => __('Avatar updated successfully.'),
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => __('No file uploaded.'),
|
|
], 400);
|
|
}
|
|
|
|
}
|