218 lines
9.3 KiB
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!');
|
|
}
|
|
} |