From 2bb60caf278310c0d3208ee1fd44e8ced8e6bf20 Mon Sep 17 00:00:00 2001
From: Gero Lueckemeyer <gero.lueckemeyer@hft-stuttgart.de>
Date: Mon, 13 Nov 2023 15:03:22 +0100
Subject: [PATCH] enhanced PHP doc comments

---
 dta.zip                  | Bin 20153 -> 20531 bytes
 dta/locallib.php         |  17 ++++----
 dta/models/DtaResult.php |  92 +++++++++++++++++++--------------------
 dta/utils/backend.php    |  23 ++++++++--
 dta/utils/database.php   |  21 ++++++---
 dta/utils/view.php       |  33 +++++++-------
 6 files changed, 107 insertions(+), 79 deletions(-)

diff --git a/dta.zip b/dta.zip
index cc6f4c3f06c523eb5039144924d3f51da123844b..1bd75c975448401504ff29c99df5ee9695cad245 100644
GIT binary patch
delta 11753
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

delta 11321
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

diff --git a/dta/locallib.php b/dta/locallib.php
index 1e65203..3aaadac 100644
--- a/dta/locallib.php
+++ b/dta/locallib.php
@@ -30,11 +30,11 @@ require_once($CFG->dirroot . '/mod/assign/submission/dta/utils/view.php');
  */
 class assign_submission_dta extends assign_submission_plugin {
 
-    /** 
+    /**
      * Broadly used in logic, parametrized for easier change.
      */
     const COMPONENT_NAME = "assignsubmission_dta";
-    /** 
+    /**
      * Draft file area for dta tests to be uploaded by the teacher.
      */
     const ASSIGNSUBMISSION_DTA_DRAFT_FILEAREA_TEST = "tests_draft_dta";
@@ -168,11 +168,11 @@ class assign_submission_dta extends assign_submission_plugin {
     /**
      * Add elements to submission form
      *
-     * @param mixed $submission stdClass|null
-     * @param MoodleQuickForm $mform
-     * @param stdClass $data
-     * @param int $userid
-     * @return bool
+     * @param mixed $submissionorgrade stdClass|null submission or grade to show in the form
+     * @param MoodleQuickForm $mform form for adding elements
+     * @param stdClass $data data for filling the elements
+     * @param int $userid current user
+     * @return bool form elements added
      */
     public function get_form_elements_for_user($submissionorgrade, MoodleQuickForm $mform, stdClass $data, $userid): bool {
         // Prepare submission filearea.
@@ -213,6 +213,7 @@ class assign_submission_dta extends assign_submission_plugin {
     }
 
     /**
+     * Determines if a submission file area contains any files.
      * @param stdClass $submission submission to check
      * @return bool true if file count is zero
      */
@@ -221,7 +222,7 @@ class assign_submission_dta extends assign_submission_plugin {
     }
 
     /**
-     * Count the number of files in a filearea
+     * Counts the number of files in a filearea
      *
      * @param int $submissionid submission id to check
      * @param string $areaid filearea id to count
diff --git a/dta/models/DtaResult.php b/dta/models/DtaResult.php
index 4ca751e..13ff012 100644
--- a/dta/models/DtaResult.php
+++ b/dta/models/DtaResult.php
@@ -25,28 +25,28 @@ defined('MOODLE_INTERNAL') || die();
  */
 class DtaResult {
 
-    /** 
+    /**
      * Broadly used in logic, parametrized for easier change.
      */
     const COMPONENT_NAME = "assignsubmission_dta";
 
-    /** 
-     * Package name of the test.
+    /**
+     * @var $packagename Package name of the test.
      */
     public $packagename;
-    
-    /** 
-     * Unit name of the test.
+
+    /**
+     * @var $classname Unit name of the test.
      */
     public $classname;
-    
-    /** 
-     * Name of the test.
+
+    /**
+     * @var $name Name of the test.
      */
     public $name;
 
     /**
-     * State is defined like below
+     * @var $state State is defined like below
      *
      *  0 UNKNOWN
      *  1 SUCCESS
@@ -55,32 +55,32 @@ class DtaResult {
      */
     public $state;
 
-    /** 
-     * Type of test failure if applicable, "" otherwise.
+    /**
+     * @var $failuretype Type of test failure if applicable, "" otherwise.
      */
     public $failuretype;
-    
-    /** 
-     * Reason of test failure if applicable, "" otherwise.
+
+    /**
+     * @var $failurereason Reason of test failure if applicable, "" otherwise.
      */    
     public $failurereason;
-    
-    /** 
-     * Stack trace of test failure if applicable, "" otherwise.
-     */    
+
+    /**
+     * @var $stacktrace Stack trace of test failure if applicable, "" otherwise.
+     */
     public $stacktrace;
 
-    /** 
-     * Column number of compile failure if applicable, "" otherwise.
-     */    
+    /**
+     * @var $columnnumber Column number of compile failure if applicable, "" otherwise.
+     */
     public $columnnumber;
-    /** 
-     * Line number of compile failure if applicable, "" otherwise.
-     */    
+    /**
+     * @var $linenumber Line number of compile failure if applicable, "" otherwise.
+     */
     public $linenumber;
-    /** 
-     * Position of compile failure if applicable, "" otherwise.
-     */    
+    /**
+     * @var $position Position of compile failure if applicable, "" otherwise.
+     */
     public $position;
 
     /**
@@ -109,32 +109,32 @@ class DtaResult {
  */
 class DtaResultSummary {
 
-    /** 
-     * Result timestamp for chronological ordering and deletion of previous results.
+    /**
+     * @var $timestamp Result timestamp for chronological ordering and deletion of previous results.
      */    
     public $timestamp;
-    
-    /** 
-     * Global stack trace if applicable, "" otherwise.
-     */    
+
+    /**
+     * @var $globalstacktrace Global stack trace if applicable, "" otherwise.
+     */
     public $globalstacktrace;
-    
-    /** 
-     * Successfully tested competencies according to tests and weights, "" otherwise.
-     */    
+
+    /**
+     * @var $successfultestcompetencies Successfully tested competencies according to tests and weights, "" otherwise.
+     */
     public $successfultestcompetencies;
-    /** 
-     * Overall tested competencies according to tests and weights, "" otherwise.
-     */    
+    /**
+     * @var overalltestcompetencies Overall tested competencies according to tests and weights, "" otherwise.
+     */
     public $overalltestcompetencies;
-    /** 
-     * List of detail results.
-     */    
+    /**
+     * @var results List of detail results.
+     */
     public $results;
 
     /**
      * Decodes the JSON result summary returned by the backend service call into the plugin PHP data structure.
-     * @param string $jsonString jsonString containing DtaResultSummary
+     * @param string $jsonstring jsonString containing DtaResultSummary
      * @return DtaResultSummary
      */
     public static function decodejson($jsonstring): DtaResultSummary {
@@ -154,7 +154,7 @@ class DtaResultSummary {
 
     /**
      * Decodes the array of JSON detail results returned by the backend service call into the plugin PHP data structure.
-     * @param array $jsonArray decoded json array of results array
+     * @param array $jsonarray decoded json array of results array
      * @return array of DtaResult
      */
     private static function decodejsonresultarray($jsonarray): array {
diff --git a/dta/utils/backend.php b/dta/utils/backend.php
index 8ce7b1e..772e735 100644
--- a/dta/utils/backend.php
+++ b/dta/utils/backend.php
@@ -14,9 +14,25 @@
 // You should have received a copy of the GNU General Public License
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
+/**
+ * This file contains the backend webservice contact functionality for the DTA plugin
+ *
+ * @package    assignsubmission_dta
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @copyright Gero Lueckemeyer and student project teams
+ */
+ 
+/**
+ * backend webservice contact utility class
+ *
+ * @package assignsubmission_dta
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @copyright Gero Lueckemeyer and student project teams
+ */ 
 class DtaBackendUtils {
 
     /**
+     * Returns the base url of the backend webservice as configured in the administration settings.
      * @return string backend host base url
      */
     private static function getbackendbaseurl(): string {
@@ -30,11 +46,10 @@ class DtaBackendUtils {
     }
 
     /**
-     * Sends the configuration textfile uploaded by prof to the backend
+     * Sends the configuration textfile uploaded by prof to the backend.
      *
      * @param $assignment assignment this test-config belongs to
      * @param $file uploaded test-config
-     *
      * @return bool true if no error occurred
      */
     public static function sendtestconfigtobackend($assignment, $file): bool {
@@ -61,11 +76,10 @@ class DtaBackendUtils {
     }
 
     /**
-     * Sends sumbission config or archive to backend to be tested
+     * Sends sumbission config or archive to backend to be tested.
      *
      * @param $assignment assignment this submission is done for
      * @param $file submission config file or archive with submission
-     *
      * @return string json string with testresults or null on error
      */
     public static function sendsubmissiontobackend($assignment, $file): ?string {
@@ -87,6 +101,7 @@ class DtaBackendUtils {
     }
 
     /**
+     * Posts the given params to the given url and returns the response as a string.
      * @param string $url full url to request to
      * @param array $params parameters for http-request
      *
diff --git a/dta/utils/database.php b/dta/utils/database.php
index 664ac06..1877851 100644
--- a/dta/utils/database.php
+++ b/dta/utils/database.php
@@ -14,11 +14,22 @@
 // You should have received a copy of the GNU General Public License
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
+/**
+ * persistence layer utility class
+ *
+ * @package assignsubmission_dta
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @copyright Gero Lueckemeyer and student project teams
+ */ 
 class DbUtils {
 
-    // Summary database table name.
+    /**
+     * Summary database table name.
+     */
     private const TABLE_SUMMARY = "assignsubmission_dta_summary";
-    // Result database table name.
+    /**
+     * Result database table name.
+     */
     private const TABLE_RESULT = "assignsubmission_dta_result";
 
     /**
@@ -77,9 +88,9 @@ class DbUtils {
      * save given result summary and single results to database
      * under given assignment and submission id
      *
-     * @param int assignmentid assigment this is submission is linked to
-     * @param int submissionid submission of this result
-     * @param DttResultSummary instance to persist
+     * @param $assignmentid assigment this is submission is linked to
+     * @param $submissionid submission of this result
+     * @param $summary instance to persist
      */
     public static function storeresultsummarytodatabase(
         int $assignmentid,
diff --git a/dta/utils/view.php b/dta/utils/view.php
index db3cd77..14d5e44 100644
--- a/dta/utils/view.php
+++ b/dta/utils/view.php
@@ -23,7 +23,7 @@
  */
 class view_submission_utils {
 
-    /** 
+    /**
      * Broadly used in logic, parametrized for easier change.
      */
     const COMPONENT_NAME = "assignsubmission_dta";
@@ -31,8 +31,8 @@ class view_submission_utils {
     /**
      * generates a short summary html
      *
-     * @param int assignmentid assignment
-     * @param int submissionid submission to create a report for
+     * @param $assignmentid assignment
+     * @param $submissionid submission to create a report for
      * @return string html
      */
     public static function generatesummaryhtml(
@@ -67,17 +67,18 @@ class view_submission_utils {
 
         $showncompetencies = explode(";", $summary->successfultestcompetencies);
         $overallcompetencies = explode(";", $summary->overalltestcompetencies);
-        
+
         $tmp = "";
         for ($index = 0, $size = count($showncompetencies); $index < $size; $index++) {
             $shown = $showncompetencies[$index];
             $comp = $overallcompetencies[$index];
             // If the competency was actually assessed by the assignment and tests, add a summary entry.
-            if($shown!="0") {
-                $tmp .= get_string("comp" . $index, self::COMPONENT_NAME) . " " . 100*floatval($shown)/floatval($comp) . "% " . "<br />";
+            if ($shown != "0") {
+                $tmp .= get_string("comp" . $index, self::COMPONENT_NAME) . 
+                " " . 100 * floatval($shown) / floatval($comp) . "% " . "<br />";
             }
         }
-        
+
         $html .= get_string("success_competencies", self::COMPONENT_NAME) . "<br />" . $tmp . "<br />";
 
         return html_writer::div($html, "dtaSubmissionSummary");
@@ -86,8 +87,8 @@ class view_submission_utils {
     /**
      * generates detailed view html
      *
-     * @param int assignmentid assignment
-     * @param int submissionid submission to create a report for
+     * @param $assignmentid assignment
+     * @param $submissionid submission to create a report for
      */
     public static function generatedetailhtml(
         int $assignmentid,
@@ -220,7 +221,7 @@ class view_submission_utils {
 
         // Add empty div for spacing between summary and compentency table.
         $html .= html_writer::empty_tag("div", ["class" => "dtaSpacer"]);
-        
+
         // Competency assessment table.
         $body = "";
         $tmp = "";
@@ -228,10 +229,10 @@ class view_submission_utils {
         $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];
@@ -241,10 +242,10 @@ class view_submission_utils {
                 $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) . "% " .
+                $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);    
-                
+                $tmp .= html_writer::tag("td", get_string("comp_expl" . $index, self::COMPONENT_NAME), $resultrowattributes);
+
                 $body .= html_writer::tag("tr", $tmp, $resultrowattributes);
             }
         }
@@ -288,7 +289,7 @@ class view_submission_utils {
                 "td",
                 get_string("package_name", self::COMPONENT_NAME),
                 $attributes);
-                
+
             $tmp .= html_writer::tag(
                 "td",
                 $r->packagename,
-- 
GitLab