241 lines
8.5 KiB
PHP
241 lines
8.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Guru;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Guru;
|
|
use App\Models\User;
|
|
use Illuminate\Database\QueryException;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Validation\ValidationException;
|
|
|
|
class ProfileGuruController extends Controller
|
|
{
|
|
public function index(){
|
|
return view('guru.pages.profile');
|
|
}
|
|
|
|
public function dateFormat($date){
|
|
$tanggalparse = $date
|
|
? Carbon::parse($date)->locale('id')->translatedFormat('d F Y')
|
|
: null;
|
|
return $tanggalparse;
|
|
}
|
|
public function getDataProfile(){
|
|
$guru_id = auth()->user()->Guru->id;
|
|
$data = Guru::where('id', $guru_id)->first();
|
|
|
|
|
|
return response()->json([
|
|
'id' => $data->id,
|
|
'nama' => $data->nama ?? null,
|
|
'no_hp' => $data->no_hp ?? null,
|
|
'tempat_lahir' => $data->tempat_lahir ?? null,
|
|
'tanggal_lahir' => $data->tanggal_lahir ?? null,
|
|
'tanggal_lahir_parse' => $this->dateFormat($data->tanggal_lahir),
|
|
'jenis_kelamin' => $data->jenis_kelamin ?? null,
|
|
'email' => $data->email ?? null,
|
|
'alamat' => $data->alamat ?? null,
|
|
'pendidikan_terakhir' => $data->pendidikan_terakhir ?? null,
|
|
'instansi_pendidikan' => $data->instansi_pendidikan ?? null,
|
|
'jurusan' => $data->jurusan ?? null,
|
|
'divisi' => $data->divisi ?? null,
|
|
'jabatan' => $data->jabatan ?? null,
|
|
'start_join' => $data->start_join ?? null,
|
|
'start_join_parse' => $this->dateFormat($data->start_join),
|
|
'pekerja' => $data->pekerja ?? null,
|
|
'status' => $data->status ?? null,
|
|
'no_rekening' => $data->no_rekening ?? null,
|
|
'bank_keterangan' => $data->bank_keterangan ?? null,
|
|
'talent_mapping' => $data->talent_mapping ?? null,
|
|
'foto' => $data->foto ?? null,
|
|
]);
|
|
}
|
|
|
|
public function saveDataProfile(Request $request)
|
|
{
|
|
$guru = auth()->user()->Guru;
|
|
|
|
$validated = $request->validate([
|
|
'nama' => 'required|string|max:255',
|
|
], [
|
|
'nama.required' => 'Nama anak wajib diisi',
|
|
'nama.max' => 'Nama anak terlalu panjang',
|
|
]);
|
|
|
|
// Ambil semua field opsional
|
|
$fields = [
|
|
'no_hp', 'tempat_lahir', 'tanggal_lahir', 'jenis_kelamin', 'email',
|
|
'alamat', 'pendidikan_terakhir', 'instansi_pendidikan', 'jurusan',
|
|
'divisi', 'jabatan', 'start_join', 'pekerja', 'status',
|
|
'no_rekening', 'bank_keterangan'
|
|
];
|
|
|
|
foreach ($fields as $field) {
|
|
if ($request->filled($field)) {
|
|
// khusus no_hp -> hilangkan 0 di depan
|
|
$validated[$field] = $field === 'no_hp'
|
|
? ltrim($request->no_hp, '0')
|
|
: $request->$field;
|
|
}
|
|
}
|
|
|
|
// default jenis kelamin
|
|
$validated['jenis_kelamin'] = $validated['jenis_kelamin'] ?? 'L';
|
|
|
|
// Upload file
|
|
if ($request->hasFile('talent_mapping')) {
|
|
if ($guru->talent_mapping && file_exists(storage_path('app/public/' . $guru->talent_mapping))) {
|
|
unlink(storage_path('app/public/' . $guru->talent_mapping));
|
|
}
|
|
$validated['talent_mapping'] = $request->file('talent_mapping')
|
|
->storeAs('talent-mapping', md5(time() . $request->file('talent_mapping')->getClientOriginalName()) . '.' . $request->file('talent_mapping')->getClientOriginalExtension(), 'public');
|
|
}
|
|
|
|
if ($request->hasFile('foto')) {
|
|
if ($guru->foto && file_exists(storage_path('app/public/' . $guru->foto))) {
|
|
unlink(storage_path('app/public/' . $guru->foto));
|
|
}
|
|
$validated['foto'] = $request->file('foto')
|
|
->storeAs('guru', md5(time() . $request->file('foto')->getClientOriginalName()) . '.' . $request->file('foto')->getClientOriginalExtension(), 'public');
|
|
}
|
|
|
|
try {
|
|
$guru->update($validated);
|
|
|
|
$firstWord = strtolower(strtok($guru->nama, ' '));
|
|
$user = User::find($guru->user_id);
|
|
|
|
if (!$user) {
|
|
$user = User::create([
|
|
'name' => $guru->nama,
|
|
'username' => $firstWord,
|
|
'email' => $guru->email,
|
|
'no_hp_orangtua' => $guru->no_hp,
|
|
'password' => bcrypt('12345'),
|
|
'role' => 'guru',
|
|
]);
|
|
$guru->update(['user_id' => $user->id]);
|
|
} else {
|
|
$user->update([
|
|
'name' => $guru->nama,
|
|
'username' => $firstWord,
|
|
'email' => $guru->email,
|
|
'no_hp_orangtua' => $guru->no_hp,
|
|
'role' => 'guru',
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => 'Data diri berhasil diperbarui',
|
|
]);
|
|
} catch (QueryException $e) {
|
|
return response()->json([
|
|
'status' => 'fail',
|
|
'message' => $e->getMessage(),
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function updatePassword(Request $request){
|
|
$request->validate(
|
|
[
|
|
'old_password' => ['required'],
|
|
'new_password' => ['required', 'min:6', 'confirmed'],
|
|
],
|
|
[
|
|
'old_password.required' => 'Password lama harus diisi',
|
|
'new_password.required' => 'Password baru harus diisi',
|
|
'new_password.min' => 'Password baru minimal 6 karakter',
|
|
'new_password.confirmed' => 'Konfirmasi password baru harus sama'
|
|
]
|
|
);
|
|
|
|
|
|
$id = auth()->user()->id;
|
|
$user = User::findOrFail($id);
|
|
|
|
// cek password lama
|
|
if (!Hash::check($request->old_password, $user->password)) {
|
|
throw ValidationException::withMessages([
|
|
'old_password' => ['Password lama tidak sesuai.'],
|
|
]);
|
|
}
|
|
|
|
// update password baru
|
|
$user->password = Hash::make($request->new_password);
|
|
$user->save();
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => 'Password berhasil diperbarui',
|
|
'data' => null
|
|
]);
|
|
}
|
|
|
|
public function ketersediaan()
|
|
{
|
|
$guru = auth()->user()->Guru;
|
|
if (!$guru) {
|
|
return redirect()->back()->with('error', 'Data guru tidak ditemukan');
|
|
}
|
|
|
|
$isLocked = \App\Models\KetersediaanSetting::getRecord()->lock_edit;
|
|
$sesiList = \App\Models\Sesi::orderBy('id', 'asc')->get();
|
|
|
|
// Fetch ketersediaan
|
|
$ketersediaan = $guru->ketersediaanMengajar->groupBy('hari');
|
|
$days = [1, 2, 3, 4, 5, 6];
|
|
$ketersediaanData = [];
|
|
foreach ($days as $day) {
|
|
$ketersediaanData[$day] = $ketersediaan->has($day)
|
|
? $ketersediaan->get($day)->pluck('sesi_id')->toArray()
|
|
: [];
|
|
}
|
|
|
|
return view('guru.pages.ketersediaan', compact('guru', 'sesiList', 'ketersediaanData', 'isLocked'));
|
|
}
|
|
|
|
public function updateKetersediaan(Request $request)
|
|
{
|
|
$isLocked = \App\Models\KetersediaanSetting::getRecord()->lock_edit;
|
|
if ($isLocked) {
|
|
return redirect()->back()->with('error', 'Pengubahan ketersediaan mengajar dikunci oleh Admin.');
|
|
}
|
|
|
|
$guru = auth()->user()->Guru;
|
|
if (!$guru) {
|
|
return redirect()->back()->with('error', 'Data guru tidak ditemukan');
|
|
}
|
|
|
|
$request->validate([
|
|
'ketersediaan' => 'nullable|array',
|
|
'ketersediaan.*' => 'nullable|array',
|
|
]);
|
|
|
|
$data = $request->input('ketersediaan', []);
|
|
|
|
foreach ([1, 2, 3, 4, 5, 6] as $day) {
|
|
$daySesiIds = $data[$day] ?? [];
|
|
|
|
\App\Models\KetersediaanMengajar::where('guru_id', $guru->id)
|
|
->where('hari', $day)
|
|
->delete();
|
|
|
|
foreach ($daySesiIds as $sesiId) {
|
|
\App\Models\KetersediaanMengajar::create([
|
|
'guru_id' => $guru->id,
|
|
'hari' => $day,
|
|
'sesi_id' => $sesiId,
|
|
]);
|
|
}
|
|
}
|
|
|
|
return redirect()->route('guru.ketersediaan')
|
|
->with('success', 'Ketersediaan mengajar berhasil diperbarui');
|
|
}
|
|
}
|