$actual, 'topics' => $topics, 'topicsCount' => $topicsCount, ]); } // Menampilkan detail materi PHP tertentu sesuai dengan phpid public function php_material_detail() { $phpid = (int)$_GET['phpid'] ?? ''; $start = (int)$_GET['start'] ?? ''; $output = $_GET['output'] ?? ''; $results = DB::select("select * from php_topics_detail where id_topics = $phpid and id ='$start' "); $html_start = ''; foreach ($results as $r) { if ($phpid == $r->id_topics) { $html_start = empty($r->file_name) ? $r->description : $r->file_name; $pdf_reader = !empty($r->file_name) ? 1 : 0; break; } } $listTask = DB::select("select aa.*, us.name from php_user_submits aa join users us on aa.userid = us.id where php_id = $phpid and php_id_topic = $start "); $idUser = Auth::user()->id; $roleTeacher = DB::select("select role from users where id = $idUser"); $topics = Topic::all(); $detail = Topic::findOrFail($phpid); $topicsCount = count($topics); $detailCount = ($topicsCount / $topicsCount) * 10; return view('php.student.material.topics_detail', [ 'row' => $detail, 'topics' => $topics, 'phpid' => $phpid, 'html_start' => $html_start, 'pdf_reader' => $pdf_reader, 'topicsCount' => $topicsCount, 'detailCount' => $detailCount, 'output' => $output, 'flag' => isset($results[0]) ? $results[0]->flag : 0, 'listTask' => $listTask, 'role' => isset($roleTeacher[0]) ? $roleTeacher[0]->role : '', ]); } // Mengunggah file yang dikirim oleh pengguna public function upload(Request $request) { if ($request->hasFile('upload')) { $originName = $request->file('upload')->getClientOriginalName(); $fileName = pathinfo($originName, PATHINFO_FILENAME); $extension = $request->file('upload')->getClientOriginalExtension(); $fileName = $fileName . '_' . time() . '.' . $extension; // Mengambil nama asli file, menambahkan timestamp, dan memindahkan file $request->file('upload')->move(public_path('media'), $fileName); $url = asset('media/' . $fileName); return response()->json(['fileName' => $fileName, 'uploaded' => 1, 'url' => $url]); } } // Mengirim tugas yang dilakukan oleh siswa public function send_task() { $phpid = (int)$_GET['phpid'] ?? ''; $task = (int)$_GET['task'] ?? ''; $output = $_GET['output'] ?? ''; $task_db = DB::table('php_task') ->where('id_topics', $phpid) ->where('id', $task) ->first(); if ($task_db && $task_db->id == $task) { $html_start = $this->html_task(); } else { $html_start = ""; } $pdf_reader = 0; $topics = Topic::all(); $detail = Topic::findOrFail($phpid); $topicsCount = count($topics); $persen = ($topicsCount / $topicsCount) * 10; session(['params' => $persen]); return view('php.student.material.topics_detail', [ 'row' => $detail, 'topics' => $topics, 'phpid' => $phpid, 'html_start' => $html_start, 'pdf_reader' => $pdf_reader, 'detailCount' => $persen, 'output' => $output, ]); } public function html_task() { return view('php.student.task.form_submission_task', []); } public function php_admin() { return view('php.admin.material.upload_materi', []); } // Mengirimkan tugas dari siswa dan menjalankan tes unit public function task_submission(Request $request) { $phpid = (int)$request->get('phpid'); $start = (int)$request->get('start'); $this->validate($request, [ 'file' => 'required', ]); $file = $request->file('file'); $file_name = Auth::user()->name . '_' . $file->getClientOriginalName(); Storage::disk('public')->makeDirectory('private/' . Auth::user()->name); Storage::disk('public')->put('/private/' . Auth::user()->name . '/' . $file_name, File::get($file)); $userName = Auth::user()->name; Session::put('user_name', $userName); Session::put('ori_file_name', $file_name); $path = storage_path("app/private/{$userName}/{$file_name}"); Session::put('path', $path); $val = session('key'); // DB::select("TRUNCATE TABLE php_user_submits"); // DB::insert("insert into php_user_submits(userid) values ('$val')"); $phpunitExecutable = base_path('vendor/bin/phpunit'); $unitTest = ''; switch ($start) { case 43: $unitTest = base_path('tests/CreateDatabase.php'); break; case 44: $unitTest = base_path('tests/CheckConnection.php'); break; case 45: $unitTest = base_path('tests/CreateTableGuru.php'); break; case 46: $unitTest = base_path('tests/CreateTable.php'); break; case 47: $unitTest = base_path('tests/CheckInsertGuru.php'); break; case 48: $unitTest = base_path('tests/CheckInsert.php'); break; // case 48: // $unitTest = base_path('tests/CheckInsertHtml.php'); // break; // case 49: // $unitTest = base_path('tests/CheckInsertHtmlGuru.php'); // break; case 51: $unitTest = base_path('tests/CheckSelectHtmlGuru.php'); break; case 52: $unitTest = base_path('tests/CheckSelectHtml.php'); break; case 53: $unitTest = base_path('tests/CheckUpdateHtmlGuru.php'); break; case 54: $unitTest = base_path('tests/CheckUpdateHtml.php'); break; case 55: $unitTest = base_path('tests/CheckDeleteHtmlGuru.php'); break; case 56: $unitTest = base_path('tests/CheckDeleteHtml.php'); break; default: // Penanganan default jika $start tidak sesuai dengan yang diharapkan break; } Storage::disk('local')->put('/private/testingunit/testingunit.php', File::get($file)); // Run PHPUnit tests using exec $output = []; $returnVar = 0; exec("$phpunitExecutable $unitTest", $output, $returnVar); Storage::deleteDirectory('/private/testingunit'); // Output the results $outputString = "
PHPUnit Output:
"; $outputString .= implode("
", $output) . "
"; $outputString .= "Return Code: $returnVar
"; $idUser = Auth::user()->id; $pathuser = 'storage/private/' . $userName . '/' . $file_name . ''; $flag = $returnVar == 0 ? 'true' : 'false'; DB::insert("INSERT INTO php_user_submits(userid, path, flag, php_id, php_id_topic) values ('$idUser', '$pathuser', '$flag', $phpid, $start)"); return redirect('/php/detail-topics?phpid=' . $phpid . '&start=' . $start . '&output=' . $outputString . ''); } // Menjalankan semua tes unit yang ada. function unittesting2(){ $val = session('key'); DB::select("TRUNCATE TABLE php_user_submits"); DB::insert("insert into php_user_submits(userid) values ('$val')"); $path_test = base_path("phpunit.xml"); $path = base_path("vendor\bin\phpunit -c $path_test"); $output = shell_exec($path); // echo dd($output); // echo json_encode($output); $string = htmlentities($output); $string = str_replace("\n", ' ', $string); $pattern = '/PHPUnit\s+(\d+\.\d+\.\d+).*Runtime:\s+PHP\s+(\d+\.\d+\.\d+).*Time:\s+(\d+:\d+\.\d+),\s+Memory:\s+(\d+\.\d+)\s+MB\s+OK\s+\((\d+)\stests,\s+(\d+)\sassertions\)/'; if (preg_match($pattern, $string, $matches)) { $phpUnitVersion = $matches[1]; $phpVersion = $matches[2]; $executionTime = $matches[3]; $memoryUsage = $matches[4]; $numTests = $matches[5]; $numAssertions = $matches[6]; // Output the extracted information echo "PHPUnit version: $phpUnitVersion
"; echo "PHP version: $phpVersion
"; echo "Execution time: $executionTime
"; echo "Memory usage: $memoryUsage MB
"; echo "Number of tests: $numTests
"; echo "Number of assertions: $numAssertions
"; $ok_position = strpos($string, 'OK'); if ($ok_position !== false) { $ok_part = substr($string, $ok_position); echo "Tests Run : ". $ok_part; } }else{ $string = json_encode($output); $text = str_replace("\n", ' ', $output); // Define patterns to extract relevant information $pattern_phpunit_version = '/PHPUnit\s+(\d+\.\d+\.\d+)/'; $pattern_php_runtime = '/Runtime:\s+PHP\s+([\d.]+)/'; $pattern_configuration = '/Configuration:\s+(.+)/'; $pattern_failure_count = '/There was (\d+) failure/'; $pattern_failure_test_case = '/Failed asserting that \'(.*?)\' contains \'(.*?)\'./'; $pattern_failure_location = '/(C:\\\\.*?\\.php):(\d+)/'; // Perform matching preg_match($pattern_phpunit_version, $text, $matches_phpunit_version); preg_match($pattern_php_runtime, $text, $matches_php_runtime); preg_match($pattern_configuration, $text, $matches_configuration); preg_match($pattern_failure_count, $text, $matches_failure_count); preg_match($pattern_failure_test_case, $text, $matches_failure_test_case); preg_match($pattern_failure_location, $text, $matches_failure_location); // Extracted information $phpunit_version = isset($matches_phpunit_version[1]) ? $matches_phpunit_version[1] : "Not found"; $php_runtime = isset($matches_php_runtime[1]) ? $matches_php_runtime[1] : "Not found"; $configuration_path = isset($matches_configuration[1]) ? $matches_configuration[1] : "Not found"; $num_failures = isset($matches_failure_count[1]) ? $matches_failure_count[1] : "Not found"; $failed_assertion = isset($matches_failure_test_case[1]) ? htmlspecialchars($matches_failure_test_case[1]) : "Not found"; $expected_content = isset($matches_failure_test_case[2]) ? htmlspecialchars($matches_failure_test_case[2]) : "Not found"; $failure_location = isset($matches_failure_location[1]) ? $matches_failure_location[1] : "Not found"; $failure_line = isset($matches_failure_location[2]) ? $matches_failure_location[2] : "Not found"; // Output extracted information echo "PHPUnit version: $phpunit_version
"; echo "PHP Runtime: $php_runtime
"; echo "Configuration path: $configuration_path
"; echo "Number of failures: $num_failures
"; echo "Failed assertion: $failed_assertion
"; echo "Expected content: $expected_content
"; echo "Failure location: $failure_location
"; echo "Failure line: $failure_line
"; } } // Menjalankan tes unit tertentu untuk uji coba function unittesting(){ $namaFile = 'admin_CreateDB.php'; $phpunitExecutable = base_path('vendor/bin/phpunit'); $unitTest = base_path('tests/FileReadTest.php'); // Run PHPUnit tests using exec $output = []; $returnVar = 0; exec("$phpunitExecutable $unitTest", $output, $returnVar); // Output the results // echo "PHPUnit Output:
"; // echo implode("
", $output) . "
"; // echo "Return Code: $returnVar
"; return response()->json($output); } // Menyimpan parameter sesi function session_progress(){ session(['params' => $_POST['params']]); } }