first commit

This commit is contained in:
2026-03-26 09:28:14 +07:00
commit fa46a144d8
20180 changed files with 2692766 additions and 0 deletions
+72
View File
@@ -0,0 +1,72 @@
<?php
use App\Models\User;
use App\Models\Role;
if (!function_exists('constructMenuLeft')) {
function constructMenuLeft($type, $user_id = '')
{
$result_data = [];
if ($type == 'backend_menu') {
$data = User::leftJoin('user_roles as user_role', 'users.id', '=', 'user_role.user_id')
->leftJoin('roles as role', 'user_role.role_id', '=', 'role.id')
->where('users.id', $user_id)
->where('role.is_menu_backend', 1)
->where('role_status', 1)
->select('role.*')
->orderBy('role.role_order', 'asc')->orderBy('role.role_name', 'asc')->get();
foreach ($data as $item) {
$result_data[] = Array(
'route' => $item['role_route'],
'menu_name' => $item['role_name'],
'icon' => $item['role_icon']
);
}
return $result_data;
} else if ($type == 'frontend_menu') {
$data = Role::where('is_menu_frontend', 1)
->where('role_status', 1)
->orderBy('role_order', 'asc')->orderBy('role_name', 'asc')->get();
foreach ($data as $item) {
$result_data[] = Array(
'route' => $item['role_route'],
'role_div_id' => $item['role_div_id'],
'menu_name' => $item['role_name'],
'role_param' => $item['role_param'],
'icon' => $item['icon']
);
}
return $result_data;
}
}
}
if (!function_exists('formatStringToUrl')) {
function formatStringToUrl($str)
{
$unicode = array(
'a'=>'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ',
'd'=>'đ',
'e'=>'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ',
'i'=>'í|ì|ỉ|ĩ|ị',
'o'=>'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ',
'u'=>'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự',
'y'=>'ý|ỳ|ỷ|ỹ|ỵ',
'A'=>'Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ',
'D'=>'Đ',
'E'=>'É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ',
'I'=>'Í|Ì|Ỉ|Ĩ|Ị',
'O'=>'Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ',
'U'=>'Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự',
'Y'=>'Ý|Ỳ|Ỷ|Ỹ|Ỵ',
);
foreach($unicode as $nonUnicode=>$uni){
$str = preg_replace("/($uni)/i", $nonUnicode, $str);
}
$str = str_replace(' ','_',$str);
$str = str_replace(',','',$str);
return trim(strtolower($str));
}
}
@@ -0,0 +1,49 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use Auth;
use Session;
class BackendController extends Controller
{
public function login () {
return view('backend.login');
}
public function loginAdmin (Request $request) {
$request->validate([
'email'=>'required',
'password' => 'required'
], [
'email.required' => 'Nhập tên đăng nhập',
'password.required' => 'Nhập mật khẩu'
]);
$login = [
'email' => $request->email,
'password' => $request->password,
'status' => 1
];
if (Auth::attempt($login)) {
session_start();
$_SESSION['IsAuthorized'] = true;
return redirect()->route('admin/account')->withCookie(cookie()->forever('allowCkfinder', "1"));;
} else {
return redirect()->back()->with('error', 'Email hoặc Password không chính xác');
}
}
public function account () {
$title = 'Thông tin tài khoản';
$data = User::find(Auth::user()->id);
return view('backend.user.account')->with('data', $data)->with('title', $title);
}
public function logout () {
Auth::logout();
return redirect('/wp-admin');
}
}
+8
View File
@@ -0,0 +1,8 @@
<?php
namespace App\Http\Controllers;
abstract class Controller
{
//
}
+46
View File
@@ -0,0 +1,46 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Auth;
use App\Models\User;
class GameController extends Controller
{
public function luckyWheel()
{
$game_data = [
['id' => '1', 'label' => 'Giải 1'],
['id' => '2', 'label' => 'Giải 2'],
['id' => '3', 'label' => 'Giải 3'],
['id' => '4', 'label' => 'Giải 4'],
['id' => '5', 'label' => 'Giải 5'],
['id' => '6', 'label' => 'Giải 6']
];
if (Auth::check()) {
if (Auth::user()->prize != '') {
$game_data_user = json_decode(Auth::user()->prize);
$id = 1;
$game_data = [];
foreach ($game_data_user as $game_data_item) {
$game_data[] = [
'id' => $id,
'label' => $game_data_item
];
$id++;
}
}
}
return view('frontend.game.luckywheel')->with('game_data', $game_data);
}
public function updatePrize(Request $request)
{
$user_obj = User::find(Auth::user()->id);
$user_obj->prize = json_encode($request->prizes);
$user_obj->save();
return response()->json(['success' => 'Thành công']);
}
}
+204
View File
@@ -0,0 +1,204 @@
<?php
namespace App\Http\Controllers;
use App\Models\PrizeUser;
use Illuminate\Http\Request;
use App\Models\Prize;
use App\Models\User;
use App\Models\Parameter;
use Auth;
use Validator;
use Redirect;
class IndexController extends Controller
{
public function game() {
$prize_obj = Prize::leftJoin('prize_users as prizeuser', 'prizes.id', '=', 'prizeuser.prize_id')
->where('prize_status', 1)
->selectRaw('prizes.id, prize_name, prize_order, prize_number, count(prizeuser.id) as count_user, prize_image')
->groupBy('prizes.id', 'prize_name', 'prize_order', 'prize_number', 'prize_image')
->orderBy('prize_order', 'asc')->get();
$prize_arr = [];
$user_id = '';
if (Auth::check()) {
$user_id = Auth::user()->id;
}
$lasted_prize = PrizeUser::where('user_id', $user_id)->latest()->first();
$lasted_prize_id = '';
$lasted_prize_name = '';
if ($lasted_prize != null) {
$lasted_prize_id = $lasted_prize->prize_id;
}
foreach ($prize_obj as $prize_item) {
if ($prize_item->count_user < $prize_item->prize_number) {
$prize_arr[] = Array(
'id' => $prize_item->id,
'image' => 'public/images/' . $prize_item->prize_image,
'label' => "Giải " . $prize_item->prize_order,
'detail' => $prize_item->prize_name
);
}
if ($lasted_prize_id == $prize_item->id) {
$lasted_prize_name = $prize_item->prize_name;
}
}
$is_login = Auth::check();
$spined = 0;
if ($is_login) {
$spined = Auth::user()->spined;
}
// lay tham so he thong
$parameter_data = [];
$parameter_obj = Parameter::whereRaw('parameter_key in ("logo_image", "banner_image")')->get();
foreach ($parameter_obj as $parameter_item) {
$parameter_data[$parameter_item->parameter_key] = $parameter_item->parameter_value;
}
return view('frontend.index')->with('game_data', $prize_arr)
->with('is_login', $is_login)->with('spined', $spined)
->with('lasted_prize_name', $lasted_prize_name)
->with('parameter_data', $parameter_data);
}
public function login () {
if (Auth::check()) {
// lấy thông tin của lịch sử nhận giải
$history_data = PrizeUser::leftJoin('prizes as prize', 'prize_users.prize_id', '=', 'prize.id')
->where('prize_users.user_id', Auth::user()->id)
->select('prize.prize_name', 'prize_users.created_at')
->orderBy('created_at', 'desc')->get();
// nếu đã đăng nhập thì về trang chi tiết tài khoản
return view('frontend.customer.account')->with('history_data', $history_data);
} else {
return view('frontend.customer.account');
}
}
public function updatePrizeUser (Request $request) {
$request_data = [
'user_id' => Auth::user()->id,
'prize_id' => $request->prize_id
];
PrizeUser::create($request_data);
$user_obj = User::find(Auth::user()->id);
$user_obj->spined = 1;
$user_obj->save();
$prize_obj = Prize::find($request->prize_id);
return view('frontend.game.luckywheel_prize')->with('prize_obj', $prize_obj)->render();
}
public function updateAccount (Request $request) {
$user_id = '';
if (!Auth::check()) {
return redirect()->back()->with('error', 'Có lỗi xảy ra, vui lòng đăng nhập lại');
}
$validator = Validator::make($request->all(), [
'name' => 'required|max:255',
'phone' => [
'required',
'regex:/^0[0-9]{9}$/',
],
'address' => 'required|max:255',
'known_sis' => 'required|in:0,1',
'job' => 'required|max:255',
'password' => 'nullable|max:10'
], [
'name.required' => 'Nhập tên hiển thị',
'name.max' => 'Tên hiển thị quá dài',
'phone.required' => 'Nhập số điện thoại',
'phone.regex' => 'Số điện thoại không đúng định dạng',
'job.required' => 'Nhập nghề nghiệp',
'job.max' => 'Nghề nghiệp quá dài',
'password.max' => 'Độ dài tối đa 10'
]);
if ($validator->fails()) {
return Redirect::back()->withErrors($validator)->withInput();
}
$user_obj = User::find(Auth::user()->id);
$user_obj->name = mb_strtoupper($request->name, 'UTF-8');
$user_obj->phone = $request->phone;
$user_obj->address = $request->address;
$user_obj->known_sis = $request->known_sis;
$user_obj->job = $request->job;
if ($request->password != '') {
$user_obj->password = bcrypt($request->password);
}
$user_obj->save();
return redirect('game')->with('success', 'Cập nhật tài khoản thành công');
}
public function createAccount (Request $request) {
$validator = Validator::make($request->all(), [
'name' => 'required|max:255',
'phone' => [
'required',
'regex:/^0[0-9]{9}$/',
],
'address' => 'required|max:255',
'known_sis' => 'required|in:0,1',
'job' => 'required|max:255',
'password' => 'nullable|max:10'
], [
'name.required' => 'Nhập tên hiển thị',
'name.max' => 'Tên hiển thị quá dài',
'phone.required' => 'Nhập số điện thoại',
'phone.regex' => 'Số điện thoại không đúng định dạng',
'address.required' => 'Nhập nơi sinh sống',
'address.max' => 'Nơi sinh sống quá dài',
'known_sis.required' => 'Chọn Có/Không cho câu hỏi về SIS',
'known_sis.in' => 'Giá trị không hợp lệ cho câu hỏi về SIS',
'job.required' => 'Nhập nghề nghiệp',
'job.max' => 'Nghề nghiệp quá dài',
'password.max' => 'Độ dài tối đa 10'
]);
if ($validator->fails()) {
return Redirect::back()->withErrors($validator)->withInput();
}
$user_exist = User::where('phone', $request->phone)->first();
if ($user_exist != null) {
$user_exist->name = mb_strtoupper($request->name, 'UTF-8');
$user_exist->address = $request->address;
$user_exist->known_sis = $request->known_sis;
$user_exist->job = $request->job;
$user_exist->save();
Auth::loginUsingId($user_exist->id);
session()->regenerate();
return redirect('game')->with('success', 'Đăng nhập thành công');
}
$request_data = [
'name' => mb_strtoupper($request->name, 'UTF-8'),
'phone' => $request->phone,
'address' => $request->address,
'known_sis' => $request->known_sis,
'job' => $request->job,
'email' => $request->phone,
'password' => bcrypt('dq123'),
'status' => 1
];
$user_obj = User::create($request_data);
Auth::loginUsingId($user_obj->id);
session()->regenerate();
return redirect('game')->with('success', 'Đăng nhập thành công');
}
public function logout () {
Auth::logout();
return redirect()->back();
}
public function register () {
if (Auth::check()) {
// nếu đã đăng nhập thì về trang chi tiết tài khoản
return view('frontend.customer.account');
} else {
return view('frontend.customer.register');
}
}
public function getGameRule () {
$data = Parameter::where('parameter_key', 'game_rule')->first();
return view('frontend.game.rule_popup')->with('data', $data)->render();
}
}
@@ -0,0 +1,51 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Parameter;
use Auth;
use Session;
use Illuminate\Support\Facades\File;
class ParameterController extends Controller
{
public function index() {
$data = Parameter::orderBy('parameter_order', 'asc')->get();
$title = 'Cấu hình hệ thống';
return view('backend.parameter.index')->with('data', $data)->with('title', $title);
}
public function update (Request $request) {
foreach ($request->except('_token') as $key => $value) {
$object = Parameter::where('parameter_key', $key)->first();
if ($object != '') {
if ($key == 'logo_image' || $key == 'banner_image') {
$this->updateParameterImage($key, $request, $object);
} else {
$object->parameter_value = $value;
$object->save();
}
}
}
return redirect()->back()->with('success', 'Cập nhật thành công');
}
public function updateParameterImage ($input_name, $request, $object) {
if($request->file($input_name)) {
$imageName = $input_name . '.' . $request->file($input_name)->extension();
$counter = 0;
// Vòng lặp kiểm tra tên file và thêm số nếu trùng
while (File::exists(public_path('images') . '/parameter/' . $imageName)) {
$counter++;
$imageName = $input_name . '(' . $counter . ').' . $request->file($input_name)->extension();
}
$request->file($input_name)->move(public_path('images/parameter'), $imageName);
$previous_img_path = $object->parameter_value;
$object->parameter_value = 'parameter/' . $imageName;
$object->save();
if($previous_img_path != '' && File::exists(public_path('images') . '/' . $previous_img_path)) {
File::delete(public_path('images') . '/' . $previous_img_path);
}
}
}
}
+159
View File
@@ -0,0 +1,159 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Prize;
use App\Models\PrizeUser;
use DateTime;
use Auth;
use File;
class PrizeController extends Controller
{
public function index() {
$title = "Danh sách giải thưởng";
$route_name_update = 'admin/prize/update';
$data = Prize::leftJoin('prize_users as user', 'prizes.id', '=', 'user.prize_id')
->groupBy('prizes.id', 'prizes.prize_name', 'prizes.prize_image', 'prizes.prize_content', 'prizes.prize_status',
'prizes.prize_number', 'prizes.prize_order')
->selectRaw('prizes.id, prizes.prize_name, prizes.prize_image, prizes.prize_content, prizes.prize_status,
prizes.prize_number, prizes.prize_order, count(user.id) as prize_count')
->orderBy('prize_status', 'desc')->orderBy('prize_order', 'asc')->orderBy('prize_name')->get();
return view('backend.prize.index')->with('title', $title)
->with('route_name_update', $route_name_update)
->with('data', $data);
}
public function getPrize(Request $request) {
$title = 'Cập nhật giải thưởng';
if ($request->id == 0) {
$title = 'Thêm mới giải thưởng';
}
$data = Prize::find($request->id);
return view('backend.prize.detail')
->with('data', $data)
->with('title', $title);
}
public function updatePrize (Request $request) {
$request->validate([
'prize_name'=>'required|max:255',
'prize_image'=>'mimes:jpg,png,jpeg,webp,jfif|max:2048|nullable',
'prize_status' => 'required|numeric',
'prize_number' => 'nullable|numeric',
'prize_order' => 'required|numeric'
], [
'prize_name.required' => 'Nhập tên giải thưởng',
'prize_name.max' => 'Tên giải thưởng không được quá 255 kí tự',
'prize_image.mimes' => 'Định dạng file không đúng',
'prize_image.max' => 'File upload quá lớn',
'prize_status.required' => 'Vui lòng chọn trạng thái',
'prize_status.numeric' => 'Trạng thái không đúng định dạng',
'prize_number.numeric' => 'Số lượng giải phải là kiểu số',
'prize_order.required' => 'Nhập số thứ tự giải',
'prize_order.numeric' => 'Số thứ tự giải phải là số'
]);
if ($request->id == 0){
// thêm mới
$request_data = $request->except(['id', 'prize_image']);
$request_data['user_id'] = Auth::user()->id;
$prize_obj = Prize::create($request_data);
$id = $prize_obj->id;
$this->updatePrizeImage($request, $prize_obj);
return redirect()->route('admin/prize/update', array('id' => $id))->with('success', 'Thêm mới thành công');
} else {
// cap nhat
$id = $request->id;
$prize_obj = Prize::find($id);
$prize_obj->prize_name = $request->prize_name;
$prize_obj->prize_content = $request->prize_content;
$prize_obj->prize_status = $request->prize_status;
$prize_obj->prize_number = $request->prize_number;
$prize_obj->prize_order = $request->prize_order;
$prize_obj->save();
$this->updatePrizeImage($request, $prize_obj);
return redirect()->back()->with('success', 'Cập nhật thành công');
}
}
public function updatePrizeImage ($request, $prize_obj) {
if($request->prize_image) {
$imageName = time(). '_' . Auth::user()->id . '.'.$request->prize_image->extension();
$request->prize_image->move(public_path('images/prize'), $imageName);
$previous_img_path = $prize_obj->prize_image;
$prize_obj->prize_image = 'prize/' . $imageName;
$prize_obj->save();
if($previous_img_path != '' && File::exists(public_path('images') . '/' . $previous_img_path)) {
File::delete(public_path('images') . '/' . $previous_img_path);
}
}
}
public function deletePrize ($id) {
$prize_obj = Prize::find($id);
$previous_image_path = $prize_obj->prize_image;
if ($prize_obj->delete()) {
if($previous_image_path != '' && File::exists(public_path('images') . '/' . $previous_image_path)) {
File::delete(public_path('images') . '/' . $previous_image_path);
}
} else {
return redirect()->back()->with('error', 'Xóa giải thưởng thất bại');
}
return redirect()->back()->with('success', 'Xóa giải thưởng thành công');
}
public function prizeuser (Request $request) {
$title = "Danh sách người trúng giải";
$data_obj = PrizeUser::leftJoin('prizes as prize', 'prize_users.prize_id', '=', 'prize.id')
->leftJoin('users as user', 'prize_users.user_id', '=', 'user.id')
->select('user.id', 'user.name', 'user.phone', 'user.job', 'user.address', 'user.known_sis', 'prize.prize_name', 'prize_users.created_at');
$fromdate = $request->tungay ?? date('d/m/Y', strtotime('-30 days'));
$todate = $request->denngay ?? date('d/m/Y');
if ($fromdate != '') {
$fromdate_arr = explode('/', $fromdate);
$from_date = DateTime::createFromFormat('Y-m-d', $fromdate_arr[2] . '-' . $fromdate_arr[1] . '-' . $fromdate_arr[0])->format('Y-m-d');
$data_obj = $data_obj->where('prize_users.created_at', '>=', $from_date);
}
if ($todate != '') {
$todate_arr = explode('/', $todate);
$to_date = DateTime::createFromFormat('Y-m-d', $todate_arr[2] . '-' . $todate_arr[1] . '-' . $todate_arr[0])->format('Y-m-d');
$data_obj = $data_obj->where('prize_users.created_at', '<=', $to_date . ' 23:59:00');
}
$data = $data_obj->orderBy('created_at', 'desc')->get();
return view('backend.prizeuser.index')
->with('title', $title)->with('data', $data)
->with('fromdate', $fromdate)->with('todate', $todate);
}
public function exportPrizeUser (Request $request) {
$data_obj = PrizeUser::leftJoin('prizes as prize', 'prize_users.prize_id', '=', 'prize.id')
->leftJoin('users as user', 'prize_users.user_id', '=', 'user.id')
->select('user.id', 'user.name', 'user.phone', 'user.job', 'user.address', 'user.known_sis', 'prize.prize_name', 'prize_users.created_at');
$fromdate = $request->tungay;
$todate = $request->denngay;
if ($fromdate != '') {
$fromdate_arr = explode('/', $fromdate);
$from_date = DateTime::createFromFormat('Y-m-d', $fromdate_arr[2] . '-' . $fromdate_arr[1] . '-' . $fromdate_arr[0])->format('Y-m-d');
$data_obj = $data_obj->where('prize_users.created_at', '>=', $from_date);
}
if ($todate != '') {
$todate_arr = explode('/', $todate);
$to_date = DateTime::createFromFormat('Y-m-d', $todate_arr[2] . '-' . $todate_arr[1] . '-' . $todate_arr[0])->format('Y-m-d');
$data_obj = $data_obj->where('prize_users.created_at', '<=', $to_date);
}
$data = $data_obj->orderBy('created_at', 'desc')->get();
return view('backend.prizeuser.excel')->with('data', $data);
}
}
+140
View File
@@ -0,0 +1,140 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Role;
use App\Models\UserRole;
use Auth;
class UserController extends Controller
{
public function users (Request $request) {
$data_obj = User::where('status', '!=', '');
if ($request->type != '') {
$data_obj = $data_obj->where('account_type', $request->type);
}
$data = $data_obj->orderBy('name')->get();
$route_name_update = 'admin/users/update';
$title = 'Danh mục người dùng';
return view('backend.user.index')->with('data', $data)
->with('title', $title)
->with('route_name_update', $route_name_update)
->with('request_type', $request->type);
}
public function getUser(Request $request) {
$title = 'Cập nhật người dùng';
if ($request->id == 0) {
$title = 'Thêm mới người dùng';
}
$data = User::find($request->id);
$role_data = Role::where('role_status', 1)
->orderBy('role_order', 'asc')
->orderBy('role_name', 'asc')->get();
$user_role_data = UserRole::where('user_id', $request->id)->get();
$user_role = [];
foreach ($user_role_data as $user_role_item) {
$user_role[] = $user_role_item['role_id'];
}
return view('backend.user.detail')
->with('data', $data)
->with('title', $title)
->with('role_data', $role_data)
->with('user_role', $user_role);
}
public function updateUser(Request $request) {
if ($request->type == 'account') {
// cap nhat tai khoan ca nhan
$request->validate([
'name'=>'required|max:50',
'email'=>'required|unique:users,email,' . $request->id . ',id'
], [
'name.required' => 'Nhập tên hiển thị',
'name.max' => 'Tên hiển thị vượt quá ký tự cho phép',
'email.required' => 'Nhập tên đăng nhập',
'email.unique' => 'Tên đăng nhập bị trùng'
]);
} else {
$request->validate([
'name'=>'required|max:50',
'email'=>'required|unique:users,email,' . $request->id . ',id',
'status' => 'required'
], [
'name.required' => 'Nhập tên hiển thị',
'name.max' => 'Tên hiển thị vượt quá ký tự cho phép',
'email.required' => 'Nhập tên đăng nhập',
'email.unique' => 'Tên đăng nhập bị trùng',
'status.required' => 'Nhập trạng thái'
]);
}
if ($request->id == 0){
$request_data = $request->except('id');
$request_data['name'] = $request->name;
$request_data['email'] = $request->email;
if ($request->password != '') {
$request_data['password'] = bcrypt($request->password);
} else {
$request_data['password'] = bcrypt('123');
}
$request_data['status'] = $request->status;
$id = User::create($request_data)->id;
$role_obj = Role::where('role_code', 'admin_account')->first();
if ($role_obj != null) {
$role_id = $role_obj->id;
UserRole::create(Array(
'user_id' => $id,
'role_id' => $role_id
));
}
return redirect()->route('admin/users/update', array('id' => $id));
} else {
// cap nhat
$id = $request->id;
$user_obj = User::find($id);
$user_obj->name = $request->name;
if ($request->status != '') {
$user_obj->status = $request->status;
}
if ($request->password != '') {
$user_obj->password = bcrypt($request->password);
}
$user_obj->save();
if (!empty($request->user_role)) {
UserRole::where('user_id', $id)->delete();
foreach ($request->user_role as $role_id) {
UserRole::create(Array(
'user_id' => $id,
'role_id' => $role_id
));
}
}
return redirect()->back()->with('success', 'Cập nhật thành công ');
}
}
public function updateSpined (Request $request) {
$user_id = $request->user_id;
$user_obj = User::find($user_id);
if ($user_obj != null) {
$user_obj->spined = 0;
$user_obj->save();
}
return response()->json(['success' => 'Thành công']);
}
public function checkspined () {
if (!Auth::check()) {
return response()->json(['error' => 'Chưa đăng nhập', 'message' => 'Người dùng phải đăng nhập trước khi thực hiện']);
}
$user_obj = User::find(Auth::user()->id);
if ($user_obj == null) {
return response()->json(['error' => 'Không tồn tại tài khoản', 'message' => 'Không tìm thấy tài khoản']);
}
return response()->json(['success' => 'Lấy dữ liệu thành công', 'spined' => $user_obj->spined]);
}
}
+35
View File
@@ -0,0 +1,35 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Auth;
use Illuminate\Support\Facades\Route;
class UserRole
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (Auth::check()) {
$menu_data = constructMenuLeft('backend_menu', Auth::user()->id);
$route_permission = [];
foreach ($menu_data as $menu_item) {
$route_permission[] = $menu_item['route'];
}
$route = Route::getRoutes()->match($request);
$currentroute = $route->getName();
if (!in_array($currentroute, $route_permission)) {
return redirect('admin');
}
return $next($request);
}
return redirect('admin');
}
}
+57
View File
@@ -0,0 +1,57 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
use Illuminate\Mail\Mailables\Address;
class MailNotify extends Mailable
{
use Queueable, SerializesModels;
public $data;
/**
* Create a new message instance.
*/
public function __construct( $data )
{
$this->data = $data;
}
/**
* Get the message envelope.
*/
public function envelope(): Envelope
{
return new Envelope(
subject: 'Thông báo - Đăng ký tài khoản thành công',
from: new Address('lgthanh199@mail.com', 'Administrator'),
);
}
/**
* Get the message content definition.
*/
public function content(): Content
{
return new Content(
view: 'frontend.parts.customer_mail',
);
}
/**
* Get the attachments for the message.
*
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
*/
public function attachments(): array
{
return [];
}
}
+16
View File
@@ -0,0 +1,16 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $fillable = [
'id',
'category_code',
'category_name',
'category_status',
'category_default'
];
}
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Contact extends Model
{
protected $fillable = [
'id',
'contact_name',
'contact_email',
'contact_phone',
'contact_content',
'contact_status'
];
}
+16
View File
@@ -0,0 +1,16 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Parameter extends Model
{
protected $fillable = [
'id',
'parameter_key',
'parameter_name',
'parameter_value',
'parameter_order'
];
}
+20
View File
@@ -0,0 +1,20 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = [
'id',
'post_url',
'post_image',
'post_title',
'post_summary',
'post_content',
'post_author',
'post_status',
'post_like'
];
}
+14
View File
@@ -0,0 +1,14 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class PostCategory extends Model
{
protected $fillable = [
'id',
'post_id',
'category_id'
];
}
+16
View File
@@ -0,0 +1,16 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class PostComment extends Model
{
protected $fillable = [
'id',
'post_id',
'post_comment',
'user_name',
'comment_like'
];
}
+19
View File
@@ -0,0 +1,19 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Prize extends Model
{
protected $fillable = [
'id',
'prize_name',
'prize_image',
'prize_content',
'prize_status',
'prize_number',
'prize_order',
'user_id'
];
}
+14
View File
@@ -0,0 +1,14 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class PrizeUser extends Model
{
protected $fillable = [
'id',
'user_id',
'prize_id'
];
}
+22
View File
@@ -0,0 +1,22 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
protected $fillable = [
'id',
'role_code',
'role_name',
'role_route',
'role_order',
'role_status',
'is_menu_backend',
'is_menu_frontend',
'role_param',
'role_div_id',
'role_icon'
];
}
+54
View File
@@ -0,0 +1,54 @@
<?php
namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
/** @use HasFactory<\Database\Factories\UserFactory> */
use HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'name',
'email',
'password',
'status',
'confirmation_string',
'name',
'phone',
'job',
'spined'
];
/**
* The attributes that should be hidden for serialization.
*
* @var list<string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
}
}
+14
View File
@@ -0,0 +1,14 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class UserRole extends Model
{
protected $fillable = [
'id',
'role_id',
'user_id'
];
}
+24
View File
@@ -0,0 +1,24 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
//
}
}
+27
View File
@@ -0,0 +1,27 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HelperServiceProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register()
{
$file = app_path('Helpers/Helper.php');
if (file_exists($file)) {
require_once($file);
}
}
/**
* Bootstrap services.
*/
public function boot(): void
{
//
}
}