diff --git a/lib/classes/forms/Form.php b/lib/classes/forms/Form.php index ba0258d2c4d3d03aaab8dbf1252322dbb5bd9061..936f324b40c36363e41bcd0a9ad448b2d9303353 100644 --- a/lib/classes/forms/Form.php +++ b/lib/classes/forms/Form.php @@ -77,6 +77,13 @@ class Form extends Part { $metadata = $object->getTableMetadata(); + // Normalize parameters + $params = array_merge([ + 'types' => [], + 'fields' => [], + 'without' => [], + ], $params); + if ($params['fields']) { //Setting the label foreach ($params['fields'] as $fieldname => $fielddata) { @@ -89,7 +96,7 @@ class Form extends Part //Setting the type and name foreach ($params['fields'] as $fieldname => $fielddata) { if (is_array($fielddata)) { - $meta = $metadata['fields'][$fieldname]; + $meta = $metadata['fields'][$fieldname] ?? null; if (!isset($fielddata['type'])) { if ($meta) { $fielddata = array_merge(Input::getFielddataFromMeta($meta, $object), $fielddata); diff --git a/lib/classes/forms/Part.php b/lib/classes/forms/Part.php index 4831945d13ecb55181249d5e85eab64e56292081..3609eb4fad39be7756c2f501fe5c6a483fba8866 100644 --- a/lib/classes/forms/Part.php +++ b/lib/classes/forms/Part.php @@ -194,10 +194,17 @@ abstract class Part */ public function getInputFromArray(array $data) { + // Normalize data + $data = array_merge([ + 'label' => $data['name'] ?? null, + 'value' => null, + 'attributes' => [], + ], $data); + $context = $this->getContextObject(); if ($context && method_exists($context, 'getTableMetadata')) { $metadata = $context->getTableMetadata(); - $meta = $metadata['fields'][$data['name']]; + $meta = $metadata['fields'][$data['name']] ?? null; if (!isset($data['type'])) { if ($meta) { $data = array_merge(Input::getFielddataFromMeta($meta, $context), $data); @@ -221,16 +228,18 @@ abstract class Part $classname = "\\Studip\\Forms\\".ucfirst($data['type'])."Input"; $attributes = $data; - unset($attributes['name']); - unset($attributes['label']); - unset($attributes['value']); - unset($attributes['type']); - unset($attributes['mapper']); - unset($attributes['store']); - unset($attributes['if']); - unset($attributes['permission']); - unset($attributes['required']); - unset($attributes['attributes']); + unset( + $attributes['name'], + $attributes['label'], + $attributes['value'], + $attributes['type'], + $attributes['mapper'], + $attributes['store'], + $attributes['if'], + $attributes['permission'], + $attributes['required'], + $attributes['attributes'] + ); $attributes = array_merge($attributes, (array) $data['attributes']); if (class_exists($classname)) { $input = new $classname($data['name'], $data['label'], $data['value'], $attributes); @@ -242,21 +251,21 @@ abstract class Part throw new \Exception(sprintf(_("Klasse %s oder %s existiert nicht."), $classname, $data['type'])); } - if ($data['mapper'] && is_callable($data['mapper'])) { + if (isset($data['mapper']) && is_callable($data['mapper'])) { $input->mapper = $data['mapper']; } - if ($data['store'] && is_callable($data['store'])) { + if (isset($data['store']) && is_callable($data['store'])) { $input->store = $data['store']; } - if ($data['if']) { + if (!empty($data['if'])) { $input->if = $data['if']; } if (isset($data['permission'])) { $input->permission = $data['permission']; } - if ($data['required']) { - $input->required = true; - } + + $input->required = !empty($data['required']); + return $input; } }