All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 1m7s
1. 新增廣告管理列表與機台配置介面,包含多語系 (zh_TW, en, ja) 與完整 CRUD 2. 實作基於 Alpine 的廣告素材預覽輪播功能 3. 優化廣告素材下拉選單,強制綁定所屬公司以達成多租戶資料隔離 4. 重構廣告配置中廣告影片的縮圖渲染邏輯,移除 <video> 標籤以大幅提升頁面載入速度與節省頻寬 5. 放寬個人檔案頭像上傳限制,支援 WebP 格式
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,webp', '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);
|
|
}
|
|
|
|
}
|