get(); foreach ( $topik AS $isi_topik ) { // data percobaan $percobaan = DB::table("python_percobaan")->where("id_topik", $isi_topik->id_topik); $totalPercobaan = $percobaan->count(); $totalPassed = 0; $dt_percobaan = $percobaan->get(); if ( $totalPercobaan > 0 ) { foreach ( $dt_percobaan AS $isi_percobaan ) { // ambil data student validation $where = array( 'userid' => Auth::id(), 'id_percobaan' => $isi_percobaan->id_percobaan, ); $dt_validation = DB::table("python_students_validation")->where($where)->count(); // apakah sudah selesai ? if ( $dt_validation == 1 ) { $totalPassed++; } } } array_push( $python_topics, array( 'totalPercobaan' => $totalPercobaan, 'totalPassed' => $totalPassed, 'isi' => $isi_topik ) ); } return view('student.pythoncourse.python_task.uitask', compact('python_topics')); } // Menampilkan halaman detail topik pembelajaran (detail percobaan) public function detail_percobaan( $id_topik ){ $infotopik = DB::table('python_topics')->where('id_topik', $id_topik)->first(); $percobaan = DB::table('python_percobaan')->where('id_topik', $id_topik)->get(); // auth $id = Auth::id(); $pengerjaan = DB::table('python_students_validation')->where('userid', $id)->get(); return view('student.pythoncourse.python_task.uitask_detail', compact('percobaan', 'infotopik','pengerjaan')); } // Menampilkan halaman pengerjaan (teks editor) public function teks_editor( $id_percobaan){ $percobaan = DB::table('python_percobaan')->where('id_percobaan', $id_percobaan)->first(); $id_topik = $percobaan->id_topik; $infotopik = DB::table('python_topics')->where('id_topik', $id_topik)->first(); $data['infotopik'] = $infotopik; $data['percobaan'] = $percobaan; // $paginate = DB::table('python_percobaan'); //Sebelumnya $previous = DB::table('python_percobaan')->where('id_percobaan', '<', $id_percobaan)->orderBy('id_percobaan', "desc"); //Selanjutnya $next = DB::table('python_percobaan')->where('id_percobaan', '>', $id_percobaan)->orderBy('id_percobaan', "asc"); $btn_previous = "javascript:;"; $btn_next = "javascript:;"; if ( $previous->count() > 0 ) { $previous = $previous->first(); $btn_previous = url('student/pythoncourse/python/pengerjaan/'. $previous->id_percobaan); } if ( $next->count() > 0 ) { $next = $next->first(); $btn_next = url('student/pythoncourse/python/pengerjaan/'. $next->id_percobaan); } $data['previous'] = $btn_previous; $data['next'] = $btn_next; return view('student.pythoncourse.python_task.uipengerjaan', $data); } // Untuk mengcompile code jawaban mahasiswa function compiler( Request $request ) { // source code dari user $textEditor = $request->get('code'); // source code mahasiswa $id_topik = $request->get('id_topik'); $id_percobaan = $request->get('id_percobaan'); // $time = $request->get('time'); // ambil data percobaan berdasarkan id_percobaan // untuk mengambil filetest dan lokasi package unittest $dt_percobaan = DB::table('python_percobaan')->where('id_percobaan', $id_percobaan)->first(); // file name (nama file) $fileName = uniqid().'_'.strtotime("now"); // // lokasi penyimpanan $filePath = "python-resources/unittest/jawaban/". $fileName . '.py'; // file terbuat $programFile = fopen($filePath, "w"); // write code di file fwrite($programFile, $textEditor); fclose($programFile); // kondisi apabila file + codding error atau tidak ? // memanggil fungsi check error $cek_error = $this->check_error( $filePath ); $statusSintax = false; // 0 -> tidak ada error ([1] = status) // 0 -> tidak error if ( $cek_error[1] == 0 ) { //ambil direktory $packageDirectory = "jawaban.". $fileName; $fileUnittest = $dt_percobaan->filetest; $unittest = "C:\\xampp\\htdocs\\iCLOP\\public\\python-resources\\unittest\\". $fileUnittest; $output = shell_exec("C:\Users\Rania\AppData\Local\Programs\Python\Python310\python.exe ".$unittest." ".$packageDirectory." ".$fileName." --verbose 2>&1"); $validation_detail = ""; $status = ""; // split output $dataTest = explode("Error", $output); // cek string data test memilik nilai OK // cek status passed atau failed = Menetukan sttus if ( count($dataTest) > 1 ) { // $validation_detail = $output; $status = "FAILED"; } else { $status = "PASSED"; } // pembuatan poin error ceklist per unit tetsing $validation_detail = ""; $dt_output = explode("|", $output); //[0] tidak usah di test $title = $dt_output[0]; $isi = ""; // urutan itu mengetahui pemisah (cuklekan) foreach ( $dt_output AS $urutan => $isi_error ) { if ( $urutan != 0 ) { // pisah string $string = explode(" ", $isi_error); $responseError = explode("-", $isi_error); $fungsiTes = $responseError[0]; // passed $statusTes = $responseError[1]; // failed $pisahStatusTes = explode(" ", $statusTes); // data diolah lagi $cekExeption = explode(" ", $statusTes); // Untuk error nama variabel if ( in_array("no", $cekExeption) ) { $statusTes = $statusTes; $icon = ''; $status = "FAILED"; } else { // cek error unit testing $hapusSpasiPesan = rtrim($pisahStatusTes[0]); $hapusSpasiPesan = ltrim($hapusSpasiPesan); if ( $hapusSpasiPesan[1] == "F" ) { $icon = ''; $statusTes = explode(": ", $statusTes)[1]; } else { $icon = ''; // $statusTes = implode(",", $cekExeption); // $statusTes = var_dump( $cekExeption ); } } // echo $fungsiTes; // echo $statusTes.' '.$fungsiTes; // echo '