# SinhVien Social — bản nâng cấp

## Đã bổ sung

Bản này thêm ví coin cho người dùng và khu vực quản trị nạp tiền. Quy đổi cố định là **10.000đ = 10 coin**; mỗi coin tương đương **10 lượt tiếp cận**, vì vậy chiến dịch tối thiểu 10 coin có mục tiêu 100 người. Admin nhập thông tin ngân hàng trong mục **Ngân hàng**, xác nhận topup trong **Nạp coin** và duyệt chiến dịch trong **Quảng cáo**.

Trang quảng cáo đã tách riêng. Chỉ chủ bài viết công khai mới thấy nút quảng cáo; khi gửi duyệt, coin được giữ trong ngân sách. Nếu admin từ chối, coin tự động hoàn về ví. Khi chạy, bài có nhãn **ADVERTISEMENT** và watermark mờ, dừng khi đủ mục tiêu hoặc hết 30 ngày.

Trang nhắn tin đã chuyển sang bố cục tổng hợp cuộc trò chuyện: khi mở `/index.php?r=messages` chỉ hiện danh sách người đã liên hệ; khi chọn một dòng mới mở nội dung chat. Trang bạn bè có liên kết mở hồ sơ, nút nhắn tin và danh sách khám phá. Hồ sơ cá nhân có thể mở các danh sách **bạn bè**, **người theo dõi** và **đang theo dõi**.

Giao diện có bộ SVG icon dùng chung, ảnh upload được giữ màu, nút đăng xuất được làm đậm, và các hành động bài viết dùng icon rõ ràng hơn.

## Cập nhật database

`app/migrations.php` được gọi từ bootstrap và tự thêm các trường/cấu trúc mới cho database cũ. Hãy sao lưu database trước khi upload. MySQL user cần quyền `ALTER`, `CREATE`, `INDEX`, `SELECT`, `INSERT`, `UPDATE`, `DELETE`.

## Kiểm tra đã thực hiện

Toàn bộ **14 tệp PHP** trong bản nâng cấp vượt qua `php -l` trên PHP 8.3.6. JavaScript `public_html/assets/app.js` cũng vượt qua `node --check`. Đây là kiểm tra cú pháp và cấu trúc tĩnh; cần smoke test thêm trên cPanel/MySQL thật.

## Các bước triển khai

Upload/giải nén bản ZIP sao cho `app`, `storage` và `public_html` nằm cùng cấp. Sao lưu database cũ, kiểm tra quyền MySQL, mở website một lần để migration chạy, vào admin nhập thông tin ngân hàng, rồi thử nạp 10 coin bằng tài khoản test. Sau khi kiểm tra xong, đổi secret/credential mặc định nếu chưa đổi và xóa hoặc đổi tên `public_html/install.php`.
