TIF_NGANJUK_E41212301/app/Http/Controllers/KuesionerLSController.php

218 lines
9.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\KuesionerLearningStyle;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
class KuesionerLSController extends Controller
{
public function store(Request $request)
{
$mappings = [
1 => [
"Mencari tahu tokonya apakah ada di suatu tempat yang saya ketahui" => 'K',
"Tanya arah jalan kepada teman" => 'A',
"Menulis petunjuk jalan" => 'R',
"Menggunakan Peta atau Layanan Maps" => 'V'
],
2 => [
"Melihat diagramnya" => 'V',
"Mendengarkan penjelasan orang tersebut" => 'A',
"Membaca kata-kata yang tampil di video" => 'R',
"Melakukan tindakan apa yang dilakukan oleh orang dalam video" => 'K'
],
3 => [
"Melihat hal-hal menarik pada tur tersebut" => 'K',
"Menggunakan peta atau layanan maps dan melihat lokasi yang akan dituju" => 'V',
"Membaca detail tur pada dokumen atau rencana tur" => 'R',
"Berdiskusi dengan teman atau penyelenggara tur yang merencanakan tur tersebut" => 'A'
],
4 => [
"Saya akan menerapkan ilmu yang saya punya pada dunia kerja nanti" => 'K',
"Saya akan bercakap dengan rekan kerja saat berdiskusi" => 'A',
"Saya akan menggunakan gambar atau video untuk menunjukkan pekerjaan saya kepada rekan kerja" => 'V',
"Saya akan menerapkan kata-kata yang baik saat mengirimkan pesan kepada rekan kerja" => 'R'
],
5 => [
"Saya suka berdiskusi" => 'A',
"Saya suka melihat pola dari apa yang saya pelajari" => 'V',
"Saya suka mencari contoh dari apa yang saya pelajari" => 'K',
"Saya suka membaca buku atau artikel" => 'R'
],
6 => [
"Melakukan riset dan perbandingan langsung di lokasi" => 'K',
"Membaca brosur yang berisi daftar barang yang saya cari" => 'R',
"Melihat ulasan di YouTube atau Media Sosial" => 'V',
"Berdiskusi dengan pakar" => 'A'
],
7 => [
"Melihat teman saya bermain catur dan memperhatikannya" => 'K',
"Mendengarkan penjelasan ahli tentang bagaimana aturan permainan" => 'A',
"Melihat tutorial di YouTube" => 'V',
"Membaca instruksi tertulis dari permainan catur" => 'R'
],
8 => [
"Memberi saya buku atau data tentang penyakit jantung yang saya alami" => 'R',
"Menggunakan alat peraga guna menjelaskan apa masalah jantung yang saya alami" => 'K',
"Saya ingin dokter menjelaskan tentang penyakit saya" => 'A',
"Menunjukkan grafik dan statistik dari penyakit jantung yang saya alami" => 'V'
],
9 => [
"Membaca instruksi yang muncul saat saya menjalankan aplikasi tersebut" => 'R',
"Berdiskusi dengan seseorang yang paham fungsi dan kegunaan dari aplikasi tersebut" => 'A',
"Saya langsung mencoba berbagai tombol pada aplikasi tersebut" => 'K',
"Saya melihat gambar atau video yang menjelaskan tentang aplikasi tersebut" => 'V'
],
10 => [
"Video pendek atau video panjang" => 'K',
"Interaksi pada desain yang menarik" => 'V',
"Artikel atau buku digital" => 'R',
"Radio atau Podcast" => 'A'
],
11 => [
"Diagram tahapan proyek" => 'V',
"Laporan proyek yang sedang dikerjakan" => 'R',
"Kesempatan untuk membahas proyek dengan manajer proyek" => 'A',
"Contoh nyata terhadap proyek sejenis yang sukses" => 'K'
],
12 => [
"Bertanya kepada seseorang mengenai fitur dan apa yang bisa kamera tersebut lakukan" => 'A',
"Membaca buku instruksi pada kotak kamera tentang bagaimana penggunaan yang benar" => 'R',
"Melihat ulasan dari seseorang yang membahas mengenai kamera tersebut" => 'V',
"Mengambil langsung beberapa foto dan membandingkannya untuk mendapat hasil terbaik" => 'K'
],
13 => [
"Demonstrasi, model atau praktek langsung" => 'K',
"Tanya jawab dan berdiskusi" => 'A',
"Buku, artikel, novel atau bahan bacaan" => 'R',
"Grafik, diagram, peta atau video" => 'V'
],
14 => [
"Mencontohkan dari apa yang saya lakukan" => 'K',
"Mencatat hasil yang saya peroleh" => 'R',
"Seseorang yang mengatakan umpan balik langsung kepada saya" => 'A',
"Menggunakan diagram atau video hasil dari apa yang saya lakukan" => 'V'
],
15 => [
"Menonton video atau rekaman ulasan dari seseorang yang mengunggahnya" => 'K',
"Berdiskusi dengan pemilik langsung di lokasi" => 'A',
"Membaca deskripsi mengenai fitur dan fasilitas yang diberikan" => 'R',
"Menggunakan layanan maps untuk mencari lokasi" => 'V'
],
16 => [
"Video tutorial yang menunjukkan setiap tahapan perakitan" => 'V',
"Saran dari seseorang yang berhasil melakukannya" => 'A',
"Petunjuk tertulis yang disertakan dalam paket pembelian" => 'R',
"Mencoba merakitnya langsung secara perlahan" => 'K'
]
];
$visual = 0;
$auditory = 0;
$readwrite = 0;
$kinesthetic = 0;
for ($i = 1; $i <= 16; $i++) {
$answer = $request->input("soal{$i}");
if ($answer && isset($mappings[$i]) && in_array($answer, $mappings[$i])) {
$category = array_search($answer, $mappings[$i]);
switch ($answer) {
case 'V':
$visual++;
break;
case 'A':
$auditory++;
break;
case 'R':
$readwrite++;
break;
case 'K':
$kinesthetic++;
break;
}
}
}
$total_questions = 16;
$visual_percentage = ($visual / $total_questions) * 100;
$auditory_percentage = ($auditory / $total_questions) * 100;
$readwrite_percentage = ($readwrite / $total_questions) * 100;
$kinesthetic_percentage = ($kinesthetic / $total_questions) * 100;
$percentages = [
'Visual' => $visual_percentage,
'Auditory' => $auditory_percentage,
'Read/Write' => $readwrite_percentage,
'Kinesthetic' => $kinesthetic_percentage
];
arsort($percentages);
$sorted_percentages = array_values($percentages);
$result = 'Multimodal';
$id_style = 1;
if ($sorted_percentages[0] - $sorted_percentages[1] > 10) {
foreach ($percentages as $category => $percentage) {
if ($percentage > 40) {
$result = $category;
switch ($category) {
case 'Visual':
$id_style = 2;
break;
case 'Auditory':
$id_style = 3;
break;
case 'Read/Write':
$id_style = 4;
break;
case 'Kinesthetic':
$id_style = 5;
break;
}
break;
}
}
}
// $input_data = [
// 'Visual' => $visual,
// 'Auditory' => $auditory,
// 'Read/Write' => $readwrite,
// 'Kinesthetic' => $kinesthetic
// ];
// $process = new Process([
// 'C:\Users\USER\AppData\Local\Programs\Python\Python312\python.exe',
// base_path('resources\scripts\predict_xgb.py'),
// json_encode($input_data)
// ]);
// $process->run();
// if (!$process->isSuccessful()) {
// throw new ProcessFailedException($process);
// }
// $output = json_decode($process->getOutput(), true);
// $result = $output['Result'];
// Perbarui atau buat data berdasarkan email
KuesionerLearningStyle::updateOrCreate(
['email' => Auth::user()->email ?? 'variousra@gmail.com'],
[
'visual' => $visual,
'auditory' => $auditory,
'readwrite' => $readwrite,
'kinesthetic' => $kinesthetic,
'id_lstyle' => $id_style,
'result' => $result,
]
);
return redirect()->route('kuesioner-mai')->with('success', 'Jawaban kuesioner berhasil disimpan!');
}
}