From 6c148b662c183982feaa3002ce3acf162c4ff614 Mon Sep 17 00:00:00 2001 From: baghizadizn Date: Thu, 13 Nov 2025 10:30:14 +0700 Subject: [PATCH 1/3] penambahan nidn --- resources/views/auth/register.blade.php | 31 ++++++++++++++++++------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index d99516a..630a8de 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -24,7 +24,7 @@

{{ get_phrase('See your growth and get consulting support! ') }}

- + @error('name') {{ $message }} @@ -32,7 +32,7 @@
- + @error('email') {{ $message }} @@ -54,23 +54,23 @@
-
- - - @error('phone') + {{--
+ + + @error('nidn') {{ $message }} @enderror -
+
--}}
- + @error('phone') {{ $message }} @enderror
- + @error('document') {{ $message }} @enderror @@ -142,5 +142,18 @@ } }); }); + + // File size validation + function validateFileSize(input) { + const file = input.files[0]; + if (file) { + const fileSizeInMB = file.size / (1024 * 1024); // Convert to MB + if (fileSizeInMB > 2) { + // Show error message using existing toaster system + error('{{ get_phrase("File size exceeds 2MB limit.") }}'); + input.value = ""; + } + } + } @endpush From 499de60f2c709aa5aaff95ac3234b09d6eca41a4 Mon Sep 17 00:00:00 2001 From: baghizadizn Date: Mon, 17 Nov 2025 14:57:19 +0700 Subject: [PATCH 2/3] penambahan nidn --- .../Auth/RegisteredUserController.php | 141 +++-- app/Models/Instructors.php | 15 + .../admin/instructor/show_document.blade.php | 25 +- resources/views/auth/register.blade.php | 258 ++++----- storage/app/.gitignore | 3 - storage/app/data/cities.json | 516 ++++++++++++++++++ storage/app/public/.gitignore | 2 - 7 files changed, 780 insertions(+), 180 deletions(-) create mode 100644 app/Models/Instructors.php delete mode 100755 storage/app/.gitignore create mode 100644 storage/app/data/cities.json delete mode 100755 storage/app/public/.gitignore diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index 02d8f08..67f7493 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Models\Application; use App\Models\FileUploader; +use App\Models\Instructors; use App\Models\User; use App\Providers\RouteServiceProvider; use Carbon\Carbon; @@ -12,37 +13,29 @@ use Illuminate\Auth\Events\Registered; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rules; use Illuminate\View\View; use Illuminate\Support\Facades\Session; use Illuminate\Support\Str; - +use Illuminate\Support\Facades\Log; class RegisteredUserController extends Controller { - /** - * Display the registration view. - */ public function create(): View { return view('auth.register'); } - /** - * Handle an incoming registration request. - * - * @throws \Illuminate\Validation\ValidationException - */ public function store(Request $request): RedirectResponse { $input = $request->all(); if (get_frontend_settings('recaptcha_status') == true && check_recaptcha($input['g-recaptcha-response']) == false) { - Session::flash('error', get_phrase('Recaptcha verification failed')); - return redirect(route('register.form')); } @@ -62,15 +55,37 @@ class RegisteredUserController extends Controller 'password.min' => get_phrase('Password must be at least 8 characters'), ]); - if ($validator->fails()) { - // Get the first error message to show as flash message $firstError = $validator->errors()->first(); Session::flash('error', $firstError); - return redirect()->back()->withErrors($validator)->withInput(); } + // Check if the user is applying to be an instructor and validate instructor fields + if ($request->has('instructor') && $request->instructor == 1) { + // Validate instructor-specific fields (NIDN, Phone, Document) + $instructorValidator = Validator::make($request->all(), [ + 'nidn' => ['required', 'string', 'max:11'], + 'phone' => ['required', 'string'], + 'document' => ['required', 'file', 'mimes:pdf,doc,docx', 'max:2048'], + ], [ + 'nidn.required' => get_phrase('NIDN is required'), + 'nidn.string' => get_phrase('NIDN must be a valid number'), + 'nidn.max' => get_phrase('NIDN may not be greater than 11 characters'), + 'phone.required' => get_phrase('Phone number is required'), + 'document.required' => get_phrase('Document is required'), + 'document.file' => get_phrase('Document must be a valid file'), + 'document.mimes' => get_phrase('Document must be PDF, DOC, or DOCX'), + 'document.max' => get_phrase('Document size must be less than 2MB'), + ]); + + if ($instructorValidator->fails()) { + $firstError = $instructorValidator->errors()->first(); + Session::flash('error', $firstError); + return redirect()->back()->withErrors($instructorValidator)->withInput(); + } + } + $user_data = [ 'name' => $request->name, 'email' => $request->email, @@ -84,36 +99,98 @@ class RegisteredUserController extends Controller } $user = User::create($user_data); - - event(new Registered($user)); - Auth::login($user); - // If applying as an instructor, process the application if ($request->has('instructor')) { + return $this->processInstructorApplication($request, $user); + } - // Check if application already exists - if (Application::where('user_id', $user->id)->exists()) { - Session::flash('error', get_phrase('Your request is in process. Please wait for admin to respond.')); - return redirect()->route('become.instructor'); + // Log the user in after successful registration + Auth::login($user); + + return redirect(RouteServiceProvider::HOME); + } + + private function processInstructorApplication(Request $request, User $user): RedirectResponse + { + // Check if application already exists + if (Application::where('user_id', $user->id)->exists()) { + Session::flash('error', get_phrase('Your request is in process. Please wait for admin to respond.')); + return redirect()->route('become.instructor'); + } + + try { + // Check NIDN with the API + $nidn = $request->nidn; + $api_url = "https://sindig.unesa.ac.id/apipddikti/api?nidn={$nidn}&auto=1"; + + $response = Http::timeout(30)->get($api_url); + $data = $response->json(); + + Log::info('API Response for NIDN: ' . $nidn, ['response' => $data]); + + // Extract matched dosen data + $matched_dosen = $data['matched_dosen'][0]; + Log::info('Instructor data to be saved:', $matched_dosen); + + if (!isset($data['ok']) || !isset($data['matched_dosen']) || count($data['matched_dosen']) == 0) { + Session::flash('error', get_phrase('NIDN not found in the system. Please check your NIDN.')); + return redirect()->back()->withInput(); + }else if ($matched_dosen['nama'] != $user->name){ + Session::flash('error', get_phrase('Name does not match PDDikti records. Please check your name.')); + return redirect()->back()->withInput(); } - // Process instructor application - $application['user_id'] = $user->id; - $application['phone'] = $request->phone; - $application['description'] = $request->description; + Log::info('API Response for Nama: ' . $matched_dosen['nama'], ' || nama :',$user->name); + + // Prepare instructor data - adjust fields according to your database + $instructor = [ + 'user_id' => $user->id, + 'nidn' => $nidn, + 'name' => $matched_dosen['nama'] ?? $user->name, + 'id_sdm' => $matched_dosen['id'] ?? null, + 'id_sms' => $matched_dosen['nama_prodi'] ?? null, + 'id_pt' => $matched_dosen['nama_pt'] ?? null + ]; + + Log::info('Instructor data to be saved:', $instructor); // Upload document - $doc = $request->file('document'); - $application['document'] = 'uploads/applications/' . $user->id . Str::random(20) . '.' . $doc->extension(); + if ($request->hasFile('document') && $request->file('document')->isValid()) { + $doc = $request->file('document'); + $fileName = 'uploads/applications/' . $user->id . Str::random(20) . '.' . $doc->extension(); - FileUploader::upload($doc, $application['document'], null, null, 300); + FileUploader::upload($doc, $fileName, null, null, 300); + } else { + Session::flash('error', 'Document upload failed or no document selected.'); + return redirect()->back()->withInput(); + } - // Store application - Application::insert($application); + // Prepare application data + $application = [ + 'user_id' => $user->id, + 'phone' => $request->phone, + 'description' => $request->description + ]; - Session::flash('success', get_phrase('Your application has been submitted.')); + // Start database transaction to ensure both records are saved + DB::transaction(function () use ($application, $instructor) { + Application::create($application); + Instructors::create($instructor); + }); + + Session::flash('success', get_phrase('Your application has been submitted successfully.')); + + } catch (\Exception $e) { + Log::error('Instructor registration error:', [ + 'user_id' => $user->id, + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString() + ]); + + Session::flash('error', get_phrase('Error while processing your application. Please try again later!')); + return redirect()->back()->withInput(); } return redirect(RouteServiceProvider::HOME); diff --git a/app/Models/Instructors.php b/app/Models/Instructors.php new file mode 100644 index 0000000..8e364b7 --- /dev/null +++ b/app/Models/Instructors.php @@ -0,0 +1,15 @@ +first(); + $applicant_instrucutor = App\Models\Instructors::where('id', $id)->first(); $user = get_user_info($applicant_details->user_id); + $user_photo = get_user_info($applicant_details->user_id)->photo; + + // Ensure the placeholder image path is correct + $placeholder_image = asset('uploads/users/student/placeholder/placeholder.png'); @endphp +
-
+

