1168 lines
46 KiB
PHP
1168 lines
46 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Facades\Route;
|
|
use Illuminate\Support\Str;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
use App\Imports\SiswaImport;
|
|
|
|
use App\Models\User;
|
|
use App\Models\Konselor;
|
|
use App\Models\Siswa;
|
|
use App\Models\Roles;
|
|
use App\Models\Permission;
|
|
|
|
use Modules\Seller\Entities\AccountModel;
|
|
use App\Enums\GlobalEnum;
|
|
use App\Models\LogActivites;
|
|
use App\Models\Seller;
|
|
|
|
use DataTables;
|
|
use Carbon\Carbon;
|
|
|
|
class UsersController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
if ($request->ajax()) {
|
|
$data = User::select('*')->whereIn('level', [1,2])->orderBy('created_at', 'desc');
|
|
// Convert the Eloquent Collection to a regular PHP array
|
|
$data->each(function ($item, $key) {
|
|
$item->rowIndex = $key + 1;
|
|
});
|
|
|
|
return Datatables::eloquent($data)
|
|
->addIndexColumn()
|
|
->addColumn('title-post', function($row) {
|
|
return '
|
|
<div class="d-flex align-items-center">
|
|
<div class="symbol symbol-25px symbol-circle">
|
|
<div class="symbol-label" style="background-image:url(' . gravatar_team($row->email) . ')"></div>
|
|
</div>
|
|
<div class="ms-3"><span>' . $row->name . '</span></div>
|
|
</div>
|
|
';
|
|
})
|
|
->addColumn('action', function($row){
|
|
$view = route('users.show', ['id' => $row->id]);
|
|
$edit = route('users.edit', ['id' => $row->id]);
|
|
$delete = route('users.delete', ['id' => $row->id]);
|
|
$btn = '
|
|
<a href="' . $view . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-eye"></i></a>
|
|
<a href="' . $edit . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-pencil"></i></a>
|
|
<a data-url="' . $delete . '" href="#" class="btn btn-light btn-sm deleteContent px-4"><i class="ki-outline ki-trash"></i></a>
|
|
';
|
|
return $btn;
|
|
})
|
|
->addColumn('status', function($row){
|
|
if ($row->status == GlobalEnum::isActive) {
|
|
return '<span class="mb-1 badge font-medium badge-light-success py-3 px-4 fs-7">Active</span>';
|
|
} elseif($row->status == GlobalEnum::isInactive) {
|
|
return '<span class="mb-1 badge font-medium badge-light-primary py-3 px-4 fs-7">Non Active</span>';
|
|
} elseif($row->status == GlobalEnum::isDeactive) {
|
|
return '<span class="mb-1 badge font-medium badge-light-danger py-3 px-4 fs-7">Deactivated</span>';
|
|
} else {
|
|
return '<span class="mb-1 badge font-medium badge-light-warning py-3 px-4 fs-7">Not Verified</span>';
|
|
}
|
|
})
|
|
->rawColumns(['title-post','action','status'])
|
|
->filter(function ($query) use ($request) {
|
|
if ($request->has('search')) {
|
|
$search = $request->get('search')['value'];
|
|
|
|
$filterCategory = explode('|', $search);
|
|
if($filterCategory[0] === 'status') {
|
|
if(!empty($filterCategory[1])) {
|
|
$filterCode = $filterCategory[1]-1;
|
|
if ($filterCode !== 0) {
|
|
$query->where('status', '=', $filterCode);
|
|
}
|
|
} else {
|
|
$query->get();
|
|
}
|
|
} elseif($filterCategory[0] === 'user') {
|
|
if(!empty($filterCategory[1])) {
|
|
$query->where('name', 'LIKE', "%$filterCategory[1]%");
|
|
} else {
|
|
$query->get();
|
|
}
|
|
}
|
|
}
|
|
})
|
|
->make(true);
|
|
}
|
|
|
|
$data = [
|
|
'subtitle' => 'Users',
|
|
'button' => true,
|
|
'module' => [
|
|
'url' => route('users.create'),
|
|
'name' => 'Create New'
|
|
]
|
|
];
|
|
|
|
return view('admin.app.users.index', compact('data'));
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
$data = [
|
|
'subtitle' => 'Create New'
|
|
];
|
|
|
|
$roles = Roles::whereIn('id', [1,2])->get();
|
|
return view('admin.app.users.add', compact('data', 'roles'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => 'required',
|
|
'email' => 'required|email',
|
|
'password' => 'required',
|
|
'status' => 'required',
|
|
'level' => 'required',
|
|
'image' => 'image|mimes:jpg,jpeg,png,svg|max:7048',
|
|
], [
|
|
'image.mimes' => 'Tipe file yang diunggah harus jpg, jpeg, png, atau svg.',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
$input = $request->all();
|
|
$foto_namaBaru = null;
|
|
|
|
if ($request->hasFile('image') && $request->file('image')->isValid()) {
|
|
$foto_namaBaru = $request->file('image')->store('public/images');
|
|
}
|
|
|
|
$post = new User([
|
|
'name' => $input['name'],
|
|
'username' => Str::before($input['email'], '@') . rand(100, 999),
|
|
'email' => $input['email'],
|
|
'password' => bcrypt($input['password']),
|
|
'status' => $input['status'],
|
|
'level' => $input['level'],
|
|
'thumbnail' => empty($foto_namaBaru) ? '' : $foto_namaBaru,
|
|
]);
|
|
|
|
$check = User::where('email', $input['email'])->count();
|
|
// $insertLog = LogActivites::default([
|
|
// 'causedBy' => user()->id,
|
|
// 'logType' => GlobalEnum::LogOfGeneral,
|
|
// 'withContent' => [
|
|
// 'status' => 'add',
|
|
// 'text' => 'Insert a new user with email ' . $input['email'],
|
|
// ]
|
|
// ]);
|
|
if ($check == 0) {
|
|
if ($post->save()) {
|
|
return redirect()->route('users')->with('swal', swal_alert('success', 'You have successfully added data'));
|
|
} else {
|
|
return redirect()->route('users')->with('swal', swal_alert('error', 'An error occurred in the query'));
|
|
}
|
|
} else {
|
|
return redirect()->route('users')->with('swal', swal_alert('error', 'Email already exists'));
|
|
}
|
|
}
|
|
|
|
public function show($id)
|
|
{
|
|
$data = [
|
|
'subtitle' => User::where('id', $id)->first()->email,
|
|
'records' => User::where('id', $id)->first(),
|
|
'logs' => User::where('id', $id)->first()
|
|
];
|
|
return view('admin.app.users.detail', compact('data'));
|
|
}
|
|
|
|
public function edit($id)
|
|
{
|
|
$data = [
|
|
'subtitle' => User::where('id', $id)->first()->email,
|
|
'records' => User::where('id', $id)->first()
|
|
];
|
|
|
|
$roles = Roles::whereIn('id', [1,2])->get();
|
|
return view('admin.app.users.edit', compact('data', 'id', 'roles'));
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => 'required',
|
|
'email' => 'required|email',
|
|
'level' => 'required',
|
|
'status' => 'required',
|
|
'image' => 'image|mimes:jpg,jpeg,png,svg|max:7048',
|
|
], [
|
|
'image.mimes' => 'Tipe file yang diunggah harus jpg, jpeg, png, atau svg.',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
// Cari data berdasarkan ID
|
|
$user = User::find($id);
|
|
|
|
// Jika data ditemukan
|
|
if ($user) {
|
|
// Jika ada file baru yang diunggah, hapus file thumbnail yang lama
|
|
if ($request->hasFile('image') && $request->file('image')->isValid()) {
|
|
if ($user->thumbnail) {
|
|
Storage::delete($user->thumbnail);
|
|
}
|
|
}
|
|
|
|
// Update data dengan data baru dari form yang telah dibersihkan
|
|
$user->name = $request->input('name');
|
|
$user->email = $request->input('email');
|
|
!empty($request->input('password')) ? $user->password = bcrypt($request->input('password')) : $user->password;
|
|
$user->level = $request->input('level');
|
|
$user->status = $request->input('status');
|
|
$user->username = Str::before($user->email, '@') . rand(100, 999);
|
|
|
|
// Jika ada file baru yang diunggah, simpan file baru di storage
|
|
if ($request->hasFile('image') && $request->file('image')->isValid()) {
|
|
$foto_namaBaru = $request->file('image')->store('public/images');
|
|
$user->thumbnail = $foto_namaBaru;
|
|
}
|
|
|
|
// Simpan perubahan pada database
|
|
$user->save();
|
|
return redirect()->route('users')->with('swal', swal_alert('success', 'You are successfully modify data'));
|
|
} else {
|
|
return redirect()->route('users')->with('swal', swal_alert('error', 'Unexpected error'));
|
|
}
|
|
}
|
|
|
|
public function destroy($id)
|
|
{
|
|
$user = User::find($id);
|
|
// Jika data ditemukan
|
|
if ($user) {
|
|
// Cek apakah ada file di kolom "is_thumbnail"
|
|
if ($user->thumbnail) {
|
|
// Hapus file thumbnail dari storage
|
|
Storage::delete($user->is_thumbnail);
|
|
}
|
|
// Hapus data dari database
|
|
$user->delete();
|
|
return redirect()->route('users')->with('swal', swal_alert('success', 'You are successfully deleted records'));
|
|
} else {
|
|
return redirect()->route('users')->with('swal', swal_alert('error', 'Data not found'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Retrieves the roles from the database and returns them as a DataTables response.
|
|
*
|
|
* @param Request $request The HTTP request object.
|
|
* @throws Some_Exception_Class description of exception
|
|
* @return Some_Return_Value The DataTables response with roles data.
|
|
*/
|
|
public function roles(Request $request)
|
|
{
|
|
if ($request->ajax()) {
|
|
$data = Roles::select('*');
|
|
// Convert the Eloquent Collection to a regular PHP array
|
|
$data->each(function ($item, $key) {
|
|
$item->rowIndex = $key + 1;
|
|
});
|
|
|
|
return Datatables::of($data)
|
|
->addIndexColumn()
|
|
->addColumn('action', function($row){
|
|
$edit = route('roles.edit', ['id' => $row->id]);
|
|
$btn = '
|
|
<a href="' . $edit . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-pencil"></i></a>
|
|
';
|
|
return $btn;
|
|
})
|
|
->rawColumns(['action'])
|
|
->make(true);
|
|
}
|
|
|
|
$data = [
|
|
'subtitle' => 'Roles',
|
|
];
|
|
|
|
return view('admin.app.users.roles.index', compact('data'));
|
|
}
|
|
|
|
public function editRoles($id)
|
|
{
|
|
$data = [
|
|
'subtitle' => Roles::where('id', $id)->first()->name,
|
|
'records' => Roles::where('id', $id)->first()
|
|
];
|
|
return view('admin.app.users.roles.edit', compact('data', 'id'));
|
|
}
|
|
|
|
public function updateRoles(Request $request, $id)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => 'required',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
// Cari data berdasarkan ID
|
|
$user = Roles::find($id);
|
|
|
|
// Jika data ditemukan
|
|
if ($user) {
|
|
// Update data dengan data baru dari form yang telah dibersihkan
|
|
$user->name = $request->input('name');
|
|
// Simpan perubahan pada database
|
|
$user->save();
|
|
return redirect()->route('roles')->with('swal', swal_alert('success', 'You are successfully modify data'));
|
|
} else {
|
|
return redirect()->route('roles')->with('swal', swal_alert('error', 'Unexpected error'));
|
|
}
|
|
}
|
|
|
|
public function permission(Request $request)
|
|
{
|
|
if ($request->ajax()) {
|
|
$data = Permission::whereNull('idParent');
|
|
// Convert the Eloquent Collection to a regular PHP array
|
|
$data->each(function ($item, $key) {
|
|
$item->rowIndex = $key + 1;
|
|
});
|
|
|
|
return Datatables::of($data)
|
|
->addIndexColumn()
|
|
->addColumn('updated_at', function($row) {
|
|
return $row->updated_at;
|
|
})
|
|
->addColumn('action', function($row){
|
|
$edit = route('permission.edit', ['id' => $row->id]);
|
|
$delete = route('permission.delete', ['id' => $row->id]);
|
|
$detail = route('permission.detail', ['slug' => $row->slug]);
|
|
$btn = '
|
|
<a href="' . $detail . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-eye"></i></a>
|
|
<a href="' . $edit . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-pencil"></i></a>
|
|
<a href="' . $delete . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-trash"></i></a>
|
|
';
|
|
return $btn;
|
|
})
|
|
->rawColumns(['action','updated_at'])
|
|
->make(true);
|
|
}
|
|
|
|
$data = [
|
|
'subtitle' => 'Permission',
|
|
'button' => true,
|
|
'module' => [
|
|
'url' => route('permission.create'),
|
|
'name' => 'Create New'
|
|
]
|
|
];
|
|
|
|
return view('admin.app.users.permission.index', compact('data'));
|
|
}
|
|
|
|
public function createPermission()
|
|
{
|
|
$data = [
|
|
'subtitle' => 'Create Permission',
|
|
];
|
|
$routeInApplication = routesAll();
|
|
|
|
return view('admin.app.users.permission.add', compact('data','routeInApplication'));
|
|
}
|
|
|
|
public function editPermission($id)
|
|
{
|
|
$data = [
|
|
'subtitle' => Permission::where('id', $id)->first()->name,
|
|
'records' => Permission::where('id', $id)->first()
|
|
];
|
|
return view('admin.app.users.permission.edit', compact('data', 'id'));
|
|
}
|
|
|
|
public function storePermission(Request $request)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => 'required'
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
$input = $request->all();
|
|
|
|
$permission = new Permission([
|
|
'slug' => Str::random(10),
|
|
'name' => $input['name']
|
|
]);
|
|
|
|
$check = Permission::where('name', $input['name'])->count();
|
|
if ($check == 0) {
|
|
if ($permission->save()) {
|
|
return redirect()->route('permission')->with('swal', swal_alert('success', 'You have successfully added data'));
|
|
} else {
|
|
return redirect()->route('permission')->with('swal', swal_alert('error', 'An error occurred in the query'));
|
|
}
|
|
} else {
|
|
return redirect()->route('permission')->with('swal', swal_alert('error', 'Guard Name already exists'));
|
|
}
|
|
}
|
|
|
|
public function updatePermission(Request $request, $id)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => 'required',
|
|
'guard_name' => 'required',
|
|
'action' => 'required'
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
// Cari data berdasarkan ID
|
|
$permission = Permission::find($id);
|
|
|
|
// Jika data ditemukan
|
|
if ($permission) {
|
|
$permission->name = $request->input('name');
|
|
$permission->guard_name = $request->input('guard_name');
|
|
$permission->action = $request->input('action');
|
|
|
|
// Simpan perubahan pada database
|
|
$permission->save();
|
|
return redirect()->route('permission')->with('swal', swal_alert('success', 'You are successfully modify data'));
|
|
} else {
|
|
return redirect()->route('permission')->with('swal', swal_alert('error', 'Unexpected error'));
|
|
}
|
|
}
|
|
|
|
public function deletePermission($id)
|
|
{
|
|
$permission = Permission::find($id);
|
|
// Jika data ditemukan
|
|
if ($permission) {
|
|
$permission->delete();
|
|
return redirect()->route('permission')->with('swal', swal_alert('success', 'You are successfully deleted records'));
|
|
} else {
|
|
return redirect()->route('permission')->with('swal', swal_alert('error', 'Data not found'));
|
|
}
|
|
}
|
|
|
|
public function detailPermission(Request $request, $slug)
|
|
{
|
|
if ($request->ajax()) {
|
|
$getIdPermissionBySlug = Permission::where('slug', $slug)->first();
|
|
$data = Permission::select("*")->where("idParent", "=", $getIdPermissionBySlug->id)->get();
|
|
// Convert the Eloquent Collection to a regular PHP array
|
|
$data->each(function ($item, $key) {
|
|
$item->rowIndex = $key + 1;
|
|
});
|
|
|
|
return Datatables::of($data)
|
|
->addIndexColumn()
|
|
->addColumn('nameOfPermission', function($row) {
|
|
$var = '
|
|
<p class="text-primary mb-0">Name: <span class="text-muted">' . $row->name . '</span></p>
|
|
<p class="text-primary mb-0">Rule: <span class="text-muted">' . $row->guard_name . '</span></p>
|
|
<p class="text-primary mb-0">Last Updated: <span class="text-muted">' . $row->updated_at . '</span></p>
|
|
';
|
|
|
|
return $var;
|
|
})
|
|
->addColumn('updated_at', function($row) {
|
|
return $row->updated_at;
|
|
})
|
|
->addColumn('action', function($row){
|
|
$edit = route('permission.edit.child', ['id' => $row->id]);
|
|
$delete = route('permission.delete.child', ['id' => $row->id]);
|
|
$btn = '
|
|
<a href="' . $edit . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-pencil"></i></a>
|
|
<a href="' . $delete . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-trash"></i></a>
|
|
';
|
|
return $btn;
|
|
})
|
|
->rawColumns(['nameOfPermission','action','updated_at'])
|
|
->make(true);
|
|
}
|
|
|
|
$data = [
|
|
'subtitle' => Permission::where('slug', $slug)->first()->name,
|
|
'records' => Permission::where('slug', $slug)->first()
|
|
];
|
|
$routeInApplication = routesAll();
|
|
|
|
return view('admin.app.users.permission.detail', compact('data', 'slug','routeInApplication'));
|
|
}
|
|
|
|
public function storeChildPermission(Request $request)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => 'required',
|
|
'guard_name' => 'required',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
$input = $request->all();
|
|
$getPermissionDetail = Permission::where('id', $input['idParent'])->first();
|
|
$permission = new Permission([
|
|
'slug' => Str::random(6),
|
|
'idParent' => $getPermissionDetail->id,
|
|
'name' => $input['name'],
|
|
'guard_name' => $input['guard_name'],
|
|
]);
|
|
|
|
$check = Permission::where('name', $input['name'])->count();
|
|
if ($check == 0) {
|
|
if ($permission->save()) {
|
|
return redirect()->route('permission.detail', ['slug' => $getPermissionDetail->slug])->with('swal', swal_alert('success', 'You have successfully added data'));
|
|
} else {
|
|
return redirect()->route('permission.detail', ['slug' => $getPermissionDetail->slug])->with('swal', swal_alert('error', 'An error occurred in the query'));
|
|
}
|
|
}
|
|
}
|
|
|
|
public function editChildPermission($id)
|
|
{
|
|
$data = [
|
|
'subtitle' => Permission::where('id', $id)->first()->name,
|
|
'records' => Permission::where('id', $id)->first()
|
|
];
|
|
return view('admin.app.users.permission.edit.child', compact('data', 'id'));
|
|
}
|
|
|
|
public function updateChildPermission(Request $request, $id)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => 'required',
|
|
'guard_name' => 'required',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
// Cari data berdasarkan ID
|
|
$permission = Permission::find($id);
|
|
$getPermissionDetail = Permission::where('id', $permission->idParent)->first();
|
|
|
|
// Jika data ditemukan
|
|
if ($permission) {
|
|
$permission->name = $request->input('name');
|
|
$permission->guard_name = $request->input('guard_name');
|
|
|
|
// Simpan perubahan pada database
|
|
$permission->save();
|
|
return redirect()->route('permission.detail', ['slug' => $getPermissionDetail->slug])->with('swal', swal_alert('success', 'You are successfully modify data'));
|
|
} else {
|
|
return redirect()->route('permission.detail', ['slug' => $getPermissionDetail->slug])->with('swal', swal_alert('error', 'Unexpected error'));
|
|
}
|
|
}
|
|
|
|
public function deleteChildPermission($id)
|
|
{
|
|
$permission = Permission::find($id);
|
|
$getPermissionDetail = Permission::where('id', $permission->idParent)->first();
|
|
$permission->delete();
|
|
return redirect()->route('permission.detail', ['slug' => $getPermissionDetail->slug])->with('swal', swal_alert('success', 'You are successfully deleted records'));
|
|
}
|
|
|
|
public function indexSiswa(Request $request)
|
|
{
|
|
if ($request->ajax()) {
|
|
$data = User::select('*')->where('level', GlobalEnum::isSiswa)->orderBy('created_at', 'desc');
|
|
// Convert the Eloquent Collection to a regular PHP array
|
|
$data->each(function ($item, $key) {
|
|
$item->rowIndex = $key + 1;
|
|
});
|
|
|
|
return Datatables::eloquent($data)
|
|
->addIndexColumn()
|
|
->addColumn('title-post', function($row) {
|
|
return '
|
|
<div class="d-flex align-items-center">
|
|
<div class="symbol symbol-25px symbol-circle">
|
|
<div class="symbol-label" style="background-image:url(' . gravatar_team($row->email) . ')"></div>
|
|
</div>
|
|
<div class="ms-3"><span>' . $row->name . '</span></div>
|
|
</div>
|
|
';
|
|
})
|
|
->addColumn('nis', function($row) {
|
|
return $row->siswa->first()->nis;
|
|
})
|
|
->addColumn('agama', function($row) {
|
|
if($row->siswa->first()->agama == 1) {
|
|
return 'Islam';
|
|
} elseif($row->siswa->first()->agama == 2) {
|
|
return 'Kristen';
|
|
} elseif($row->siswa->first()->agama == 3) {
|
|
return 'Buddha';
|
|
} elseif($row->siswa->first()->agama == 4) {
|
|
return 'Konghucu';
|
|
}
|
|
})
|
|
->addColumn('action', function($row){
|
|
$view = route('users.show', ['id' => $row->id]);
|
|
$edit = route('users.edit', ['id' => $row->id]);
|
|
$delete = route('users.delete', ['id' => $row->id]);
|
|
$btn = '
|
|
<a href="' . $view . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-eye"></i></a>
|
|
<a href="' . $edit . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-pencil"></i></a>
|
|
<a data-url="' . $delete . '" href="#" class="btn btn-light btn-sm deleteContent px-4"><i class="ki-outline ki-trash"></i></a>
|
|
';
|
|
return $btn;
|
|
})
|
|
->addColumn('status', function($row){
|
|
if ($row->status == GlobalEnum::isActive) {
|
|
return '<span class="mb-1 badge font-medium badge-light-success py-3 px-4 fs-7">Active</span>';
|
|
} elseif($row->status == GlobalEnum::isInactive) {
|
|
return '<span class="mb-1 badge font-medium badge-light-primary py-3 px-4 fs-7">Non Active</span>';
|
|
} elseif($row->status == GlobalEnum::isDeactive) {
|
|
return '<span class="mb-1 badge font-medium badge-light-danger py-3 px-4 fs-7">Deactivated</span>';
|
|
} else {
|
|
return '<span class="mb-1 badge font-medium badge-light-warning py-3 px-4 fs-7">Not Verified</span>';
|
|
}
|
|
})
|
|
->rawColumns(['title-post','action','nis','status'])
|
|
->filter(function ($query) use ($request) {
|
|
if ($request->has('search')) {
|
|
$search = $request->get('search')['value'];
|
|
|
|
$filterCategory = explode('|', $search);
|
|
if($filterCategory[0] === 'status') {
|
|
if(!empty($filterCategory[1])) {
|
|
$filterCode = $filterCategory[1]-1;
|
|
if ($filterCode !== 0) {
|
|
$query->where('status', '=', $filterCode);
|
|
}
|
|
} else {
|
|
$query->get();
|
|
}
|
|
} elseif($filterCategory[0] === 'user') {
|
|
if(!empty($filterCategory[1])) {
|
|
$query->where('name', 'LIKE', "%$filterCategory[1]%");
|
|
} else {
|
|
$query->get();
|
|
}
|
|
}
|
|
}
|
|
})
|
|
->make(true);
|
|
}
|
|
|
|
$data = [
|
|
'subtitle' => 'Siswa',
|
|
'button' => true,
|
|
'module' => [
|
|
'url' => route('siswa.create'),
|
|
'name' => 'Create New'
|
|
]
|
|
];
|
|
|
|
return view('admin.app.users.siswa.index', compact('data'));
|
|
}
|
|
|
|
public function createSiswa()
|
|
{
|
|
$data = [
|
|
'subtitle' => 'Create New'
|
|
];
|
|
|
|
return view('admin.app.users.siswa.add', compact('data'));
|
|
}
|
|
|
|
public function storeImport(Request $request)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'file' => 'required|mimes:csv,xls,xlsx'
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
$file = $request->file('file');
|
|
// membuat nama file unik
|
|
$nama_file = $file->hashName();
|
|
//temporary file
|
|
$path = $file->storeAs('public/files',$nama_file);
|
|
|
|
// import data
|
|
$import = Excel::import(new SiswaImport, storage_path('app/public/files/' . $nama_file));
|
|
|
|
//remove from server
|
|
Storage::delete($path);
|
|
|
|
if($import) {
|
|
//redirect
|
|
return redirect()->back()->with('success', 'Data berhasil diimport');
|
|
} else {
|
|
//redirect
|
|
return redirect()->back()->with('error', 'Data gagal diimport');
|
|
}
|
|
}
|
|
|
|
public function storeSiswa(Request $request)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'email' => 'required|email',
|
|
'password' => 'required',
|
|
'name' => 'required',
|
|
'nis' => 'required',
|
|
'agama' => 'required',
|
|
'agama_ayah' => 'required',
|
|
'kota_siswa' => 'required',
|
|
'alamat' => 'required',
|
|
'nama_ibu' => 'required',
|
|
'telepon' => 'required',
|
|
'pekerjaan_ibu' => 'required',
|
|
'pekerjaan_ayah' => 'required',
|
|
'tempat_lahir' => 'required',
|
|
'nama_ayah' => 'required',
|
|
'tanggal_lahir' => 'required|date',
|
|
'telepon_ortu' => 'required',
|
|
'agama_ibu' => 'required',
|
|
'image' => 'image|mimes:jpg,jpeg,png,svg|max:7048',
|
|
], [
|
|
'image.mimes' => 'Tipe file yang diunggah harus jpg, jpeg, png, atau svg.',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
$input = $request->all();
|
|
$foto_namaBaru = null;
|
|
|
|
if ($request->hasFile('image') && $request->file('image')->isValid()) {
|
|
$foto_namaBaru = $request->file('image')->store('public/images');
|
|
}
|
|
|
|
$post = new User([
|
|
'name' => $input['name'],
|
|
'username' => Str::before($input['email'], '@') . rand(100, 999),
|
|
'email' => $input['email'],
|
|
'password' => bcrypt($input['password']),
|
|
'status' => $input['status'],
|
|
'level' => GlobalEnum::isSiswa,
|
|
'thumbnail' => empty($foto_namaBaru) ? '' : $foto_namaBaru,
|
|
]);
|
|
|
|
$check = User::where('email', $input['email'])->count();
|
|
if ($check == 0) {
|
|
if ($post->save()) {
|
|
$postDetail = new Siswa([
|
|
'id' => Str::uuid(),
|
|
'user_id' => $post->id,
|
|
'nis' => $input['nis'],
|
|
'agama' => $input['agama'],
|
|
'agama_ayah' => $input['agama_ayah'],
|
|
'kota_siswa' => $input['kota_siswa'],
|
|
'alamat' => $input['alamat'],
|
|
'nama_ibu' => $input['nama_ibu'],
|
|
'telepon' => $input['telepon'],
|
|
'pekerjaan_ibu' => $input['pekerjaan_ibu'],
|
|
'pekerjaan_ayah' => $input['pekerjaan_ayah'],
|
|
'tempat_lahir' => $input['tempat_lahir'],
|
|
'nama_ayah' => $input['nama_ayah'],
|
|
'tanggal_lahir' => $input['tanggal_lahir'],
|
|
'telepon_ortu' => $input['telepon_ortu'],
|
|
'agama_ibu' => $input['agama_ibu'],
|
|
]);
|
|
|
|
$postDetail->save();
|
|
return redirect()->route('siswa')->with('swal', swal_alert('success', 'You have successfully added data'));
|
|
} else {
|
|
return redirect()->route('siswa')->with('swal', swal_alert('error', 'An error occurred in the query'));
|
|
}
|
|
} else {
|
|
return redirect()->route('siswa')->with('swal', swal_alert('error', 'Email already exists'));
|
|
}
|
|
}
|
|
|
|
public function editSiswa($id)
|
|
{
|
|
$data = [
|
|
'subtitle' => User::where('id', $id)->first()->email,
|
|
'records' => User::where('id', $id)->first()
|
|
];
|
|
|
|
$detail = Siswa::where('user_id', $id)->first();
|
|
return view('admin.app.users.siswa.edit', compact('data', 'id', 'detail'));
|
|
}
|
|
|
|
public function updateSiswa(Request $request, $id)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => 'required',
|
|
'nis' => 'required',
|
|
'agama' => 'required',
|
|
'agama_ayah' => 'required',
|
|
'kota_siswa' => 'required',
|
|
'alamat' => 'required',
|
|
'nama_ibu' => 'required',
|
|
'telepon' => 'required',
|
|
'pekerjaan_ibu' => 'required',
|
|
'pekerjaan_ayah' => 'required',
|
|
'tempat_lahir' => 'required',
|
|
'nama_ayah' => 'required',
|
|
'tanggal_lahir' => 'required|date',
|
|
'telepon_ortu' => 'required',
|
|
'agama_ibu' => 'required',
|
|
'image' => 'image|mimes:jpg,jpeg,png,svg|max:7048',
|
|
], [
|
|
'image.mimes' => 'Tipe file yang diunggah harus jpg, jpeg, png, atau svg.',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
// Cari data berdasarkan ID
|
|
$user = User::find($id);
|
|
$detail = Siswa::where('user_id', $id)->first();
|
|
|
|
// Jika data ditemukan
|
|
if ($user) {
|
|
// Jika ada file baru yang diunggah, hapus file thumbnail yang lama
|
|
if ($request->hasFile('image') && $request->file('image')->isValid()) {
|
|
if ($user->thumbnail) {
|
|
Storage::delete($user->thumbnail);
|
|
}
|
|
}
|
|
|
|
// Update data dengan data baru dari form yang telah dibersihkan
|
|
$user->name = $request->input('name');
|
|
$user->email = $request->input('email');
|
|
!empty($request->input('password')) ? $user->password = bcrypt($request->input('password')) : $user->password;
|
|
$user->level = GlobalEnum::isSiswa;
|
|
$user->status = $request->input('status');
|
|
$user->username = Str::before($user->email, '@') . rand(100, 999);
|
|
|
|
$detail->nis = $request->input('nis');
|
|
$detail->agama = $request->input('agama');
|
|
$detail->agama_ayah = $request->input('agama_ayah');
|
|
$detail->kota_siswa = $request->input('kota_siswa');
|
|
$detail->alamat = $request->input('alamat');
|
|
$detail->nama_ibu = $request->input('nama_ibu');
|
|
$detail->telepon = $request->input('telepon');
|
|
$detail->pekerjaan_ibu = $request->input('pekerjaan_ibu');
|
|
$detail->pekerjaan_ayah = $request->input('pekerjaan_ayah');
|
|
$detail->tempat_lahir = $request->input('tempat_lahir');
|
|
$detail->nama_ayah = $request->input('nama_ayah');
|
|
$detail->tanggal_lahir = $request->input('tanggal_lahir');
|
|
$detail->telepon_ortu = $request->input('telepon_ortu');
|
|
$detail->agama_ibu = $request->input('agama_ibu');
|
|
|
|
// Jika ada file baru yang diunggah, simpan file baru di storage
|
|
if ($request->hasFile('image') && $request->file('image')->isValid()) {
|
|
$foto_namaBaru = $request->file('image')->store('public/images');
|
|
$user->thumbnail = $foto_namaBaru;
|
|
}
|
|
|
|
// Simpan perubahan pada database
|
|
if($user->save() && $detail->save())
|
|
{
|
|
return redirect()->route('siswa')->with('swal', swal_alert('success', 'Berhasil diperbarui'));
|
|
} else {
|
|
return redirect()->route('siswa')->with('swal', swal_alert('error', 'An error occurred in the query'));
|
|
}
|
|
} else {
|
|
return redirect()->route('siswa')->with('swal', swal_alert('error', 'Unexpected error'));
|
|
}
|
|
}
|
|
|
|
public function destroySiswa($id)
|
|
{
|
|
$user = User::find($id);
|
|
// Jika data ditemukan
|
|
if ($user) {
|
|
// Cek apakah ada file di kolom "is_thumbnail"
|
|
if ($user->thumbnail) {
|
|
// Hapus file thumbnail dari storage
|
|
Storage::delete($user->is_thumbnail);
|
|
}
|
|
|
|
$detail = Siswa::where('user_id', $id)->first();
|
|
// Hapus data dari database
|
|
$user->delete();
|
|
$detail->delete();
|
|
return redirect()->route('siswa')->with('swal', swal_alert('success', 'You are successfully deleted records'));
|
|
} else {
|
|
return redirect()->route('siswa')->with('swal', swal_alert('error', 'Data not found'));
|
|
}
|
|
}
|
|
|
|
public function indexKonselor(Request $request)
|
|
{
|
|
if ($request->ajax()) {
|
|
$data = User::select('*')->where('level', GlobalEnum::isKonselor)->orderBy('created_at', 'desc');
|
|
// Convert the Eloquent Collection to a regular PHP array
|
|
$data->each(function ($item, $key) {
|
|
$item->rowIndex = $key + 1;
|
|
});
|
|
|
|
return Datatables::eloquent($data)
|
|
->addIndexColumn()
|
|
->addColumn('title-post', function($row) {
|
|
return '
|
|
<div class="d-flex align-items-center">
|
|
<div class="symbol symbol-25px symbol-circle">
|
|
<div class="symbol-label" style="background-image:url(' . gravatar_team($row->email) . ')"></div>
|
|
</div>
|
|
<div class="ms-3"><span>' . $row->name . '</span></div>
|
|
</div>
|
|
';
|
|
})
|
|
->addColumn('nip', function($row) {
|
|
return $row->konselor->first()->nip;
|
|
})
|
|
->addColumn('agama', function($row) {
|
|
if($row->konselor->first()->agama == 1) {
|
|
return 'Islam';
|
|
} elseif($row->konselor->first()->agama == 2) {
|
|
return 'Kristen';
|
|
} elseif($row->konselor->first()->agama == 3) {
|
|
return 'Buddha';
|
|
} elseif($row->konselor->first()->agama == 4) {
|
|
return 'Konghucu';
|
|
}
|
|
})
|
|
->addColumn('action', function($row){
|
|
$view = route('users.show', ['id' => $row->id]);
|
|
$edit = route('users.edit', ['id' => $row->id]);
|
|
$delete = route('users.delete', ['id' => $row->id]);
|
|
$btn = '
|
|
<a href="' . $view . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-eye"></i></a>
|
|
<a href="' . $edit . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-pencil"></i></a>
|
|
<a data-url="' . $delete . '" href="#" class="btn btn-light btn-sm deleteContent px-4"><i class="ki-outline ki-trash"></i></a>
|
|
';
|
|
return $btn;
|
|
})
|
|
->addColumn('status', function($row){
|
|
if ($row->status == GlobalEnum::isActive) {
|
|
return '<span class="mb-1 badge font-medium badge-light-success py-3 px-4 fs-7">Active</span>';
|
|
} elseif($row->status == GlobalEnum::isInactive) {
|
|
return '<span class="mb-1 badge font-medium badge-light-primary py-3 px-4 fs-7">Non Active</span>';
|
|
} elseif($row->status == GlobalEnum::isDeactive) {
|
|
return '<span class="mb-1 badge font-medium badge-light-danger py-3 px-4 fs-7">Deactivated</span>';
|
|
} else {
|
|
return '<span class="mb-1 badge font-medium badge-light-warning py-3 px-4 fs-7">Not Verified</span>';
|
|
}
|
|
})
|
|
->rawColumns(['title-post','nip','agama','action','status'])
|
|
->filter(function ($query) use ($request) {
|
|
if ($request->has('search')) {
|
|
$search = $request->get('search')['value'];
|
|
|
|
$filterCategory = explode('|', $search);
|
|
if($filterCategory[0] === 'status') {
|
|
if(!empty($filterCategory[1])) {
|
|
$filterCode = $filterCategory[1]-1;
|
|
if ($filterCode !== 0) {
|
|
$query->where('status', '=', $filterCode);
|
|
}
|
|
} else {
|
|
$query->get();
|
|
}
|
|
} elseif($filterCategory[0] === 'user') {
|
|
if(!empty($filterCategory[1])) {
|
|
$query->where('name', 'LIKE', "%$filterCategory[1]%");
|
|
} else {
|
|
$query->get();
|
|
}
|
|
}
|
|
}
|
|
})
|
|
->make(true);
|
|
}
|
|
|
|
$data = [
|
|
'subtitle' => 'Konselor',
|
|
'button' => true,
|
|
'module' => [
|
|
'url' => route('konselor.create'),
|
|
'name' => 'Create New'
|
|
]
|
|
];
|
|
|
|
return view('admin.app.users.konselor.index', compact('data'));
|
|
}
|
|
|
|
public function createKonselor()
|
|
{
|
|
$data = [
|
|
'subtitle' => 'Create New'
|
|
];
|
|
|
|
return view('admin.app.users.konselor.add', compact('data'));
|
|
}
|
|
|
|
public function storeKonselor(Request $request)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'nip' => 'required',
|
|
'alamat' => 'required',
|
|
'telepon' => 'required',
|
|
'agama' => 'required',
|
|
'name' => 'required',
|
|
'email' => 'required|email',
|
|
'password' => 'required',
|
|
'status' => 'required',
|
|
'image' => 'image|mimes:jpg,jpeg,png,svg|max:7048',
|
|
], [
|
|
'image.mimes' => 'Tipe file yang diunggah harus jpg, jpeg, png, atau svg.',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
$input = $request->all();
|
|
$foto_namaBaru = null;
|
|
|
|
if ($request->hasFile('image') && $request->file('image')->isValid()) {
|
|
$foto_namaBaru = $request->file('image')->store('public/images');
|
|
}
|
|
|
|
$post = new User([
|
|
'name' => $input['name'],
|
|
'username' => Str::before($input['email'], '@') . rand(100, 999),
|
|
'email' => $input['email'],
|
|
'password' => bcrypt($input['password']),
|
|
'status' => $input['status'],
|
|
'level' => GlobalEnum::isKonselor,
|
|
'thumbnail' => empty($foto_namaBaru) ? '' : $foto_namaBaru,
|
|
]);
|
|
|
|
$check = User::where('email', $input['email'])->count();
|
|
if ($check == 0) {
|
|
if ($post->save()) {
|
|
$detail = User::where('email', $input['email'])->first();
|
|
$postDetail = new Konselor([
|
|
'id' => Str::uuid(),
|
|
'user_id' => $detail->id,
|
|
'nip' => $input['nip'],
|
|
'agama' => $input['agama'],
|
|
'alamat' => $input['alamat'],
|
|
'telepon' => $input['telepon']
|
|
]);
|
|
|
|
$postDetail->save();
|
|
return redirect()->route('konselor')->with('swal', swal_alert('success', 'You have successfully added data'));
|
|
} else {
|
|
return redirect()->route('konselor')->with('swal', swal_alert('error', 'An error occurred in the query'));
|
|
}
|
|
} else {
|
|
return redirect()->route('konselor')->with('swal', swal_alert('error', 'Email already exists'));
|
|
}
|
|
}
|
|
|
|
public function editKonselor($id)
|
|
{
|
|
$data = [
|
|
'subtitle' => User::where('id', $id)->first()->email,
|
|
'records' => User::where('id', $id)->first()
|
|
];
|
|
|
|
$detail = Konselor::where('user_id', $id)->first();
|
|
return view('admin.app.users.konselor.edit', compact('data', 'id', 'detail'));
|
|
}
|
|
|
|
public function updateKonselor(Request $request, $id)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'nip' => 'required',
|
|
'alamat' => 'required',
|
|
'telepon' => 'required',
|
|
'agama' => 'required',
|
|
'name' => 'required',
|
|
'email' => 'required|email',
|
|
'status' => 'required',
|
|
'image' => 'image|mimes:jpg,jpeg,png,svg|max:7048',
|
|
], [
|
|
'image.mimes' => 'Tipe file yang diunggah harus jpg, jpeg, png, atau svg.',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
// Cari data berdasarkan ID
|
|
$user = User::find($id);
|
|
$detail = Konselor::where('user_id', $id)->first();
|
|
|
|
// Jika data ditemukan
|
|
if ($user) {
|
|
// Jika ada file baru yang diunggah, hapus file thumbnail yang lama
|
|
if ($request->hasFile('image') && $request->file('image')->isValid()) {
|
|
if ($user->thumbnail) {
|
|
Storage::delete($user->thumbnail);
|
|
}
|
|
}
|
|
|
|
// Update data dengan data baru dari form yang telah dibersihkan
|
|
$user->name = $request->input('name');
|
|
$user->email = $request->input('email');
|
|
!empty($request->input('password')) ? $user->password = bcrypt($request->input('password')) : $user->password;
|
|
$user->status = $request->input('status');
|
|
$user->username = Str::before($user->email, '@') . rand(100, 999);
|
|
|
|
$detail->nip = $request->input('nip');
|
|
$detail->alamat = $request->input('alamat');
|
|
$detail->agama = $request->input('agama');
|
|
$detail->telepon = $request->input('telepon');
|
|
|
|
// Jika ada file baru yang diunggah, simpan file baru di storage
|
|
if ($request->hasFile('image') && $request->file('image')->isValid()) {
|
|
$foto_namaBaru = $request->file('image')->store('public/images');
|
|
$user->thumbnail = $foto_namaBaru;
|
|
}
|
|
|
|
// Simpan perubahan pada database
|
|
$user->save();
|
|
$detail->save();
|
|
return redirect()->route('konselor')->with('swal', swal_alert('success', 'You are successfully modify data'));
|
|
} else {
|
|
return redirect()->route('konselor')->with('swal', swal_alert('error', 'Unexpected error'));
|
|
}
|
|
}
|
|
|
|
public function destroyKonselor($id)
|
|
{
|
|
$user = User::find($id);
|
|
$detail = Konselor::where('user_id', $id)->first();
|
|
// Jika data ditemukan
|
|
if ($user) {
|
|
// Cek apakah ada file di kolom "is_thumbnail"
|
|
if ($user->thumbnail) {
|
|
// Hapus file thumbnail dari storage
|
|
Storage::delete($user->is_thumbnail);
|
|
}
|
|
// Hapus data dari database
|
|
$user->delete();
|
|
$detail->delete();
|
|
return redirect()->route('konselor')->with('swal', swal_alert('success', 'You are successfully deleted records'));
|
|
} else {
|
|
return redirect()->route('konselor')->with('swal', swal_alert('error', 'Data not found'));
|
|
}
|
|
}
|
|
|
|
}
|