Files
think-greaterchiangmai/think-backend.greaterchiangmai.com/app/Http/Controllers/Backend/UserController.php
2025-11-11 14:55:29 +07:00

305 lines
8.7 KiB
PHP

<?php
namespace App\Http\Controllers\Backend;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use App\Http\Models\UserModel;
use DateTime;
use Redirect;
use Validator;
use View;
use Hash;
use File;
use Intervention\Image\Facades\Image;
class UserController extends Controller
{
public function index()
{
$userObj = UserModel::get();
return View::make("backend/user/index")
->with('userView', $userObj);
}
public function add()
{
return View::make("backend/user/add");
}
public function insert(Request $request)
{
// keep data en
$role = $request->input('role');
$first_name = $request->input('first_name');
$last_name = $request->input('last_name');
$email = $request->input('email');
$password = $request->input('password');
$avatar = $request->file('avatar');
// validate
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'first_name' => 'required',
'last_name' => 'required',
'password' => 'required',
'avatar' => 'required|image|mimes:jpeg,png,jpg|max:10240',
]);
if ($validator->fails()) {
return Redirect::to("user")
->withInput()
->with("messageFail", "Fail")
->with("messageDetail", 'Data can not be empty');
}
// check existing email
$e = UserModel::where('email', $email)->count();
if ($e > 0) {
return Redirect::to("user")
->withInput()
->with("messageFail", "Fail")
->with("messageDetail", 'Email already exist');
}
// prepared data
$data = [
'first_name' => $first_name,
'last_name' => $last_name,
'email' => $email,
'password' => Hash::make($password),
'role' => $role,
'created_at' => new DateTime(),
'updated_at' => new DateTime(),
];
// insert to database
$result = UserModel::insertGetId($data);
if ($result > 0) { // insert success then return ID
// Image
if (!empty($avatar)) {
$this->uploadImage($request, $result);
}
return Redirect::to("user")
->with("messageSuccess", "Success")
->with("messageDetail", 'Added success');
} else { // insert fail
return Redirect::to("user")
->withInput()
->with("messageFail", "Fail")
->with("messageDetail", 'Add unsuccessfully');
}
}
public function edit($userId)
{
// get by id
$data = UserModel::where('id', $userId)
->first();
if (is_null($data)) { // not found
return Redirect::to("user")
->withInput()
->with("messageFail", "Fail")
->with("messageDetail", 'Not found data');
}
return View::make('backend/user/edit')
->with('userIdView', $userId)
->with('userView', $data);
}
public function update(Request $request)
{
// keep data en
$role = $request->input('role');
$userId = $request->input('userId');
$active = $request->input('active');
$first_name = $request->input('first_name');
$last_name = $request->input('last_name');
$email = $request->input('email');
$password = $request->input('password');
$avatar = $request->file('avatar');
$imgReq = $avatar ? 'required|image|mimes:jpeg,png,jpg|max:10240' : '';
// validate
$validator = Validator::make($request->all(), [
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required|email',
'avatar' => $imgReq,
]);
if ($validator->fails()) {
return Redirect::to("user")
->withInput()
->with("messageFail", "Fail")
->with("messageDetail", 'Data can not be empty');
}
// check existing email
if (UserModel::where('id', '!=', $userId)
->where('email', '=', $email)->count() > 0) {
return Redirect::to("user")
->withInput()
->with("messageFail", "Fail")
->with("messageDetail", 'Email already exist');
}
if ($password == "") {
$data = [
'active' => $active,
'first_name' => $first_name,
'last_name' => $last_name,
'email' => $email,
'role' => $role,
'updated_at' => new DateTime(),
];
} else {
$data = [
'active' => $active,
'first_name' => $first_name,
'last_name' => $last_name,
'email' => $email,
'role' => $role,
'updated_at' => new DateTime(),
'password' => Hash::make($password)
];
}
UserModel::where('id', $userId)
->update($data);
// Image
if (!empty($avatar)) {
$this->uploadImage($request, $userId);
}
return Redirect::to("user")
->with("messageSuccess", "Success")
->with("messageDetail", 'Updated success');
}
public function delete(Request $request)
{
$userId = $request->input('item_id');
$hasUser = UserModel::where('id', $userId)
->first();
if (!$hasUser) { // not found
return Redirect::to("user")
->withInput()
->with("messageFail", "Fail")
->with("messageDetail", "Not found");
}
// delete user in database
$result = UserModel::where('id', '=', $userId)
->delete();
if ($result) { // return true, success
// delete folder
File::deleteDirectory('uploads/user/' . $userId);
return response()->json([
'status' => "Success",
'message' => "Delete successfully"
]);
} else { // return false, fail
return response()->json([
'status' => "Fail",
'message' => "Delete unsuccessfully"
]);
}
}
public function uploadImage($request, $result)
{
$localPath = '/uploads/user/' . $result;
$image = $request->file('avatar');
$imgName = uniqid() . time() . '.' . $image->extension();
// destination
$destinationUrl = url($localPath);
$destinationPath = public_path($localPath);
// create folder
if (File::isDirectory($destinationPath . '/original/') == false) {
File::makeDirectory($destinationPath . '/original/', 0777, true);
}
if (File::isDirectory($destinationPath . '/thumbnail/') == false) {
File::makeDirectory($destinationPath . '/thumbnail/', 0777, true);
}
$img = Image::make($image->path());
// remove old
$userObj = UserModel::where('id', $result)
->first();
if ($userObj != null) {
$oldPathO = $destinationPath . '/original/' . $userObj->image_name;
$oldPathT = $destinationPath . '/thumbnail/' . $userObj->image_name;
if (File::exists($oldPathO)) {
File::delete($oldPathO);
}
if (File::exists($oldPathT)) {
File::delete($oldPathT);
}
}
// original
$img->save($destinationPath . '/original/' . $imgName);
// thumbnail
$img->resize(300, 300, function ($constraint) {
$constraint->aspectRatio();
})->save($destinationPath . '/thumbnail/' . $imgName);
// update
$dataImage = [
'image_url' => $destinationUrl,
'image_name' => $imgName
];
UserModel::where('id', $result)
->update($dataImage);
}
public function returnJsonFieldEmpty($fieldName)
{
return response()->json([
'status' => 'Fail',
'message' => $fieldName . ' ' . "can not be empty"
]);
}
public function returnJsonErrorMsg($message)
{
return response()->json([
'status' => 'Fail',
'message' => $message
]);
}
public function returnJsonSuccessMsg($message)
{
return response()->json([
'status' => 'Success',
'message' => $message
]);
}
}