<?php namespace assignsubmission_dta\models; /** * Entity class for DTA submission plugin result summary. */ class dta_result_summary { public $timestamp; public $globalstacktrace; public $successfultestcompetencies; public $overalltestcompetencies; public $results; public static function assignsubmission_dta_decode_json(string $jsonstring): dta_result_summary { $response = json_decode($jsonstring); $summary = new dta_result_summary(); $summary->timestamp = $response->timestamp ?? 0; $summary->globalstacktrace = $response->globalstacktrace ?? ''; $summary->successfultestcompetencies = $response->successfulTestCompetencyProfile ?? ''; $summary->overalltestcompetencies = $response->overallTestCompetencyProfile ?? ''; if (!empty($response->results) && is_array($response->results)) { $summary->results = self::assignsubmission_dta_decode_json_result_array($response->results); } else { $summary->results = []; } return $summary; } private static function assignsubmission_dta_decode_json_result_array(array $jsonarray): array { $ret = []; foreach ($jsonarray as $entry) { $value = new dta_result(); $value->packagename = $entry->packageName ?? ''; $value->classname = $entry->className ?? ''; $value->name = $entry->name ?? ''; $value->state = $entry->state ?? 0; $value->failuretype = $entry->failureType ?? ''; $value->failurereason = $entry->failureReason ?? ''; $value->stacktrace = $entry->stacktrace ?? ''; $value->columnnumber = $entry->columnNumber ?? 0; $value->linenumber = $entry->lineNumber ?? 0; $value->position = $entry->position ?? 0; $ret[] = $value; } return $ret; } public function assignsubmission_dta_result_count(): int { return count($this->results); } public function assignsubmission_dta_state_occurence_count(int $state): int { $num = 0; foreach ($this->results as $r) { if ($r->state === $state) { $num++; } } return $num; } public function assignsubmission_dta_compilation_error_count(): int { return $this->assignsubmission_dta_state_occurence_count(3); // State=3 => compile error } public function assignsubmission_dta_failed_count(): int { return $this->assignsubmission_dta_state_occurence_count(2); // State=2 => fail } public function assignsubmission_dta_successful_count(): int { return $this->assignsubmission_dta_state_occurence_count(1); // State=1 => success } public function assignsubmission_dta_unknown_count(): int { return $this->assignsubmission_dta_state_occurence_count(0); // State=0 => unknown } // OPTIONAL: A helper to safely get success rate 0..100 public function assignsubmission_dta_success_rate(): float { $count = $this->assignsubmission_dta_result_count(); if ($count === 0) { return 0.0; } $successful = $this->assignsubmission_dta_successful_count(); return ($successful / $count) * 100.0; } }