$placeholder_image: {{ $placeholder_image ?? 'N/A' }}

+ +

$user_photo: {{ $user_photo ?? 'N/A' }}

+ +
  • {{ get_phrase('Applicant') }} @@ -41,12 +52,16 @@ {{ $user->email }}
  • - {{ get_phrase('Phone number') }} - {{ $user->phone }} + {{ get_phrase('NIDN') }} + {{ $applicant_instrucutor->nidn ?? 'N/A' }}
  • - {{ get_phrase('Address') }} - {{ $user->address }} + {{ get_phrase('Study Program') }} + {{ $applicant_instrucutor->id_sms ?? 'N/A' }} +
  • +
  • + {{ get_phrase('University') }} + {{ $applicant_instrucutor->id_pt?? 'N/A' }}
  • {{ get_phrase('Message') }} :   diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index 630a8de..079fbbc 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -2,158 +2,140 @@ @push('title', get_phrase('Sign Up')) @push('meta')@endpush @push('css') - + @endpush @section('content') - + + @if (get_settings('allow_instructor')) +
    + + +
    + + +
    +
    + + + @error('nidn') + {{ $message }} + @enderror +
    +
    + + + @error('phone') + {{ $message }} + @enderror +
    +
    + + + @error('document') + {{ $message }} + @enderror + {{ get_phrase('Provide some documents about your qualifications') }} +
    +
    + + + @error('description') + {{ $message }} + @enderror +
    +
    + @endif + + @if (get_frontend_settings('recaptcha_status')) + + @else + + @endif + + +

    {{ get_phrase('Already have account?') }} {{ get_phrase('Sign in') }}

    + +
