From cc4862a8da32dad535d6baa922484fd9035142e5 Mon Sep 17 00:00:00 2001 From: baghizadizn Date: Mon, 17 Nov 2025 08:12:57 +0000 Subject: [PATCH] fix gitignore --- .../Auth/RegisteredUserController.php | 141 +++++++--- app/Models/Instructors.php | 15 ++ public/phpmyadmin | 1 + .../admin/instructor/show_document.blade.php | 25 +- resources/views/auth/register.blade.php | 245 +++++++++--------- storage/.DS_Store | Bin 6148 -> 0 bytes storage/app/.gitignore | 3 - storage/app/public/.gitignore | 2 - storage/framework/.DS_Store | Bin 6148 -> 0 bytes 9 files changed, 265 insertions(+), 167 deletions(-) create mode 100644 app/Models/Instructors.php create mode 120000 public/phpmyadmin delete mode 100644 storage/.DS_Store delete mode 100755 storage/app/.gitignore delete mode 100755 storage/app/public/.gitignore delete mode 100644 storage/framework/.DS_Store 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' }}

+ +