diff --git a/public_html/deployment/classes/formgen.class.php b/public_html/deployment/classes/formgen.class.php
index f60936bbc3b09a84991cf4f6a5375ec6cad417bb..55db58b33e186ffdb6321d63d2272698536f9e81 100644
--- a/public_html/deployment/classes/formgen.class.php
+++ b/public_html/deployment/classes/formgen.class.php
@@ -9,130 +9,150 @@
   feature complete.
 
   ---------------------------------------------------------------------
-  2013-11-08  Axel <axel.hahn@iml.unibe.ch>
+  Axel <axel.hahn@iml.unibe.ch>
+  2013-11-08        Axel
+  2024-08-23  v1.1  Axel  php8 only; added variable types; short array syntax
   ###################################################################### */
 
-class formgen {
+class formgen
+{
 
-    var $aForm = array();
+    var $aForm = [];
     var $sRequired = ' <span title="Eingabe ist erforderlich"><span style="color:#c00;">*</span></span>';
 
     /**
-     * constructor
+     * Constructor
      * @param array $aNewFormData
-     * @return boolean
      */
-    public function __construct($aNewFormData = array()) {
-        if (is_array($aNewFormData) && count($aNewFormData)){
-            return $this->setFormarray($aNewFormData);
+    public function __construct($aNewFormData = [])
+    {
+        if (is_array($aNewFormData) && count($aNewFormData)) {
+            $this->setFormarray($aNewFormData);
         }
-        return true;
     }
 
     /**
-     * set a new array
+     * Set a new array for a new form
      * @param array $aNewFormData
      * @return boolean
      */
-    public function setFormarray($aNewFormData = array()) {
+    public function setFormarray($aNewFormData = [])
+    {
         if (!is_array($aNewFormData) || !count($aNewFormData)) {
             return false;
         }
-        return $this->aForm = $aNewFormData;
+        $this->aForm = $aNewFormData;
+        return true;
     }
 
     /**
-     * get html code for a completely rendered form
-     * @param string $sFormId
+     * Get html code for a completely rendered form
+     * @param  string $sFormId
      * @return string html output
      */
-    public function renderHtml($sFormId) {
+    public function renderHtml(string $sFormId): string
+    {
         $sReturn = false;
         if (!isset($this->aForm[$sFormId])) {
-            die("ERROR: " . __CLASS__ . ":" . __FUNCTION__ . " - form id " . $sFormId . " does not exist.");
+            throw new Exception("ERROR: " . __CLASS__ . ":" . __FUNCTION__ . " - form id " . $sFormId . " does not exist.");
         }
         // FORM tag
-        $sReturn.='<form ';
+        $sReturn .= '<form ';
         if (isset($this->aForm[$sFormId]["meta"])) {
-            foreach (array("method", "action", "target", "accept-charset", "class", "id", "name") as $sAttr) {
+            foreach (["method", "action", "target", "accept-charset", "class", "id", "name"] as $sAttr) {
                 if (isset($this->aForm[$sFormId]["meta"][$sAttr])) {
-                    $sReturn.=$sAttr . '="' . $this->aForm[$sFormId]["meta"][$sAttr] . '" ';
+                    $sReturn .= $sAttr . '="' . $this->aForm[$sFormId]["meta"][$sAttr] . '" ';
                 }
             }
         }
-        $sReturn.='>';
-        
+        $sReturn .= '>';
+
         // ... and all its elements
         foreach ($this->aForm[$sFormId]["form"] as $elementKey => $elementData) {
-            $sReturn.=$this->renderHtmlElement($elementKey, $elementData);
+            $sReturn .= $this->renderHtmlElement($elementKey, $elementData);
         }
-        $sReturn.='</form>';
+        $sReturn .= '</form>';
 
         return $sReturn;
     }
 
     /**
-     * add html attributes if they exist
+     * Add html attributes if they exist
      * @param array $aAttributes  list of attributes to search for
      * @param array $elementData  array of form element
      * @return string
      */
-    private function _addHtmlAtrributes($aAttributes, $elementData) {
+    private function _addHtmlAtrributes(array $aAttributes, array $elementData): string
+    {
         $sReturn = false;
         foreach ($aAttributes as $sAtrr) {
             if (isset($elementData[$sAtrr]) && $elementData[$sAtrr]) {
-                $sReturn.=($sReturn ? ' ' : '')
-                    .$sAtrr . '="' . $elementData[$sAtrr] . '"'
+                $sReturn .= ($sReturn ? ' ' : '')
+                    . $sAtrr . '="' . $elementData[$sAtrr] . '"'
                 ;
             }
         }
         return $sReturn;
     }
 
-    private function _addLabel($sLabel, $sFor, $sClass = false) {
-        $sReturn = false;
-        $sReturn = '<label for="' . $sFor . '"';
-        if ($sClass)
-            $sReturn.=' class="' . $sClass . '"';
-        $sReturn.='>' . $sLabel . '</label>';
-        $sReturn.="\n";
-        return $sReturn;
+    /**
+     * Add a label next to a form element
+     * @param string $sLabel  Labeltext to show
+     * @param string $sFor    for attribute to ad (points to the id of the form element)
+     * @param string $sClass  css class
+     * @return string
+     */
+    private function _addLabel(string $sLabel, string $sFor, string $sClass = ''): string
+    {
+        return "<label for=\"$sFor\""
+            . ($sClass ? " class=\"$sClass\"" : '')
+            . ">$sLabel</label>"
+            . "\n"
+            ;
     }
 
-    private function _checkReqiredKeys($aArray, $aRequiredKeys, $sLabel = false) {
+    /**
+     * Ensure that all required keys are set
+     * @param  array  $aArray         given array
+     * @param  array  $aRequiredKeys  set of required keys
+     * @param  string $sLabel         form label - will be shown in error message
+     * @throws \Exception
+     * @return bool
+     */
+    private function _checkReqiredKeys(array $aArray, array $aRequiredKeys, string $sLabel = ''): bool
+    {
         $bReturn = true;
         foreach ($aRequiredKeys as $sKey) {
             if (!isset($aArray[$sKey])) {
-                die("ERROR: $sLabel<br>Missing key \"$sKey\" in the array of a form element:<pre>" . print_r($aArray, true) . "</pre>");
-                $bReturn = false;
+                throw new Exception("ERROR: $sLabel<br>Missing key \"$sKey\" in the array of a form element:<pre>" . print_r($aArray, true) . "</pre>");
             }
         }
         return $bReturn;
     }
 
     /**
-     * render a single form element
+     * Render a single form element
      * @param string $sId          id of a form element
      * @param array  $elementData  array of form element
      * @return string html output
      */
-    public function renderHtmlElement($sId, $elementData) {
+    public function renderHtmlElement(string $sId, array $elementData): string
+    {
         $sReturn = false;
-        $aAllowedHtmlAttributes = array();
         $sDefaultAttributes = ""
-                . "class,"
-                
-                // events ... see https://developer.mozilla.org/en-US/docs/Web/API/Element
-                . "onauxclick,onclick,ondblclick,oncontextmenu,onfocusin,onfocusout,"
-                . "onkeydown,onkeypress,onkeyup,"
-                . "onmousedown,onmouseenter,onmouseleave,onmousemove,onmouseout,onmouseover,onmouseup,"
-                //
-                . "title"
-                ;
+            . "class,"
+
+            // events ... see https://developer.mozilla.org/en-US/docs/Web/API/Element
+            . "onauxclick,onclick,ondblclick,oncontextmenu,onfocusin,onfocusout,"
+            . "onkeydown,onkeypress,onkeyup,"
+            . "onmousedown,onmouseenter,onmouseleave,onmousemove,onmouseout,onmouseover,onmouseup,"
+            //
+            . "title"
+        ;
 
         if (!isset($elementData["type"])) {
             print_r($elementData);
-            die("ERROR: " . __CLASS__ . ":" . __FUNCTION__ . " - key &quot;type&quot; does not exist.");
+            throw new Exception("ERROR: " . __CLASS__ . ":" . __FUNCTION__ . " - key &quot;type&quot; does not exist.");
         }
 
         $sFormElement = false;
@@ -144,36 +164,36 @@ class formgen {
 
         if (isset($elementData["label"])) {
             $sLabelText = $elementData["label"];
-            $sLabelText.=(isset($elementData["required"]) && $elementData["required"]) ? $this->sRequired : '';
+            $sLabelText .= (isset($elementData["required"]) && $elementData["required"]) ? $this->sRequired : '';
         }
 
         switch ($elementData["type"]) {
             case "button":
-                $this->_checkReqiredKeys($elementData, array("value"));
-                $elementData["class"]=$elementData["class"] ? $elementData["class"] : "btn btn-default";
-                $sFormElement.='    <button id="' . $sId . '" ';
-                $sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,checked,name"), $elementData);
-                $sFormElement.='>' . $elementData["value"] . '</button>';
-                $sFormElement.="\n";
+                $this->_checkReqiredKeys($elementData, ["value"]);
+                $elementData["class"] = $elementData["class"] ? $elementData["class"] : "btn btn-default";
+                $sFormElement .= '    <button id="' . $sId . '" ';
+                $sFormElement .= $this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,checked,name"), $elementData);
+                $sFormElement .= '>' . $elementData["value"] . '</button>';
+                $sFormElement .= "\n";
 
                 $sHtmlDefault = $sFormElement;
                 break;
 
             case "checkbox":
-                $this->_checkReqiredKeys($elementData, array("name"));
+                $this->_checkReqiredKeys($elementData, ["name"]);
                 foreach ($elementData["options"] as $idOption => $aOptionData) {
-                    $sFormElement.="\n".'<div class="checkbox">';
+                    $sFormElement .= "\n" . '<div class="checkbox">';
                     $s = preg_replace('/\W/iu', '', $sId . $idOption);
                     $sOptionId = preg_replace('/[äöüß]/i', '', $s);
-                    $sFormElement.='    <input type="checkbox" id="' . $sOptionId . '" value="' . (isset($aOptionData["value"]) ? $aOptionData["value"] : $idOption) . '" ';
-                    $sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,checked"), $aOptionData);
-                    $sFormElement.=' name="' . $elementData["name"] . '[]"';
-                    $sFormElement.='/><label for="' . $sOptionId . '">' . $aOptionData["label"] . '</label></div>';
+                    $sFormElement .= '    <input type="checkbox" id="' . $sOptionId . '" value="' . (isset($aOptionData["value"]) ? $aOptionData["value"] : $idOption) . '" ';
+                    $sFormElement .= $this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,checked"), $aOptionData);
+                    $sFormElement .= ' name="' . $elementData["name"] . '[]"';
+                    $sFormElement .= '/><label for="' . $sOptionId . '">' . $aOptionData["label"] . '</label></div>';
                 }
-                $sFormElement.="\n";
+                $sFormElement .= "\n";
                 // $sLabelElement.='<span class="help-block">' . $sLabelText . '</span>';
-                $sLabelElement.='<div class="col-sm-2">' . $sLabelText . '</div>';
-                $sLabelElement.="\n";
+                $sLabelElement .= '<div class="col-sm-2">' . $sLabelText . '</div>';
+                $sLabelElement .= "\n";
 
                 // $sHtmlDefault = $sLabelElement . $sFormElement;
                 $sHtmlDefault = $sLabelElement . '<div class="col-sm-10">' . "\n" . $sFormElement . '</div>' . "\n";
@@ -181,11 +201,11 @@ class formgen {
                 break;
 
             case "hidden":
-                $this->_checkReqiredKeys($elementData, array("value"));
-                $sFormElement.='    <input type="hidden" id="' . $sId . '" ';
-                $sFormElement.=$this->_addHtmlAtrributes(explode(",", "name,value"), $elementData);
-                $sFormElement.=" />";
-                $sFormElement.="\n";
+                $this->_checkReqiredKeys($elementData, ["value"]);
+                $sFormElement .= '    <input type="hidden" id="' . $sId . '" ';
+                $sFormElement .= $this->_addHtmlAtrributes(explode(",", "name,value"), $elementData);
+                $sFormElement .= " />";
+                $sFormElement .= "\n";
 
                 $sHtmlDefault = $sFormElement . "\n";
                 break;
@@ -196,17 +216,17 @@ class formgen {
                 break;
 
             case "radio":
-                $this->_checkReqiredKeys($elementData, array("name"));
+                $this->_checkReqiredKeys($elementData, ["name"]);
                 foreach ($elementData["options"] as $idOption => $aOptionData) {
-                    $sFormElement.="\n".'<div class="radio">';
+                    $sFormElement .= "\n" . '<div class="radio">';
                     $s = preg_replace('/\W/iu', '', $sId . $idOption);
                     $sOptionId = preg_replace('/[äöüß]/i', '', $s);
-                    $sFormElement.='    <input type="radio" id="' . $sOptionId . '" value="' . (isset($aOptionData["value"]) ? $aOptionData["value"] : $idOption) . '" ';
-                    $sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,checked,disabled"), $aOptionData);
-                    $sFormElement.=" " . $this->_addHtmlAtrributes(explode(",", "name"), $elementData);
-                    $sFormElement.='/><label for="' . $sOptionId . '">' . $aOptionData["label"] . '</label></div>';
+                    $sFormElement .= '    <input type="radio" id="' . $sOptionId . '" value="' . (isset($aOptionData["value"]) ? $aOptionData["value"] : $idOption) . '" ';
+                    $sFormElement .= $this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,checked,disabled"), $aOptionData);
+                    $sFormElement .= " " . $this->_addHtmlAtrributes(explode(",", "name"), $elementData);
+                    $sFormElement .= '/><label for="' . $sOptionId . '">' . $aOptionData["label"] . '</label></div>';
                 }
-                $sFormElement.="\n";
+                $sFormElement .= "\n";
 
                 if ($sLabelText) {
                     // $sLabelElement.='<span class="help-block">' . $sLabelText . '</span>' . "\n";
@@ -224,24 +244,24 @@ class formgen {
 
             case "select":
                 // HINWEIS optgroups werden nicht unterstuezt - nur einfache Listen
-                $this->_checkReqiredKeys($elementData, array("name"));
-                $sDivClass=(isset($elementData["inline"]) && $elementData["inline"])?"form-group":"col-sm-10";
-                $elementData['class'].=" form-control";
-                $sFormElement.='<div class="'.$sDivClass.'">'."\n".'<select id="' . $sId . '" ';
-                $sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,name,onchange"), $elementData);
-                $sFormElement.=">\n";
+                $this->_checkReqiredKeys($elementData, ["name"]);
+                $sDivClass = (isset($elementData["inline"]) && $elementData["inline"]) ? "form-group" : "col-sm-10";
+                $elementData['class'] .= " form-control";
+                $sFormElement .= '<div class="' . $sDivClass . '">' . "\n" . '<select id="' . $sId . '" ';
+                $sFormElement .= $this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,name,onchange"), $elementData);
+                $sFormElement .= ">\n";
                 foreach ($elementData["options"] as $idOption => $aOptionData) {
                     $s = preg_replace('/\W/iu', '', $sId . $idOption);
                     $sOptionId = preg_replace('/[äöüß]/i', '', $s);
-                    $sFormElement.='    <option value="' . (isset($aOptionData["value"]) ? $aOptionData["value"] : $idOption) . '" ';
-                    $sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,selected"), $aOptionData);
-                    $sFormElement.='>' . $aOptionData["label"] . '</option>' . "\n";
+                    $sFormElement .= '    <option value="' . (isset($aOptionData["value"]) ? $aOptionData["value"] : $idOption) . '" ';
+                    $sFormElement .= $this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,selected"), $aOptionData);
+                    $sFormElement .= '>' . $aOptionData["label"] . '</option>' . "\n";
                 }
-                $sFormElement.="</select></div>\n";
+                $sFormElement .= "</select></div>\n";
 
                 if ($sLabelText) {
                     // $sLabelElement.='<span class="help-block">' . $sLabelText . '</span>' . "\n";
-                    $sLabelClass=(isset($elementData["inline"]) && $elementData["inline"])?"":"col-sm-2";
+                    $sLabelClass = (isset($elementData["inline"]) && $elementData["inline"]) ? "" : "col-sm-2";
                     $sLabelElement = $this->_addLabel($sLabelText, $sId, $sLabelClass);
                 }
 
@@ -252,40 +272,40 @@ class formgen {
                 break;
 
             case "submit":
-                $this->_checkReqiredKeys($elementData, array("value"));
-                $sClass="btn btn-primary ";
-                if (isset($elementData["class"])){
-                    $sClass.=$elementData["class"];
+                $this->_checkReqiredKeys($elementData, ["value"]);
+                $sClass = "btn btn-primary ";
+                if (isset($elementData["class"])) {
+                    $sClass .= $elementData["class"];
                 }
-                $elementData["class"]=$sClass;
-                $sFormElement.='    <button id="' . $sId . '" type="submit" ';
-                $sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes"), $elementData);
-                $sFormElement.='>' . $elementData["value"] . '</button>';
-                $sFormElement.="\n";
+                $elementData["class"] = $sClass;
+                $sFormElement .= '    <button id="' . $sId . '" type="submit" ';
+                $sFormElement .= $this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes"), $elementData);
+                $sFormElement .= '>' . $elementData["value"] . '</button>';
+                $sFormElement .= "\n";
 
                 $sHtmlDefault = $sFormElement;
                 break;
 
             case "text":
             case "password":
-                $this->_checkReqiredKeys($elementData, array("name"));
-                $sFormElement.='    <input type="'.$elementData["type"].'" id="' . $sId . '" class="form-control col-sm-10" ';
+                $this->_checkReqiredKeys($elementData, ["name"]);
+                $sFormElement .= '    <input type="' . $elementData["type"] . '" id="' . $sId . '" class="form-control col-sm-10" ';
                 $aAllowedHtmlAttributes["text"] = explode(",", "");
-                $sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,name,autocomplete,autofocus,list,disabled,onchange,pattern,placeholder,required,size,value"), $elementData);
-                // $sFormElement.=$this->_addHtmlAtrributes(array("name", "value", "size", "placeholder", "required"), $elementData);
+                $sFormElement .= $this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,name,autocomplete,autofocus,list,disabled,onchange,pattern,placeholder,required,size,value"), $elementData);
+                // $sFormElement.=$this->_addHtmlAtrributes(["name", "value", "size", "placeholder", "required"], $elementData);
                 // IE: Return abfangen lassen
                 // $sFormElement.=' onkeypress="return checkKey(event);"';
-                $sFormElement.=' />';
-                $sFormElement.="\n";
+                $sFormElement .= ' />';
+                $sFormElement .= "\n";
 
-                if (isset($elementData["class"]) && $elementData["inline"]){
+                if (isset($elementData["class"]) && $elementData["inline"]) {
                     $sLabelElement = $this->_addLabel($sLabelText, $sId, "col-sm-2");
                     // $sHtmlDefault = $sLabelElement . "\n" . $sFormElement . "\n";
-                    $sHtmlDefault = $sLabelElement . '<div class="col-sm-3">' . "\n" . $sFormElement . '</div>' . "\n";                    
+                    $sHtmlDefault = $sLabelElement . '<div class="col-sm-3">' . "\n" . $sFormElement . '</div>' . "\n";
                 } else {
                     $sLabelElement = $this->_addLabel($sLabelText, $sId, "col-sm-2");
                     // $sHtmlDefault = $sLabelElement . '<div class="controls">' . "\n" . $sFormElement . '</div>' . "\n";                    
-                    $sHtmlDefault = $sLabelElement . '<div class="col-sm-10">' . "\n" . $sFormElement . '</div>' . "\n";                    
+                    $sHtmlDefault = $sLabelElement . '<div class="col-sm-10">' . "\n" . $sFormElement . '</div>' . "\n";
                 }
 
                 $sHtmlTable = '<td>' . $sLabelText . '</td><td>' . $sFormElement . '</td>';
@@ -293,13 +313,13 @@ class formgen {
                 break;
 
             case "textarea":
-                $this->_checkReqiredKeys($elementData, array("name"));
-                $sFormElement.='    <textarea id="' . $sId . '" class="form-control col-sm-10" ';
+                $this->_checkReqiredKeys($elementData, ["name"]);
+                $sFormElement .= '    <textarea id="' . $sId . '" class="form-control col-sm-10" ';
                 $aAllowedHtmlAttributes["text"] = explode(",", "");
-                $sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,name,onchange,placeholder,required,cols,rows"), $elementData);
-                // $sFormElement.=$this->_addHtmlAtrributes(array("name", "value", "size", "placeholder", "required"), $elementData);
-                $sFormElement.='>'.$elementData['value'].'</textarea>';
-                $sFormElement.="\n";
+                $sFormElement .= $this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,name,onchange,placeholder,required,cols,rows"), $elementData);
+                // $sFormElement.=$this->_addHtmlAtrributes(["name", "value", "size", "placeholder", "required"], $elementData);
+                $sFormElement .= '>' . $elementData['value'] . '</textarea>';
+                $sFormElement .= "\n";
 
                 $sLabelElement = $this->_addLabel($sLabelText, $sId, "control-label col-sm-2");
 
@@ -318,24 +338,23 @@ class formgen {
         if (isset($elementData["mode"]) && $elementData["mode"] == 'table' && $sHtmlTable) {
             $sHtmlDefault = $sHtmlTable;
         } else {
-            if ($elementData["type"] != "button" 
-                && $elementData["type"] != "fieldset" 
+            if (
+                $elementData["type"] != "button"
+                && $elementData["type"] != "fieldset"
                 && $elementData["type"] != "markup"
                 && $elementData["type"] != "hidden"
             ) {
-                if (!isset($elementData["inline"]) || !$elementData["inline"]){
+                if (!isset($elementData["inline"]) || !$elementData["inline"]) {
                     // $sHtmlDefault = "<fieldset>" . $sHtmlDefault . "</fieldset>\n";
-                    $sHtmlDefault = '<div class="form-group row">' . $sHtmlDefault . '</div>'."\n";
+                    $sHtmlDefault = '<div class="form-group row">' . $sHtmlDefault . '</div>' . "\n";
                 }
             }
         }
 
-        $sReturn.="<!-- " . $elementData["type"] . " -->\n";
-        $sReturn.=$sHtmlDefault . "\n";
+        $sReturn .= "<!-- " . $elementData["type"] . " -->\n";
+        $sReturn .= $sHtmlDefault . "\n";
 
         return $sReturn;
     }
 
 }
-
-?>
\ No newline at end of file