From 5d3f94229af3e7ad06a56985942aaae1c5a7b279 Mon Sep 17 00:00:00 2001 From: Kurzenberger <01kuni1bif@hft-stuttgart.de> Date: Fri, 13 Dec 2024 10:56:56 +0100 Subject: [PATCH] deployed the files of moodleDta --- dta.zip | Bin 35018 -> 36220 bytes dta/classes/db_utils.php | 4 +- dta/classes/models/dta_result.php | 2 +- dta/classes/models/dta_result_summary.php | 8 +- dta/classes/view_submission_utils.php | 301 ++++++++++++++++--- dta/models/DtaResult.php | 0 dta_withRecommendationsTableAndNamespace.zip | Bin 0 -> 35019 bytes 7 files changed, 269 insertions(+), 46 deletions(-) create mode 100644 dta/models/DtaResult.php create mode 100644 dta_withRecommendationsTableAndNamespace.zip diff --git a/dta.zip b/dta.zip index 7dcd55a2535cd9a81852ca626777d90e7c5afd0e..46de9304492e612abb398213c29115b028b444d5 100644 GIT binary patch delta 8660 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 delta 7563 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 diff --git a/dta/classes/db_utils.php b/dta/classes/db_utils.php index 0dfb452..2361acf 100644 --- a/dta/classes/db_utils.php +++ b/dta/classes/db_utils.php @@ -58,7 +58,7 @@ class db_utils { return $records; } $moduleid = $module->id; - + print_r($records); // Schritt 3: Überprüfe jeden Datensatz foreach ($records as $key => $record) { // Hol den Namen der Übung aus dem Datensatz @@ -84,7 +84,7 @@ class db_utils { // Wenn der Abschlussstatus 1 ist, entferne den Datensatz aus $records if ($completion && $completion->completionstate == 1) { unset($records[$key]); - + } } } diff --git a/dta/classes/models/dta_result.php b/dta/classes/models/dta_result.php index d1650ee..654350f 100644 --- a/dta/classes/models/dta_result.php +++ b/dta/classes/models/dta_result.php @@ -100,7 +100,7 @@ class dta_result { * @param int $state Number of the state * @return string Name of state as defined */ - public static function getstatename(int $state): string { + public static function get_statename(int $state): string { if ($state == 1) { return get_string('tests_successful', self::COMPONENT_NAME); } else if ($state == 2) { diff --git a/dta/classes/models/dta_result_summary.php b/dta/classes/models/dta_result_summary.php index 56ed33e..20fc745 100644 --- a/dta/classes/models/dta_result_summary.php +++ b/dta/classes/models/dta_result_summary.php @@ -140,7 +140,7 @@ class dta_result_summary { * * @return int Count of occurrences */ - public function compilationerrorcount(): int { + public function compilation_error_count(): int { return $this->state_occurence_count(3); } @@ -149,7 +149,7 @@ class dta_result_summary { * * @return int Count of occurrences */ - public function failedcount(): int { + public function failed_count(): int { return $this->state_occurence_count(2); } @@ -158,7 +158,7 @@ class dta_result_summary { * * @return int Count of occurrences */ - public function successfulcount(): int { + public function successful_count(): int { return $this->state_occurence_count(1); } @@ -167,7 +167,7 @@ class dta_result_summary { * * @return int Count of occurrences */ - public function unknowncount(): int { + public function unknown_count(): int { return $this->state_occurence_count(0); } } diff --git a/dta/classes/view_submission_utils.php b/dta/classes/view_submission_utils.php index fed291a..10e5d64 100644 --- a/dta/classes/view_submission_utils.php +++ b/dta/classes/view_submission_utils.php @@ -52,23 +52,23 @@ class view_submission_utils { // Calculate success rate, if no unknown result states or compilation errors. $successrate = "?"; - if ($summary->unknownCount() == 0 && $summary->compilationErrorCount() == 0) { - $successrate = round(($summary->successfulCount() / $summary->resultCount()) * 100, 2 ); + if ($summary->unknown_count() == 0 && $summary->compilation_error_count() == 0) { + $successrate = round(($summary->successful_count() / $summary->result_count()) * 100, 2 ); } // Generate html. - $html .= $summary->successfulCount() . "/"; - $html .= ($summary->compilationErrorCount() == 0 && $summary->unknownCount() == 0) + $html .= $summary->successful_count() . "/"; + $html .= ($summary->compilation_error_count() == 0 && $summary->unknown_count() == 0) ? $summary->result_Count() . " (" . $successrate . "%)" : "?"; $html .= get_string("tests_successful", self::COMPONENT_NAME) . "<br />"; - if ($summary->compilationErrorCount() > 0) { - $html .= $summary->compilationErrorCount() . get_string("compilation_errors", self::COMPONENT_NAME) . "<br />"; + if ($summary->compilation_error_count() > 0) { + $html .= $summary->compilation_error_count() . get_string("compilation_errors", self::COMPONENT_NAME) . "<br />"; } - if ($summary->unknownCount() > 0) { - $html .= $summary->unknownCount() . get_string("unknown_state", self::COMPONENT_NAME) . "<br />"; + if ($summary->unknown_count() > 0) { + $html .= $summary->unknown_count() . get_string("unknown_state", self::COMPONENT_NAME) . "<br />"; } $showncompetencies = explode(";", $summary->successfultestcompetencies); @@ -90,53 +90,154 @@ class view_submission_utils { return \html_writer::div($html, "dtaSubmissionSummary"); } - /** - * Generiert die detaillierte HTML-Ansicht, einschließlich Zusammenfassung, Kompetenzen, Details und Empfehlungen. +/** + * generates detailed view html * - * @param int $assignmentid Assignment-ID - * @param int $submissionid Submission-ID, für die der Bericht erstellt wird - * @return string HTML-Code + * @param int $assignmentid assignment + * @param int $submissionid submission to create a report for */ public static function generate_detail_html( int $assignmentid, int $submissionid ): string { - // HTML-Inhalt initialisieren - $html = ""; + // Fetch data. + $summary = db_utils::get_result_summary_from_database($assignmentid, $submissionid); + $recommendations = db_utils::get_recommendations_from_database($assignmentid, $submissionid); - // Daten abrufen - $summary = db_utils::get_Result_Summary_From_Database($assignmentid, $submissionid); + $html = ""; - // CSS-Klassen und HTML-Attributarrays definieren + // Define a few css classes and prepare html attribute arrays to beautify the output. $tableheaderrowattributes = ["class" => "dtaTableHeaderRow"]; $tablerowattributes = ["class" => "dtaTableRow"]; - $attributes = ["class" => "dtaTableData"]; + $resultrowattributes = $tablerowattributes; $unknownattributes = 'dtaResultUnknown'; $successattributes = 'dtaResultSuccess'; $failureattributes = 'dtaResultFailure'; $compilationerrorattributes = 'dtaResultCompilationError'; + $attributes = ["class" => "dtaTableData"]; + + // *************** + // SUMMARY TABLE + // *************** + + $tmp = ""; + $tmp .= \html_writer::tag("th", get_string("summary", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]); + $tmp .= \html_writer::empty_tag("th", ["class" => "dtaTableHeader"]); + $header = \html_writer::tag("tr", $tmp, $tableheaderrowattributes); + $header = \html_writer::tag("thead", $header); + + $body = ""; + + // Total items. + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("total_items", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $summary->result_count(), $attributes); + $resultrowattributes = $tablerowattributes; + $resultrowattributes['class'] .= " " . $unknownattributes; + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + + // Tests successful. + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("tests_successful", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $summary->successful_count(), $attributes); + $resultrowattributes = $tablerowattributes; + $successrate = "?"; + if ($summary->unknown_count() > 0 || $summary->compilation_error_count() > 0) { + $resultrowattributes['class'] .= " " . $unknownattributes; + } else { + $successrate = round(($summary->successful_count() / $summary->result_count()) * 100, 2); + if ($successrate < 50) { + $resultrowattributes['class'] .= " " . $compilationerrorattributes; + } else if ($successrate < 75) { + $resultrowattributes['class'] .= " " . $failureattributes; + } else { + $resultrowattributes['class'] .= " " . $successattributes; + } + } + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + + // Failures. + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("failures", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $summary->failed_count(), $attributes); + $resultrowattributes = $tablerowattributes; + if ($summary->failed_count() > 0) { + $resultrowattributes['class'] .= " " . $failureattributes; + } else { + $resultrowattributes['class'] .= " " . $successattributes; + } + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + + // Compilation errors. + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("compilation_errors", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $summary->compilation_error_count(), $attributes); + $resultrowattributes = $tablerowattributes; + if ($summary->compilation_error_count() > 0) { + $resultrowattributes['class'] .= " " . $compilationerrorattributes; + } else { + $resultrowattributes['class'] .= " " . $successattributes; + } + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + + // Unknown state. + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("unknown_state", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $summary->unknown_count(), $attributes); + $resultrowattributes = $tablerowattributes; + if ($summary->unknown_count() > 0) { + $resultrowattributes['class'] .= " " . $unknownattributes; + } else { + $resultrowattributes['class'] .= " " . $successattributes; + } + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + + // Success rate. + $tmp = ""; + $tmp .= \html_writer::tag("td", \html_writer::tag("b", get_string("success_rate", self::COMPONENT_NAME)), $attributes); + $tmp .= \html_writer::tag( + "td", + \html_writer::tag("b", $summary->successful_count() . "/" . + (($summary->compilation_error_count() == 0 && $summary->unknown_count() == 0) + ? $summary->result_count() . " (" . $successrate . "%)" + : "?")), + $attributes + ); + + $resultrowattributes = $tablerowattributes; + if ($summary->unknown_count() > 0 || $summary->compilation_error_count() > 0) { + $resultrowattributes['class'] .= " " . $unknownattributes; + } else { + if ($successrate < 50) { + $resultrowattributes['class'] .= " " . $compilationerrorattributes; + } else if ($successrate < 75) { + $resultrowattributes['class'] .= " " . $failureattributes; + } else { + $resultrowattributes['class'] .= " " . $successattributes; + } + } + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); - // **Zusammenfassungstabelle erstellen** - // (Ihr bisheriger Code bleibt unverändert) + $body = \html_writer::tag("tbody", $body); + $table = \html_writer::tag("table", $header . $body, ["class" => "dtaTable"]); - // **Abstand zwischen Tabellen** - $html .= \html_writer::empty_tag("div", ["class" => "dtaSpacer"]); + $html .= $table; - // **Empfehlungstabelle hinzufügen** - // Empfehlungen für die Submission abrufen - $recommendations = db_utils::get_recommendations_from_database($assignmentid, $submissionid); + // Add empty div for spacing after summary. + $html .= \html_writer::empty_tag("div", ["class" => "dtaSpacer"]); + // *************** + // RECOMMENDATIONS TABLE + // *************** if (!empty($recommendations)) { - // **Sortierparameter abrufen** + // Sorting logic. $allowed_sort_fields = ['topic', 'exercise_name', 'difficulty', 'score']; $allowed_sort_dirs = ['asc', 'desc']; - // Sortierparameter aus POST-Daten abrufen $sortby = isset($_POST['sortby']) ? $_POST['sortby'] : 'score'; $sortdir = isset($_POST['sortdir']) ? $_POST['sortdir'] : 'asc'; - // Sortierparameter validieren if (!in_array($sortby, $allowed_sort_fields)) { $sortby = 'score'; } @@ -144,7 +245,6 @@ public static function generate_detail_html( $sortdir = 'asc'; } - // Empfehlungen sortieren usort($recommendations, function($a, $b) use ($sortby, $sortdir) { $valueA = $a->{$sortby}; $valueB = $b->{$sortby}; @@ -166,10 +266,8 @@ public static function generate_detail_html( } }); - // Überschrift für Empfehlungen $html .= \html_writer::tag('h3', get_string('recommendations', self::COMPONENT_NAME)); - // Helper-Funktion zum Generieren von sortierbaren Headern $generate_sortable_header = function($column_name, $display_name) use ($sortby, $sortdir) { $new_sortdir = ($sortby == $column_name && $sortdir == 'asc') ? 'desc' : 'asc'; $class = 'dtaTableHeader'; @@ -177,7 +275,7 @@ public static function generate_detail_html( $class .= ' sorted ' . $sortdir; } - // Button erstellen + // Sort button. $button = \html_writer::empty_tag('input', [ 'type' => 'submit', 'name' => 'sortbutton', @@ -185,7 +283,7 @@ public static function generate_detail_html( 'class' => 'sort-button' ]); - // Hidden Inputs für Sortierparameter + // Hidden inputs. $hidden_inputs = \html_writer::empty_tag('input', [ 'type' => 'hidden', 'name' => 'sortby', @@ -197,7 +295,6 @@ public static function generate_detail_html( 'value' => $new_sortdir ]); - // Formular für den Button erstellen $form = \html_writer::start_tag('form', ['method' => 'post', 'style' => 'display:inline']); $form .= $hidden_inputs; $form .= $display_name . ' ' . $button; @@ -206,7 +303,7 @@ public static function generate_detail_html( return \html_writer::tag("th", $form, ["class" => $class]); }; - // Tabellenkopf für Empfehlungen + // Table header for recommendations. $tableheader = ""; $tableheader .= $generate_sortable_header('topic', get_string("topic", self::COMPONENT_NAME)); $tableheader .= $generate_sortable_header('exercise_name', get_string("exercise_name", self::COMPONENT_NAME)); @@ -217,7 +314,7 @@ public static function generate_detail_html( $tableheader = \html_writer::tag("tr", $tableheader, ["class" => "dtaTableHeaderRow"]); $tableheader = \html_writer::tag("thead", $tableheader); - // Tabellenkörper für Empfehlungen + // Table body for recommendations. $tablebody = ""; foreach ($recommendations as $recommendation) { $tablerow = ""; @@ -231,11 +328,136 @@ public static function generate_detail_html( } $tablebody = \html_writer::tag("tbody", $tablebody); - // Empfehlungstabelle zusammenstellen $html .= \html_writer::tag("table", $tableheader . $tablebody, ["class" => "dtaTable"]); + + // Add empty div for spacing after recommendations. + $html .= \html_writer::empty_tag("div", ["class" => "dtaSpacer"]); } - // Abschließendes Div für die gesamte HTML-Ausgabe + // *************** + // COMPETENCY ASSESSMENT TABLE + // *************** + $body = ""; + $tmp = ""; + $tmp .= \html_writer::tag("th", get_string("competencies", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]); + $tmp .= \html_writer::empty_tag("th", ["class" => "dtaTableHeader"]); + $header = \html_writer::tag("tr", $tmp, $tableheaderrowattributes); + $header = \html_writer::tag("thead", $header); + + $showncompetencies = explode(";", $summary->successfultestcompetencies); + $overallcompetencies = explode(";", $summary->overalltestcompetencies); + + for ($index = 0, $size = count($overallcompetencies); $index < $size; $index++) { + $comp = $overallcompetencies[$index]; + $shown = $showncompetencies[$index]; + // If the competency was actually assessed by the assignment and tests, add a row in the table. + if ($comp != "0") { + $resultrowattributes = $tablerowattributes; + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("comp" . $index, self::COMPONENT_NAME), $resultrowattributes); + $tmp .= \html_writer::tag("td", (100 * floatval($shown) / floatval($comp)) . "% (" . $shown . " / " . $comp . ")", $resultrowattributes); + $tmp .= \html_writer::tag("td", get_string("comp_expl" . $index, self::COMPONENT_NAME), $resultrowattributes); + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + } + } + $body = \html_writer::tag("tbody", $body); + $html .= \html_writer::tag("table", $header . $body, ["class" => "dtaTable"]); + + // Add empty div for spacing between competency and details table. + $html .= \html_writer::empty_tag("div", ["class" => "dtaSpacer"]); + + // *************** + // DETAILS TABLE + // *************** + + $tmp = ""; + $tmp .= \html_writer::tag("th", get_string("details", self::COMPONENT_NAME), ["class" => "dtaTableHeader"]); + $tmp .= \html_writer::empty_tag("th", ["class" => "dtaTableHeader"]); + $header = \html_writer::tag("tr", $tmp, $tableheaderrowattributes); + $header = \html_writer::tag("thead", $header); + + $body = ""; + $spacerrow = null; + foreach ($summary->results as $r) { + // Add spacer first if not null. + if (!is_null($spacerrow)) { + $body .= $spacerrow; + } + + $resultrowattributes = $tablerowattributes; + + // Set CSS class for colored left-border according to results state. + if ($r->state == 0) { + $resultrowattributes['class'] .= ' dtaResultUnknown'; + } else if ($r->state == 1) { + $resultrowattributes['class'] .= ' dtaResultSuccess'; + } else if ($r->state == 2) { + $resultrowattributes['class'] .= ' dtaResultFailure'; + } else if ($r->state == 3) { + $resultrowattributes['class'] .= ' dtaResultCompilationError'; + } + + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("package_name", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $r->packagename, $attributes); + $tmp .= \html_writer::tag("td", get_string("unit_name", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $r->classname, $attributes); + $tmp .= \html_writer::tag("td", get_string("test_name", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $r->name, $attributes); + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("status", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", dta_result::get_statename($r->state), $attributes); + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + + // If state is different than successful, show additional info. + if ($r->state != 1) { + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("failure_type", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $r->failureType, $attributes); + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("failure_reason", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $r->failureReason, $attributes); + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + + if (!is_null($r->lineNumber) && $r->lineNumber > 0) { + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("line_no", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $r->lineNumber, $attributes); + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + } + + if (!is_null($r->columnNumber) && $r->columnNumber > 0) { + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("col_no", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $r->columnNumber, $attributes); + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + } + + if (!is_null($r->position) && $r->position > 0) { + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("pos", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", $r->position, $attributes); + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + } + + $tmp = ""; + $tmp .= \html_writer::tag("td", get_string("stacktrace", self::COMPONENT_NAME), $attributes); + $tmp .= \html_writer::tag("td", \html_writer::tag("details", $r->stacktrace, ["class" => "dtaStacktraceDetails"]), $attributes); + $body .= \html_writer::tag("tr", $tmp, $resultrowattributes); + } + + if (is_null($spacerrow)) { + $spacerrow = \html_writer::empty_tag("tr", ["class" => "dtaTableSpacer"]); + } + } + + $html .= \html_writer::tag("table", $header . $body, ["class" => "dtaTable"]); + + // Wrap generated html into final div. $html = \html_writer::div($html, "dtaSubmissionDetails"); return $html; @@ -244,4 +466,5 @@ public static function generate_detail_html( + } diff --git a/dta/models/DtaResult.php b/dta/models/DtaResult.php new file mode 100644 index 0000000..e69de29 diff --git a/dta_withRecommendationsTableAndNamespace.zip b/dta_withRecommendationsTableAndNamespace.zip new file mode 100644 index 0000000000000000000000000000000000000000..0f7b9a6d280819159f9bbcbf34e8c7a73f287ad0 GIT binary patch literal 35019 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	?Yv;<mOz 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 U&j$qb=H=fO6cEs)&+D)M19Ii{)c^nh literal 0 HcmV?d00001 -- GitLab