+
+ + @endsection @push('js') - + // File size validation + function validateFileSize(input) { + const file = input.files[0]; + if (file) { + const fileSizeInMB = file.size / (1024 * 1024); // Convert to MB + if (fileSizeInMB > 2) { + // Show error message using existing toaster system + error('{{ get_phrase("File size exceeds 2MB limit.") }}'); + input.value = ""; + } + } + } + @endpush diff --git a/storage/app/.gitignore b/storage/app/.gitignore deleted file mode 100755 index 8f4803c..0000000 --- a/storage/app/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!public/ -!.gitignore diff --git a/storage/app/data/cities.json b/storage/app/data/cities.json new file mode 100644 index 0000000..dbfdc53 --- /dev/null +++ b/storage/app/data/cities.json @@ -0,0 +1,516 @@ +{ + "1101": "SIMEULUE", + "1102": "ACEH SINGKIL", + "1103": "ACEH SELATAN", + "1104": "ACEH TENGGARA", + "1105": "ACEH TIMUR", + "1106": "ACEH TENGAH", + "1107": "ACEH BARAT", + "1108": "ACEH BESAR", + "1109": "PIDIE", + "1110": "BIREUEN", + "1111": "ACEH UTARA", + "1112": "ACEH BARAT DAYA", + "1113": "GAYO LUES", + "1114": "ACEH TAMIANG", + "1115": "NAGAN RAYA", + "1116": "ACEH JAYA", + "1117": "BENER MERIAH", + "1118": "PIDIE JAYA", + "1171": "BANDA ACEH", + "1172": "SABANG", + "1173": "LANGSA", + "1174": "LHOKSEUMAWE", + "1175": "SUBULUSSALAM", + "1201": "NIAS", + "1202": "MANDAILING NATAL", + "1203": "TAPANULI SELATAN", + "1204": "TAPANULI TENGAH", + "1205": "TAPANULI UTARA", + "1206": "TOBA", + "1207": "LABUHANBATU", + "1208": "ASAHAN", + "1209": "SIMALUNGUN", + "1210": "DAIRI", + "1211": "KARO", + "1212": "DELI SERDANG", + "1213": "LANGKAT", + "1214": "NIAS SELATAN", + "1215": "HUMBANG HASUNDUTAN", + "1216": "PAKPAK BHARAT", + "1217": "SAMOSIR", + "1218": "SERDANG BEDAGAI", + "1219": "BATU BARA", + "1220": "PADANG LAWAS UTARA", + "1221": "PADANG LAWAS", + "1222": "LABUHANBATU SELATAN", + "1223": "LABUHANBATU UTARA", + "1224": "NIAS UTARA", + "1225": "NIAS BARAT", + "1271": "SIBOLGA", + "1272": "TANJUNGBALAI", + "1273": "PEMATANGSIANTAR", + "1274": "TEBING TINGGI", + "1275": "MEDAN", + "1276": "BINJAI", + "1277": "PADANGSIDIMPUAN", + "1278": "GUNUNGSITOLI", + "1301": "KEPULAUAN MENTAWAI", + "1302": "PESISIR SELATAN", + "1303": "SOLOK", + "1304": "SIJUNJUNG", + "1305": "TANAH DATAR", + "1306": "PADANG PARIAMAN", + "1307": "AGAM", + "1308": "LIMA PULUH KOTA", + "1309": "PASAMAN", + "1310": "SOLOK SELATAN", + "1311": "DHARMASRAYA", + "1312": "PASAMAN BARAT", + "1371": "PADANG", + "1372": "SOLOK", + "1373": "SAWAHLUNTO", + "1374": "PADANG PANJANG", + "1375": "BUKITTINGGI", + "1376": "PAYAKUMBUH", + "1377": "PARIAMAN", + "1401": "KUANTAN SINGINGI", + "1402": "INDRAGIRI HULU", + "1403": "INDRAGIRI HILIR", + "1404": "PELALAWAN", + "1405": "SIAK", + "1406": "KAMPAR", + "1407": "ROKAN HULU", + "1408": "BENGKALIS", + "1409": "ROKAN HILIR", + "1410": "KEPULAUAN MERANTI", + "1471": "PEKANBARU", + "1473": "DUMAI", + "1501": "KERINCI", + "1502": "MERANGIN", + "1503": "SAROLANGUN", + "1504": "BATANG HARI", + "1505": "MUARO JAMBI", + "1506": "TANJUNG JABUNG TIMUR", + "1507": "TANJUNG JABUNG BARAT", + "1508": "TEBO", + "1509": "BUNGO", + "1571": "JAMBI", + "1572": "SUNGAI PENUH", + "1601": "OGAN KOMERING ULU", + "1602": "OGAN KOMERING ILIR", + "1603": "MUARA ENIM", + "1604": "LAHAT", + "1605": "MUSI RAWAS", + "1606": "MUSI BANYUASIN", + "1607": "BANYU ASIN", + "1608": "OGAN KOMERING ULU SELATAN", + "1609": "OGAN KOMERING ULU TIMUR", + "1610": "OGAN ILIR", + "1611": "EMPAT LAWANG", + "1612": "PENUKAL ABAB LEMATANG ILIR", + "1613": "MUSI RAWAS UTARA", + "1671": "PALEMBANG", + "1672": "PRABUMULIH", + "1673": "PAGAR ALAM", + "1674": "LUBUKLINGGAU", + "1701": "BENGKULU SELATAN", + "1702": "REJANG LEBONG", + "1703": "BENGKULU UTARA", + "1704": "KAUR", + "1705": "SELUMA", + "1706": "MUKOMUKO", + "1707": "LEBONG", + "1708": "KEPAHIANG", + "1709": "BENGKULU TENGAH", + "1771": "BENGKULU", + "1801": "LAMPUNG BARAT", + "1802": "TANGGAMUS", + "1803": "LAMPUNG SELATAN", + "1804": "LAMPUNG TIMUR", + "1805": "LAMPUNG TENGAH", + "1806": "LAMPUNG UTARA", + "1807": "WAY KANAN", + "1808": "TULANGBAWANG", + "1809": "PESAWARAN", + "1810": "PRINGSEWU", + "1811": "MESUJI", + "1812": "TULANG BAWANG BARAT", + "1813": "PESISIR BARAT", + "1871": "BANDAR LAMPUNG", + "1872": "METRO", + "1901": "BANGKA", + "1902": "BELITUNG", + "1903": "BANGKA BARAT", + "1904": "BANGKA TENGAH", + "1905": "BANGKA SELATAN", + "1906": "BELITUNG TIMUR", + "1971": "PANGKALPINANG", + "2101": "KARIMUN", + "2102": "BINTAN", + "2103": "NATUNA", + "2104": "LINGGA", + "2105": "KEPULAUAN ANAMBAS", + "2171": "BATAM", + "2172": "TANJUNG PINANG", + "3101": "KEPULAUAN SERIBU", + "3171": "JAKARTA SELATAN", + "3172": "JAKARTA TIMUR", + "3173": "JAKARTA PUSAT", + "3174": "JAKARTA BARAT", + "3175": "JAKARTA UTARA", + "3201": "BOGOR", + "3202": "SUKABUMI", + "3203": "CIANJUR", + "3204": "BANDUNG", + "3205": "GARUT", + "3206": "TASIKMALAYA", + "3207": "CIAMIS", + "3208": "KUNINGAN", + "3209": "CIREBON", + "3210": "MAJALENGKA", + "3211": "SUMEDANG", + "3212": "INDRAMAYU", + "3213": "SUBANG", + "3214": "PURWAKARTA", + "3215": "KARAWANG", + "3216": "BEKASI", + "3217": "BANDUNG BARAT", + "3218": "PANGANDARAN", + "3271": "BOGOR", + "3272": "SUKABUMI", + "3273": "BANDUNG", + "3274": "CIREBON", + "3275": "BEKASI", + "3276": "DEPOK", + "3277": "CIMAHI", + "3278": "TASIKMALAYA", + "3279": "BANJAR", + "3301": "CILACAP", + "3302": "BANYUMAS", + "3303": "PURBALINGGA", + "3304": "BANJARNEGARA", + "3305": "KEBUMEN", + "3306": "PURWOREJO", + "3307": "WONOSOBO", + "3308": "MAGELANG", + "3309": "BOYOLALI", + "3310": "KLATEN", + "3311": "SUKOHARJO", + "3312": "WONOGIRI", + "3313": "KARANGANYAR", + "3314": "SRAGEN", + "3315": "GROBOGAN", + "3316": "BLORA", + "3317": "REMBANG", + "3318": "PATI", + "3319": "KUDUS", + "3320": "JEPARA", + "3321": "DEMAK", + "3322": "SEMARANG", + "3323": "TEMANGGUNG", + "3324": "KENDAL", + "3325": "BATANG", + "3326": "PEKALONGAN", + "3327": "PEMALANG", + "3328": "TEGAL", + "3329": "BREBES", + "3371": "MAGELANG", + "3372": "SURAKARTA", + "3373": "SALATIGA", + "3374": "SEMARANG", + "3375": "PEKALONGAN", + "3376": "TEGAL", + "3401": "KULON PROGO", + "3402": "BANTUL", + "3403": "GUNUNGKIDUL", + "3404": "SLEMAN", + "3471": "YOGYAKARTA", + "3501": "PACITAN", + "3502": "PONOROGO", + "3503": "TRENGGALEK", + "3504": "TULUNGAGUNG", + "3505": "BLITAR", + "3506": "KEDIRI", + "3507": "MALANG", + "3508": "LUMAJANG", + "3509": "JEMBER", + "3510": "BANYUWANGI", + "3511": "BONDOWOSO", + "3512": "SITUBONDO", + "3513": "PROBOLINGGO", + "3514": "PASURUAN", + "3515": "SIDOARJO", + "3516": "MOJOKERTO", + "3517": "JOMBANG", + "3518": "NGANJUK", + "3519": "MADIUN", + "3520": "MAGETAN", + "3521": "NGAWI", + "3522": "BOJONEGORO", + "3523": "TUBAN", + "3524": "LAMONGAN", + "3525": "GRESIK", + "3526": "BANGKALAN", + "3527": "SAMPANG", + "3528": "PAMEKASAN", + "3529": "SUMENEP", + "3571": "KEDIRI", + "3572": "BLITAR", + "3573": "MALANG", + "3574": "PROBOLINGGO", + "3575": "PASURUAN", + "3576": "MOJOKERTO", + "3577": "MADIUN", + "3578": "SURABAYA", + "3579": "BATU", + "3601": "PANDEGLANG", + "3602": "LEBAK", + "3603": "TANGERANG", + "3604": "SERANG", + "3671": "TANGERANG", + "3672": "CILEGON", + "3673": "SERANG", + "3674": "TANGERANG SELATAN", + "5101": "JEMBRANA", + "5102": "TABANAN", + "5103": "BADUNG", + "5104": "GIANYAR", + "5105": "KLUNGKUNG", + "5106": "BANGLI", + "5107": "KARANGASEM", + "5108": "BULELENG", + "5171": "DENPASAR", + "5201": "LOMBOK BARAT", + "5202": "LOMBOK TENGAH", + "5203": "LOMBOK TIMUR", + "5204": "SUMBAWA", + "5205": "DOMPU", + "5206": "BIMA", + "5207": "SUMBAWA BARAT", + "5208": "LOMBOK UTARA", + "5271": "MATARAM", + "5272": "BIMA", + "5301": "SUMBA BARAT", + "5302": "SUMBA TIMUR", + "5303": "KUPANG", + "5304": "TIMOR TENGAH SELATAN", + "5305": "TIMOR TENGAH UTARA", + "5306": "BELU", + "5307": "ALOR", + "5308": "LEMBATA", + "5309": "FLORES TIMUR", + "5310": "SIKKA", + "5311": "ENDE", + "5312": "NGADA", + "5313": "MANGGARAI", + "5314": "ROTE NDAO", + "5315": "MANGGARAI BARAT", + "5316": "SUMBA TENGAH", + "5317": "SUMBA BARAT DAYA", + "5318": "NAGEKEO", + "5319": "MANGGARAI TIMUR", + "5320": "SABU RAIJUA", + "5321": "MALAKA", + "5371": "KUPANG", + "6101": "SAMBAS", + "6102": "BENGKAYANG", + "6103": "LANDAK", + "6104": "MEMPAWAH", + "6105": "SANGGAU", + "6106": "KETAPANG", + "6107": "SINTANG", + "6108": "KAPUAS HULU", + "6109": "SEKADAU", + "6110": "MELAWI", + "6111": "KAYONG UTARA", + "6112": "KUBU RAYA", + "6171": "PONTIANAK", + "6172": "SINGKAWANG", + "6201": "KOTAWARINGIN BARAT", + "6202": "KOTAWARINGIN TIMUR", + "6203": "KAPUAS", + "6204": "BARITO SELATAN", + "6205": "BARITO UTARA", + "6206": "SUKAMARA", + "6207": "LAMANDAU", + "6208": "SERUYAN", + "6209": "KATINGAN", + "6210": "PULANG PISAU", + "6211": "GUNUNG MAS", + "6212": "BARITO TIMUR", + "6213": "MURUNG RAYA", + "6271": "PALANGKA RAYA", + "6301": "TANAH LAUT", + "6302": "KOTABARU", + "6303": "BANJAR", + "6304": "BARITO KUALA", + "6305": "TAPIN", + "6306": "HULU SUNGAI SELATAN", + "6307": "HULU SUNGAI TENGAH", + "6308": "HULU SUNGAI UTARA", + "6309": "TABALONG", + "6310": "TANAH BUMBU", + "6311": "BALANGAN", + "6371": "BANJARMASIN", + "6372": "BANJARBARU", + "6401": "PASER", + "6402": "KUTAI BARAT", + "6403": "KUTAI KARTANEGARA", + "6404": "KUTAI TIMUR", + "6405": "BERAU", + "6409": "PENAJAM PASER UTARA", + "6411": "MAHAKAM ULU", + "6471": "BALIKPAPAN", + "6472": "SAMARINDA", + "6474": "BONTANG", + "6501": "MALINAU", + "6502": "BULUNGAN", + "6503": "TANA TIDUNG", + "6504": "NUNUKAN", + "6571": "TARAKAN", + "7101": "BOLAANG MONGONDOW", + "7102": "MINAHASA", + "7103": "KEPULAUAN SANGIHE", + "7104": "KEPULAUAN TALAUD", + "7105": "MINAHASA SELATAN", + "7106": "MINAHASA UTARA", + "7107": "BOLAANG MONGONDOW UTARA", + "7108": "SIAU TAGULANDANG BIARO", + "7109": "MINAHASA TENGGARA", + "7110": "BOLAANG MONGONDOW SELATAN", + "7111": "BOLAANG MONGONDOW TIMUR", + "7171": "MANADO", + "7172": "BITUNG", + "7173": "TOMOHON", + "7174": "KOTAMOBAGU", + "7201": "BANGGAI KEPULAUAN", + "7202": "BANGGAI", + "7203": "MOROWALI", + "7204": "POSO", + "7205": "DONGGALA", + "7206": "TOLI-TOLI", + "7207": "BUOL", + "7208": "PARIGI MOUTONG", + "7209": "TOJO UNA-UNA", + "7210": "SIGI", + "7211": "BANGGAI LAUT", + "7212": "MOROWALI UTARA", + "7271": "PALU", + "7301": "KEPULAUAN SELAYAR", + "7302": "BULUKUMBA", + "7303": "BANTAENG", + "7304": "JENEPONTO", + "7305": "TAKALAR", + "7306": "GOWA", + "7307": "SINJAI", + "7308": "MAROS", + "7309": "PANGKAJENE DAN KEPULAUAN", + "7310": "BARRU", + "7311": "BONE", + "7312": "SOPPENG", + "7313": "WAJO", + "7314": "SIDENRENG RAPPANG", + "7315": "PINRANG", + "7316": "ENREKANG", + "7317": "LUWU", + "7318": "TANA TORAJA", + "7322": "LUWU UTARA", + "7325": "LUWU TIMUR", + "7326": "TORAJA UTARA", + "7371": "MAKASSAR", + "7372": "PAREPARE", + "7373": "PALOPO", + "7401": "BUTON", + "7402": "MUNA", + "7403": "KONAWE", + "7404": "KOLAKA", + "7405": "KONAWE SELATAN", + "7406": "BOMBANA", + "7407": "WAKATOBI", + "7408": "KOLAKA UTARA", + "7409": "BUTON UTARA", + "7410": "KONAWE UTARA", + "7411": "KOLAKA TIMUR", + "7412": "KONAWE KEPULAUAN", + "7413": "MUNA BARAT", + "7414": "BUTON TENGAH", + "7415": "BUTON SELATAN", + "7471": "KENDARI", + "7472": "BAUBAU", + "7501": "BOALEMO", + "7502": "GORONTALO", + "7503": "POHUWATO", + "7504": "BONE BOLANGO", + "7505": "GORONTALO UTARA", + "7571": "GORONTALO", + "7601": "MAJENE", + "7602": "POLEWALI MANDAR", + "7603": "MAMASA", + "7604": "MAMUJU", + "7605": "PASANGKAYU", + "7606": "MAMUJU TENGAH", + "8101": "KEPULAUAN TANIMBAR", + "8102": "MALUKU TENGGARA", + "8103": "MALUKU TENGAH", + "8104": "BURU", + "8105": "KEPULAUAN ARU", + "8106": "SERAM BAGIAN BARAT", + "8107": "SERAM BAGIAN TIMUR", + "8108": "MALUKU BARAT DAYA", + "8109": "BURU SELATAN", + "8171": "AMBON", + "8172": "TUAL", + "8201": "HALMAHERA BARAT", + "8202": "HALMAHERA TENGAH", + "8203": "KEPULAUAN SULA", + "8204": "HALMAHERA SELATAN", + "8205": "HALMAHERA UTARA", + "8206": "HALMAHERA TIMUR", + "8207": "PULAU MOROTAI", + "8208": "PULAU TALIABU", + "8271": "TERNATE", + "8272": "TIDORE KEPULAUAN", + "9101": "FAKFAK", + "9102": "KAIMANA", + "9103": "TELUK WONDAMA", + "9104": "TELUK BINTUNI", + "9105": "MANOKWARI", + "9111": "MANOKWARI SELATAN", + "9112": "PEGUNUNGAN ARFAK", + "9201": "RAJA AMPAT", + "9202": "SORONG", + "9203": "SORONG SELATAN", + "9204": "MAYBRAT", + "9205": "TAMBRAUW", + "9271": "SORONG", + "9403": "JAYAPURA", + "9408": "KEPULAUAN YAPEN", + "9409": "BIAK NUMFOR", + "9419": "SARMI", + "9420": "KEEROM", + "9426": "WAROPEN", + "9427": "SUPIORI", + "9428": "MAMBERAMO RAYA", + "9471": "JAYAPURA", + "9501": "MERAUKE", + "9502": "BOVEN DIGOEL", + "9503": "MAPPI", + "9504": "ASMAT", + "9601": "MIMIKA", + "9602": "DOGIYAI", + "9603": "DEIYAI", + "9604": "NABIRE", + "9605": "PANIAI", + "9606": "INTAN JAYA", + "9607": "PUNCAK", + "9608": "PUNCAK JAYA", + "9701": "NDUGA", + "9702": "JAYAWIJAYA", + "9703": "LANNY JAYA", + "9704": "TOLIKARA", + "9705": "MAMBERAMO TENGAH", + "9706": "YALIMO", + "9707": "YAHUKIMO", + "9708": "PEGUNUNGAN BINTANG" +} \ No newline at end of file diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore deleted file mode 100755 index d6b7ef3..0000000 --- a/storage/app/public/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore From c5be8e9ecd4a9d17e50f6ad75e170b1bdeae0cec Mon Sep 17 00:00:00 2001 From: baghizadizn Date: Mon, 17 Nov 2025 15:20:18 +0700 Subject: [PATCH 3/3] fix placeholder image --- resources/views/admin/instructor/show_document.blade.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/resources/views/admin/instructor/show_document.blade.php b/resources/views/admin/instructor/show_document.blade.php index 6b54cd3..7ef1ac0 100644 --- a/resources/views/admin/instructor/show_document.blade.php +++ b/resources/views/admin/instructor/show_document.blade.php @@ -5,7 +5,7 @@ $user_photo = get_user_info($applicant_details->user_id)->photo; // Ensure the placeholder image path is correct - $placeholder_image = asset('uploads/users/student/placeholder/placeholder.png'); + $placeholder_image = asset('uploads/system/placeholder.png'); @endphp @@ -37,10 +37,6 @@ height="80"> -

$placeholder_image: {{ $placeholder_image ?? 'N/A' }}

- -

$user_photo: {{ $user_photo ?? 'N/A' }}

-