diff --git a/app/Http/Controllers/AutograderController.php b/app/Http/Controllers/AutograderController.php index 531929c41eca9e57a53867a40c5f2dbb0d5e5e0e..0a0bfaadd0074ae57890161542633e659cc22678 100644 --- a/app/Http/Controllers/AutograderController.php +++ b/app/Http/Controllers/AutograderController.php @@ -29,24 +29,34 @@ class AutograderController extends Controller $answer_keys = DB::table('spreadsheets')->where('id', $id_topic)->get(); $cells = []; $cells_temp = []; - $keys = []; + $keys_formula = []; + $keys_value = []; foreach($answer_keys as $answer_key) { $cells[] = 'Sheet1!' . $answer_key->cell; $cells_temp[] = $answer_key->cell; - $keys[] = $answer_key->value; + $keys_formula[] = $answer_key->formula; + $keys_value[] = $answer_key->value; } - $answers = AutograderController::getStudentAnswer($request->id_spreadsheet, $cells); + $answers_formula = AutograderController::getStudentAnswer($request->id_spreadsheet, $cells, 0); + $answers_value = AutograderController::getStudentAnswer($request->id_spreadsheet, $cells, 1); - $results = AutograderController::grade($keys, $answers); + $results_formula = AutograderController::gradeFormula($keys_formula, $answers_formula); + $results_value = AutograderController::gradeFormula($keys_value, $answers_value); + $results = []; + for ($i=0; $i<count($results_formula); $i++) { + $results[] = ($results_formula[$i] + $results_value[$i])/2; + } echo ' <table class="table table-hover"> <thead> <tr> <th scope="col">Cell</th> - <th scope="col">Kunci</th> - <th scope="col">Jawaban</th> + <th scope="col">Formula Kunci</th> + <th scope="col">Formula Jawaban</th> + <th scope="col">Nilai Kunci</th> + <th scope="col">Nilai Jawaban</th> <th scope="col">Skor</th> </tr> </thead> @@ -58,13 +68,17 @@ class AutograderController extends Controller $score = $score + $results[$i]*100; echo '<tr>'; echo '<th>' . $cells_temp[$i] . '</th>'; - echo '<td>' . $keys[$i] . '</td>'; - echo '<td>' . $answers[$i] . '</td>'; + echo '<td>' . $keys_formula[$i] . '</td>'; + echo '<td>' . $answers_formula[$i] . '</td>'; + echo '<td>' . $keys_value[$i] . '</td>'; + echo '<td>' . $answers_value[$i] . '</td>'; echo '<td>' . $results[$i]*100 . '/100</td>'; echo '</tr>'; } echo ' <tr> + <td></td> + <td></td> <td></td> <td></td> <th class="table-primary">Skor Akhir</th> @@ -89,11 +103,30 @@ class AutograderController extends Controller } /** - * Get grade from answer. + * Get grade from answer value + * + * @return grades + */ + public function gradeValue($keys, $answers) + { + $results = []; + for($i=0; $i<count($keys); $i++) { + if ($keys[$i] == $answers[$i]) { + $results[] = 1; + } else { + $results[] = 0; + } + } + + return $results; + } + + /** + * Get grade from answer formula * * @return grades */ - public function grade($keys, $answers) + public function gradeFormula($keys, $answers) { $results = []; for($i=0; $i<count($keys); $i++) { @@ -121,7 +154,7 @@ class AutograderController extends Controller } /** - * Get Jaccard Index score. + * Get Jaccard Index score * * @return score */ @@ -134,11 +167,11 @@ class AutograderController extends Controller } /** - * Get data from spreadsheet. + * Get data from spreadsheet * * @return answer */ - public function getStudentAnswer($id_spreadsheet, $ranges) + public function getStudentAnswer($id_spreadsheet, $ranges, $type) { $client = new Google_Client(); $client->setApplicationName('Datalearn'); @@ -147,9 +180,13 @@ class AutograderController extends Controller $client->setAccessType('offline'); $service = new \Google_Service_Sheets($client); - + + $render = 'FORMULA'; + if ($type == 1) { + $render = 'FORMATTED_VALUE'; + } $responses = $service->spreadsheets_values->batchGet($id_spreadsheet, [ - 'valueRenderOption' => 'FORMULA', + 'valueRenderOption' => $render, 'dateTimeRenderOption' => 'SERIAL_NUMBER', 'ranges' => $ranges ]); diff --git a/app/Http/Controllers/LearnController.php b/app/Http/Controllers/LearnController.php index 9bc21c2d0bff389ca4c694b1f2bef3b05a642cf0..1f5193d54094d11f54c2f2fc15ec80417d2a17c1 100644 --- a/app/Http/Controllers/LearnController.php +++ b/app/Http/Controllers/LearnController.php @@ -148,7 +148,7 @@ class LearnController extends Controller $client = LearnController::getClient(); $service = new \Google_Service_Sheets($client); - // Get Answer + // Get Answer Formula $responses = $service->spreadsheets_values->batchGet($request->id_spreadsheet, [ 'valueRenderOption' => 'FORMULA', 'dateTimeRenderOption' => 'SERIAL_NUMBER', @@ -164,13 +164,30 @@ class LearnController extends Controller } } + // Get Answer Value + $responses2 = $service->spreadsheets_values->batchGet($request->id_spreadsheet, [ + 'valueRenderOption' => 'FORMATTED_VALUE', + 'dateTimeRenderOption' => 'SERIAL_NUMBER', + 'ranges' => $cells + ]); + + $answers2 = []; + foreach ($responses2->valueRanges as $response) { + if ($response->values == NULL) { + $answers2[] = NULL; + } else { + $answers2[] = strtoupper(strval(($response->values)[0][0])); + } + } + // Save to Database DB::table('spreadsheets')->where('id',$id_topic)->delete(); for ($i=0; $i<count($answers); $i++) { DB::table('spreadsheets')->insert([ 'id' => $id_topic, 'cell' => $cells[$i], - 'value' => $answers[$i] + 'value' => $answers2[$i], + 'formula' => $answers[$i] ]); } diff --git a/database/migrations/2020_03_11_190641_create_spreadsheets_table.php b/database/migrations/2020_03_11_190641_create_spreadsheets_table.php index c7be28e11034f2f63d6e518e4cd3bb9c27a7ea3e..b3ab39ab6c83a7de5fb3407a1a66742a3a3344f1 100644 --- a/database/migrations/2020_03_11_190641_create_spreadsheets_table.php +++ b/database/migrations/2020_03_11_190641_create_spreadsheets_table.php @@ -17,6 +17,7 @@ class CreateSpreadsheetsTable extends Migration $table->bigInteger('id')->unsigned(); $table->string('cell'); $table->string('value'); + $table->string('formula'); $table->primary(['id', 'cell']); $table->foreign('id')->references('id')->on('topics');